Compare commits

...

1031 Commits

Author SHA1 Message Date
dkanada
bc66fadb0e Merge pull request #613 from redSpoutnik/reset-subtitle-sync
reset subtitle offset on next episode play

(cherry picked from commit b67e31791d)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-12-06 10:53:02 -05:00
dkanada
298d8d7929 Merge pull request #612 from grafixeyehero/fix-searchresult-btnscroller
Fix Scroll arrows missing when searching

(cherry picked from commit b35a6e17eb)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-12-06 10:52:38 -05:00
dkanada
bdf8553728 Merge pull request #610 from YouKnowBlom/library-path-fix
Fix existing library folder path returning undefined

(cherry picked from commit 50ca98b2a2)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-12-06 10:52:13 -05:00
dkanada
8ac155fb7a Merge pull request #604 from grafixeyehero/collection-padding
Fix collection padding in TV layout

(cherry picked from commit ba8949aa36)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-12-06 10:51:54 -05:00
dkanada
54dee197fd Merge pull request #596 from Wunax/fix-input-user-avatar
Fix input field user avatar in a wrong position

(cherry picked from commit a9c1425ddd)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-12-06 10:49:37 -05:00
dkanada
7a3eb3ffad Merge pull request #594 from grafixeyehero/backdrop
Fix some issues with the backdrop image

(cherry picked from commit 78fd41ef05)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-12-06 10:46:27 -05:00
Joshua Boniface
15b987e0de Bump version for 10.4.3 2019-12-06 10:44:58 -05:00
dkanada
54b05ab27d Merge pull request #545 from ferferga/artworks2
Improved appearance of images and artworks - Part 3

(cherry picked from commit 79cd6a7552)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-11-24 15:45:05 -05:00
dkanada
e1308f01b6 Merge pull request #576 from anthonylavado/fix-manifest
Remove the leading /web/ from the manifest to avoid PWA titles

(cherry picked from commit 88db651eea)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-11-24 15:44:19 -05:00
dkanada
c596c19bfd Merge pull request #583 from Wunax/fix-player-aspect-ratio
Fixed set aspect ratio option in the player

(cherry picked from commit dca0700770)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-11-24 15:39:50 -05:00
dkanada
087d06debf Merge pull request #578 from ryan-hartzell/login-autofill-attributes
Add autocomplete attributes to login fields

(cherry picked from commit 109ea9e50c)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-11-24 15:39:38 -05:00
Joshua Boniface
0b4402b642 Bump version for 10.4.2 2019-11-24 15:37:19 -05:00
Joshua M. Boniface
b36369b562 Merge pull request #540 from grafixeyehero/identify-path
Add file path to itemidentifier

(cherry picked from commit 3ad7993d13)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-26 11:48:46 -04:00
Joshua M. Boniface
78a2ba73e7 Merge pull request #507 from redSpoutnik/fix-subtitle-sync
Fix subtitle sync

(cherry picked from commit ee1149644d)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-26 11:47:44 -04:00
Joshua M. Boniface
1be5e20363 Merge pull request #550 from grafixeyehero/metadata-editor-livetvloading
Fix Metadata Manager Live TV Loading..

(cherry picked from commit 47b8c2bcb3)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-26 11:45:26 -04:00
Joshua M. Boniface
9a130f5869 Merge pull request #542 from grafixeyehero/wizardfinsih
Improve wizard finish page redirect

(cherry picked from commit 5eb6a4b5ba)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-24 09:36:37 -04:00
Joshua M. Boniface
d6cec24d9e Merge pull request #519 from dhartung/fix-#518
Fix subtitle display from previous file in queue

(cherry picked from commit 6208f2b1c3)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-23 11:39:34 -04:00
dkanada
2044efc0c3 Merge pull request #524 from grafixeyehero/Live-TV-Pagination
Fix minor style on home section Live TV

(cherry picked from commit a5e71664ba)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-23 11:35:53 -04:00
Vasily
e12a8bc39d Merge pull request #513 from thornbill/fix-swiper
Revert Swiper to fix initialization error

(cherry picked from commit 66f3de495b)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-20 14:46:17 -04:00
Vasily
a885964e46 Merge pull request #521 from dkanada/nowplaying
Fix save button in now playing controller

(cherry picked from commit 5ce69ae514)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-20 14:44:40 -04:00
Vasily
efdc07e032 Merge pull request #523 from grafixeyehero/itemcontextmenu-icon
Add icon on item context menu

(cherry picked from commit d4862df266)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2019-10-20 14:44:16 -04:00
Vasily
40b8a0d881 Merge pull request #503 from dkanada/other
Fix some minor issues with the dashboard page
2019-10-06 22:17:34 +03:00
Joshua M. Boniface
264f07a604 Merge pull request #477 from grafixeyehero/mediainfo-tv-mode
Fix mediainfo display on tv mode
2019-10-06 14:40:01 -04:00
dkanada
e0711335aa fix innerhtml issue 2019-10-06 20:47:49 +09:00
dkanada
1fd13b16b3 fix other device icon 2019-10-06 20:38:59 +09:00
whxciotw
8a01f41e4c Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-10-06 03:14:23 -04:00
SaddFox
87661308a5 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-10-06 03:14:22 -04:00
Poki
ad8741f9e7 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-10-06 03:14:06 -04:00
Joshua M. Boniface
05327879d6 Merge pull request #502 from joshuaboniface/docs-url
Update Docs to docs.jellyfin.org URL
2019-10-04 15:10:41 -04:00
Joshua Boniface
bda4d9e00e Update Docs to docs.jellyfin.org URL 2019-10-04 14:34:50 -04:00
Joshua M. Boniface
a92aae3a43 Merge pull request #501 from anthonylavado/user-fix
Resolves missing policy error on user creation
2019-10-04 13:55:39 -04:00
Anthony Lavado
5619295646 Remove extra lines 2019-10-04 13:44:12 -04:00
Anthony Lavado
591a1d3baa Update src/bower_components/apiclient/apiclientcore.js
Co-Authored-By: Bill Thornton <thornbill@users.noreply.github.com>
2019-10-04 12:53:54 -04:00
Anthony Lavado
97cdd43019 Remove extra newline 2019-10-04 03:42:46 -04:00
Anthony Lavado
f7d1c9fb1b Resolves missing policy error on user creation
Restores the previous method of posting the Users/New request, but adds the password field as well.
2019-10-04 03:41:00 -04:00
SaddFox
c34ecdc9a7 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-10-03 20:14:10 -04:00
WWWesten
8bb9e26526 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-10-03 20:14:01 -04:00
Mário Victor Ribeiro Silva
8d112f3eec Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-10-03 20:14:00 -04:00
WWWesten
24d4b80b43 Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-10-03 20:13:59 -04:00
Philipp Klose
51cea78c98 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-10-03 20:13:58 -04:00
Vasily
28380365b4 Merge pull request #500 from thornbill/prepare-script
Restore prepare script
2019-10-03 18:30:54 +03:00
Bill Thornton
01f09eaa77 Restore prepare script 2019-10-03 11:07:11 -04:00
Bill Thornton
c407350d7a Add ci check for dist directory after install 2019-10-03 11:00:41 -04:00
dkanada
d3cdf32b32 Merge pull request #492 from grafixeyehero/webpack
Add webpack-dev-server
2019-10-03 15:01:25 +09:00
Bill Thornton
e7e1fd279b Update documentation links (#497)
* Update link to emby wiki

* Update links to docs
2019-10-02 17:31:30 -04:00
dkanada
4b6ea2d087 Merge pull request #498 from dkanada/scrollbutton
Fix issues with scrollbutton visibility
2019-10-03 05:01:54 +09:00
dkanada
c36a916e20 fix issues with scrollbutton visibility 2019-10-03 01:34:20 +09:00
grafixeyehero
0e752f0e45 change start to serve 2019-10-02 16:40:46 +03:00
SaddFox
b4da29b815 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-10-01 20:14:08 -04:00
Kamilake
60f560f65b Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-01 20:14:05 -04:00
pucherot
dc09a3dd9d Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-10-01 20:14:05 -04:00
WontTell
b5e36e6f73 Translated using Weblate (Spanish (Mexico))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-10-01 20:14:04 -04:00
h4ss2
0fb8ef23b0 Translated using Weblate (Arabic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/
2019-10-01 20:14:03 -04:00
grafixeyehero
cb6920c51f move mediainfocontent style to site.css 2019-10-01 16:42:01 +03:00
grafixeyehero
2572de460b move copyplugin to webpack.common 2019-10-01 02:58:05 +03:00
grafixeyehero
716ac36031 Add webpack-dev-server 2019-09-30 23:51:46 +03:00
grafixeyehero
dc6f7dcb8f add style mediaInfoContent 2019-09-30 21:43:20 +03:00
grafixeyehero
ac4c7c7b71 Update itemMediaInfo.js
remove centerfocus
2019-09-30 21:42:04 +03:00
dkanada
e7610b0e4a Merge pull request #468 from grafixeyehero/htmlvideoplayer
Fix Duplicate loading animation
2019-10-01 01:09:41 +09:00
dkanada
9bb5fe0f0b minor lint fixes 2019-10-01 01:03:34 +09:00
pucherot
bbc5a5f491 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-09-30 01:44:10 -04:00
WontTell
1a85c16e89 Translated using Weblate (Spanish (Mexico))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-09-30 01:44:10 -04:00
WontTell
7e19600a2b Translated using Weblate (Spanish (Argentina))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-09-30 01:44:10 -04:00
Joshua M. Boniface
1d5f6effa9 Merge pull request #479 from dkanada/user
Improve the user settings interface
2019-09-30 01:43:58 -04:00
Joshua M. Boniface
832c1d8308 Merge pull request #490 from thornbill/global-jquery
Add jQuery to global scope
2019-09-30 00:30:57 -04:00
Bill Thornton
3bf97ce66e Add jQuery to global scope 2019-09-30 00:05:20 -04:00
Joshua M. Boniface
0a6e8feb40 Merge pull request #484 from thornbill/revert-line-wrapping
Revert "Allow card text to continue through line breaks"
2019-09-29 11:39:59 -04:00
dkanada
166d0df0b4 Merge pull request #411 from grafixeyehero/filterdialoge
Clean up unused filter audio language
2019-09-29 16:10:29 +09:00
Joshua M. Boniface
8c446624d7 Merge pull request #472 from sparky8251/remove-wan-ddns
Remove WAN domain name options
2019-09-28 18:07:47 -04:00
TheSergioEduP
6c22fab547 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-28 03:13:48 -04:00
Bill Thornton
1a3b954882 Revert "Allow card text to continue through line breaks"
This reverts commit 2e44bc4ef8.
2019-09-27 13:36:37 -04:00
Vasily
65dbd1991f Merge pull request #481 from thornbill/fix-library-editor
Fix missing jQuery in medialibraryeditor
2019-09-27 10:01:51 +03:00
grafixeyehero
59686f28b3 fix-toggle (#466) 2019-09-26 23:13:05 -04:00
Bill Thornton
6c566847db Fix missing jQuery in medialibraryeditor 2019-09-26 17:23:49 -04:00
grafixeyehero
5d6e6c5db9 hiding default browser controls 2019-09-26 21:20:15 +03:00
grafixeyehero
350463a1e7 revert back 2019-09-26 21:14:23 +03:00
dkanada
7d0f971fe7 Merge pull request #474 from redSpoutnik/volume-slider-requests
add 700ms timer for 'mousemove' and 'touchmove' volume listeners
2019-09-26 22:57:13 +09:00
dkanada
d975b1743f Merge pull request #478 from thornbill/videoosd-style
Fix video osd header styles
2019-09-26 22:52:42 +09:00
dkanada
62803bac5d fix session update for progress bars 2019-09-26 02:07:30 +09:00
dkanada
cc468aeac3 standardize user settings titles and remove unused strings 2019-09-26 01:54:58 +09:00
dkanada
c5f7f6d5c0 capitalize select elements on subtitle page 2019-09-26 01:45:48 +09:00
dkanada
6facb1b646 use better colors for the subtitle test 2019-09-26 01:44:00 +09:00
dkanada
c679336b87 improve the user avatar interface 2019-09-26 01:44:00 +09:00
dkanada
0286cc60d5 Merge pull request #458 from dkanada/site
Refactor several files and methods
2019-09-25 23:52:49 +09:00
Anthony Lavado
bcb13acccd Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-09-25 04:13:44 -04:00
Bill Thornton
c77803af89 Fix videoosd header styles 2019-09-25 00:20:32 -04:00
dkanada
714773fe83 fix CI error 2019-09-25 09:53:09 +09:00
dkanada
0e2163b396 minor improvements to readme 2019-09-24 23:43:15 +09:00
dkanada
4c3af5b9dd add check for eventListenerCount 2019-09-24 23:23:43 +09:00
Mário Victor Ribeiro Silva
76ec5e088b Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-09-24 09:13:43 -04:00
Joshua M. Boniface
3f1fd61e9c Merge branch 'master' into remove-wan-ddns 2019-09-23 20:30:25 -04:00
Joshua M. Boniface
0e9d890409 Merge pull request #463 from dhartung/fix-blocking-subtitles-clean
Changed to non-blocking subtitles
2019-09-23 20:22:58 -04:00
dkanada
bc30e5a626 Merge pull request #449 from mitchfizz05/shuffle-and-play-all-on-mobile
Don't hide play all and shuffle buttons on mobile
2019-09-24 09:13:28 +09:00
Dan Johansen
0a26243e9a Translated using Weblate (Danish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/
2019-09-23 17:13:44 -04:00
Vasily
3317c09e1c Merge pull request #397 from Abbe98/list-view-break-text
Allow card text to continue through line breaks
2019-09-23 17:07:50 +03:00
Mário Victor Ribeiro Silva
306004a2db Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-09-22 11:13:41 -04:00
pucherot
74abce4354 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-09-22 11:13:40 -04:00
redSpoutnik
5974c511f9 change timer using setTimeout/clearTimeout 2019-09-22 11:38:38 +02:00
redSpoutnik
4ab84e369b add 700ms timer for 'mousemove' and 'touchmove' volume listeners 2019-09-22 11:38:38 +02:00
Julio García
61639af3f7 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-09-21 14:36:20 -04:00
pucherot
ff9a0ba4e7 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-09-21 14:36:20 -04:00
Fernando
b95f894a7a Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-09-21 14:34:24 -04:00
pucherot
545efb1b57 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-09-21 14:34:23 -04:00
grafixeyehero
20c23dc728 switch lording html 2019-09-21 18:15:27 +03:00
WWWesten
c22da5a4ab Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-09-21 02:13:57 -04:00
Mário Victor Ribeiro Silva
865e196b40 Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-09-21 02:13:57 -04:00
José Ernesto Ruiz Valdivia
86984972e8 Translated using Weblate (Spanish (Mexico))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-09-21 02:13:39 -04:00
sparky8251
a272a6fcd5 Merge branch 'master' into remove-wan-ddns 2019-09-19 20:39:02 +00:00
sparky8251
cac028eb6a Remove WAN domain name options
This was used in generation and modification of certificates, but since JF doesn't generate them and shouldn't modify them, I have removed these
2019-09-19 15:52:00 -04:00
Mark Bai
3b3f230eff Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-09-19 15:14:05 -04:00
WWWesten
2c9fe360a6 Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-09-19 15:14:02 -04:00
Bill Thornton
5cb4c195d7 Azure pipelines (#470)
* Set up CI with Azure Pipelines

[skip ci]

* Update azure-pipelines.yml for Azure Pipelines

* Update .npmignore

* Add linting to Azure Pipelines

* Move linting to separate job

* Move Azure config to .ci

* Publish pipeline artifact

* Fix yaml

* Only run build if lint succeeds

* Remove version variable

* Update npmignore

* Exclude version from package filename

* Update CI triggers
2019-09-19 14:35:30 -04:00
Joshua M. Boniface
0c337e11a6 Merge pull request #459 from dhartung/more-item-details
Added more details to itemdetails page
2019-09-19 11:28:02 -04:00
Joshua M. Boniface
ff68a0d550 Merge pull request #435 from grafixeyehero/deletehelper
Change primary highlight for delete confirmation dialog
2019-09-19 11:27:08 -04:00
Will Chen
98e83600dc Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-09-17 18:13:50 -04:00
Jonas Lundberg
110b148c55 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-09-17 18:13:48 -04:00
WWWesten
e4f7e95f46 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-09-17 18:13:37 -04:00
WWWesten
13f65932d4 Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-09-17 18:13:36 -04:00
Anthony Lavado
e6f55c4eca Translated using Weblate (Spanish (Mexico))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-09-17 18:13:32 -04:00
ZsiGiT
d2984b7abd Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-09-16 22:38:49 -04:00
Anthony Lavado
df82636845 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-09-16 01:11:04 -04:00
Anthony Lavado
b06e9b5842 Translated using Weblate (Arabic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/
2019-09-16 01:11:03 -04:00
grafixeyehero
a2bde879aa Remove Logical Operators 2019-09-16 02:45:45 +03:00
WWWesten
a12954f4f9 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-09-15 18:13:44 -04:00
WWWesten
75195a4846 Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-09-15 18:13:42 -04:00
WWWesten
c5e008a73a Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-09-14 20:21:34 -04:00
dkanada
e62b7f2e3d Merge pull request #446 from dkanada/detail
Dashboard layout improvements
2019-09-14 17:21:28 -07:00
dkanada
09e38ca931 Merge pull request #451 from dkanada/style
Improve button style when focused
2019-09-14 02:24:27 -07:00
WWWesten
81e98409d0 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-09-13 22:32:00 -04:00
tluciomiranda
2d917f3807 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-13 22:32:00 -04:00
Paul Schwörer
db8410602a Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-09-13 22:32:00 -04:00
dkanada
4bb18b02e5 Merge pull request #462 from grafixeyehero/metadataSidebar
Add style for metadata sidebar Icon folder
2019-09-13 19:31:55 -07:00
dkanada
aca14802e0 Merge pull request #460 from dhartung/feedback-for-stream-link-copy
Added toast notification when copy-stream is executed
2019-09-13 19:30:50 -07:00
dkanada
6bef3fc63e Merge pull request #464 from PrplHaz4/patch-1
update apphost appVersion to 10.4.0
2019-09-13 16:21:15 -07:00
grafixeyehero
97a5f84ced make headerfilters and headerstatus collapsible 2019-09-13 20:50:22 +03:00
grafixeyehero
51bbe65262 remove audio language filter 2019-09-13 19:44:30 +03:00
grafixeyehero
b2a2b03b37 deminify filterdialog.js 2019-09-13 19:11:15 +03:00
tluciomiranda
f8c018b77e Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-13 10:42:28 -04:00
tluciomiranda
4196e279ea Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-13 10:36:59 -04:00
PrplHaz4
e2cc98c7a4 update apphost appVersion to 10.4.0
The only place I saw this appear was in a log entry, so not sure what else this will impact (or if it's deliberately being held back).  It looks like it is also passed in when the ApiClient is created.
```
[13:23:15] [INF] Playback stopped reported by app Jellyfin Web 10.3.6 playing cam-basement. Stopped at 29411 ms
```
2019-09-13 09:49:37 -04:00
dkanada
5104aabead move remote control to folder and fix sortable dependency 2019-09-13 00:05:15 -07:00
dkanada
1f0f1dc1b3 bundle swiper and sortable libs 2019-09-12 23:40:43 -07:00
tluciomiranda
ed956f8eba Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-12 18:13:22 -04:00
Daniel Hartung
ba0d637f91 Changed to non-blocking subtitles 2019-09-12 21:24:16 +02:00
dkanada
9ab6756e39 add back comment about clipping 2019-09-12 06:05:40 -07:00
dkanada
0aca394e1e bundle jquery and enable animations for metadata page 2019-09-12 04:01:53 -07:00
dkanada
26644c06c4 bundle libjass 2019-09-12 03:40:24 -07:00
dkanada
5a802c35b8 bundle howler using webpack 2019-09-12 03:24:10 -07:00
dkanada
81bc57678b Merge pull request #461 from dhartung/fix-missing-subtitleoffset
Fix: Not all players support xxxSubtitleOffset
2019-09-12 02:38:09 -07:00
dkanada
d555840384 remove button enable util from legacy scripts 2019-09-11 22:16:27 -07:00
dkanada
100ca5ba45 minor string changes 2019-09-11 22:00:55 -07:00
dkanada
7f6d97d0d5 Merge pull request #448 from PrplHaz4/fix-AutoRunWebApp
fix AutoRunWebApp checkbox on dashboardgeneral
2019-09-11 21:23:27 -07:00
dkanada
c2a0de8202 improve comments for tv layout css 2019-09-11 21:12:53 -07:00
dkanada
54ca2e9381 improve button style when focused 2019-09-11 21:12:53 -07:00
tluciomiranda
52136b57a2 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-11 16:40:25 -04:00
tluciomiranda
e9e9b4bca9 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-09-11 16:40:25 -04:00
Tyler W
4f084bad1c Add media file size to Playback Data (#439)
* Add media file size to Playback Data

* change file units to base-2 and fix output

will also remove any trailing zeros from decimal.

* Fix file size unit

* add i18n files and strings to dialog, fix conflict
2019-09-11 16:40:21 -04:00
grafixeyehero
f2123d03cc fix folder style 2019-09-11 22:27:43 +03:00
Daniel Hartung
fdbdaa1982 Not all players support xxxSubtitleOffset 2019-09-11 20:57:12 +02:00
Daniel Hartung
f7d5d4480d Added last played information 2019-09-11 19:58:31 +02:00
Daniel Hartung
8ee530c0ec Expanded minified javascript 2019-09-11 19:27:53 +02:00
Daniel Hartung
f8d894b269 Simplification and style fix 2019-09-11 19:27:49 +02:00
Daniel Hartung
ebbd3f11ab Styling tweaks 2019-09-11 19:25:06 +02:00
Daniel Hartung
1a9432b642 Added original (native) title 2019-09-11 19:25:06 +02:00
tluciomiranda
2240edce26 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-11 12:15:23 -04:00
tluciomiranda
ffe4087f0a Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-11 11:13:16 -04:00
Daniel Hartung
f1ba5c63c0 Toast notification when copy-stream is executed 2019-09-11 16:59:47 +02:00
tluciomiranda
a640781d4e Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-11 09:49:28 -04:00
dkanada
76ddb4d55f remove nonexistent define statements 2019-09-11 04:31:17 -07:00
dkanada
27f39e39c4 fix help label for music library creation 2019-09-11 04:18:20 -07:00
dkanada
9956084443 minor changes to input manager 2019-09-11 04:00:07 -07:00
dkanada
2690381144 refactor date utils 2019-09-11 03:50:29 -07:00
dkanada
a1c66f31fc clean up some define statements 2019-09-11 03:22:22 -07:00
Bill Thornton
ed34530b1e Require hls.js from npm (#456)
* hlsjs

* Fix webpack libraryTarget config
2019-09-11 02:35:41 -07:00
tluciomiranda
120b3106aa Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-10 11:20:09 -04:00
Joshua M. Boniface
3226ad47a5 Merge pull request #455 from joshuaboniface/authprovider-for-admin
Allow fldSelectLoginProvider for admins
2019-09-10 09:36:04 -04:00
tluciomiranda
e46ddedf0c Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-10 01:02:41 -04:00
Joshua Boniface
db7e016aa7 Allow fldSelectLoginProvider for admins
And the same for fldSelectPasswordResetProvider. Allows modification of
the authentication provider and password reset provider for admins, if
applicable. Further converts the reset provider to a trinary rather than
single-line if/else statements.
2019-09-10 00:02:59 -04:00
tluciomiranda
266aac4364 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-09 10:32:49 -04:00
tluciomiranda
0c22b76035 Translated using Weblate (Portuguese (Portugal))
Currently translated at 64.9% (936 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-09 10:03:06 -04:00
WWWesten
476eaff384 Translated using Weblate (Kazakh)
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-09-09 10:03:06 -04:00
Matteo Zannini
a28270bdd3 Translated using Weblate (Italian)
Currently translated at 90.8% (1310 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-09-09 10:03:06 -04:00
ZsiGiT
9e0d13ebaf Translated using Weblate (Hungarian)
Currently translated at 95.1% (1373 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-09-09 10:03:06 -04:00
tluciomiranda
96584b5786 Translated using Weblate (Portuguese (Portugal))
Currently translated at 58.7% (847 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-09-09 10:03:06 -04:00
qqq-qqqq
2f0683f826 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.4% (1405 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-09-09 10:03:06 -04:00
NunzioArdi
57d87caaeb Translated using Weblate (French)
Currently translated at 99.9% (1441 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-09-09 10:03:06 -04:00
WWWesten
1379477723 Translated using Weblate (Russian)
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-09-09 10:03:06 -04:00
dkanada
342267cf92 Merge pull request #417 from Abbe98/favorite-books
add favorite books section to favorite tab
2019-09-08 15:28:39 -07:00
Bond-009
644d4ac062 Merge pull request #450 from thornbill/fix-metadata-editor
Disable animations in editor sidebar
2019-09-08 20:29:40 +02:00
Bond-009
85f9e79e4b Merge pull request #444 from grafixeyehero/mediainfo
Minor update for media info
2019-09-08 20:28:34 +02:00
Abbe98
2e44bc4ef8 Allow card text to continue through line breaks
tmp
2019-09-08 13:25:10 +02:00
Albin Larsson
8c2f56394f add favorite books section to favorite tab
tmp
2019-09-08 13:15:40 +02:00
dkanada
ea86b3f9e7 remove unused component 2019-09-08 01:51:25 -07:00
grafixeyehero
5f9a499c98 use the new style for medialibrarypage 2019-09-08 01:13:53 +03:00
grafixeyehero
e9d2c73c5e degligy medialibrarypage 2019-09-08 01:11:27 +03:00
Bill Thornton
a61ef5bf30 Disable animations in editor sidebar 2019-09-07 00:24:51 -04:00
dkanada
742354baee use album cover as alternate image for active devices 2019-09-06 20:27:51 -07:00
dkanada
e4e315b1e0 fix issues with playback progress 2019-09-06 20:27:00 -07:00
Mitchfizz05
7a904bb363 Don't hide play all and shuffle buttons on mobile 2019-09-07 10:59:24 +09:30
PrplHaz4
3b0a2f4caa fix AutoRunWebApp checkbox on dashboardgeneral 2019-09-06 14:58:31 -04:00
dkanada
e8ae9b3605 use new style for all warning dialogs 2019-09-06 02:02:58 -07:00
dkanada
f862838458 always keep confirm in the same location 2019-09-05 12:41:39 -07:00
Niklas Fäth
1be3a7f205 Fixed blurred My Media images (#443)
* Fixed blurred My Media images

* Update CONTRIBUTORS.md
2019-09-05 15:04:35 -04:00
dkanada
86df74ad52 lots of string changes 2019-09-05 12:01:30 -07:00
dkanada
cfb82dd161 move experimental tag to select description 2019-09-05 11:48:18 -07:00
dkanada
20923d5ab8 show transcode path on encoding configuration page 2019-09-05 11:43:32 -07:00
dkanada
b4a5794573 minor changes to dashboard controller 2019-09-05 11:42:38 -07:00
grafixeyehero
baa87d2dfb remove user policy 2019-09-04 21:53:31 +03:00
Joshua M. Boniface
a4dabc1644 Merge pull request #441 from Nickbert7/patch-1
Improve image quality on detail page
2019-09-03 13:46:15 -04:00
Niklas Fäth
295d6e32a3 Improve image quality on detail page 2019-09-03 15:42:20 +02:00
Anthony Lavado
df2ae88a72 Merge pull request #430 from dkanada/device
Fix layout issues for device cards on dashboard
2019-09-02 03:17:27 -04:00
Anthony Lavado
0d17fcdfeb Merge pull request #432 from grafixeyehero/metadataSidebar
Add icon to metadata editor side bar
2019-09-02 02:23:31 -04:00
grafixeyehero
6d3c617c28 change primary id that have delete, uninstall 2019-09-01 18:52:36 +03:00
grafixeyehero
babb4f1028 some for devices 2019-09-01 18:38:23 +03:00
grafixeyehero
d53a095728 change class name 2019-09-01 18:24:56 +03:00
grafixeyehero
a7dfb236d0 add style 2019-09-01 17:06:28 +03:00
dkanada
1dec316dc2 Merge pull request #436 from fhriley/movie_sort_year
Always have last sort of movies be by production year
2019-08-31 21:17:23 -07:00
Joshua M. Boniface
ebd8ab08d5 Merge pull request #424 from ckcr4lyf/copy-stream-url
Add a "Copy Stream URL" button in the dropdown menu, for easy Direct Play in VLC
2019-08-31 21:52:58 -04:00
Joshua M. Boniface
505cda6f76 Merge branch 'master' into copy-stream-url 2019-08-31 21:52:48 -04:00
grafixeyehero
867a5e664c Add string for LabelFolder (#434) 2019-08-31 16:18:16 -07:00
grafixeyehero
6d345343df qick fix (#433) 2019-08-31 16:17:47 -07:00
Anthony Jean
c184bc6833 Add sorting for music albums in an artist's details page (#427) 2019-08-31 16:17:18 -07:00
Frank Riley
8a0c268973 Always have last sort of movies be by production year.
Implement https://features.jellyfin.org/posts/151/movies-should-always-have-a-second-sort-of-release-date
2019-08-31 15:12:37 -07:00
grafixeyehero
a8f904dc42 change primary action for delete confirmation dialog 2019-08-31 21:42:40 +03:00
grafixeyehero
63cc1e0860 add style 2019-08-31 19:03:19 +03:00
grafixeyehero
2ffbc14cd7 add icon to metadata side bar 2019-08-31 17:41:56 +03:00
dkanada
101d0b1139 fix layout issues for device cards on dashboard 2019-08-31 03:12:10 -07:00
Bill Thornton
42c8ef6262 Add prepare script for git installs (#429) 2019-08-31 00:07:37 -07:00
Anthony Lavado
af49586b1b Merge pull request #428 from thornbill/fix-background
Fix preload background color
2019-08-30 23:07:50 -04:00
Bill Thornton
75729ed7d2 Fix preload background color 2019-08-30 15:44:59 -04:00
dkanada
b58473b366 use same css rules for section tabs (#422) 2019-08-29 14:53:43 -07:00
Anthony Lavado
046deb4a50 Merge pull request #418 from Abbe98/nonplayable-collection
if collection has no playable items hide play and shuffle btns
2019-08-29 08:13:38 -04:00
Anthony Lavado
92a847dfc1 Merge pull request #425 from jellyfin/dependabot/npm_and_yarn/eslint-utils-1.4.2
Bump eslint-utils from 1.4.0 to 1.4.2
2019-08-27 12:35:13 -04:00
dependabot[bot]
7ad0958d83 Bump eslint-utils from 1.4.0 to 1.4.2
Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.4.0 to 1.4.2.
- [Release notes](https://github.com/mysticatea/eslint-utils/releases)
- [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.4.0...v1.4.2)

Signed-off-by: dependabot[bot] <support@github.com>
2019-08-27 16:10:47 +00:00
Joshua M. Boniface
c8f392bdd4 Merge pull request #343 from thornbill/webpack
Bundle npm dependencies using webpack
2019-08-27 11:33:57 -04:00
ckcr4lyf
7d585fde1b Logging error if copy failed 2019-08-27 19:20:39 +08:00
ckcr4lyf
0ea9faee08 Updated contributors.md 2019-08-27 17:37:49 +08:00
ckcr4lyf
437729d3f3 Added option, if file is downloadable, copy the URL to clipboard 2019-08-27 17:32:35 +08:00
blennster
f72d26b9da Translated using Weblate (Swedish)
Currently translated at 89.5% (1291 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-08-26 22:09:50 -04:00
Vladimir Jendrol
099b028978 Translated using Weblate (Slovak)
Currently translated at 73.9% (1067 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2019-08-26 22:09:50 -04:00
Odd Stråbø
c2cfc1d1d3 Translated using Weblate (Norwegian Bokmål)
Currently translated at 77.1% (1112 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-08-26 22:09:50 -04:00
Viktor Basso
5bb480eace Translated using Weblate (Norwegian Bokmål)
Currently translated at 77.1% (1112 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-08-26 22:09:50 -04:00
Bond-009
a653ba5308 Translated using Weblate (Dutch)
Currently translated at 89.8% (1296 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-08-26 22:09:50 -04:00
ZsiGiT
93ee8b4afa Translated using Weblate (Hungarian)
Currently translated at 94.9% (1370 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-08-26 22:09:50 -04:00
tiliarou
1c5b428e56 Translated using Weblate (French)
Currently translated at 99.9% (1441 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-08-26 22:09:50 -04:00
Axel Gabriel Calle Granda
2c579b4942 Translated using Weblate (Spanish)
Currently translated at 99.5% (1436 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-08-26 22:09:50 -04:00
Axel Gabriel Calle Granda
bd0bfc1c48 Translated using Weblate (English (United States))
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-08-26 22:09:18 -04:00
Matzi24GR
54093fd90a Translated using Weblate (Greek)
Currently translated at 84.8% (1223 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/
2019-08-26 22:09:18 -04:00
Pafzedog
ae0d2107cd Translated using Weblate (French)
Currently translated at 99.9% (1441 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-08-26 22:08:06 -04:00
Odd Stråbø
5d2c0402f1 Translated using Weblate (Norwegian Bokmål)
Currently translated at 77.2% (1114 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-08-26 22:08:06 -04:00
Anthony Lavado
a6db774318 Merge pull request #400 from dkanada/url
Add base url option to web client
2019-08-26 00:19:45 -04:00
grafixeyehero
b326b4be31 Fix redirect on wizardfinishpage (#415) 2019-08-25 15:37:42 -07:00
dkanada
61f5a649ff only use hostname when adding a server 2019-08-25 00:29:12 -07:00
dkanada
76923c3dc9 add base url option to networking page 2019-08-25 00:27:08 -07:00
dkanada
8f956658d4 remove emby prefix from api requests 2019-08-25 00:26:17 -07:00
dkanada
ee46631d00 deminify sections of the networking controller 2019-08-25 00:26:17 -07:00
Anthony Lavado
6b32af12da Merge pull request #413 from dkanada/card
Fix card layout on home for books
2019-08-25 00:31:48 -04:00
dkanada
569d6456b1 fix card layout on home for books 2019-08-22 15:23:05 -07:00
Albin Larsson
cb1d56defb if collection has no playable items hide btns 2019-08-22 14:08:55 +02:00
grafixeyehero
5fda5a8738 Change media info display (#386)
* Add btn more media info

* Add event listener

* change class and add close btn

* Add style

* Add event listener display

* hide btn

* remove media info form itemdetail page

* Add media templete

* cleanup unused stayle

* Add to context menu

* cleanup

* cleanup

* fix

* add todo to file path info

* allow admin and user to view the media info

* Add to strings

* Remove media info menu from book and music

* Remove splitVersions function

* Readd splitVersions function on item deatil page

* Remove unused elements

* double quotes & removing newlines

* minor style changes

* fix format and path info on itemdetails page

* update
2019-08-19 02:35:57 -07:00
dkanada
c46f577f08 Merge pull request #412 from dkanada/misc
Move transcoding page to playback settings and improve strings
2019-08-19 01:56:59 -07:00
Bond-009
9177456f64 Merge pull request #414 from jellyfin/fix_deviceid
Resolve deviceId promise properly during apphost init
2019-08-16 17:41:23 +02:00
Claus Vium
20573a8086 Resolve deviceId promise properly during apphost init 2019-08-16 16:49:58 +02:00
dkanada
cdacc0175e remove special case for open subtitles 2019-08-16 00:58:27 -07:00
dkanada
017bc94506 minor string changes 2019-08-16 00:58:27 -07:00
dkanada
6978a9d9df clean up playback settings pages 2019-08-16 00:58:27 -07:00
dkanada
8bec0ad63d move all library pages to their own folders 2019-08-16 00:58:27 -07:00
Anthony Lavado
cfb67bb5d1 Merge pull request #410 from grafixeyehero/groupversion
Disable Group versions for non admin
2019-08-15 15:25:09 -04:00
grafixeyehero
a9982263b0 unused filter audio launguage 2019-08-15 20:17:52 +03:00
grafixeyehero
40cc2fbd0c disable for none admin 2019-08-15 18:37:37 +03:00
Anthony Lavado
29c077d2cb Merge pull request #403 from grafixeyehero/nowplayingbar
Fix text overlap on now playing bar
2019-08-14 16:19:35 -04:00
Anthony Lavado
e20f7e02ea Merge pull request #396 from Abbe98/book-download-btn
Move download action to major button for books (itemdetailspage)
2019-08-14 16:05:52 -04:00
Bond-009
0b6369fdcb Merge pull request #408 from jellyfin/EraYaN-stale-update
Reflect changes made to main repo's stale bot config.
2019-08-11 14:36:02 +02:00
Erwin de Haan
cf352b6af2 Make all the stale bot times longer 2019-08-11 12:42:20 +02:00
dkanada
5a0da2f815 Merge pull request #406 from Nickbert7/patch-1
Enable blurred footer in chrome
2019-08-10 15:09:23 -07:00
Joshua Boniface
5ce7310a8e Translated using Weblate (French (Canada))
Currently translated at 12.0% (173 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/
2019-08-10 00:26:18 -04:00
grafixeyehero
1fa5a2158d remove newlines 2019-08-08 19:34:30 +03:00
grafixeyehero
8101dac3d4 fix 2019-08-08 19:18:22 +03:00
Gabriel Luz (aka Gab)
fe40316927 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-08-07 17:14:29 -04:00
Shirimasen
30da850d22 Translated using Weblate (Polish)
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2019-08-07 17:14:29 -04:00
Shirimasen
a2f38df470 Translated using Weblate (English (United States))
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-08-07 17:14:29 -04:00
AndersMachmueller
4f73d55d81 Translated using Weblate (Danish)
Currently translated at 96.2% (1389 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/
2019-08-07 17:14:29 -04:00
Flymok
36d59348b1 Translated using Weblate (Chinese (Traditional))
Currently translated at 54.6% (789 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-08-07 17:14:29 -04:00
dkanada
9f35086e2f Merge pull request #402 from grafixeyehero/manuallogin
Selectively hide manual login button
2019-08-07 14:14:09 -07:00
Niklas Fäth
339b35cfb6 Enable blurred header 2019-08-07 14:45:24 +02:00
Niklas Fäth
a5c4e5c54d Enable blurred footer in chrome
Enables blurred footer also in chrome
2019-08-07 14:04:12 +02:00
Bill Thornton
4b5aec42f7 Merge remote-tracking branch 'upstream/master' into webpack 2019-08-06 11:16:32 -04:00
Axel Gabriel Calle Granda
520a9853c7 Translated using Weblate (Spanish)
Currently translated at 99.3% (1434 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-08-04 01:00:13 -04:00
Michał
61c49a1604 Translated using Weblate (Polish)
Currently translated at 94.8% (1368 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2019-08-04 01:00:13 -04:00
Andrew Rabert
d66e2358ab Merge pull request #405 from nvllsvm/updates
Upgrade dependencies
2019-08-04 01:00:06 -04:00
Andrew Rabert
658eabbc20 Upgrade dependencies
Includes fixes for a number of security vulnerabilities
2019-08-03 15:39:14 -04:00
grafixeyehero
d48df625f3 Fix secoundery text overlapping 2019-08-03 18:36:20 +03:00
grafixeyehero
d5fb30166c Hidding Manual Login btn 2019-08-03 17:18:44 +03:00
Anthony Lavado
7ea2142c73 Merge pull request #399 from jellyfin/EraYaN-remove-issue-templates
Delete enhancement-request.md and feature-request.md
2019-07-29 15:17:03 -04:00
Joshua M. Boniface
8db44000de Merge pull request #398 from jellyfin/EraYaN-stale-app
Add stale app config.
2019-07-29 14:57:17 -04:00
Erwin de Haan
86a6a15b9f Delete feature_request.md 2019-07-29 19:57:21 +02:00
Erwin de Haan
86ae2840fc Delete enhancement-request.md 2019-07-29 19:56:36 +02:00
Erwin de Haan
1323bfc735 Create stale.yml 2019-07-29 19:47:46 +02:00
Vladimir Jendrol
1131327ede Translated using Weblate (Slovak)
Currently translated at 70.8% (1023 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2019-07-29 05:43:10 -04:00
tluciomiranda
c7363267cf Translated using Weblate (Portuguese (Portugal))
Currently translated at 56.3% (813 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-07-29 05:43:10 -04:00
Tamás Mogyorósi
74104bb5ad Translated using Weblate (Hungarian)
Currently translated at 94.9% (1370 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-07-29 05:43:10 -04:00
Anthony Lavado
fea5621432 Merge pull request #379 from dkanada/icon
Add an ImageHelper class to consolidate frequently used icons
2019-07-29 05:42:49 -04:00
dkanada
752212413c consolidate all library icons into a single method 2019-07-29 00:10:52 -07:00
dkanada
f3707153a0 add method to source device icons locally 2019-07-29 00:10:52 -07:00
dkanada
2587ac94b3 deminify method in devices controller 2019-07-29 00:08:20 -07:00
Abbe98
e715abde0b make download button translatable 2019-07-28 15:58:41 +02:00
Abbe98
a3cc4a8ba9 move download action to major button for books 2019-07-28 15:51:02 +02:00
Tradutor da Silva
c04e001986 Translated using Weblate (Portuguese (Brazil))
Currently translated at 94.3% (1362 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-07-25 03:34:29 -04:00
polVRtong
7119ee3df5 Translated using Weblate (Korean)
Currently translated at 58.3% (842 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-07-25 03:34:29 -04:00
dkanada
168201f0d7 Merge pull request #394 from jellyfin/release-10.3.z
Backmerge for 10.3.7
2019-07-25 00:34:20 -07:00
Joshua M. Boniface
1d0fd79eb1 Merge pull request #393 from dinki/cherrypick-380
Fix to enable tuner edit again
2019-07-24 10:38:31 -04:00
dinki
cafef103f4 Fix to enable tuner edit again 2019-07-24 09:27:27 -05:00
Vladimir Jendrol
5c96a86f90 Translated using Weblate (Slovak)
Currently translated at 64.6% (933 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2019-07-19 01:36:00 -04:00
tluciomiranda
fd540c579a Translated using Weblate (Portuguese (Portugal))
Currently translated at 56.2% (812 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-07-19 01:36:00 -04:00
Moritz
2a06f96d07 Translated using Weblate (German)
Currently translated at 98.4% (1421 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-07-19 01:36:00 -04:00
deltonio2
9c579b6c93 Translated using Weblate (French)
Currently translated at 98.5% (1422 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-07-19 01:36:00 -04:00
Pyry Loukola
221f4edc8b Translated using Weblate (Finnish)
Currently translated at 16.6% (240 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-07-19 01:36:00 -04:00
tluciomiranda
01a1cd0700 Translated using Weblate (English (United States))
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-07-19 01:36:00 -04:00
愤怒的小绵羊
33fa67af54 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.6% (1409 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-07-19 01:36:00 -04:00
dkanada
fee99120d5 Merge pull request #388 from Nickbert7/patch-1
Enable display mode setting
2019-07-18 22:35:29 -07:00
Bill Thornton
4a31e857f5 Add .npmignore file 2019-07-18 01:32:04 -04:00
Niklas Fäth
9cc0491e3a Keep nav hidden on TV
Prevents focus of menu entries
2019-07-11 15:20:53 +02:00
Niklas Fäth
6d52868166 Enable Scrolling 2019-07-10 17:18:11 +02:00
Niklas Fäth
bcb66ac150 Enable display mode setting 2019-07-10 14:31:42 +02:00
Anthony Lavado
f936c04d15 Merge pull request #314 from oddstr13/pr-keyboard-navigation-1
Initial support for keyboard navigation (for webOS remote etc.)
2019-07-07 08:23:51 -04:00
Joshua M. Boniface
d11167eae5 Merge pull request #387 from jellyfin/release-10.3.z
Backmerge for Release 10.3.4, 10.3.5, and 10.3.6
2019-07-06 17:15:56 -04:00
dkanada
bf5f3b3fde Merge pull request #378 from dkanada/pw
Add optional password field on user creation
2019-07-06 05:07:49 -07:00
Joshua M. Boniface
d2213841dc Merge pull request #382 from dinki/on_now_fix
Fix homesection 'On now' display elements
2019-07-05 22:50:04 -04:00
Joshua M. Boniface
f12af9f40c Merge pull request #381 from dinki/homesection_programs_button_fix
Fix homesection programs button to go to correct page
2019-07-05 22:49:07 -04:00
WWWesten
963b6e075c Translated using Weblate (Kazakh)
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-07-04 12:44:32 -04:00
Anthony Lavado
accaac3405 Merge pull request #315 from dkanada/scroller
Move buttons to top right for custom scroll element
2019-07-04 12:44:28 -04:00
dkanada
81be6592d6 fix some scroller issues on mobile devices 2019-07-04 00:27:42 -07:00
dinki
8147f7847d Remove On Now PR fix 2019-07-03 09:37:05 -05:00
dinki
9f86f68d2f fixing previous commit 2019-07-02 18:55:57 -05:00
dinki
9107a28cc5 Fixes On Now section so items are shown 2019-07-02 15:46:54 -05:00
dinki
bae555928f clean up 2019-07-02 15:43:05 -05:00
dinki
a678037eec Fixes On Now section so items are shown 2019-07-02 15:37:07 -05:00
dinki
5f80642193 Fix homesection programs button to go to correct page 2019-07-02 14:17:36 -05:00
ancarvalho
3788b7b323 Translated using Weblate (Portuguese (Brazil))
Currently translated at 94.1% (1358 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-07-02 14:17:15 -04:00
Bond-009
75521c8414 Merge pull request #380 from dinki/dvr_fix
Fix to enable tuner edit again
2019-07-02 20:17:10 +02:00
dinki
e358f84bec Fix to enable tuner edit again 2019-07-02 12:47:45 -05:00
dkanada
9c9d4ba58c fix all outstanding bugs and quirks with new scrollbuttons 2019-07-02 00:12:04 -07:00
dkanada
63b4249c34 simplify some css rules 2019-07-01 21:25:35 -07:00
dkanada
5135fd37b3 replace two instances of incorrect caps for custom elements 2019-07-01 21:24:59 -07:00
dkanada
73b14386ef fix scroller button issues 2019-07-01 21:24:59 -07:00
dkanada
976ec25e3b move buttons to top right for custom scroll element 2019-07-01 21:24:59 -07:00
dkanada
b5b4bb7c7a add suggested changes 2019-07-01 12:42:15 -07:00
Chuck Connors
b592abbeff Add 'Series' button to Live TV menu off homesection (#372)
* Add Series button to main page

* Fix typo

* Fix typo
2019-07-01 10:14:28 -07:00
ZsiGiT
3ea6bb5094 Translated using Weblate (Hungarian)
Currently translated at 90.9% (1312 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-07-01 12:57:22 -04:00
ZhiGang Zhung
52a4a5bfa9 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.4% (1406 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-07-01 12:57:22 -04:00
dkanada
66fe51ee7c Merge pull request #375 from grafixeyehero/SaveMetadataHidden
Fix querySelector for Save metadata and images as hidden files
2019-07-01 09:57:17 -07:00
Anthony Lavado
45ab20a031 Merge pull request #377 from dkanada/log
Fix log issue from #365
2019-06-30 16:05:15 -04:00
dkanada
2609bda89d add optional password field on user creation 2019-06-30 01:52:57 -07:00
nukleer
22d46667df Translated using Weblate (Turkish)
Currently translated at 20.1% (291 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-06-30 02:57:18 -04:00
ZhiGang Zhung
69c43d9e30 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (1405 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-06-30 02:57:18 -04:00
Anthony Lavado
93003ec6d4 Merge pull request #376 from grafixeyehero/adminDrawerLogo
Fix adminDrawerLogo
2019-06-30 02:57:14 -04:00
dkanada
24250cb4b0 deminify usernew page 2019-06-29 23:45:07 -07:00
dkanada
43c50d1722 fix log issue from #365 2019-06-29 17:17:10 -07:00
grafixeyehero
51a8569c15 Fix adminDrawerLogo 2019-06-30 01:08:11 +03:00
grafixeyehero
e0efe1c2d4 Fix querySelector for fldSaveMetadataHidden 2019-06-30 00:36:32 +03:00
dkanada
391851a200 Merge pull request #365 from dkanada/cast
Fix repeated automatic attempts to cast to a device
2019-06-26 10:59:22 -07:00
WWWesten
3eb4c8ffbb Translated using Weblate (Russian)
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-06-26 12:29:44 -04:00
WWWesten
df4537b1bc Translated using Weblate (Kazakh)
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-06-26 12:29:44 -04:00
Stefano Loscalzo
fde71bbbf5 Translated using Weblate (Italian)
Currently translated at 90.7% (1309 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-06-26 12:29:44 -04:00
ZsiGiT
b19c1b0282 Translated using Weblate (Hungarian)
Currently translated at 89.8% (1296 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-06-26 12:29:44 -04:00
Libor Filípek
816b30e657 Translated using Weblate (Czech)
Currently translated at 100.0% (1443 of 1443 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-06-26 12:29:44 -04:00
Anthony Lavado
aafb7c0be7 Merge pull request #366 from dkanada/margin
Minor fixes for section headers
2019-06-26 12:29:39 -04:00
dkanada
c9e70d9564 Merge pull request #364 from petermcneil/channelmapper-sorting
Change channel mapper to sort list
2019-06-26 01:22:47 -07:00
petermcneil
f7376f5d90 ES5 not ES6 2019-06-23 16:56:04 +01:00
petermcneil
d7180c21ca Change channel mapper to sort list 2019-06-23 16:54:13 +01:00
dkanada
38bed87e92 minor fixes for section headers 2019-06-21 14:19:33 -07:00
dkanada
abd0b0130f fix repeated automatic attempts to cast to a device 2019-06-19 05:02:21 -07:00
bcaoo
bffd8f9bd9 Translated using Weblate (Spanish)
Currently translated at 99.7% (1443 of 1446 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-06-18 00:10:12 -04:00
vaheed
f6ccabc886 Translated using Weblate (Persian)
Currently translated at 10.0% (145 of 1446 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fa/
2019-06-18 00:10:12 -04:00
愤怒的小绵羊
e8d566803d Translated using Weblate (Chinese (Simplified))
Currently translated at 98.0% (1418 of 1446 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-06-18 00:10:12 -04:00
szlytlyt
a56ee7f528 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.0% (1418 of 1446 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-06-18 00:10:12 -04:00
Joshua M. Boniface
4a3bf18d73 Merge pull request #360 from dkanada/metadata
Small tweaks to the server settings
2019-06-18 00:10:04 -04:00
Joshua M. Boniface
6a0672a996 Merge pull request #361 from oddstr13/pr-emby-auth-coexist-1
Allow Jellyfin and Emby to coexist on the same domain
2019-06-16 01:10:54 -04:00
Odd Stråbø
1c34f6202e Allow Jellyfin and Emby to coexist on the same domain 2019-06-16 00:42:20 +02:00
Bill Thornton
43ec4ff0e7 Remove unused dependencies 2019-06-15 00:35:24 -04:00
Bill Thornton
ebbfec1927 Remove unused modules from webpack config 2019-06-15 00:32:04 -04:00
Bill Thornton
1122b5b5d9 Simplify apploader code 2019-06-15 00:21:40 -04:00
dkanada
dbfa1e4f8f fix undefined variable 2019-06-12 19:41:27 -07:00
Anthony Lavado
dcd4a7631d Merge pull request #353 from grafixeyehero/dlnaprofile
Add proper styling to DlnaProfile and ScheduledTask pages
2019-06-12 20:32:33 -04:00
Anthony Lavado
6188ff74bc Merge pull request #356 from grafixeyehero/emby-button
Fix certain elements getting incorrectly centered on firefox
2019-06-12 20:32:20 -04:00
WWWesten
fa6883d341 Translated using Weblate (Kazakh)
Currently translated at 100.0% (1446 of 1446 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-06-12 20:32:06 -04:00
ZsiGiT
9d9003f78e Translated using Weblate (Hungarian)
Currently translated at 90.3% (1306 of 1446 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-06-12 20:32:06 -04:00
David Freina
10270b8488 Translated using Weblate (German)
Currently translated at 98.3% (1422 of 1446 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-06-12 20:32:06 -04:00
Anthony Lavado
d33c87a99c Merge pull request #336 from grafixeyehero/purple-haze
Update purple haze theme and fix some unstyled elements
2019-06-12 20:32:00 -04:00
vitorsemeano
8b09235e46 added getPlugins from NativeShellAPI 2019-06-10 22:42:57 -07:00
dkanada
de0b26fd61 fix highlight issue for active page on dashboard 2019-06-10 16:13:36 -07:00
dkanada
e6b60f99c4 add a hidden page to the dashboard menu 2019-06-10 15:56:56 -07:00
dkanada
4166aed39d avoid shorthand for setting descriptions 2019-06-10 15:51:28 -07:00
dkanada
e21763dfcd remove redundant advanced label 2019-06-10 15:25:07 -07:00
dkanada
166c95ea3a remove page with only two options 2019-06-10 14:44:52 -07:00
dkanada
36d1cf3a59 fix capitalization of nfo 2019-06-10 14:23:32 -07:00
grafixeyehero
ad0d4c2d40 add focus 2019-06-10 21:04:05 +03:00
grafixeyehero
76d5f8474c Remove class button-link-inline and css style 2019-06-10 20:44:13 +03:00
grafixeyehero
cec8640443 add sytle 2019-06-06 01:18:19 +03:00
grafixeyehero
2a3532f530 fix btn layout 2019-06-06 01:17:56 +03:00
grafixeyehero
9b313d3378 fix some layout 2019-06-06 01:17:19 +03:00
grafixeyehero
6d5cf2d975 changing class 2019-06-05 23:54:57 +03:00
grafixeyehero
5e6350a121 disable for know 2019-06-05 23:00:13 +03:00
grafixeyehero
9139a962d4 Remove conditional 2019-06-05 22:59:14 +03:00
grafixeyehero
061ef4e458 change btn delete text to btn icon 2019-06-05 22:31:04 +03:00
grafixeyehero
314dc2bd97 Remove bullet points 2019-06-05 21:42:59 +03:00
Anthony Lavado
6f569bfdff Merge pull request #350 from dkanada/fanart
Move fanart provider to plugin
2019-06-05 01:19:28 -04:00
exveria1015
33c40b366d Translated using Weblate (Japanese)
Currently translated at 35.7% (517 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2019-06-04 18:35:18 -04:00
grafixeyehero
aafddb38d2 update focus 2019-06-04 23:37:49 +03:00
Fishbone
b61a5b53e5 Translated using Weblate (German)
Currently translated at 98.2% (1422 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-06-04 00:21:30 -04:00
Anthony Lavado
b32cc719c8 Merge pull request #348 from grafixeyehero/fierfox-fix
Fix firefox dropdown
2019-06-04 00:21:27 -04:00
grafixeyehero
f3667305f2 Fix button style 2019-06-03 02:54:28 +03:00
grafixeyehero
6c6a02598b Reverse back 2019-06-03 02:48:31 +03:00
grafixeyehero
3d07b51f41 change class dialog-small to dialog-medium-tall 2019-06-03 02:46:44 +03:00
Joshua M. Boniface
37636dae5c Merge pull request #354 from joshuaboniface/forwardmerge-thumbfix
Add thumbnail fix to release
2019-06-01 21:18:00 -04:00
DrPandemic
e220ea603d Prevent the rendering of button inside button 2019-06-01 20:56:17 -04:00
Julio García
d5d21b4bc6 Translated using Weblate (Spanish)
Currently translated at 99.1% (1435 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-06-01 20:50:57 -04:00
Mexx62
a579fa7d61 Translated using Weblate (French)
Currently translated at 99.1% (1436 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-06-01 20:50:48 -04:00
grafixeyehero
8e69ce75b5 Remove conditional 2019-06-02 02:43:05 +03:00
grafixeyehero
d976734d61 update icon hover color 2019-06-02 00:35:09 +03:00
grafixeyehero
1d07d513ea update text colors and checkbox 2019-06-02 00:25:44 +03:00
thorthur
73a6a23353 Translated using Weblate (French)
Currently translated at 98.8% (1432 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-06-01 08:34:38 -04:00
Mexx62
7e07e391cc Translated using Weblate (French)
Currently translated at 98.8% (1432 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-06-01 08:34:35 -04:00
WWWesten
2b01b560ba Translated using Weblate (Russian)
Currently translated at 100.0% (1448 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-05-31 19:14:50 -04:00
erikasne6152
6890403a68 Translated using Weblate (Lithuanian)
Currently translated at 44.8% (649 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-05-31 19:14:50 -04:00
Hyunsu Nam
f0e97bbfbf Translated using Weblate (Korean)
Currently translated at 55.8% (808 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-05-31 19:14:50 -04:00
WWWesten
aa27dfd5ea Translated using Weblate (Kazakh)
Currently translated at 100.0% (1448 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-05-31 19:14:50 -04:00
exveria1015
1d9306fd90 Translated using Weblate (Japanese)
Currently translated at 15.8% (230 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2019-05-31 19:14:50 -04:00
Libor Filípek
4804afdb04 Translated using Weblate (Czech)
Currently translated at 100.0% (1448 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-05-31 19:14:50 -04:00
dracocephalum
dcb02a6707 Translated using Weblate (Chinese (Traditional))
Currently translated at 54.1% (784 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-05-31 19:14:50 -04:00
Matsuri
e1b7304118 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.0% (1405 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-31 19:14:50 -04:00
Anthony Lavado
ef4915c656 Merge pull request #342 from grafixeyehero/class
Add span class to fix a margin issue with some icons
2019-05-31 19:14:05 -04:00
grafixeyehero
62c3f8edda Improveing dlnaprofile layout page 2019-05-31 23:57:05 +03:00
dkanada
036c73c44b finish work on fanart plugin changes 2019-05-31 02:11:52 -07:00
dkanada
116e719a97 miscellaneous cleanup 2019-05-31 02:10:57 -07:00
dkanada
2d68b13ef5 remove fanart settings from frontend and move to plugin 2019-05-31 02:10:57 -07:00
exveria1015
30ffa4b13e Added translation using Weblate (Japanese) 2019-05-30 19:08:25 -04:00
grafixeyehero
82aacf1c48 Remove .emby-checkbox:focus+span+.checkboxOutline border 2019-05-30 03:43:38 +03:00
grafixeyehero
42af630e7b Fix fierfox dropdown 2019-05-30 02:28:57 +03:00
grafixeyehero
8bff927997 Update scrollbar for fierfox 2019-05-30 01:05:03 +03:00
grafixeyehero
faa6040516 Remove duplicate code and reduceing scrollbar width 2019-05-30 00:13:49 +03:00
grafixeyehero
d316556817 update label primery and secondery btn 2019-05-29 03:11:19 +03:00
Juvenal Yescas
92a5bf6d80 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (1448 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-05-28 11:52:27 -04:00
Juvenal Yescas
f2b4f9e602 Translated using Weblate (Spanish (Mexico))
Currently translated at 99.8% (1446 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-05-28 11:42:58 -04:00
Juvenal Yescas
2901a4a5d6 Translated using Weblate (Spanish (Mexico))
Currently translated at 99.8% (1446 of 1448 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-05-28 11:34:13 -04:00
grafixeyehero
f6a0e2ebae Update css homesections 2019-05-28 04:51:27 +03:00
grafixeyehero
8eda13c092 Add class homeLibraryIcon for md-icon 2019-05-27 01:22:48 +03:00
grafixeyehero
c14c603feb update close div and secondery color 2019-05-26 22:10:24 +03:00
grafixeyehero
8b638635c5 Remove margin 2019-05-26 02:06:09 +03:00
grafixeyehero
64862269a1 Add css 2019-05-26 02:05:19 +03:00
grafixeyehero
2141f56273 Add span class homeLibrarytext 2019-05-26 02:04:54 +03:00
grafixeyehero
e67f637d0e upadet purple haze button css and hover 2019-05-26 01:53:44 +03:00
Bill Thornton
5734d5d07d Add webpack copy plugin 2019-05-25 00:28:06 -04:00
Anthony Lavado
e3ebf34d44 Merge pull request #337 from 97carmine/master
Correction and translation of texts or words in spanish
2019-05-24 23:39:52 -04:00
Axel Gabriel Calle Granda
09c5f07ad7 Update es.json 2019-05-24 19:55:36 +00:00
Anthony Lavado
3f448fd12c Merge pull request #340 from jellyfin/cvium-fix-record-series
Fix context in querySelector
2019-05-24 14:18:39 -04:00
erikasne6152
3f4994af9c Translated using Weblate (Lithuanian)
Currently translated at 43.1% (623 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-05-24 14:15:00 -04:00
mga
c72b090823 Translated using Weblate (French)
Currently translated at 98.8% (1427 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-05-24 14:15:00 -04:00
thorthur
d410067df3 Translated using Weblate (French)
Currently translated at 98.8% (1427 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-05-24 14:15:00 -04:00
TheBird956
a3e1c452df Translated using Weblate (French)
Currently translated at 98.8% (1427 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-05-24 14:15:00 -04:00
Gabriel Dugny
b2270db44b Translated using Weblate (French)
Currently translated at 98.8% (1427 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-05-24 14:15:00 -04:00
mga
ff74aeb302 Translated using Weblate (English (United States))
Currently translated at 100.0% (1444 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-05-24 14:15:00 -04:00
Libor Filípek
450680888d Translated using Weblate (Czech)
Currently translated at 100.0% (1444 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-05-24 14:15:00 -04:00
Matsuri
d232e06b40 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.2% (1405 of 1444 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-24 14:15:00 -04:00
Joshua M. Boniface
54fa486a58 Merge pull request #339 from dkanada/editcfg
Add editorconfig
2019-05-24 14:14:56 -04:00
Claus Vium
773fcc1263 Fix context in querySelector 2019-05-24 19:30:24 +02:00
dkanada
4ad7d984fd add editorconfig 2019-05-24 09:59:04 -07:00
Axel Gabriel Calle Granda
1e1ac1a843 Update es.json 2019-05-24 16:45:45 +02:00
grafixeyehero
069ff009a8 upadet purple haze button css 2019-05-24 04:00:19 +03:00
grafixeyehero
bc06fc23ee Change imagedowloader class 2019-05-24 03:59:28 +03:00
Anthony Lavado
549d982e77 Merge pull request #335 from dkanada/options
Always show options menu next to mouse
2019-05-23 20:07:08 -04:00
Anthony Lavado
53f403d156 Merge pull request #333 from bugfixin/fix-back-button
Fix back button in PWA
2019-05-23 20:06:41 -04:00
Anthony Lavado
edbe4c4345 Merge pull request #326 from grafixeyehero/icon
Fix icon
2019-05-23 20:06:23 -04:00
Anthony Lavado
da16b3eaf0 Merge pull request #325 from dkanada/string
Add some missing strings and remove gradients from themes
2019-05-23 20:06:00 -04:00
Anthony Lavado
e07b83c844 Merge pull request #324 from Nickbert7/patch-1
Change warning icons on dashboard to a bell instead of "pvr"
2019-05-23 20:04:35 -04:00
Bill Thornton
61de82e7fe Disable animations in jstree for jQuery slim support 2019-05-22 15:19:19 -04:00
Bill Thornton
fd6d3079c2 Remove old jstree source 2019-05-22 15:18:42 -04:00
Bill Thornton
fa50f3521c Add webpack bundle for external dependencies 2019-05-22 15:18:17 -04:00
Bill Thornton
ba9382e1bd Add eslint as dev dependency 2019-05-22 14:50:54 -04:00
Bill Thornton
ac98d7100f Deuglify apploader.js 2019-05-22 14:49:57 -04:00
Niklas Fäth
2779037bbf improve style 2019-05-22 10:52:48 +02:00
dkanada
6b81388bab always show options menu next to mouse 2019-05-22 01:33:51 -07:00
bugfixin
8adcdf5828 Set start url to true home url to prevent redirect on every load 2019-05-21 19:01:51 +00:00
bugfixin
6f2609a65a Remove invalid related application stub in manifest 2019-05-21 18:50:38 +00:00
Axel Gabriel Calle Granda
18cd87799d Syntax settings
Corrected the spelling of words and given coherence to sentences.
2019-05-21 18:03:01 +02:00
Bill Thornton
036ce21849 Fix invalid license 2019-05-21 00:50:53 -04:00
dkanada
0f67caab69 remove gradient from the osd elements 2019-05-20 00:27:09 -07:00
dkanada
8f30b70bfb add back three strings in the library edit page 2019-05-20 00:02:24 -07:00
Joshua M. Boniface
43dacfae90 Merge pull request #330 from jellyfin/translations
Merge current translations
2019-05-20 01:12:35 -04:00
Weblate
840a9f2b50 Merge branch 'translations' of https://github.com/jellyfin/jellyfin-web into translations 2019-05-20 00:51:46 -04:00
Deniz
4d32ae9396 Translated using Weblate (Turkish)
Currently translated at 19.8% (288 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-05-20 00:45:54 -04:00
Gabriel Villar
6a227be842 Translated using Weblate (Spanish (Argentina))
Currently translated at 21.6% (315 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-05-20 00:45:51 -04:00
Meiden-fc
13b4fba8bd Translated using Weblate (Spanish)
Currently translated at 94.1% (1368 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-05-20 00:45:51 -04:00
SaddFox
7cbf9cf686 Translated using Weblate (Slovenian)
Currently translated at 16.1% (235 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-05-20 00:45:51 -04:00
WWWesten
669c87d3fb Translated using Weblate (Russian)
Currently translated at 99.5% (1447 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-05-20 00:45:42 -04:00
MorningStar
6726a20762 Translated using Weblate (Persian)
Currently translated at 9.5% (139 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fa/
2019-05-20 00:45:39 -04:00
erikasne6152
5f7cb3c14e Translated using Weblate (Lithuanian)
Currently translated at 42.6% (619 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-05-20 00:45:37 -04:00
WWWesten
7157cbbe92 Translated using Weblate (Kazakh)
Currently translated at 99.5% (1446 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-05-20 00:45:30 -04:00
Marco Massimetti
3f6721ddb9 Translated using Weblate (Italian)
Currently translated at 92.1% (1339 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-05-20 00:45:27 -04:00
ZsiGiT
b3c48466f8 Translated using Weblate (Hungarian)
Currently translated at 90.9% (1322 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-05-20 00:45:26 -04:00
Jan Christian Grünhage
e8f11b9e72 Translated using Weblate (German)
Currently translated at 99.5% (1446 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-05-20 00:45:25 -04:00
Marcel P
674a1fd55c Translated using Weblate (German)
Currently translated at 99.5% (1446 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-05-20 00:45:24 -04:00
thorthur
c417464586 Translated using Weblate (French)
Currently translated at 99.0% (1439 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-05-20 00:45:21 -04:00
Samuli Valavuo
4a4dd5ddc3 Translated using Weblate (Finnish)
Currently translated at 9.9% (145 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-05-20 00:45:19 -04:00
Roland Vet
7792889c5a Translated using Weblate (English (United States))
Currently translated at 100.0% (1453 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-05-20 00:45:15 -04:00
Roland Vet
db57c85f0a Translated using Weblate (English (United Kingdom))
Currently translated at 31.3% (455 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2019-05-20 00:45:15 -04:00
Roland Vet
a0de3e0f2d Translated using Weblate (Dutch)
Currently translated at 91.8% (1334 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-05-20 00:44:42 -04:00
Libor Filípek
48c7c8bd9f Translated using Weblate (Czech)
Currently translated at 100.0% (1453 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-05-20 00:44:38 -04:00
lostmypillow
9d150f0002 Translated using Weblate (Chinese (Traditional))
Currently translated at 53.2% (774 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-05-20 00:44:31 -04:00
Matsuri
1e2cc14f29 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.0% (1424 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-20 00:44:23 -04:00
Cal.los
2ac4a210e7 Translated using Weblate (Catalan)
Currently translated at 53.4% (776 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/
2019-05-20 00:44:22 -04:00
Joshua M. Boniface
0fbb374478 Merge branch 'translations' of github.com:jellyfin/jellyfin-web into translations 2019-05-20 00:44:08 -04:00
Matsuri
6a772d25db Translated using Weblate (Chinese (Simplified))
Currently translated at 97.2% (1413 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-20 00:43:56 -04:00
Jun Wang
d9c5856ff7 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.2% (1413 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-20 00:43:56 -04:00
Carlos Perez
8538356d27 Translated using Weblate (Spanish (Argentina))
Currently translated at 21.6% (315 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-05-20 00:43:56 -04:00
Jun Wang
673ee5c5df Translated using Weblate (Chinese (Simplified))
Currently translated at 93.4% (1358 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-20 00:43:56 -04:00
qqq-qqqq
087dde45fc Translated using Weblate (Chinese (Simplified))
Currently translated at 93.4% (1358 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-20 00:43:56 -04:00
QY-Y
184b6efe8d Translated using Weblate (Chinese (Simplified))
Currently translated at 93.4% (1358 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-20 00:43:56 -04:00
Niklas Fäth
97d7395148 use if 2019-05-19 15:53:26 +02:00
Bond-009
3245e5c0d8 Merge pull request #328 from jellyfin/release-10.3.z
Backmerge for Release 10.3.3
2019-05-18 12:55:59 +02:00
grafixeyehero
7e0100ef3f update icon 2019-05-17 21:29:31 +03:00
Joshua M. Boniface
dd2cd4ab8a Merge pull request #327 from DrPandemic/focus-checkbox
Changes checkboxes focus appearance
2019-05-17 09:04:17 -04:00
Joshua M. Boniface
31fe3a9f61 Merge pull request #318 from dkanada/hover
Add a response on icon hover and other style fixes
2019-05-17 09:02:12 -04:00
Joshua M. Boniface
b0f7a9b67c Merge pull request #323 from bugfixin/fix-android-seek
Resolve some android seeking issues
2019-05-17 09:01:42 -04:00
Joshua M. Boniface
90b88898b2 Merge pull request #322 from grafixeyehero/secondery-title
Fix secondery title position and show year on tv show ui
2019-05-17 08:36:37 -04:00
DrPandemic
8c1446266c Changes checkbox focus appearance 2019-05-16 21:08:49 -04:00
grafixeyehero
f2ef23c9a8 update icon 2019-05-17 01:18:13 +03:00
dkanada
3c8361d87c add missing string and reorder playback menu 2019-05-16 14:33:57 -07:00
Niklas Fäth
17fbb3a312 Change icon to bell 2019-05-16 13:42:48 +02:00
bugfixin
da4d3a755e Prevent needlessly resetting startPositionTicks to null 2019-05-16 04:14:51 +00:00
grafixeyehero
93be06bdd4 update icon 2019-05-16 04:33:57 +03:00
grafixeyehero
71d59feb76 Fix dashboard Library icon 2019-05-16 01:54:01 +03:00
grafixeyehero
c8e695f9c6 Fix secondery title position and show year on tv show ui 2019-05-15 23:01:54 +03:00
Anthony Lavado
0f075fe6c4 Merge pull request #313 from dkanada/library
Improve the library page and dialog UX
2019-05-14 20:52:56 -04:00
Anthony Lavado
2a527e5e20 Merge pull request #307 from DrPandemic/redirect-video-error
Redirect when loading video player fails
2019-05-14 20:50:10 -04:00
Anthony Lavado
79e5fde63b Merge pull request #312 from dkanada/task
Always show the start task button except on errors
2019-05-14 20:48:44 -04:00
Matsuri
c4ef42ea77 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.2% (1413 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-14 04:51:15 -04:00
Jun Wang
dad4225d03 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.2% (1413 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-05-14 04:51:12 -04:00
dkanada
e21f7f10ed add a response on icon hover and other style fixes 2019-05-13 12:56:44 -07:00
Odd Stråbø
1341a53543 Add initial support for keyboard navigation
see #303
2019-05-11 10:11:26 +02:00
dkanada
aac1c52a2f remove useless dialog 2019-05-10 13:31:47 -07:00
dkanada
aa14b34035 add submit button to library edit dialog 2019-05-10 13:30:50 -07:00
dkanada
a5bad54c51 remove nested form from library create dialog 2019-05-10 13:30:50 -07:00
dkanada
b41ae5f483 remove unused call to hide loading indicator 2019-05-10 13:30:50 -07:00
dkanada
e833225ab3 minor code cleanup 2019-05-10 13:30:50 -07:00
dkanada
fa27a839f3 fix issue with the library context menu 2019-05-10 13:30:50 -07:00
dkanada
5fc92c915f deminify all library related pages 2019-05-10 13:30:49 -07:00
Joshua M. Boniface
d4ea091ab5 Merge pull request #300 from grafixeyehero/css
Fix dashboard column & update purple haze
2019-05-10 09:44:29 -04:00
Joshua M. Boniface
ce06f79502 Merge pull request #316 from anthonylavado/release-10.3.z
Correct the naming of iPad and iPhone
2019-05-10 09:16:18 -04:00
Joshua M. Boniface
ac0bb40e1d Merge pull request #299 from dkanada/ip
remove networking information from the dashboard
2019-05-10 09:08:36 -04:00
Joshua M. Boniface
a14b2b337c Merge pull request #224 from vitorsemeano/webpack_part5
Conversion to webpack - part5 - module resolution, data-require cleaned
2019-05-10 09:07:38 -04:00
Anthony Lavado
073f82f7de Correct the naming of iPad and iPhone
Fixes #310.
2019-05-10 00:24:22 -04:00
dkanada
8bd840bedc add some error checking to indicators 2019-05-09 18:30:18 -07:00
Anthony Lavado
f34ec139e3 Merge pull request #304 from skaro13/master
Fixed Progressive Web App for Android and iOS
2019-05-09 01:09:23 -04:00
Anthony Lavado
8840c15484 Merge pull request #309 from oddstr13/pr-webos-1
Various fixes for webOS 3.3
2019-05-09 01:06:35 -04:00
dkanada
d641543ff6 always show the start task button 2019-05-08 14:14:32 -07:00
Odd Stråbø
243f6f898e Implement .finally as .catch().then as suggested. 2019-05-08 07:17:30 +02:00
Simon Caron
4818a7782d Adde iOS Launch Screens for PWA 2019-05-07 21:08:24 -04:00
Simon Caron
0d00b6cfd7 Added 512 px icon for Android PWA Requirements 2019-05-07 21:08:15 -04:00
Simon Caron
7bd0db6b2f Updated PWA Manifest Values 2019-05-07 21:08:08 -04:00
Odd Stråbø
3167c7dbb9 Additional fixes to get jf-web loading in webOS 3.0 emulator.
Can't seem to get any audio/video playing in the emulator,
so I'm not sure if the emulator supports multimedia playback.
2019-05-06 22:21:20 +02:00
Odd Stråbø
747201a6c7 Various fixes for webOS 3.3 2019-05-05 23:55:42 +02:00
DrPandemic
55fd49bbca Redirect home when video player fails 2019-05-05 12:28:09 -04:00
Anthony Lavado
58dfadccbe Merge pull request #278 from DrPandemic/keyboard-shortcuts
New keyboard shortcuts
2019-05-05 08:43:14 -04:00
vitorsemeano
ec387c5246 webpack config and package.json for yarn 2019-05-03 22:50:59 +01:00
vitorsemeano
0785e6b36c removed wrongly added scripts in index.html 2019-05-03 22:50:59 +01:00
vitorsemeano
3377042ad3 multiple modules resolution 2019-05-03 22:50:59 +01:00
vitorsemeano
1da48cd363 removed all vibrant references (dead module) 2019-05-03 22:50:59 +01:00
vitorsemeano
ce51c8012d cleanup data-require from viewContainer 2019-05-03 22:50:36 +01:00
vitorsemeano
6502446f88 cleanup remaining data-requires in views 2019-05-03 22:46:15 +01:00
vitorsemeano
ede8b3397d cleanup data-require in views 2019-05-03 22:46:15 +01:00
vitorsemeano
315cbb1fc6 refactor strange var names in viewContainer 2019-05-03 22:46:15 +01:00
vitorsemeano
5662841c2c deuglify dlnaprofile.js 2019-05-03 22:46:15 +01:00
vitorsemeano
12f8cf10d5 deuglify viewContainer.js module 2019-05-03 22:35:47 +01:00
vitorsemeano
b293f6e0f9 multiple modules resolution 2019-05-03 22:35:47 +01:00
vitorsemeano
efa3ff1730 module appSettings renamed 2019-05-03 22:35:47 +01:00
dkanada
19530c4ade remove unused strings 2019-05-02 17:12:30 -07:00
dkanada
536eb398f9 remove networking info from the dashboard 2019-05-02 17:10:02 -07:00
grafixeyehero
b62f6edbc4 update purple haze 2019-05-03 02:58:37 +03:00
grafixeyehero
8a1ea0ae5f fix dashboard column 2019-05-03 02:57:20 +03:00
Jean-Samuel Aubry-Guzzi
658aedf96a Change keyboard shortcuts to match youtube
Use the same keyboard shortcuts than Youtube.
Add shortcut tooltips in titles.
Make sure tab is focused before handling gampad events.
2019-05-01 22:04:55 -04:00
Carlos Perez
9cb1f3f306 Translated using Weblate (Spanish (Argentina))
Currently translated at 21.6% (315 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-05-01 09:40:42 -04:00
Joshua M. Boniface
8b703187d0 Merge pull request #292 from dkanada/auto
Fix some issues with the user preference page
2019-04-30 23:50:05 -04:00
Joshua M. Boniface
6216aaf937 Merge pull request #271 from dkanada/theme
Remove similar themes with accent changes
2019-04-30 23:49:09 -04:00
Joshua M. Boniface
a80067859d Merge pull request #265 from dkanada/docs
Update links for most of the old documentation
2019-04-30 23:48:36 -04:00
Joshua M. Boniface
8f2c33eaa5 Merge pull request #238 from dkanada/res
Remove unusable assets and update a string reference to connect
2019-04-30 23:47:36 -04:00
Joshua M. Boniface
12589460cf Merge pull request #297 from jellyfin/release-10.3.z
Backmerge for 10.3.2 release
2019-04-30 23:35:40 -04:00
Anthony Lavado
53cfcfd976 Merge pull request #295 from grafixeyehero/round
Add a round progress bar to purple haze theme
2019-04-30 15:25:39 -04:00
Anthony Lavado
d7a0a9b5bc Merge pull request #220 from redSpoutnik/synchronize-subtitles
Add subtitle synchronization on HTML video player
2019-04-30 15:18:55 -04:00
redSpoutnik
4d8ec5b466 Merge branch 'master' into synchronize-subtitles 2019-04-30 20:58:51 +02:00
Joshua M. Boniface
1ba58b06b3 Merge pull request #296 from joshuaboniface/hotfix-pinreset
Fix "Password Reset by PIN" page
2019-04-30 13:07:30 -04:00
Joshua M. Boniface
4ed02a44ac Merge pull request #287 from bugfixin/seek-too-wide
Remove extraneous padding from sliders
2019-04-30 13:02:28 -04:00
Joshua Boniface
6f3b28d7b0 Fix "Password Reset by PIN" page 2019-04-30 12:58:31 -04:00
grafixeyehero
78a780f5c4 Add a round progress bar to purple haze theme 2019-04-30 17:42:23 +03:00
Anthony Lavado
914b270d5e Merge pull request #294 from grafixeyehero/cast-crew-layout
change cast & crew view to horizontal scroller
2019-04-30 02:32:23 -04:00
Jun Wang
d84fec2c02 Translated using Weblate (Chinese (Simplified))
Currently translated at 93.4% (1358 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-04-30 02:25:17 -04:00
qqq-qqqq
d50f57abb1 Translated using Weblate (Chinese (Simplified))
Currently translated at 93.4% (1358 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-04-30 02:25:13 -04:00
QY-Y
c56584d236 Translated using Weblate (Chinese (Simplified))
Currently translated at 93.4% (1358 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-04-30 02:25:05 -04:00
Anthony Lavado
96d4f50b74 Merge pull request #290 from bugfixin/firefox-sliderbubble
Remove outdated Firefox check for slider bubble
2019-04-30 01:54:30 -04:00
Anthony Lavado
d5200f78b6 Merge pull request #272 from dkanada/log
Remove option to enable debug logging
2019-04-29 23:59:31 -04:00
Anthony Lavado
575cf4ff28 Merge pull request #275 from DrPandemic/double-click-to-fullscreen
Add double click to fullscreen
2019-04-29 23:58:29 -04:00
Anthony Lavado
d8bcd9c32d Merge pull request #266 from grafixeyehero/progress-bars
fix rounded progress bars
2019-04-29 23:52:58 -04:00
Anthony Lavado
d33d0ea3e3 Merge pull request #241 from DrPandemic/logout-clean-session
Fix logout session storage
2019-04-29 23:50:35 -04:00
Anthony Lavado
c491731322 Merge pull request #230 from thornbill/fix-scrollbar
Remove unnecessary overflowY changes
2019-04-29 23:42:44 -04:00
Joshua M. Boniface
a6f942a99f Merge pull request #291 from bugfixin/autoplaydetect404
Correct 404 on autoPlayDetect.js
2019-04-29 23:08:46 -04:00
Joshua M. Boniface
30e97eaaaa Merge pull request #277 from dkanada/livetv
Fix a broken Live TV page
2019-04-29 23:07:51 -04:00
grafixeyehero
8039d656af remove border-radius 2019-04-29 22:18:38 +03:00
grafixeyehero
f071e420bd fix bad implementation 2019-04-29 20:59:22 +03:00
Claus Vium
bca2b35d49 Update src/controllers/videoosd.js
Co-Authored-By: DrPandemic <DrPandemic@users.noreply.github.com>
2019-04-28 18:42:12 -04:00
Joshua M. Boniface
099fe24f8a Merge pull request #269 from jellyfin/release-10.3.z
Backmerge 10.3.1
2019-04-27 21:56:47 -04:00
grafixeyehero
5dcbf946f6 remove white scpace 2019-04-27 21:08:39 +03:00
grafixeyehero
6ee9772eca change cast & crew scroller to horizontal 2019-04-27 20:54:57 +03:00
dkanada
588c8c8fc7 fix some issues with the user preference page 2019-04-26 20:39:43 -07:00
bugfixin
02ad6c51af Change reference to correct autoplaydetect file 2019-04-26 23:36:00 +00:00
bugfixin
d9210a7aa1 Remove outdated firefox exception for slider bubble 2019-04-26 23:00:44 +00:00
bugfixin
2cac48cf2b Remove extraneous padding from sliders 2019-04-26 17:51:49 +00:00
dkanada
304ce9ef77 remove similar themes with accent changes 2019-04-25 22:57:36 -07:00
Anthony Lavado
8b5004dda4 Merge pull request #276 from thornbill/fix-text-overflow
Fix text overflow not displaying ellipsis in cards
2019-04-26 00:41:06 -04:00
Anthony Lavado
f86be307ae Merge pull request #251 from grafixeyehero/new-themes
Adding new Purple haze themes with rounded layout
2019-04-25 16:42:50 -04:00
dkanada
6c7d64b4de remove unnecessary route 2019-04-25 11:16:11 -07:00
dkanada
05a1beebaf move livetv controller to the old location 2019-04-25 11:16:01 -07:00
Jean-Samuel Aubry-Guzzi
9c4517957a Add double click to fullscreen 2019-04-25 12:35:28 -04:00
Bill Thornton
ed80f5109c Fix text overflow not displaying ellipsis in cards 2019-04-25 12:21:18 -04:00
grafixeyehero
0c2a5f0c5e aligning the gradient in the header 2019-04-25 17:50:33 +03:00
dkanada
e5885dfd02 remove option to enable debug logging 2019-04-25 00:02:06 -07:00
dkanada
e098fffea8 deminify log page 2019-04-24 23:59:44 -07:00
Bond-009
5f90bee90e Merge pull request #270 from anthonylavado/release-10.3.z
Adds recording button back to view
2019-04-25 07:48:43 +02:00
Anthony Lavado
117614362f Adds recording button back to view
As per @cvium on Matrix, adds the recording button back by changing the selector that makes it visible. Fixes #268.
2019-04-25 01:25:19 -04:00
Bond-009
0a5f08ecb0 Merge pull request #264 from DrPandemic/fix-movie-icons
Fix Thumb rendering without thumbnails
2019-04-23 22:35:39 +02:00
grafixeyehero
3ac33728ec fix rounded progress bars 2019-04-22 21:03:14 +03:00
dkanada
145c4462f7 remove an old page until it gets added to the new docs 2019-04-22 09:29:44 -07:00
dkanada
99a79b62e1 update links for new documentation 2019-04-22 09:29:06 -07:00
dkanada
c3b0f2fea6 move docs to new location and update links for tasks 2019-04-22 09:19:31 -07:00
dkanada
9ee281bfba deminify scheduled tasks page 2019-04-22 09:15:28 -07:00
DrPandemic
df51418753 Prevent the rendering of button inside button 2019-04-22 01:04:02 -04:00
Joshua M. Boniface
97f6808e12 Merge pull request #258 from thornbill/fix-url-validation
Fix server name input type
2019-04-20 15:46:06 -04:00
Joshua M. Boniface
9c85bcd2d0 Merge pull request #257 from cvium/fix_fallback_culture
Load fallback culture before login
2019-04-20 14:56:15 -04:00
Bill Thornton
5493667a6c Fix server name input type
url type is too strict for what should be a host name/address
2019-04-20 14:52:53 -04:00
Claus Vium
bdbc5682db Remove extra semicolon 2019-04-20 20:48:13 +02:00
Claus Vium
b5db89661a Fix fallback culture before login 2019-04-20 20:44:42 +02:00
Bond-009
df3d3bc7d3 Merge pull request #256 from jellyfin/release-10.3.z
Backmerge release 10.3.0
2019-04-20 12:27:46 +02:00
Joshua M. Boniface
874b51234e Merge pull request #253 from joshuaboniface/missing-strings-rebase
Readd missing strings
2019-04-19 14:21:49 -04:00
Joshua Boniface
b3e0c1e6d1 Merge branch 'translations' into release-10.3.z 2019-04-19 14:19:58 -04:00
Libor Filípek
701d867f1b Translated using Weblate (Czech)
Currently translated at 94.3% (1371 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-04-19 13:38:47 -04:00
Libor Filípek
7c38c08592 Translated using Weblate (Czech)
Currently translated at 94.1% (1368 of 1453 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-04-19 13:36:29 -04:00
Joshua M. Boniface
ec8d0de8f1 Merge branch 'release-10.3.z' into translations 2019-04-19 13:00:36 -04:00
Heldenkrieger01
a8a7b7fd64 Translated using Weblate (Swiss German)
Currently translated at 9.8% (223 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gsw/
2019-04-19 12:13:07 -04:00
Facundo Cerezo
0cee5c3d05 Translated using Weblate (Spanish (Mexico))
Currently translated at 96.7% (2192 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-04-19 12:13:02 -04:00
polisaez
0e19f96c0b Translated using Weblate (Spanish (Mexico))
Currently translated at 96.7% (2192 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-04-19 12:13:01 -04:00
Jorge E Garcia
01ca8f9529 Translated using Weblate (Spanish (Mexico))
Currently translated at 96.7% (2192 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-04-19 12:13:00 -04:00
Gabriel Villar
235d340b10 Translated using Weblate (Spanish (Argentina))
Currently translated at 17.4% (396 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-04-19 12:13:00 -04:00
Facundo Cerezo
473d88fdb7 Translated using Weblate (Spanish (Argentina))
Currently translated at 17.4% (396 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-04-19 12:12:50 -04:00
Fernando
0d6df6a308 Translated using Weblate (Spanish)
Currently translated at 96.9% (2197 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-04-19 12:12:19 -04:00
Neyder Achahuanco
df673feda2 Translated using Weblate (Spanish)
Currently translated at 96.9% (2197 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-04-19 12:12:17 -04:00
SaddFox
7e2cb7c77e Translated using Weblate (Slovenian)
Currently translated at 9.4% (214 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-04-19 12:12:15 -04:00
WWWesten
0cf3e0ba34 Translated using Weblate (Kazakh)
Currently translated at 97.6% (2212 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-04-19 12:12:08 -04:00
ZsiGiT
eecaff583a Translated using Weblate (Hungarian)
Currently translated at 93.2% (2111 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-04-19 12:12:07 -04:00
Βασίλης Μουρατίδης
62a79c103a Translated using Weblate (Greek)
Currently translated at 84.8% (1921 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/
2019-04-19 12:12:06 -04:00
Leo Verto
6cc6ad8495 Translated using Weblate (German)
Currently translated at 99.5% (2255 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-04-19 12:12:05 -04:00
TheBird956
1822fe87f7 Translated using Weblate (French (Canada))
Currently translated at 11.1% (253 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/
2019-04-19 12:12:03 -04:00
TheBird956
ca4760f340 Translated using Weblate (French)
Currently translated at 100.0% (2265 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-04-19 12:11:55 -04:00
Samuli Valavuo
f685931d76 Translated using Weblate (Finnish)
Currently translated at 5.0% (114 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-04-19 12:11:55 -04:00
Jort de Bokx
12be040ee8 Translated using Weblate (Dutch)
Currently translated at 92.6% (2099 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-04-19 12:11:52 -04:00
Dan Johansen
b0f23efa90 Translated using Weblate (Danish)
Currently translated at 99.6% (2256 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/
2019-04-19 12:11:49 -04:00
Libor Filípek
73fa3e79b8 Translated using Weblate (Czech)
Currently translated at 94.9% (2150 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-04-19 12:10:45 -04:00
rondadon
641c5dd51a Translated using Weblate (Croatian)
Currently translated at 74.7% (1692 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/
2019-04-19 12:10:12 -04:00
tinganhsu
22626873e3 Translated using Weblate (Chinese (Traditional))
Currently translated at 46.6% (1057 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-04-19 12:10:11 -04:00
grafixeyehero
353cf8fa99 Readd Missing Strings 2019-04-19 12:05:32 -04:00
tinganhsu
94717cbe59 Translated using Weblate (Chinese (Traditional))
Currently translated at 45.7% (1037 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-04-19 00:41:10 -04:00
lostmypillow
28fcffb5c5 Translated using Weblate (Chinese (Traditional))
Currently translated at 45.7% (1037 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-04-19 00:41:07 -04:00
grafixeyehero
a18160ae4b Adding new themes with rounded layout 2019-04-18 01:18:18 +03:00
Joshua M. Boniface
01ee2fca0e Merge pull request #215 from dkanada/css
Fix some minor CSS issues and add the classic themes back
2019-04-16 16:23:24 -04:00
Anthony Lavado
5bd9d56190 Merge pull request #249 from joshuaboniface/hotfix-metadata
Correct edititemmetadata.js script location
2019-04-16 16:22:57 -04:00
Joshua M. Boniface
d90684689a Merge pull request #229 from grafixeyehero/dev
Fix "Password Reset by PIN" page
2019-04-16 16:22:56 -04:00
Anthony Lavado
f9f9a21e71 Merge pull request #245 from grafixeyehero/missing-strings
Add Missing strings "HeaderFavorite..."
2019-04-16 16:22:29 -04:00
Joshua M. Boniface
932d2d93b2 Merge pull request #232 from dkanada/docs
Replace more web archive buttons with new documentation
2019-04-16 16:22:16 -04:00
Joshua Boniface
2ca5c4c10c Update location of edititemmetadata.js 2019-04-16 16:08:40 -04:00
Bond-009
cbd518836b Merge pull request #247 from anthonylavado/fix-manifest
Update the name in Manifest.json
2019-04-16 11:54:38 +02:00
Anthony Lavado
076657bf96 Update the name in Manifest.json
Updates the name in the file to read Jellyfin, and removes the previous
comment.
2019-04-16 02:02:57 -04:00
Samuli Valavuo
88d26451a9 Translated using Weblate (Finnish)
Currently translated at 4.0% (91 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-04-15 01:27:48 -04:00
agrhb
70a6287e09 Translated using Weblate (Finnish)
Currently translated at 4.0% (91 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-04-15 01:27:45 -04:00
grafixeyehero
e52c879215 Sort by name 2019-04-14 00:51:41 +03:00
grafixeyehero
2ef711daf4 Add More Missing Strings 2019-04-14 00:33:46 +03:00
grafixeyehero
bc64f4b99e Readd Missing Strings 2019-04-14 00:28:24 +03:00
Joshua M. Boniface
c8ca46fdbe Merge pull request #244 from jellyfin/dkanada-patch-1
Fix a deminification issue with the plugin page
2019-04-13 16:44:03 -04:00
dkanada
4e6820ca0d Fix a deminification issue with the plugin page 2019-04-13 17:34:15 +01:00
redSpoutnik
0a59b836c0 replace arrow functions by function expresions 2019-04-13 09:17:03 +02:00
DrPandemic
75009450e7 Logout cleans session 2019-04-10 22:40:11 -04:00
dkanada
58dd96bdea remove old require statement for staticbackdrops 2019-04-10 01:07:26 -07:00
dkanada
fa998abfbc update string to remove a connect reference 2019-04-10 00:57:10 -07:00
dkanada
dbca80b0b3 fix error message placement 2019-04-10 00:57:01 -07:00
dkanada
35ef6a4fd5 deminify select server controller 2019-04-10 00:56:41 -07:00
dkanada
266ba6ea99 remove unusable resources from emby repository 2019-04-10 00:56:30 -07:00
Anthony Lavado
e07edea5bf Merge pull request #227 from thornbill/update-input-type
Update add server input type
2019-04-09 21:28:42 -04:00
Anthony Lavado
495534c6d0 Merge pull request #237 from dkanada/controls
Avoid element overlap with music controls
2019-04-09 21:28:20 -04:00
dkanada
85cffe7063 avoid element overlap with music controls 2019-04-09 17:05:01 -07:00
Joshua M. Boniface
00dab1b88c Merge pull request #231 from dkanada/plugin
Improve the plugin catalog and related controllers
2019-04-09 00:33:22 -04:00
Joshua M. Boniface
da96b1120c Merge pull request #235 from dkanada/login
Add check for multiserver on login page
2019-04-08 18:54:59 -04:00
redSpoutnik
415ec9e91b add subtitleSync overlay in separated folder 2019-04-08 20:31:18 +02:00
redSpoutnik
275fd078e2 add showingSubtitle control 2019-04-08 20:21:16 +02:00
dkanada
38e3861e85 add check for multiserver on login page 2019-04-06 23:18:47 -07:00
dkanada
f83bd20fa9 deminify login controller 2019-04-06 23:07:02 -07:00
grafixeyehero
ff48e97262 fix error 2019-04-06 14:32:10 +03:00
dkanada
8e3d5ccd17 fix CI issues 2019-04-06 00:33:18 -07:00
dkanada
4301bb64c6 modify the method used to grab some strings 2019-04-06 00:24:30 -07:00
dkanada
7f4895465d small changes to some strings 2019-04-06 00:24:30 -07:00
dkanada
28a5552d96 remove useless subtitle setting alert dialog 2019-04-06 00:24:30 -07:00
dkanada
ac5b545ce4 remove useless playback settings alert dialog 2019-04-06 00:24:30 -07:00
dkanada
6ca5ad6441 add back classic themes 2019-04-06 00:24:30 -07:00
dkanada
3f4b750288 move list page to the usual location 2019-04-06 00:24:30 -07:00
dkanada
3eec1cf2f7 move device routes to the usual location 2019-04-06 00:24:30 -07:00
dkanada
c0ae6b75e4 replace more web archive buttons with new documentation 2019-04-06 00:23:32 -07:00
dkanada
eb469bd1da deminify add plugin page 2019-04-06 00:17:36 -07:00
dkanada
e4590b4898 fix some broken and unused elements on the plugin pages 2019-04-06 00:17:33 -07:00
dkanada
3b0b5228fe deminify the installed plugin page 2019-04-06 00:17:18 -07:00
Bill Thornton
27c4a005de Remove unnecessary overflowY changes 2019-04-05 23:40:55 -04:00
grafixeyehero
bdc7623216 fix Indentation 2019-04-05 16:26:55 +03:00
grafixeyehero
e0d40e29a3 Fix "Password Reset by PIN" page 2019-04-05 02:02:02 +03:00
Joshua M. Boniface
a90b5d8324 Merge pull request #225 from joshuaboniface/fix-restart-button
Fix restart button API call
2019-04-04 02:32:04 -04:00
Anthony Lavado
36f6500aa3 Merge pull request #226 from nvllsvm/optimize
Optimize images with image_optim
2019-04-04 01:16:30 -04:00
Bill Thornton
18c61a8193 Update add server input type 2019-04-04 00:56:47 -04:00
Andrew Rabert
59ca1caf7d Optimize images with image_optim 2019-04-03 23:01:38 -04:00
Joshua Boniface
8f84b023aa Restart needs to be called with ApiClient 2019-04-03 21:37:26 -04:00
Vasily
79c30b7eee Merge pull request #223 from Froghut/chromecast-hardware-volume-buttons
When playing on Chromecast make volume buttons change chromecast volume
2019-04-03 17:59:53 +03:00
Froghut
4baad878ac when connected to chromecast make thehardware volume buttons change the chromecast device volume + fix volumeUp and columeDown missing var's 2019-04-02 09:43:49 +02:00
Vasily
f6f51d79cc Merge pull request #219 from Froghut/chromecast_volume_fix
Change Chromecast volume instead while casting
2019-04-02 00:33:28 +03:00
Vasily
ac0a640fe0 Merge pull request #222 from Froghut/preserve-chromecast-volume
Remember device volume/mute on Chromecast playback stop
2019-04-02 00:13:34 +03:00
Vasily
1d55d34bba Merge pull request #221 from agrenott/fix_chromcecast
Fix local chromecast play behind reverse proxy
2019-04-02 00:12:48 +03:00
Vasily
ea81fceb40 Merge pull request #217 from grafixeyehero/dev
Re-add missing strings
2019-04-01 22:07:54 +03:00
Aurélien Grenotton
274ef0e532 Fix local chromecast play behind reverse proxy
When using a HTTPS reverse proxy (for eg. traefik in fron of docker
jellyfin), there's no valid advertised local address.
Let's default to external one in such case, relying on the home router
to properly route it internally.
2019-04-01 16:07:56 +02:00
Froghut
82d7b0eefb add fallback defaults to volume/mute if null on playbackstop 2019-04-01 15:40:10 +02:00
Froghut
37f63f6963 add braces for clarification 2019-04-01 15:34:01 +02:00
Vasily
e28b42d40d Merge pull request #218 from vitorsemeano/master
Solve random dark pane over video playing in fullscreen mode
2019-04-01 16:21:22 +03:00
Froghut
49fd86d707 on chromecast playback stop still remember device volume/mute 2019-04-01 14:34:50 +02:00
grafixeyehero
35e63bd9e7 fix Indentation 2019-03-31 19:33:53 +03:00
Froghut
732d8b5e26 When changing volume connected to chromecast change the device volume instead of the jellyfin-player volume 2019-03-31 12:05:54 +02:00
vitorsemeano
e705fb7598 solve dark pane overlay when playing next track 2019-03-30 23:28:42 +00:00
redSpoutnik
b3716dc20b add redSpoutnik to CONTRIBUTORS 2019-03-30 22:29:45 +01:00
redSpoutnik
91241ceea1 Add vtt and ass subtitle-offset in videoplayer 2019-03-30 22:17:09 +01:00
grafixeyehero
e071c2fdcd readd missing strings 2019-03-30 22:10:45 +03:00
dkanada
450a72792f update logindefault to match other icons 2019-03-29 23:52:45 -07:00
dkanada
66d12b6d2d match user menu layout with navigation bar 2019-03-29 23:52:45 -07:00
dkanada
ba1219f78b remove duplicate button to home screen settings 2019-03-29 23:52:45 -07:00
dkanada
658d77c15f make dashboard header uniform size and modify card hover style 2019-03-29 23:52:45 -07:00
dkanada
16faeb05fe remove duplicate button for user preferences 2019-03-29 23:52:45 -07:00
dkanada
b1eae70cae add back cover art on mobile devices 2019-03-29 23:52:45 -07:00
dkanada
25cf88d0f8 remove padding from progress slider 2019-03-29 23:52:45 -07:00
Anthony Lavado
9677981344 Merge pull request #216 from grafixeyehero/dev
remove sync menu from multiselect
2019-03-29 18:55:15 -04:00
Joshua M. Boniface
3cc379d0bf Merge pull request #211 from LogicalPhallacy/passwordresetimprovements
Adds web options to support better password resets
2019-03-29 18:24:55 -04:00
Joshua M. Boniface
37cc900a8e Update src/strings/en-us.json
Co-Authored-By: LogicalPhallacy <44458166+LogicalPhallacy@users.noreply.github.com>
2019-03-29 07:12:15 -07:00
Joshua M. Boniface
c508fb9ff0 Merge pull request #206 from vitorsemeano/webpack_part44
Conversion to webpack - part4 - module resolution, appStorage refactor, minor cleanup
2019-03-28 23:10:53 -04:00
vitorsemeano
5ff34f5eb4 removed unecessary file page.js from components 2019-03-28 22:40:36 +00:00
vitorsemeano
67f04532be fix minor bug for listItemImage background sizing 2019-03-28 22:40:36 +00:00
vitorsemeano
ac13bcb43e force emby-button load before routes 2019-03-28 22:40:36 +00:00
vitorsemeano
7a5d66c792 refactor fullscreenManager suggested by JustAMan 2019-03-28 22:40:36 +00:00
vitorsemeano
02c5fd688f removed old duplicate files for viewmanager 2019-03-28 22:39:10 +00:00
vitorsemeano
b3e6d6a835 add missing emby-button dependency for addplugin 2019-03-28 21:41:01 +00:00
vitorsemeano
4013ac8c8f removed duplicate emby-button module as dependency 2019-03-28 21:41:01 +00:00
vitorsemeano
b8cdb3d94e removed old dialoghelper 2019-03-28 21:41:01 +00:00
vitorsemeano
ad813701c5 fix eslint error for appRouter module 2019-03-28 21:41:01 +00:00
vitorsemeano
c42ac7e650 remove emby-linkbutton requires 2019-03-28 21:41:01 +00:00
vitorsemeano
f783509e33 rename dialoghelper to dialogHelper 2019-03-28 21:41:01 +00:00
vitorsemeano
2b9559b4a9 resolve typo for viewContainer dep 2019-03-28 21:41:00 +00:00
vitorsemeano
258cea0b81 rename viewmanager to viewManager 2019-03-28 21:41:00 +00:00
vitorsemeano
d751ff2c19 module resolution for htmlMediaHelper 2019-03-28 21:41:00 +00:00
vitorsemeano
7253406177 module resolution for images modules 2019-03-28 21:41:00 +00:00
vitorsemeano
f56a82b800 module resolution for loading, page and playerSelectionMenu 2019-03-28 21:41:00 +00:00
vitorsemeano
52af8d487e module resolution for scroller 2019-03-28 21:35:32 +00:00
vitorsemeano
d57629d90f module resolution for serverNotifications 2019-03-28 21:35:32 +00:00
vitorsemeano
ba89941fce module resolution for toast and serverRestartDialog 2019-03-28 21:35:32 +00:00
vitorsemeano
578a1670f4 module resoltion for viewContainer 2019-03-28 21:35:32 +00:00
vitorsemeano
a03502646c bug fixes for headroom 2019-03-28 21:35:32 +00:00
vitorsemeano
4a5fc817fb module resolution for viewManager 2019-03-28 21:35:32 +00:00
vitorsemeano
1ba0c7501e remove debugger from loginpage.js 2019-03-28 21:35:32 +00:00
vitorsemeano
00c875b893 module resolution for headroom 2019-03-28 21:35:31 +00:00
vitorsemeano
86c19ee4a3 module resolution for fullscreenManager 2019-03-28 21:35:31 +00:00
vitorsemeano
e0ac97c109 remove duplicated component viewcontainer-lite 2019-03-28 21:35:31 +00:00
vitorsemeano
ecf316d671 removed polyfill fetch 2019-03-28 21:35:31 +00:00
vitorsemeano
c2555d071d added package.json for modules resolution 2019-03-28 21:35:31 +00:00
vitorsemeano
afde8bebe7 removed module emby-linkbutton: same as emby-button 2019-03-28 21:35:31 +00:00
vitorsemeano
93c5157b1e refactor and module resolution for appStorage 2019-03-28 21:35:31 +00:00
Phallacy
dcbdd9957e Merge branch 'passwordresetimprovements' of https://github.com/LogicalPhallacy/jellyfin-web into passwordresetimprovements 2019-03-27 22:51:33 -07:00
Phallacy
18af617c74 minor fixes 2019-03-27 22:51:27 -07:00
Vasily
6c3814f014 Apply suggestions from code review
Co-Authored-By: LogicalPhallacy <44458166+LogicalPhallacy@users.noreply.github.com>
2019-03-27 13:42:01 -07:00
Joshua M. Boniface
535f3dbbad Merge pull request #205 from dkanada/eslint
Move assets and third party libs out of components and update some strings
2019-03-27 16:28:48 -04:00
Vasily
e01feca025 Deuglify
Co-Authored-By: LogicalPhallacy <44458166+LogicalPhallacy@users.noreply.github.com>
2019-03-27 10:02:48 -07:00
Bond-009
2b6865b0bd Merge pull request #214 from tbraeutigam/NativeShell-Filesystem-Fallback
Fix Issue #213 - Direct Playback broken in Chrome 73
2019-03-27 15:46:43 +01:00
Thorben Bräutigam
521f09f79f Fix Issue #213 2019-03-27 15:38:37 +01:00
Phallacy
82e0a2f7da replaces a duplicate anthonylavado with me 2019-03-25 22:43:32 -07:00
Phallacy
24ed198960 adds strings and a link on the password reset page 2019-03-25 22:41:16 -07:00
LogicalPhallacy
78ca7e48d1 Merge pull request #3 from LogicalPhallacy/master
update to current master
2019-03-25 22:21:38 -07:00
LogicalPhallacy
deeb7f9475 Merge pull request #2 from jellyfin/master
Merge pull request #190 from LogicalPhallacy/master
2019-03-25 22:19:47 -07:00
dkanada
518ed623e2 fix eslint ci error 2019-03-25 15:18:13 -07:00
Joshua M. Boniface
2996cd7d28 Merge pull request #190 from LogicalPhallacy/master
Add setting to support configurable user lockout
2019-03-25 11:02:27 -04:00
Phallacy
0fe1d350e6 removes useless connectlinktype check 2019-03-25 00:30:45 -07:00
dkanada
6b1908227f update transcode path strings 2019-03-24 23:50:01 -07:00
dkanada
ef3166143a add custom strings for system info panel on dashboard 2019-03-24 23:50:01 -07:00
Vasily
4144d929e7 Apply suggestions from code review
adding justaman's fixes

Co-Authored-By: LogicalPhallacy <44458166+LogicalPhallacy@users.noreply.github.com>
2019-03-23 23:47:31 -07:00
dkanada
92555c36ce remove unused string 2019-03-23 22:25:19 -07:00
dkanada
9a6f0a12c8 move server name setting to general page 2019-03-23 22:25:19 -07:00
dkanada
3b576be5f0 move some links to the new documentation 2019-03-23 22:25:18 -07:00
dkanada
ed812281bc update some old string references 2019-03-23 22:25:18 -07:00
dkanada
4df59cc345 move thirdparty libs and assets out of components folder 2019-03-23 22:25:18 -07:00
dkanada
c1649d6e65 fix theme videos option always enabled 2019-03-23 22:25:18 -07:00
dkanada
161892a54e create new directory for image assets 2019-03-23 22:25:18 -07:00
Joshua M. Boniface
fe71fc31c4 Merge branch 'master' into master 2019-03-24 01:01:55 -04:00
Joshua M. Boniface
9aa027dcfb Merge pull request #188 from vitorsemeano/webpack_part3
Conversion to webpack - part3 - routes isolation, module resolution, refactoring appStorage
2019-03-24 00:56:39 -04:00
vitorsemeano
4a4a9fb1de removed unused dlnaserversettings route 2019-03-22 23:49:37 +00:00
vitorsemeano
b4257bfda8 optimizing defineRoute in routes.js 2019-03-22 23:48:38 +00:00
vitorsemeano
cc0e19c6bd fix identation for routes.js 2019-03-22 23:48:38 +00:00
vitorsemeano
a5278f3b78 manual deuglify for appStorage 2019-03-22 23:47:37 +00:00
vitorsemeano
c3c035a7d7 code optimization for removeItem from appStorage 2019-03-22 23:47:37 +00:00
vitorsemeano
0b71b0b493 fixed some bugs with merge from upstream 2019-03-22 23:47:19 +00:00
vitorsemeano
5b26405c06 added a bunch of modules main package.json 2019-03-22 23:46:22 +00:00
vitorsemeano
183528cf72 added finally for request that made loading spin forever on start 2019-03-22 23:46:22 +00:00
vitorsemeano
c7ea132f07 hide loading even if connection fails at start 2019-03-22 23:46:22 +00:00
vitorsemeano
468b9e881b module reoslution for backdrop 2019-03-22 23:46:22 +00:00
vitorsemeano
f54a751a9d module resolution for autoPlayDetect 2019-03-22 23:46:22 +00:00
vitorsemeano
32d9a1549d removed all unecessary polifys 2019-03-22 23:45:45 +00:00
vitorsemeano
9ad29733bf refactor and module resolution for appStorage 2019-03-22 23:44:33 +00:00
vitorsemeano
be505da8ac cleanup and module resolution in webpack for skinManager 2019-03-22 23:44:07 +00:00
vitorsemeano
9c758a8d85 module resolution for appRouter and moved controllers to dir 2019-03-22 23:43:05 +00:00
vitorsemeano
d49fee2a29 single module resolution for apiclient 2019-03-22 23:40:10 +00:00
grafixeyehero
7ab37b21a5 remove sync menu 2019-03-23 02:16:02 +03:00
Phallacy
dba9b60800 added ui stuff for password reset pr 2019-03-22 00:12:01 -07:00
Joshua M. Boniface
ae828f76a3 Merge pull request #204 from nvllsvm/mine
Fix CI
2019-03-22 00:17:20 -04:00
Andrew Rabert
304691c197 Fix missing exec permission 2019-03-21 22:43:11 -04:00
Joshua M. Boniface
85a7b34d92 Merge pull request #197 from vitorsemeano/cleanupcordovamodules
Cleanup cordova modules - webpack fix
2019-03-21 21:18:56 -04:00
vitorsemeano
ad5d9be566 add comment for init conversion into timeupdate 2019-03-21 21:54:36 +00:00
vitorsemeano
e82bd8b744 merge from upstream 2019-03-21 21:46:55 +00:00
Vasily
23d4d30d33 Merge pull request #203 from dkanada/strings
Remove all unused strings from translation files
2019-03-21 23:44:58 +03:00
dkanada
381ee59b9e remove all unreferenced strings 2019-03-21 13:14:32 -07:00
dkanada
4cbe81e971 remove unused strings from #178 2019-03-21 13:12:20 -07:00
Joshua M. Boniface
5864c0f5fd Merge pull request #172 from dkanada/webpath
Add web path as config option
2019-03-21 09:06:50 -04:00
Joshua M. Boniface
37cb47aea5 Merge pull request #202 from dkanada/sync
remove sync and registration services
2019-03-21 09:06:14 -04:00
dkanada
ab6ed3037e minor changes to recording fields 2019-03-20 16:01:28 -07:00
dkanada
bf95e6016f apply suggestions from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-03-20 14:48:59 -07:00
Vasily
22649b66a6 Apply suggestions from JustAMan code review
https://www.youtube.com/watch?v=-CmadmM5cOk

Co-Authored-By: LogicalPhallacy <44458166+LogicalPhallacy@users.noreply.github.com>
2019-03-19 23:12:23 -07:00
dkanada
65fafe9c58 remove registration services 2019-03-19 17:03:51 -07:00
dkanada
886dec1174 remove all sync and convert buttons 2019-03-19 17:03:47 -07:00
dkanada
ae7b8d59f2 remove web path modify option 2019-03-18 22:58:48 -07:00
vitorsemeano
e8e098f9b1 removed nativelshell sync invokation 2019-03-18 23:08:11 +00:00
Joshua M. Boniface
1ae37fea1b Merge pull request #196 from jellyfin/fix_promise
Return inner promise in createConnectionManager
2019-03-17 20:00:59 -04:00
Anthony Lavado
e5e9f5ebbc Merge pull request #195 from cvium/rename_nb
Remove no to nb
2019-03-17 19:52:23 -04:00
vitorsemeano
657e88d07e Merge branch 'master' into cleanupcordovamodules 2019-03-17 23:36:03 +00:00
vitorsemeano
19cb905d5a removed require for cordova apphost 2019-03-17 23:23:59 +00:00
vitorsemeano
c4ada25fe7 nativeshell API added to apphost 2019-03-17 23:23:45 +00:00
vitorsemeano
8315f4a2d4 invert some conditions for readability in apphost 2019-03-17 22:02:24 +00:00
vitorsemeano
9967edcb35 deuglify apphost.js 2019-03-17 21:52:56 +00:00
vitorsemeano
91ef01cbc0 removed require for cordova externalPlayer 2019-03-17 21:42:36 +00:00
Claus Vium
447ec2c3ab Return inner promise in init require 2019-03-17 22:24:49 +01:00
Claus Vium
e29b0be9fd Remove no to nb 2019-03-17 22:13:56 +01:00
Phallacy
dab41fe6e1 made the main save and load methods that I modified more legible 2019-03-17 01:13:12 -07:00
Joshua M. Boniface
c14dab4c8d Merge pull request #189 from vitorsemeano/master
Fix require apiInput
2019-03-17 01:58:15 -04:00
vitorsemeano
01d82010ed cleanup for mediaSession require 2019-03-17 00:32:15 +00:00
vitorsemeano
e4c7282b92 refactor mediaSession to support NativeShell API 2019-03-17 00:31:56 +00:00
vitorsemeano
7fc4165b53 remove some require modules of cordova 2019-03-16 22:56:55 +00:00
vitorsemeano
01d38d04ba removed require for module cordova filedownloader 2019-03-16 21:49:05 +00:00
vitorsemeano
071963ec5a added nativeshell API to filedownloader module 2019-03-16 21:48:44 +00:00
vitorsemeano
856d87a9b2 clean filerepository and transfermanager requires 2019-03-16 21:21:40 +00:00
vitorsemeano
8b6b9974c7 removed require for cordova appshortcuts 2019-03-16 19:34:19 +00:00
vitorsemeano
164bba2faf removed require for module cordova localsync 2019-03-16 19:26:30 +00:00
vitorsemeano
a77058de61 added NativeShell API to localsync module 2019-03-16 19:25:46 +00:00
vitorsemeano
e39d364874 removed require module for cordova imagestore 2019-03-16 19:20:38 +00:00
vitorsemeano
42beea23b6 removed require for module cordova filesystem 2019-03-16 19:19:24 +00:00
vitorsemeano
e13796e4f3 add NativeShell API to filesystem module 2019-03-16 19:19:00 +00:00
vitorsemeano
5cc1821e12 remove require for module cordova chromecast 2019-03-16 18:26:42 +00:00
vitorsemeano
d8d3b0b4c7 remove unused module wakeonlan 2019-03-16 18:21:07 +00:00
vitorsemeano
c22ad0f204 removing require for module cordova shell 2019-03-16 18:13:26 +00:00
vitorsemeano
3de82f210a using NativeShell api for native apps in shell.js 2019-03-16 18:11:46 +00:00
vitorsemeano
bd17f06708 fix require apiInput to serverNotifications 2019-03-16 17:51:24 +00:00
vitorsemeano
60c0e58c64 removed serverdiscovery module 2019-03-16 17:16:11 +00:00
vitorsemeano
04480fc8eb removed serverdiscovery require 2019-03-16 17:15:59 +00:00
vitorsemeano
4be8a788b0 assume server discovery is in NativeShell api 2019-03-16 17:15:37 +00:00
vitorsemeano
c391eaf545 removing module fileupload 2019-03-16 16:52:49 +00:00
vitorsemeano
c2d35ee599 removing require for module file upload 2019-03-16 16:52:41 +00:00
vitorsemeano
9e38eeeb16 removing nativedirectorychooser require 2019-03-16 16:50:51 +00:00
Joshua M. Boniface
82f171e99a Merge pull request #187 from dkanada/eslint
Add CI for eslint
2019-03-16 11:00:08 -04:00
Joshua M. Boniface
e6e38adebe Merge pull request #177 from vitorsemeano/webpack_part22
Conversion to webpack - part2 - emby-webcomponents into components and module naming resolution
2019-03-16 10:59:36 -04:00
vitorsemeano
c5bbc81cab Merge branch 'master' into webpack_part22 2019-03-16 14:06:18 +00:00
dkanada
e38a34384a add ci for eslint 2019-03-16 01:55:47 -07:00
Phallacy
570161efbd more tweaking for style 2019-03-16 00:53:27 -07:00
Phallacy
64feb7fdf7 made the styling more consistent 2019-03-16 00:48:20 -07:00
Phallacy
8d3027d100 added settings to support configurable lockout 2019-03-16 00:18:17 -07:00
Vasily
32290a7cd0 Merge pull request #178 from lostmypillow/master
Remove unused localization strings (updated)
2019-03-15 15:55:53 +03:00
vitorsemeano
9dde221c07 remove forced volumeosd load for edge 2019-03-14 23:40:56 +00:00
lostmypillow
f95018e809 Added back DLNA string 2019-03-14 16:11:52 -05:00
dkanada
ca9e5d83bf remove write check and add warning to the description 2019-03-14 00:05:45 -07:00
Joshua M. Boniface
770a3a1626 Merge pull request #181 from joshuaboniface/fix-syntax-error
Correct syntax error in networkPath
2019-03-13 21:59:07 -04:00
Joshua M. Boniface
f53f11b4da Merge pull request #180 from vitorsemeano/fix_apphost_type
Apply typo fix for apphost
2019-03-13 21:43:15 -04:00
Joshua Boniface
f698ba1f39 Correct syntax error in networkPath 2019-03-13 21:34:58 -04:00
vitorsemeano
70d66f6455 remove unecessary var for onwebcomponentsready 2019-03-13 23:22:17 +00:00
vitorsemeano
8234f189a0 fix bug apphost naming resolution 2019-03-13 23:08:23 +00:00
lostmypillow
03ef8f310d Translated using Weblate (Chinese (Traditional))
Currently translated at 31.0% (704 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-03-13 10:00:51 -04:00
lostmypillow
ceafa313cd Remove unused localization strings
Improved version of original PR
2019-03-12 23:13:41 -05:00
vitorsemeano
44fe392912 rename embyWebComponentsBower to components 2019-03-12 23:28:26 +00:00
vitorsemeano
6cbd26531c fix bug apphost naming resolution 2019-03-12 22:49:13 +00:00
vitorsemeano
1cb487b9a3 merge from upstream 2019-03-12 21:41:46 +00:00
vitorsemeano
093a9b1ebd merge from upstream 2019-03-12 21:41:16 +00:00
Vasily
65aec76e06 Merge pull request #162 from vitorsemeano/webpack_part1
Convertion to webpack - part1 - npm and dynamic module resolution for site.js
2019-03-13 00:03:47 +03:00
vitorsemeano
4fefa4f9b6 update branch with upstream 2019-03-12 21:00:35 +00:00
Vasily
e08d7256a7 Merge pull request #175 from anthonylavado/link-fix
Update the translation help link
2019-03-12 22:29:39 +03:00
Anthony Lavado
1fa4307b62 Update translation help link
Updates the link after the docs reorganization that happened.
2019-03-12 15:16:28 -04:00
Joshua M. Boniface
5d9973371b Merge pull request #170 from jellyfin/translations
Updated translations
2019-03-12 14:50:22 -04:00
dkanada
9d462263b9 add web path as config option 2019-03-11 21:31:33 -07:00
Joshua M. Boniface
96e4296256 Merge pull request #168 from dkanada/settings
Lots of changes to the server configuration pages
2019-03-11 23:37:14 -04:00
dkanada
487ba61a42 remove open subtitles page from dashboard 2019-03-11 15:58:44 -07:00
vitorsemeano
023a1ed72f TODO for url prefix support investigation 2019-03-11 20:52:12 +00:00
Vasily
a0e9e59e0f Merge pull request #171 from cvium/fix_playback_order
Sort item results in the same order as requested
2019-03-11 15:38:21 +03:00
Claus Vium
5ce13990b6 Add some extra null handling just in case 2019-03-11 08:30:36 +01:00
Claus Vium
9ba1961a0c Sort item results in the same order as requested 2019-03-11 08:24:26 +01:00
WWWesten
531d3b0502 Translated using Weblate (Ukrainian)
Currently translated at 7.0% (160 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/
2019-03-10 03:07:25 -04:00
WWWesten
5223f7263c Translated using Weblate (Turkish)
Currently translated at 16.8% (382 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-03-10 03:07:24 -04:00
WWWesten
7cf59abb9e Translated using Weblate (Swiss German)
Currently translated at 8.3% (189 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gsw/
2019-03-10 03:07:24 -04:00
WWWesten
0a11946006 Translated using Weblate (Swedish)
Currently translated at 91.9% (2082 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-03-10 03:07:24 -04:00
WWWesten
425853a3f9 Translated using Weblate (Spanish (Mexico))
Currently translated at 96.4% (2185 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/
2019-03-10 03:07:24 -04:00
WWWesten
2bdae52228 Translated using Weblate (Spanish (Argentina))
Currently translated at 5.6% (127 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-03-10 03:07:23 -04:00
Herman Besel
b2a50b7f05 Translated using Weblate (Spanish (Argentina))
Currently translated at 5.6% (127 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-03-10 03:07:23 -04:00
WWWesten
46594040e9 Translated using Weblate (Spanish)
Currently translated at 96.0% (2176 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-03-10 03:07:16 -04:00
WWWesten
c203b7c3fb Translated using Weblate (Romanian)
Currently translated at 14.9% (339 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2019-03-10 03:07:16 -04:00
WWWesten
a672a5c0f9 Translated using Weblate (Polish)
Currently translated at 97.8% (2216 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2019-03-10 03:07:16 -04:00
WWWesten
3aea684f0a Translated using Weblate (Malay)
Currently translated at 4.5% (102 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ms/
2019-03-10 03:07:15 -04:00
WWWesten
c6706d436a Translated using Weblate (Lithuanian)
Currently translated at 33.2% (754 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-03-10 03:07:15 -04:00
WWWesten
76fa3e86f9 Translated using Weblate (Korean)
Currently translated at 59.4% (1347 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-03-10 03:07:15 -04:00
WWWesten
586ab88d02 Translated using Weblate (Kazakh)
Currently translated at 97.6% (2212 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-03-10 03:07:15 -04:00
WWWesten
8df353f8ac Translated using Weblate (Indonesian)
Currently translated at 2.7% (63 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/
2019-03-10 03:07:14 -04:00
WWWesten
8626692ed7 Translated using Weblate (Icelandic)
Currently translated at 2.4% (56 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/is/
2019-03-10 03:07:14 -04:00
WWWesten
3592641bf7 Translated using Weblate (Hungarian)
Currently translated at 92.9% (2106 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-03-10 03:07:13 -04:00
ZsiGiT
8d6d258928 Translated using Weblate (Hungarian)
Currently translated at 92.9% (2106 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-03-10 03:07:13 -04:00
WWWesten
f8933cf445 Translated using Weblate (Hebrew)
Currently translated at 32.4% (734 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2019-03-10 03:06:31 -04:00
WWWesten
fc84426c49 Translated using Weblate (German)
Currently translated at 98.7% (2236 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-03-10 03:06:31 -04:00
TheBird956
90512ee28e Translated using Weblate (French (Canada))
Currently translated at 9.0% (206 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/
2019-03-10 03:06:30 -04:00
WWWesten
54267a4d6f Translated using Weblate (Danish)
Currently translated at 80.5% (1824 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/
2019-03-10 03:06:24 -04:00
WWWesten
20ae688f05 Translated using Weblate (Czech)
Currently translated at 86.0% (1949 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-03-10 03:06:24 -04:00
WWWesten
a8b9b9426a Translated using Weblate (Croatian)
Currently translated at 74.3% (1685 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/
2019-03-10 03:06:24 -04:00
WWWesten
42b7625715 Translated using Weblate (Chinese (Simplified))
Currently translated at 94.1% (2133 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-03-10 03:06:23 -04:00
Matsuri
75a8ed2318 Translated using Weblate (Chinese (Simplified))
Currently translated at 94.1% (2133 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-03-10 03:06:23 -04:00
WWWesten
5acb2ac11e Translated using Weblate (Chinese (Hong Kong))
Currently translated at 24.2% (550 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/
2019-03-10 03:06:22 -04:00
WWWesten
443cbba7be Translated using Weblate (Belarusian)
Currently translated at 1.6% (37 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/
2019-03-10 03:06:21 -04:00
WWWesten
78a7632583 Translated using Weblate (Arabic)
Currently translated at 70.2% (1592 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/
2019-03-10 03:06:21 -04:00
Joshua M. Boniface
84f2315e27 Merge pull request #144 from grafixeyehero/dev
Add top offset and bottom offset margins in emby-scrollbuttons
2019-03-10 01:57:45 -05:00
Joshua M. Boniface
7bd77a5ce1 Merge pull request #128 from ploughpuff/ffmpeg
Always show FFmpeg path in Transcoding page
2019-03-10 01:53:32 -05:00
dkanada
cd13be84fc revert network share path changes 2019-03-10 07:06:28 +09:00
vitorsemeano
a0e45f7809 ensure that appHost is loaded on onAppReady for all function 2019-03-09 17:35:38 +00:00
dkanada
326d9f9adf fix title capitalization 2019-03-09 11:48:31 +09:00
dkanada
c7a8076438 mirror the metadata manager in the user preference menu 2019-03-09 11:45:48 +09:00
dkanada
90290d30db fix some other code clarity issues 2019-03-09 11:40:10 +09:00
Claus Vium
6565ec4009 Update src/scripts/encodingsettings.js
Co-Authored-By: ploughpuff <33969763+ploughpuff@users.noreply.github.com>
2019-03-08 09:25:45 +00:00
Claus Vium
36a0df3c7d Update src/scripts/encodingsettings.js
Co-Authored-By: ploughpuff <33969763+ploughpuff@users.noreply.github.com>
2019-03-08 09:15:19 +00:00
Claus Vium
b9d21084f0 Update src/scripts/encodingsettings.js
Co-Authored-By: ploughpuff <33969763+ploughpuff@users.noreply.github.com>
2019-03-08 09:15:12 +00:00
Vasily
06d2154434 apply suggestions from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-03-07 22:00:13 +00:00
Vasily
62bb9f8721 Update src/scripts/encodingsettings.js
Co-Authored-By: ploughpuff <33969763+ploughpuff@users.noreply.github.com>
2019-03-07 21:19:21 +00:00
dkanada
14005d6c63 comment out multiserver and add check in navigation drawer 2019-03-06 19:13:44 +09:00
dkanada
f3e07e1531 move network share path out of directory browser component 2019-03-06 18:53:31 +09:00
dkanada
74eabd2af9 fix js crash from missing method and deminification 2019-03-06 18:18:49 +09:00
dkanada
579fbe90c8 remove appservices page in favor of plugin catalog 2019-03-06 17:53:44 +09:00
dkanada
07673d0ae6 remove a dead setting from dlna page 2019-03-06 16:43:39 +09:00
dkanada
c1e09008d6 delete section for top plugins by install count 2019-03-06 16:22:40 +09:00
vitorsemeano
8be5c9e987 Merge branch 'master' into webpack_part1 2019-03-05 22:40:28 +00:00
Bond-009
44e16c77a8 Merge pull request #166 from jellyfin/release-10.2.z
Better progressive playback controls of bottom pages (#164)
2019-03-05 20:29:13 +01:00
vitorsemeano
6046ad3dac optimization added to resolve specific urls 2019-03-05 19:10:03 +00:00
vitorsemeano
ec18360958 removed deadcode for registerServiceWorker 2019-03-05 18:52:53 +00:00
dkanada
6ffd74b9dd fix syntax issue 2019-03-05 21:59:52 +09:00
dkanada
f1b34bdb57 remove old and unused settings 2019-03-05 21:43:27 +09:00
dkanada
467808a6a7 include new setting in form load and submit 2019-03-05 21:42:40 +09:00
dkanada
141ff8887f more deminification 2019-03-05 21:42:40 +09:00
dkanada
44ba7a5cc4 deminification and move metadata path setting 2019-03-05 21:42:22 +09:00
dkanada
3def2a935d move metadata manager to navbar and out of server configuration 2019-03-05 20:42:12 +09:00
vitorsemeano
cb1309bb09 Merge branch 'webpack_part1' of github.com:vitorsemeano/jellyfin-web into webpack_part1 2019-03-04 20:47:05 +00:00
vitorsemeano
7e22a64238 merging ifs 2019-03-04 20:47:00 +00:00
Claus Vium
64c3c15af4 Update src/scripts/site.js
Co-Authored-By: vitorsemeano <vitorsemeano@gmail.com>
2019-03-04 20:45:44 +00:00
Claus Vium
8d7fa1557f Update src/scripts/site.js
Co-Authored-By: vitorsemeano <vitorsemeano@gmail.com>
2019-03-04 20:45:19 +00:00
Claus Vium
ff07a77133 Update src/scripts/site.js
Co-Authored-By: vitorsemeano <vitorsemeano@gmail.com>
2019-03-04 20:44:27 +00:00
Claus Vium
6a15acb310 Update src/scripts/site.js
well the tool can't make all the coding, am i right?

Co-Authored-By: vitorsemeano <vitorsemeano@gmail.com>
2019-03-04 20:43:37 +00:00
Claus Vium
1dd3096f37 Update src/scripts/site.js
i agree, definitely more readable

Co-Authored-By: vitorsemeano <vitorsemeano@gmail.com>
2019-03-04 20:40:13 +00:00
vitorsemeano
e60da6b545 renamed strange variable names 2019-03-04 20:38:39 +00:00
vitorsemeano
b50647f101 fix nested if else not done properly with deuglify 2019-03-04 20:36:51 +00:00
vitorsemeano
0fe01a85c4 Merge branch 'webpack_part1' of github.com:vitorsemeano/jellyfin-web into webpack_part1 2019-03-04 20:30:46 +00:00
vitorsemeano
5a258d6522 adjust var declarations for some specific cases 2019-03-04 20:30:42 +00:00
Claus Vium
24ae3a9c49 Update src/scripts/site.js
updating as suggested

Co-Authored-By: vitorsemeano <vitorsemeano@gmail.com>
2019-03-04 20:27:29 +00:00
Claus Vium
9878cfc012 Update src/scripts/site.js
It's really a matter of preference, but if you want it this way, np.

Co-Authored-By: vitorsemeano <vitorsemeano@gmail.com>
2019-03-04 20:25:42 +00:00
Anthony Lavado
36ab9764ac Merge pull request #163 from jellyfin/release-10.2.z
Backmerge for 10.2.2
2019-03-04 01:19:09 -05:00
Deniz
3ece0d5ba0 Translated using Weblate (Turkish)
Currently translated at 16.8% (382 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-02-28 23:14:52 -05:00
ElFantasma
809b047025 Translated using Weblate (Spanish (Argentina))
Currently translated at 3.5% (80 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-02-28 23:14:50 -05:00
SaddFox
34e24a7f81 Translated using Weblate (Slovenian)
Currently translated at 7.1% (163 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-02-28 23:14:46 -05:00
WWWesten
0933726e90 Translated using Weblate (Russian)
Currently translated at 99.5% (2255 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-02-28 23:14:38 -05:00
v1tin
86d362725d Translated using Weblate (Portuguese (Brazil))
Currently translated at 97.1% (2201 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-02-28 23:14:38 -05:00
WWWesten
d70a69c4f7 Translated using Weblate (Norwegian Bokmål)
Currently translated at 80.4% (1822 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-02-28 23:14:29 -05:00
EffeF
96b00e7942 Translated using Weblate (Italian)
Currently translated at 94.4% (2139 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-02-28 23:14:29 -05:00
ZsiGiT
72e13be935 Translated using Weblate (Hungarian)
Currently translated at 80.3% (1819 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-02-28 23:14:28 -05:00
Leo Verto
6d7c55382b Translated using Weblate (German)
Currently translated at 98.7% (2236 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-02-28 23:14:11 -05:00
TheBird956
7b9aa42a52 Translated using Weblate (French (Canada))
Currently translated at 7.3% (166 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/
2019-02-28 23:14:11 -05:00
TheBird956
3e12354bba Translated using Weblate (French)
Currently translated at 100.0% (2265 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-02-28 23:14:02 -05:00
Luclu7
15512b5073 Translated using Weblate (French)
Currently translated at 100.0% (2265 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-02-28 23:14:02 -05:00
lostmypillow
ec2f8f31ec Translated using Weblate (Chinese (Traditional))
Currently translated at 27.9% (632 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-02-28 23:14:02 -05:00
littmean
d1a4d145c0 Translated using Weblate (Chinese (Simplified))
Currently translated at 93.7% (2124 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-02-28 23:13:39 -05:00
PloughPuff
037059f59d Use EncoderAppPathDisplay to populate encoder path field 2019-02-28 22:10:49 +00:00
PloughPuff
ba2c777772 Always show FFmpeg path in Transcoding page
Removed the 'hide' and 'required' settings from the html to always show the FFmpeg path to user and also allow user to remove a custom path and return to using whatever is available from system $PATH.
2019-02-28 22:08:37 +00:00
vitorsemeano
0b099806a7 fix merge conflicts 2019-02-28 21:41:24 +00:00
vitorsemeano
bf408ae9aa merge with updates from upstream 2019-02-28 18:31:53 +00:00
Joshua M. Boniface
8f03439b7e Merge pull request #159 from dkanada/plugin
remove some deprecated plugin code
2019-02-26 16:22:49 -05:00
Vasily
bb118a5ae8 add suggested changes from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-02-26 21:12:58 +00:00
dkanada
32a8e89420 use normal method for getAvailablePlugins 2019-02-27 06:11:42 +09:00
dkanada
3f7ca1d915 clean up plugin catalog page 2019-02-26 03:15:12 +09:00
dkanada
2dd44178fa remove plugin configuration block for android devices 2019-02-26 02:56:18 +09:00
dkanada
fa8eb4f34d method deminification 2019-02-26 02:39:58 +09:00
Mickaël Bernardini
335f64cc22 Translated using Weblate (French)
Currently translated at 100.0% (2265 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-02-24 08:52:57 -05:00
Luclu7
c9fed0c609 Translated using Weblate (French)
Currently translated at 100.0% (2265 of 2265 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-02-24 08:52:53 -05:00
vitorsemeano
e45e8d3f00 add missing package.json for module actionsheet 2019-02-23 19:34:50 +00:00
vitorsemeano
3dba261ae7 define apiInput as a module for webpack 2019-02-23 19:34:34 +00:00
vitorsemeano
2665923bb0 merged alert and nativeAlert for webpack 2019-02-23 19:14:56 +00:00
vitorsemeano
8e1c56adf5 removed bower_components from .gitignore 2019-02-23 18:26:35 +00:00
vitorsemeano
6ddc62857d move emby-webcomponents to components and reflect paths 2019-02-23 18:05:42 +00:00
vitorsemeano
e91cbf8438 add directory dist to .gitignore 2019-02-23 17:12:41 +00:00
vitorsemeano
e272b12755 refactor dynamic require dependencies for webpack 2019-02-23 17:12:14 +00:00
vitorsemeano
427c9d2036 deuglify and indent to 4 spaces site.js 2019-02-23 16:38:53 +00:00
Bond-009
e9240a0114 Merge pull request #153 from sparky8251/improve-typing
Make types more consistent
2019-02-23 10:37:30 -05:00
Sparky
802bb3a757 Make types more consistent
There is no instance I can find where these values are ever *actually* strings. Changing them to boolean improves consistency.
2019-02-23 10:29:42 -05:00
vitorsemeano
f5c2a331b0 changed package.json for initial version 0.0.0 2019-02-20 22:18:56 +00:00
vitorsemeano
7f407f9691 added weback and webpack-cli as dev dependencies 2019-02-20 22:17:26 +00:00
vitorsemeano
4dd77a24ab added package.json with yarn init 2019-02-20 22:15:40 +00:00
Joshua M. Boniface
ec5a3b6e5e Merge pull request #149 from jellyfin/release-10.2.z
Release 10.2.1
2019-02-20 14:59:31 -05:00
Joshua M. Boniface
5415d48a53 Merge pull request #145 from JustAMan/gh-templates
Copy issue and PR templates from main repo
2019-02-19 11:10:21 -05:00
Vasily
907a4ec516 Copy issue and PR templates from main repo 2019-02-19 18:58:58 +03:00
grafixeyehero
d2fe0e4bef margining top offset and bottom offset emby-scrollbuttons 2019-02-19 00:37:38 +03:00
WWWesten
8c662380a4 Translated using Weblate (Russian)
Currently translated at 99.5% (2256 of 2266 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-02-17 15:58:26 -05:00
Eliseo Martelli
b2c18d5e20 Translated using Weblate (Italian)
Currently translated at 94.4% (2140 of 2266 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-02-17 15:58:26 -05:00
ZsiGiT
2567d0977d Translated using Weblate (Hungarian)
Currently translated at 74.5% (1689 of 2266 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-02-17 15:58:26 -05:00
bobberb
4832b845a0 Translated using Weblate (Hebrew)
Currently translated at 32.3% (734 of 2266 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2019-02-17 15:57:03 -05:00
Philipp Hochkamp
e93af55c41 Translated using Weblate (German)
Currently translated at 98.7% (2237 of 2266 strings)

Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-02-17 15:57:03 -05:00
Joshua M. Boniface
072f4a3cf9 Merge pull request #139 from jellyfin/release-10.2.z
Release 10.2.0
2019-02-17 15:54:09 -05:00
658 changed files with 35663 additions and 72013 deletions

64
.ci/azure-pipelines.yml Normal file
View File

@@ -0,0 +1,64 @@
trigger:
batch: true
branches:
include:
- master
- release-*
tags:
include:
- '*'
jobs:
- job: main_build
displayName: 'Main Build'
dependsOn: lint
condition: succeeded()
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
displayName: 'Install Node.js'
inputs:
versionSpec: '10.x'
- script: |
yarn install
displayName: 'Install dependencies'
- script: |
test -d dist
displayName: 'Check dist directory'
- script: |
yarn pack --filename jellyfin-web.tgz
displayName: 'Build package'
- task: PublishPipelineArtifact@1
displayName: 'Publish package'
condition: succeeded()
inputs:
targetPath: '$(Build.SourcesDirectory)/jellyfin-web.tgz'
artifactName: 'jellyfin-web'
- job: lint
displayName: 'Lint'
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
displayName: 'Install Node.js'
inputs:
versionSpec: '10.x'
- script: |
yarn install
displayName: 'Install dependencies'
- script: |
yarn run lint
displayName: 'Run ESLint'

9
.editorconfig Normal file
View File

@@ -0,0 +1,9 @@
root = true
[*]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf

4
.eslintrc.yml Normal file
View File

@@ -0,0 +1,4 @@
env:
es6: true
browser: true
amd: true

35
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,35 @@
---
name: Bug report
about: Create a bug report
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**To Reproduce**
<!-- Steps to reproduce the behavior: -->
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Logs**
<!-- Please paste any log errors. -->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**System (please complete the following information):**
- OS: [e.g. Docker, Debian, Windows]
- Browser: [e.g. Firefox, Chrome, Safari]
- Jellyfin Version: [e.g. 10.0.1]
**Additional context**
<!-- Add any other context about the problem here. -->

11
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,11 @@
<!--
Ensure your title is short, descriptive, and in the imperative mood (Fix X, Change Y, instead of Fixed X, Changed Y).
For a good inspiration of what to write in commit messages and PRs please review https://chris.beams.io/posts/git-commit/ and our https://docs.jellyfin.org/general/contributing/issues.html page.
-->
**Changes**
<!-- Describe your changes here in 1-5 sentences. -->
**Issues**
<!-- Tag any issues that this PR solves here.
ex. Fixes # -->

19
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 14
# Issues with these labels will never be considered stale
exemptLabels:
- regression
- future
- feature
- enhancement
# 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
markComment: >
Issues go stale after 90d of inactivity. Mark the issue as fresh by adding a comment or commit. Stale issues close after an additional 14d of inactivity.
If this issue is safe to close now please do so.
If you have any questions you can reach us on [Matrix or Social Media](https://docs.jellyfin.org/general/getting-help.html).
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

3
.gitignore vendored
View File

@@ -570,3 +570,6 @@ ASALocalRun/
healthchecksdb
# End of https://www.gitignore.io/api/node,rider,macos,linux,windows,visualstudio,visualstudiocode
# dist for webpack output
dist

9
.npmignore Normal file
View File

@@ -0,0 +1,9 @@
.editorconfig
.ci
.gitattributes
.github
.eslintrc.yml
run-eslint.sh
webpack.config.js
yarn.lock
src

View File

@@ -19,7 +19,19 @@
- [nkmerrill](https://github.com/nkmerrill)
- [TtheCreator](https://github.com/Tthecreator)
- [RazeLighter777](https://github.com/RazeLighter777)
- [anthonylavado](https://github.com/anthonylavado)
- [LogicalPhallacy](https://github.com/LogicalPhallacy)
- [thornbill](https://github.com/thornbill)
- [redSpoutnik](https://github.com/redSpoutnik)
- [DrPandemic](https://github.com/drpandemic)
- [Oddstr13](https://github.com/oddstr13)
- [petermcneil](https://github.com/petermcneil)
- [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)
# Emby Contributors

View File

@@ -1,7 +1,15 @@
<h1 align="center">Jellyfin Web UI</h1>
<h1 align="center">Jellyfin Web</h1>
<h3 align="center">The Free Software Media System</h3>
---
<p align="center">
Jellyfin is a free software media system that puts you in control of managing and streaming your media.
<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>
</p>
---
Jellyfin is a free software media system that puts you in control of managing and streaming your media.

35
package.json Normal file
View File

@@ -0,0 +1,35 @@
{
"name": "jellyfin-web",
"version": "0.0.0",
"description": "Web interface for Jellyfin",
"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",
"webpack-merge": "^4.2.2"
},
"dependencies": {
"flv.js": "^1.5.0",
"hls.js": "^0.12.4",
"howler": "^2.1.2",
"jquery": "^3.4.1",
"jstree": "^3.3.7",
"libjass": "^0.11.0",
"shaka-player": "^2.5.5",
"sortablejs": "^1.9.0",
"swiper": "^3.4.2"
},
"scripts": {
"serve": "webpack-dev-server --config webpack.dev.js --open",
"build": "webpack --config webpack.prod.js",
"lint": "eslint \"src\"",
"prepare": "webpack --config webpack.prod.js"
}
}

View File

@@ -1,4 +1,4 @@
<div id="addPluginPage" data-role="page" class="page type-interior pluginConfigurationPage" data-backbutton="true" data-require="emby-select,emby-collapse,emby-linkbutton">
<div id="addPluginPage" data-role="page" class="page type-interior pluginConfigurationPage" data-backbutton="true">
<div>
<div class="content-primary">
@@ -8,7 +8,7 @@
<div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center">
<h1 class="sectionTitle pluginName"></h1>
<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Plugins">${Help}</a>
<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/plugins/index.html">${Help}</a>
</div>
<p id="tagline" style="font-style: italic;"></p>

View File

@@ -1,22 +1,18 @@
<div data-role="page" class="page standalonePage">
<div class="padded-left padded-right padded-bottom-page">
<form class="manualServerForm" style="margin: 0 auto;">
<h1 style="text-align: left;">${HeaderConnectToServer}</h1>
<form class="addServerForm" style="margin: 0 auto;">
<h1>${HeaderConnectToServer}</h1>
<div class="inputContainer">
<input is="emby-input" type="text" id="txtServerHost" required="required" label="${LabelServerHost}" />
<div class="fieldDescription" style="text-align: left;">${LabelServerHostHelp}</div>
</div>
<br />
<div class="inputContainer">
<input is="emby-input" type="number" id="txtServerPort" step="1" min="0" value="8096" label="${LabelServerPort}" />
<input is="emby-input" type="text" id="txtServerHost" required="required" label="${LabelServerHost}" autocomplete="off" spellcheck="false" autocapitalize="none" autocorrect="off" />
<div class="fieldDescription">${LabelServerHostHelp}</div>
</div>
<br />
<button is="emby-button" type="submit" class="raised button-submit block">
<span>${ButtonConnect}</span>
</button>
<button is="emby-button" type="button" class="raised button-cancel block btnCancelManualServer">
<button is="emby-button" type="button" class="raised button-cancel block btnCancel">
<span>${ButtonCancel}</span>
</button>
</form>
</div>
</div>
</div>

View File

@@ -1,4 +1,4 @@
<div id="serverSecurityPage" data-role="page" class="page type-interior advancedConfigurationPage withTabs fullWidthContent" data-require="scripts/serversecurity,detailtablecss,emby-button">
<div id="apiKeysPage" data-role="page" class="page type-interior advancedConfigurationPage fullWidthContent">
<div>
<div class="content-primary">
<div class="detailSectionHeader">

View File

@@ -1,21 +0,0 @@
<div id="appServicesPage" data-role="page" class="page type-interior appServicesPage withTabs fullWidthContent" data-require="scripts/appservices">
<div>
<div class="content-primary">
<div class="verticalSection">
<div class="sectionTitleContainer sectionTitleContainer-cards flex align-items-center">
<h2 class="sectionTitle sectionTitle-cards">${HeaderInstalledServices}</h2>
<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Plugins">${Help}</a>
</div>
<div class="installedPlugins"></div>
</div>
<div class="verticalSection">
<h2 class="sectionTitle sectionTitle-cards">${HeaderAvailableServices}</h2>
<div class="catalog"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,8 @@
<div id="pluginCatalogPage" data-role="page" class="page type-interior pluginConfigurationPage withTabs fullWidthContent">
<div>
<div class="content-primary">
<div id="noPlugins" class="hide">${MessageNoAvailablePlugins}</div>
<div id="pluginTiles" style="text-align:left;"></div>
</div>
</div>
</div>

View File

@@ -1,139 +0,0 @@
<link rel="import" href="../polymer/polymer.html">
<script src="./Sortable.js"></script>
<dom-module id="sortable-js">
<template>
<content></content>
</template>
</dom-module>
<script>
Polymer({
is: "sortable-js",
properties: {
group : { type: String, value: () => Math.random(), observer: "groupChanged" },
sort : { type: Boolean, value: true, observer: "sortChanged" },
disabled : { type: Boolean, value: false, observer: "disabledChanged" },
store : { type: Object, value: null, observer: "storeChanged" },
handle : { type: String, value: null, observer: "handleChanged" },
scrollSensitivity : { type: Number, value: 30, observer: "scrollSensitivityChanged" },
scrollSpeed : { type: Number, value: 10, observer: "scrollSpeedChanged" },
ghostClass : { type: String, value: "sortable-ghost", observer: "ghostClassChanged" },
chosenClass : { type: String, value: "sortable-chosen", observer: "chosenClassChanged" },
ignore : { type: String, value: "a, img", observer: "ignoreChanged" },
filter : { type: Object, value: null, observer: "filterChanged" },
animation : { type: Number, value: 0, observer: "animationChanged" },
dropBubble : { type: Boolean, value: false, observer: "dropBubbleChanged" },
dragoverBubble : { type: Boolean, value: false, observer: "dragoverBubbleChanged" },
dataIdAttr : { type: String, value: "data-id", observer: "dataIdAttrChanged" },
delay : { type: Number, value: 0, observer: "delayChanged" },
forceFallback : { type: Boolean, value: false, observer: "forceFallbackChanged" },
fallbackClass : { type: String, value: "sortable-fallback", observer: "fallbackClassChanged" },
fallbackOnBody : { type: Boolean, value: false, observer: "fallbackOnBodyChanged" },
draggable : {},
scroll : {}
},
created() {
// override default DOM property behavior
Object.defineProperties(this, {
draggable: { get() { return this._draggable || this.getAttribute("draggable") || ">*"}, set(value) { this._draggable = value; this.draggableChanged(value)} },
scroll: { get() { return this._scroll || JSON.parse(this.getAttribute("scroll") || "true") }, set(value) { this._scroll = value; this.scrollChanged(value)} }
})
},
attached: function() {
// Given
// <sortable-js>
// <template is="dom-repeat" items={{data}}>
// <div>
// <template is="dom-if" if="true">
// <span>hello</span></template></div>
// After render, it becomes
// <sortable-js>
// <div>
// <span>hello</span>
// <template is="dom-if">
// <tempalte is="dom-repeat">
var templates = this.querySelectorAll("template[is='dom-repeat']")
var template = templates[templates.length-1]
var options = {}
Object.keys(this.properties).forEach(key => {
options[key] = this[key]
})
this.sortable = Sortable.create(this, Object.assign(options, {
onUpdate: e => {
if (template) {
template.splice("items", e.newIndex, 0, template.splice("items", e.oldIndex, 1)[0])
}
this.fire("update", e)
},
onAdd: e => {
if (template) {
var froms = e.from.querySelectorAll("template[is='dom-repeat']")
var from = froms[froms.length-1]
var item = from.items[e.oldIndex]
template.splice("items", e.newIndex, 0, item)
}
this.fire("add", e)
},
onRemove: e => {
if (template) {
template.splice("items", e.oldIndex, 1)[0]
}
this.fire("remove", e)
},
onStart: e => {
this.fire("start", e)
},
onEnd: e => {
this.fire("end", e)
},
onSort: e => {
this.fire("sort", e)
},
onFilter: e => {
this.fire("filter", e)
},
onMove: e => {
this.fire("move", e)
}
}))
},
detached: function() {
this.sortable.destroy()
},
groupChanged : function(value) { this.sortable && this.sortable.option("group", value) },
sortChanged : function(value) { this.sortable && this.sortable.option("sort", value) },
disabledChanged : function(value) { this.sortable && this.sortable.option("disabled", value) },
storeChanged : function(value) { this.sortable && this.sortable.option("store", value) },
handleChanged : function(value) { this.sortable && this.sortable.option("handle", value) },
scrollChanged : function(value) { this.sortable && this.sortable.option("scroll", value) },
scrollSensitivityChanged : function(value) { this.sortable && this.sortable.option("scrollSensitivity", value) },
scrollSpeedChanged : function(value) { this.sortable && this.sortable.option("scrollSpeed", value) },
draggableChanged : function(value) { this.sortable && this.sortable.option("draggable", value) },
ghostClassChanged : function(value) { this.sortable && this.sortable.option("ghostClass", value) },
chosenClassChanged : function(value) { this.sortable && this.sortable.option("chosenClass", value) },
ignoreChanged : function(value) { this.sortable && this.sortable.option("ignore", value) },
filterChanged : function(value) { this.sortable && this.sortable.option("filter", value) },
animationChanged : function(value) { this.sortable && this.sortable.option("animation", value) },
dropBubbleChanged : function(value) { this.sortable && this.sortable.option("dropBubble", value) },
dragoverBubbleChanged : function(value) { this.sortable && this.sortable.option("dragoverBubble", value) },
dataIdAttrChanged : function(value) { this.sortable && this.sortable.option("dataIdAttr", value) },
delayChanged : function(value) { this.sortable && this.sortable.option("delay", value) },
forceFallbackChanged : function(value) { this.sortable && this.sortable.option("forceFallback", value) },
fallbackClassChanged : function(value) { this.sortable && this.sortable.option("fallbackClass", value) },
fallbackOnBodyChanged : function(value) { this.sortable && this.sortable.option("fallbackOnBody", value) }
})
</script>

View File

@@ -1,393 +0,0 @@
/*! Sortable 1.4.2 - MIT | git://github.com/rubaxa/Sortable.git */ ! function(a) {
"use strict";
"function" == typeof define && define.amd ? define(a) : "undefined" != typeof module && "undefined" != typeof module.exports ? module.exports = a() : "undefined" != typeof Package ? Sortable = a() : window.Sortable = a()
}(function() {
"use strict";
function a(a, b) {
if (!a || !a.nodeType || 1 !== a.nodeType) throw "Sortable: `el` must be HTMLElement, and not " + {}.toString.call(a);
this.el = a, this.options = b = r({}, b), a[L] = this;
var c = {
group: Math.random(),
sort: !0,
disabled: !1,
store: null,
handle: null,
scroll: !0,
scrollSensitivity: 30,
scrollSpeed: 10,
draggable: /[uo]l/i.test(a.nodeName) ? "li" : ">*",
ghostClass: "sortable-ghost",
chosenClass: "sortable-chosen",
ignore: "a, img",
filter: null,
animation: 0,
setData: function(a, b) {
a.setData("Text", b.textContent)
},
dropBubble: !1,
dragoverBubble: !1,
dataIdAttr: "data-id",
delay: 0,
forceFallback: !1,
fallbackClass: "sortable-fallback",
fallbackOnBody: !1
};
for (var d in c) !(d in b) && (b[d] = c[d]);
V(b);
for (var f in this) "_" === f.charAt(0) && (this[f] = this[f].bind(this));
this.nativeDraggable = b.forceFallback ? !1 : P, e(a, "mousedown", this._onTapStart), e(a, "touchstart", this._onTapStart), this.nativeDraggable && (e(a, "dragover", this), e(a, "dragenter", this)), T.push(this._onDragOver), b.store && this.sort(b.store.get(this))
}
function b(a) {
v && v.state !== a && (h(v, "display", a ? "none" : ""), !a && v.state && w.insertBefore(v, s), v.state = a)
}
function c(a, b, c) {
if (a) {
c = c || N, b = b.split(".");
var d = b.shift().toUpperCase(),
e = new RegExp("\\s(" + b.join("|") + ")(?=\\s)", "g");
do
if (">*" === d && a.parentNode === c || ("" === d || a.nodeName.toUpperCase() == d) && (!b.length || ((" " + a.className + " ").match(e) || []).length == b.length)) return a; while (a !== c && (a = a.parentNode))
}
return null
}
function d(a) {
a.dataTransfer && (a.dataTransfer.dropEffect = "move"), a.preventDefault()
}
function e(a, b, c) {
a.addEventListener(b, c, !1)
}
function f(a, b, c) {
a.removeEventListener(b, c, !1)
}
function g(a, b, c) {
if (a)
if (a.classList) a.classList[c ? "add" : "remove"](b);
else {
var d = (" " + a.className + " ").replace(K, " ").replace(" " + b + " ", " ");
a.className = (d + (c ? " " + b : "")).replace(K, " ")
}
}
function h(a, b, c) {
var d = a && a.style;
if (d) {
if (void 0 === c) return N.defaultView && N.defaultView.getComputedStyle ? c = N.defaultView.getComputedStyle(a, "") : a.currentStyle && (c = a.currentStyle), void 0 === b ? c : c[b];
b in d || (b = "-webkit-" + b), d[b] = c + ("string" == typeof c ? "" : "px")
}
}
function i(a, b, c) {
if (a) {
var d = a.getElementsByTagName(b),
e = 0,
f = d.length;
if (c)
for (; f > e; e++) c(d[e], e);
return d
}
return []
}
function j(a, b, c, d, e, f, g) {
var h = N.createEvent("Event"),
i = (a || b[L]).options,
j = "on" + c.charAt(0).toUpperCase() + c.substr(1);
h.initEvent(c, !0, !0), h.to = b, h.from = e || b, h.item = d || b, h.clone = v, h.oldIndex = f, h.newIndex = g, b.dispatchEvent(h), i[j] && i[j].call(a, h)
}
function k(a, b, c, d, e, f) {
var g, h, i = a[L],
j = i.options.onMove;
return g = N.createEvent("Event"), g.initEvent("move", !0, !0), g.to = b, g.from = a, g.dragged = c, g.draggedRect = d, g.related = e || b, g.relatedRect = f || b.getBoundingClientRect(), a.dispatchEvent(g), j && (h = j.call(i, g)), h
}
function l(a) {
a.draggable = !1
}
function m() {
R = !1
}
function n(a, b) {
var c = a.lastElementChild,
d = c.getBoundingClientRect();
return (b.clientY - (d.top + d.height) > 5 || b.clientX - (d.right + d.width) > 5) && c
}
function o(a) {
for (var b = a.tagName + a.className + a.src + a.href + a.textContent, c = b.length, d = 0; c--;) d += b.charCodeAt(c);
return d.toString(36)
}
function p(a) {
var b = 0;
if (!a || !a.parentNode) return -1;
for (; a && (a = a.previousElementSibling);) "TEMPLATE" !== a.nodeName.toUpperCase() && b++;
return b
}
function q(a, b) {
var c, d;
return function() {
void 0 === c && (c = arguments, d = this, setTimeout(function() {
1 === c.length ? a.call(d, c[0]) : a.apply(d, c), c = void 0
}, b))
}
}
function r(a, b) {
if (a && b)
for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c]);
return a
}
var s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J = {},
K = /\s+/g,
L = "Sortable" + (new Date).getTime(),
M = window,
N = M.document,
O = M.parseInt,
P = !!("draggable" in N.createElement("div")),
Q = function(a) {
return a = N.createElement("x"), a.style.cssText = "pointer-events:auto", "auto" === a.style.pointerEvents
}(),
R = !1,
S = Math.abs,
T = ([].slice, []),
U = q(function(a, b, c) {
if (c && b.scroll) {
var d, e, f, g, h = b.scrollSensitivity,
i = b.scrollSpeed,
j = a.clientX,
k = a.clientY,
l = window.innerWidth,
m = window.innerHeight;
if (z !== c && (y = b.scroll, z = c, y === !0)) {
y = c;
do
if (y.offsetWidth < y.scrollWidth || y.offsetHeight < y.scrollHeight) break; while (y = y.parentNode)
}
y && (d = y, e = y.getBoundingClientRect(), f = (S(e.right - j) <= h) - (S(e.left - j) <= h), g = (S(e.bottom - k) <= h) - (S(e.top - k) <= h)), f || g || (f = (h >= l - j) - (h >= j), g = (h >= m - k) - (h >= k), (f || g) && (d = M)), (J.vx !== f || J.vy !== g || J.el !== d) && (J.el = d, J.vx = f, J.vy = g, clearInterval(J.pid), d && (J.pid = setInterval(function() {
d === M ? M.scrollTo(M.pageXOffset + f * i, M.pageYOffset + g * i) : (g && (d.scrollTop += g * i), f && (d.scrollLeft += f * i))
}, 24)))
}
}, 30),
V = function(a) {
var b = a.group;
b && "object" == typeof b || (b = a.group = {
name: b
}), ["pull", "put"].forEach(function(a) {
a in b || (b[a] = !0)
}), a.groups = " " + b.name + (b.put.join ? " " + b.put.join(" ") : "") + " "
};
return a.prototype = {
constructor: a,
_onTapStart: function(a) {
var b = this,
d = this.el,
e = this.options,
f = a.type,
g = a.touches && a.touches[0],
h = (g || a).target,
i = h,
k = e.filter;
if (!("mousedown" === f && 0 !== a.button || e.disabled) && (h = c(h, e.draggable, d))) {
if (D = p(h), "function" == typeof k) {
if (k.call(this, a, h, this)) return j(b, i, "filter", h, d, D), void a.preventDefault()
} else if (k && (k = k.split(",").some(function(a) {
return a = c(i, a.trim(), d), a ? (j(b, a, "filter", h, d, D), !0) : void 0
}))) return void a.preventDefault();
(!e.handle || c(i, e.handle, d)) && this._prepareDragStart(a, g, h)
}
},
_prepareDragStart: function(a, b, c) {
var d, f = this,
h = f.el,
j = f.options,
k = h.ownerDocument;
c && !s && c.parentNode === h && (G = a, w = h, s = c, t = s.parentNode, x = s.nextSibling, F = j.group, d = function() {
f._disableDelayedDrag(), s.draggable = !0, g(s, f.options.chosenClass, !0), f._triggerDragStart(b)
}, j.ignore.split(",").forEach(function(a) {
i(s, a.trim(), l)
}), e(k, "mouseup", f._onDrop), e(k, "touchend", f._onDrop), e(k, "touchcancel", f._onDrop), j.delay ? (e(k, "mouseup", f._disableDelayedDrag), e(k, "touchend", f._disableDelayedDrag), e(k, "touchcancel", f._disableDelayedDrag), e(k, "mousemove", f._disableDelayedDrag), e(k, "touchmove", f._disableDelayedDrag), f._dragStartTimer = setTimeout(d, j.delay)) : d())
},
_disableDelayedDrag: function() {
var a = this.el.ownerDocument;
clearTimeout(this._dragStartTimer), f(a, "mouseup", this._disableDelayedDrag), f(a, "touchend", this._disableDelayedDrag), f(a, "touchcancel", this._disableDelayedDrag), f(a, "mousemove", this._disableDelayedDrag), f(a, "touchmove", this._disableDelayedDrag)
},
_triggerDragStart: function(a) {
a ? (G = {
target: s,
clientX: a.clientX,
clientY: a.clientY
}, this._onDragStart(G, "touch")) : this.nativeDraggable ? (e(s, "dragend", this), e(w, "dragstart", this._onDragStart)) : this._onDragStart(G, !0);
try {
N.selection ? N.selection.empty() : window.getSelection().removeAllRanges()
} catch (b) {}
},
_dragStarted: function() {
w && s && (g(s, this.options.ghostClass, !0), a.active = this, j(this, w, "start", s, w, D))
},
_emulateDragOver: function() {
if (H) {
if (this._lastX === H.clientX && this._lastY === H.clientY) return;
this._lastX = H.clientX, this._lastY = H.clientY, Q || h(u, "display", "none");
var a = N.elementFromPoint(H.clientX, H.clientY),
b = a,
c = " " + this.options.group.name,
d = T.length;
if (b)
do {
if (b[L] && b[L].options.groups.indexOf(c) > -1) {
for (; d--;) T[d]({
clientX: H.clientX,
clientY: H.clientY,
target: a,
rootEl: b
});
break
}
a = b
} while (b = b.parentNode);
Q || h(u, "display", "")
}
},
_onTouchMove: function(b) {
if (G) {
a.active || this._dragStarted(), this._appendGhost();
var c = b.touches ? b.touches[0] : b,
d = c.clientX - G.clientX,
e = c.clientY - G.clientY,
f = b.touches ? "translate3d(" + d + "px," + e + "px,0)" : "translate(" + d + "px," + e + "px)";
I = !0, H = c, h(u, "webkitTransform", f), h(u, "mozTransform", f), h(u, "msTransform", f), h(u, "transform", f), b.preventDefault()
}
},
_appendGhost: function() {
if (!u) {
var a, b = s.getBoundingClientRect(),
c = h(s),
d = this.options;
u = s.cloneNode(!0), g(u, d.ghostClass, !1), g(u, d.fallbackClass, !0), h(u, "top", b.top - O(c.marginTop, 10)), h(u, "left", b.left - O(c.marginLeft, 10)), h(u, "width", b.width), h(u, "height", b.height), h(u, "opacity", "0.8"), h(u, "position", "fixed"), h(u, "zIndex", "100000"), h(u, "pointerEvents", "none"), d.fallbackOnBody && N.body.appendChild(u) || w.appendChild(u), a = u.getBoundingClientRect(), h(u, "width", 2 * b.width - a.width), h(u, "height", 2 * b.height - a.height)
}
},
_onDragStart: function(a, b) {
var c = a.dataTransfer,
d = this.options;
this._offUpEvents(), "clone" == F.pull && (v = s.cloneNode(!0), h(v, "display", "none"), w.insertBefore(v, s)), b ? ("touch" === b ? (e(N, "touchmove", this._onTouchMove), e(N, "touchend", this._onDrop), e(N, "touchcancel", this._onDrop)) : (e(N, "mousemove", this._onTouchMove), e(N, "mouseup", this._onDrop)), this._loopId = setInterval(this._emulateDragOver, 50)) : (c && (c.effectAllowed = "move", d.setData && d.setData.call(this, c, s)), e(N, "drop", this), setTimeout(this._dragStarted, 0))
},
_onDragOver: function(a) {
var d, e, f, g = this.el,
i = this.options,
j = i.group,
l = j.put,
o = F === j,
p = i.sort;
if (void 0 !== a.preventDefault && (a.preventDefault(), !i.dragoverBubble && a.stopPropagation()), I = !0, F && !i.disabled && (o ? p || (f = !w.contains(s)) : F.pull && l && (F.name === j.name || l.indexOf && ~l.indexOf(F.name))) && (void 0 === a.rootEl || a.rootEl === this.el)) {
if (U(a, i, this.el), R) return;
if (d = c(a.target, i.draggable, g), e = s.getBoundingClientRect(), f) return b(!0), void(v || x ? w.insertBefore(s, v || x) : p || w.appendChild(s));
if (0 === g.children.length || g.children[0] === u || g === a.target && (d = n(g, a))) {
if (d) {
if (d.animated) return;
r = d.getBoundingClientRect()
}
b(o), k(w, g, s, e, d, r) !== !1 && (s.contains(g) || (g.appendChild(s), t = g), this._animate(e, s), d && this._animate(r, d))
} else if (d && !d.animated && d !== s && void 0 !== d.parentNode[L]) {
A !== d && (A = d, B = h(d), C = h(d.parentNode));
var q, r = d.getBoundingClientRect(),
y = r.right - r.left,
z = r.bottom - r.top,
D = /left|right|inline/.test(B.cssFloat + B.display) || "flex" == C.display && 0 === C["flex-direction"].indexOf("row"),
E = d.offsetWidth > s.offsetWidth,
G = d.offsetHeight > s.offsetHeight,
H = (D ? (a.clientX - r.left) / y : (a.clientY - r.top) / z) > .5,
J = d.nextElementSibling,
K = k(w, g, s, e, d, r);
if (K !== !1) {
if (R = !0, setTimeout(m, 30), b(o), 1 === K || -1 === K) q = 1 === K;
else if (D) {
var M = s.offsetTop,
N = d.offsetTop;
q = M === N ? d.previousElementSibling === s && !E || H && E : N > M
} else q = J !== s && !G || H && G;
s.contains(g) || (q && !J ? g.appendChild(s) : d.parentNode.insertBefore(s, q ? J : d)), t = s.parentNode, this._animate(e, s), this._animate(r, d)
}
}
}
},
_animate: function(a, b) {
var c = this.options.animation;
if (c) {
var d = b.getBoundingClientRect();
h(b, "transition", "none"), h(b, "transform", "translate3d(" + (a.left - d.left) + "px," + (a.top - d.top) + "px,0)"), b.offsetWidth, h(b, "transition", "all " + c + "ms"), h(b, "transform", "translate3d(0,0,0)"), clearTimeout(b.animated), b.animated = setTimeout(function() {
h(b, "transition", ""), h(b, "transform", ""), b.animated = !1
}, c)
}
},
_offUpEvents: function() {
var a = this.el.ownerDocument;
f(N, "touchmove", this._onTouchMove), f(a, "mouseup", this._onDrop), f(a, "touchend", this._onDrop), f(a, "touchcancel", this._onDrop)
},
_onDrop: function(b) {
var c = this.el,
d = this.options;
clearInterval(this._loopId), clearInterval(J.pid), clearTimeout(this._dragStartTimer), f(N, "mousemove", this._onTouchMove), this.nativeDraggable && (f(N, "drop", this), f(c, "dragstart", this._onDragStart)), this._offUpEvents(), b && (I && (b.preventDefault(), !d.dropBubble && b.stopPropagation()), u && u.parentNode.removeChild(u), s && (this.nativeDraggable && f(s, "dragend", this), l(s), g(s, this.options.ghostClass, !1), g(s, this.options.chosenClass, !1), w !== t ? (E = p(s), E >= 0 && (j(null, t, "sort", s, w, D, E), j(this, w, "sort", s, w, D, E), j(null, t, "add", s, w, D, E), j(this, w, "remove", s, w, D, E))) : (v && v.parentNode.removeChild(v), s.nextSibling !== x && (E = p(s), E >= 0 && (j(this, w, "update", s, w, D, E), j(this, w, "sort", s, w, D, E)))), a.active && ((null === E || -1 === E) && (E = D), j(this, w, "end", s, w, D, E), this.save())), w = s = t = u = x = v = y = z = G = H = I = E = A = B = F = a.active = null)
},
handleEvent: function(a) {
var b = a.type;
"dragover" === b || "dragenter" === b ? s && (this._onDragOver(a), d(a)) : ("drop" === b || "dragend" === b) && this._onDrop(a)
},
toArray: function() {
for (var a, b = [], d = this.el.children, e = 0, f = d.length, g = this.options; f > e; e++) a = d[e], c(a, g.draggable, this.el) && b.push(a.getAttribute(g.dataIdAttr) || o(a));
return b
},
sort: function(a) {
var b = {},
d = this.el;
this.toArray().forEach(function(a, e) {
var f = d.children[e];
c(f, this.options.draggable, d) && (b[a] = f)
}, this), a.forEach(function(a) {
b[a] && (d.removeChild(b[a]), d.appendChild(b[a]))
})
},
save: function() {
var a = this.options.store;
a && a.set(this)
},
closest: function(a, b) {
return c(a, b || this.options.draggable, this.el)
},
option: function(a, b) {
var c = this.options;
return void 0 === b ? c[a] : (c[a] = b, void("group" === a && V(c)))
},
destroy: function() {
var a = this.el;
a[L] = null, f(a, "mousedown", this._onTapStart), f(a, "touchstart", this._onTapStart), this.nativeDraggable && (f(a, "dragover", this), f(a, "dragenter", this)), Array.prototype.forEach.call(a.querySelectorAll("[draggable]"), function(a) {
a.removeAttribute("draggable")
}), T.splice(T.indexOf(this._onDragOver), 1), this._onDrop(), this.el = a = null
}
}, a.utils = {
on: e,
off: f,
css: h,
find: i,
is: function(a, b) {
return !!c(a, b, a)
},
extend: r,
throttle: q,
closest: c,
toggleClass: g,
index: p
}, a.create = function(b, c) {
return new a(b, c)
}, a.version = "1.4.2", a
});

View File

@@ -1,344 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta property="og:image" content="/st/og-image.png"/>
<title>Sortable. No jQuery.</title>
<meta name="keywords" content="sortable, reorder, list, javascript, html5, drag and drop, dnd, animation, groups, angular, ng-sortable, react, mixin, effects, rubaxa"/>
<meta name="description" content="Sortable - is a minimalist JavaScript library for reorderable drag-and-drop lists on modern browsers and touch devices. No jQuery. Supports Meteor, AngularJS, React and any CSS library, e.g. Bootstrap."/>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link href="//rubaxa.github.io/Ply/ply.css" rel="stylesheet" type="text/css"/>
<link href="//fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet" type="text/css"/>
<link href="st/app.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<a href="https://github.com/RubaXa/Sortable"><img style="position: fixed; top: 0; right: 0; border: 0; z-index: 10000;" src="//s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png" alt="Fork me on GitHub"></a>
<div class="container">
<div style="padding: 80px 150px 0; height: 160px;">
<a class="logo" href="https://github.com/RubaXa/Sortable"><img src="st/logo.png"/></a>
<h1 data-force="40" data-force-y="2.5">The JavaScript library for modern browsers and touch devices. No&nbsp;jQuery.</h1>
</div>
</div>
<!-- Connected lists -->
<div class="container" style="height: 520px">
<div data-force="30" class="layer block" style="left: 14.5%; top: 0; width: 37%">
<div class="layer title">List A</div>
<ul id="foo" class="block__list block__list_words">
<li>бегемот</li>
<li>корм</li>
<li>антон</li>
<li>сало</li>
<li>железосталь</li>
<li>валик</li>
<li>кровать</li>
<li>краб</li>
</ul>
</div>
<div data-force="18" class="layer block" style="left: 58%; top: 143px; width: 40%;">
<div class="layer title">List B</div>
<ul id="bar" class="block__list block__list_tags">
<li>казнить</li>
<li>,</li>
<li>нельзя</li>
<li>помиловать</li>
</ul>
</div>
</div>
<!-- Multi connected lists -->
<a name="m"></a>
<div class="container">
<div id="multi" style="margin-left: 30px">
<div><div data-force="5" class="layer title title_xl">Multi</div></div>
<div class="layer tile" data-force="30">
<div class="tile__name">Group A</div>
<div class="tile__list">
<img src="st/face-01.jpg"/><!--
--><img src="st/face-02.jpg"/><!--
--><img src="st/face-03.jpg"/><!--
--><img src="st/face-04.jpg"/>
</div>
</div>
<div class="layer tile" data-force="25">
<div class="tile__name">Group B</div>
<div class="tile__list">
<img src="st/face-05.jpg"/><!--
--><img src="st/face-06.jpg"/><!--
--><img src="st/face-07.jpg"/>
</div>
</div>
<div class="layer tile" data-force="20">
<div class="tile__name">Group C</div>
<div class="tile__list">
<img src="st/face-08.jpg"/><!--
--><img src="st/face-09.jpg"/>
</div>
</div>
</div>
</div>
<!-- Editable list -->
<a name="e"></a>
<div class="container" style="margin-top: 100px">
<div id="filter" style="margin-left: 30px">
<div><div data-force="5" class="layer title title_xl">Editable list</div></div>
<div style="margin-top: -8px; margin-left: 10px" class="block__list block__list_words">
<ul id="editable">
<li>Оля<i class="js-remove"></i></li>
<li>Владимир<i class="js-remove"></i></li>
<li>Алина<i class="js-remove"></i></li>
</ul>
<button id="addUser">Add</button>
</div>
</div>
</div>
<!-- Advanced connected lists -->
<a name="ag"></a>
<div class="container" style="margin-top: 100px;">
<div id="advanced" style="margin-left: 30px;">
<div><div data-force="5" class="layer title title_xl">Advanced groups</div></div>
<div style="width: 25%; float: left; margin-top: 15px; margin-left: 10px" class="block__list block__list_words">
<div class="block__list-title">pull & put</div>
<ul id="advanced-1">
<li>Meat</li>
<li>Potato</li>
<li>Tea</li>
</ul>
</div>
<div style="width: 25%; float: left; margin-top: 15px; margin-left: 10px" class="block__list block__list_words">
<div class="block__list-title">only pull (clone) no&nbsp;reordering</div>
<ul id="advanced-2">
<li>Sex</li>
<li>Drugs</li>
<li>Rock'n'roll</li>
</ul>
</div>
<div style="width: 25%; float: left; margin-top: 15px; margin-left: 10px" class="block__list block__list_words">
<div class="block__list-title">only put</div>
<ul id="advanced-3">
<li>Money</li>
<li>Force</li>
<li>Agility</li>
</ul>
</div>
<div style="clear: both"></div>
</div>
</div>
<!-- 'handle' option -->
<a name="h"></a>
<div class="container" style="margin-top: 100px;">
<div id="handle" style="margin-left: 30px;">
<div><div data-force="5" class="layer title title_xl">Drag handle and selectable text</div></div>
<div style="width: 30%; margin-left: 10px" class="block__list_words">
<ul id="handle-1">
<li><span class="drag-handle">&#9776;</span>Select text freely</li>
<li><span class="drag-handle">&#9776;</span>Drag my handle</li>
<li><span class="drag-handle">&#9776;</span>Best of both worlds</li>
</ul>
</div>
<div style="clear: both"></div>
</div>
</div>
<!-- Angular -->
<a name="ng"></a>
<div id="todos" ng-app="todoApp" class="container" style="margin-top: 100px">
<div style="margin-left: 30px">
<div><div data-force="5" class="layer title title_xl">AngularJS / ng-sortable</div></div>
<div style="width: 30%; margin-top: -8px; margin-left: 10px; float: left;" class="block__list block__list_words">
<div ng-controller="TodoController">
<span style="padding-left: 20px">{{remaining()}} of {{todos.length}} remaining</span>
[ <a href="" ng-click="archive()">archive</a> ]
<ul ng-sortable="{ group: 'todo', animation: 150 }" class="unstyled">
<li ng-repeat="todo in todos">
<input type="checkbox" ng-model="todo.done">
<span class="done-{{todo.done}}">{{todo.text}}</span>
</li>
</ul>
<form ng-submit="addTodo()" style="padding-left: 20px">
<input type="text" ng-model="todoText" size="30"
placeholder="add new todo here">
</form>
</div>
</div>
<div style="width: 30%; margin-top: -8px; margin-left: 10px; float: left;" class="block__list block__list_words">
<div ng-controller="TodoControllerNext">
<span style="padding-left: 20px">{{remaining()}} of {{todos.length}} remaining</span>
<ul ng-sortable="sortableConfig" class="unstyled">
<li ng-repeat="todo in todos">
<input type="checkbox" ng-model="todo.done">
<span class="done-{{todo.done}}">{{todo.text}}</span>
</li>
</ul>
</div>
</div>
<div style="clear: both"></div>
</div>
</div>
<!-- Code example -->
<a name="c"></a>
<div class="container" style="margin-top: 100px">
<div style="margin-left: 30px">
<div><div class="layer title title_xl">Code example</div></div>
<pre data-force="100" class="layer javascript" style="margin-top: -8px; margin-left: 10px; width: 90%"><code>// Simple list
var list = document.getElementById("my-ui-list");
Sortable.create(list); // That's all.
// Grouping
var foo = document.getElementById("foo");
Sortable.create(foo, { group: "omega" });
var bar = document.getElementById("bar");
Sortable.create(bar, { group: "omega" });
// Or
var container = document.getElementById("multi");
var sort = Sortable.create(container, {
animation: 150, // ms, animation speed moving items when sorting, `0` — without animation
handle: ".tile__title", // Restricts sort start click/touch to the specified element
draggable: ".tile", // Specifies which items inside the element should be sortable
onUpdate: function (evt/**Event*/){
var item = evt.item; // the current dragged HTMLElement
}
});
// ..
sort.destroy();
// Editable list
var editableList = Sortable.create(editable, {
filter: '.js-remove',
onFilter: function (evt) {
var el = editableList.closest(evt.item); // get dragged item
el && el.parentNode.removeChild(el);
}
});
</code></pre>
</div>
<div class="container" style="margin: 100px 0;">
<div style="margin-left: 30px">
<div><div class="layer title title_xl">See also</div></div>
<div id="rubaxa-repos" data-force="100" class="layer" style="margin-top: -8px; margin-left: 10px; width: 90%; background-color: #fff;">Loading&hellip;</div>
<script src="//rubaxa.github.io/repos.js"></script>
</div>
</div>
</div>
<script src="Sortable.js"></script>
<script src="//rubaxa.github.io/Ply/Ply.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
<script src="ng-sortable.js"></script>
<script src="st/app.js"></script>
<!-- highlight.js -->
<style>
/* Tomorrow Theme */
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
.tomorrow-comment, pre .comment, pre .title {
color: #8e908c;
}
.tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo {
color: #c82829;
}
.tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant {
color: #f5871f;
}
.tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute {
color: #eab700;
}
.tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata {
color: #718c00;
}
.tomorrow-aqua, pre .css .hexcolor {
color: #3e999f;
}
.tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title {
color: #4271ae;
}
.tomorrow-purple, pre .keyword, pre .javascript .function {
color: #8959a8;
}
pre {
border: 0;
background-color: #fff;
}
pre code {
display: block;
color: #4d4d4c;
font-size: 15px;
font-family: Menlo, Monaco, Consolas, monospace;
line-height: 1.5;
padding: 30px;
}
</style>
<script src="//yandex.st/highlightjs/7.5/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-16483888-3', 'rubaxa.github.io');
ga('send', 'pageview');
</script>
</body>
</html>

View File

@@ -1,17 +0,0 @@
! function(factory) {
"use strict";
"function" == typeof define && define.amd ? define(["jquery"], factory) : factory(jQuery)
}(function($) {
"use strict";
$.fn.sortable = function(options) {
var retVal, args = arguments;
return this.each(function() {
var $el = $(this),
sortable = $el.data("sortable");
if (sortable || !(options instanceof Object) && options || (sortable = new Sortable(this, options), $el.data("sortable", sortable)), sortable) {
if ("widget" === options) return sortable;
"destroy" === options ? (sortable.destroy(), $el.removeData("sortable")) : "function" == typeof sortable[options] ? retVal = sortable[options].apply(sortable, [].slice.call(args, 1)) : options in sortable.options && (retVal = sortable.option.apply(sortable, args))
}
}), void 0 === retVal ? this : retVal
}
});

View File

@@ -1,97 +0,0 @@
! function(factory) {
"use strict";
if ("function" == typeof define && define.amd) define(["knockout"], factory);
else if ("function" == typeof require && "object" == typeof exports && "object" == typeof module) {
var ko = require("knockout");
factory(ko)
} else factory(window.ko)
}(function(ko) {
"use strict";
var init = function(element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions) {
var options = buildOptions(valueAccessor, sortableOptions);
["onStart", "onEnd", "onRemove", "onAdd", "onUpdate", "onSort", "onFilter"].forEach(function(e) {
(options[e] || eventHandlers[e]) && (options[e] = function(eventType, parentVM, parentBindings, handler, e) {
var itemVM = ko.dataFor(e.item),
bindings = ko.utils.peekObservable(parentBindings()),
bindingHandlerBinding = bindings.sortable || bindings.draggable,
collection = bindingHandlerBinding.collection || bindingHandlerBinding.foreach;
handler && handler(e, itemVM, parentVM, collection, bindings), eventHandlers[eventType] && eventHandlers[eventType](e, itemVM, parentVM, collection, bindings)
}.bind(void 0, e, viewModel, allBindings, options[e]))
});
var sortableElement = Sortable.create(element, options);
return ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
sortableElement.destroy()
}), ko.bindingHandlers.template.init(element, valueAccessor)
},
update = function(element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions) {
return ko.bindingHandlers.template.update(element, valueAccessor, allBindings, viewModel, bindingContext)
},
eventHandlers = function(handlers) {
var moveOperations = [],
tryMoveOperation = function(e, itemVM, parentVM, collection, parentBindings) {
var currentOperation = {
event: e,
itemVM: itemVM,
parentVM: parentVM,
collection: collection,
parentBindings: parentBindings
},
existingOperation = moveOperations.filter(function(op) {
return op.itemVM === currentOperation.itemVM
})[0];
if (existingOperation) {
moveOperations.splice(moveOperations.indexOf(existingOperation), 1);
var removeOperation = "remove" === currentOperation.event.type ? currentOperation : existingOperation,
addOperation = "add" === currentOperation.event.type ? currentOperation : existingOperation;
moveItem(itemVM, removeOperation.collection, addOperation.collection, addOperation.event.clone, addOperation.event)
} else moveOperations.push(currentOperation)
},
moveItem = function(itemVM, from, to, clone, e) {
var fromArray = from(),
originalIndex = fromArray.indexOf(itemVM),
newIndex = e.newIndex;
e.item.previousElementSibling && (newIndex = fromArray.indexOf(ko.dataFor(e.item.previousElementSibling)), originalIndex > newIndex && (newIndex += 1)), e.item.parentNode.removeChild(e.item), fromArray.splice(originalIndex, 1), from.valueHasMutated(), clone && from !== to && (fromArray.splice(originalIndex, 0, itemVM), from.valueHasMutated()), to().splice(newIndex, 0, itemVM), to.valueHasMutated()
};
return handlers.onRemove = tryMoveOperation, handlers.onAdd = tryMoveOperation, handlers.onUpdate = function(e, itemVM, parentVM, collection, parentBindings) {
moveItem(itemVM, collection, collection, !1, e)
}, handlers
}({}),
buildOptions = function(bindingOptions, options) {
var merge = function(into, from) {
for (var prop in from) "[object Object]" === Object.prototype.toString.call(from[prop]) ? ("[object Object]" !== Object.prototype.toString.call(into[prop]) && (into[prop] = {}), into[prop] = merge(into[prop], from[prop])) : into[prop] = from[prop];
return into
},
unwrappedOptions = ko.utils.peekObservable(bindingOptions()).options || {};
return options = merge({}, options), unwrappedOptions.group && "[object Object]" !== Object.prototype.toString.call(unwrappedOptions.group) && (unwrappedOptions.group = {
name: unwrappedOptions.group
}), merge(options, unwrappedOptions)
};
ko.bindingHandlers.draggable = {
sortableOptions: {
group: {
pull: "clone",
put: !1
},
sort: !1
},
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
return init(element, valueAccessor, allBindings, viewModel, 0, ko.bindingHandlers.draggable.sortableOptions)
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
return update(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions)
}
}, ko.bindingHandlers.sortable = {
sortableOptions: {
group: {
pull: !0,
put: !0
}
},
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
return init(element, valueAccessor, allBindings, viewModel, 0, ko.bindingHandlers.sortable.sortableOptions)
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
return update(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions)
}
}
});

View File

@@ -1,87 +0,0 @@
! function(factory) {
"use strict";
"function" == typeof define && define.amd ? define(["angular", "./Sortable"], factory) : "function" == typeof require && "object" == typeof exports && "object" == typeof module ? (require("angular"), factory(angular, require("./Sortable")), module.exports = "ng-sortable") : window.angular && window.Sortable && factory(angular, Sortable)
}(function(angular, Sortable) {
"use strict";
var expando = "Sortable:ng-sortable";
angular.module("ng-sortable", []).constant("ngSortableVersion", "0.4.0").constant("ngSortableConfig", {}).directive("ngSortable", ["$parse", "ngSortableConfig", function($parse, ngSortableConfig) {
var removed, nextSibling, getSourceFactory = function(el, scope) {
var ngRepeat = [].filter.call(el.childNodes, function(node) {
return 8 === node.nodeType && -1 !== node.nodeValue.indexOf("ngRepeat:")
})[0];
if (!ngRepeat) return function() {
return null
};
ngRepeat = ngRepeat.nodeValue.match(/ngRepeat:\s*(?:\(.*?,\s*)?([^\s)]+)[\s)]+in\s+([^\s|]+)/);
var itemsExpr = $parse(ngRepeat[2]);
return function() {
return itemsExpr(scope.$parent) || []
}
};
return {
restrict: "AC",
scope: {
ngSortable: "=?"
},
link: function(scope, $el) {
function _emitEvent(evt, item) {
var name = "on" + evt.type.charAt(0).toUpperCase() + evt.type.substr(1),
source = getSource();
options[name] && options[name]({
model: item || source[evt.newIndex],
models: source,
oldIndex: evt.oldIndex,
newIndex: evt.newIndex
})
}
function _sync(evt) {
var items = getSource();
if (items) {
var oldIndex = evt.oldIndex,
newIndex = evt.newIndex;
if (el !== evt.from) {
var prevItems = evt.from[expando]();
removed = prevItems[oldIndex], evt.clone ? (removed = angular.copy(removed), prevItems.splice(Sortable.utils.index(evt.clone), 0, prevItems.splice(oldIndex, 1)[0]), evt.from.removeChild(evt.clone)) : prevItems.splice(oldIndex, 1), items.splice(newIndex, 0, removed), evt.from.insertBefore(evt.item, nextSibling)
} else items.splice(newIndex, 0, items.splice(oldIndex, 1)[0]);
scope.$apply()
}
}
var sortable, el = $el[0],
options = angular.extend(scope.ngSortable || {}, ngSortableConfig),
watchers = [],
getSource = getSourceFactory(el, scope);
el[expando] = getSource, sortable = Sortable.create(el, Object.keys(options).reduce(function(opts, name) {
return opts[name] = opts[name] || options[name], opts
}, {
onStart: function(evt) {
nextSibling = evt.item.nextSibling, _emitEvent(evt), scope.$apply()
},
onEnd: function(evt) {
_emitEvent(evt, removed), scope.$apply()
},
onAdd: function(evt) {
_sync(evt), _emitEvent(evt, removed), scope.$apply()
},
onUpdate: function(evt) {
_sync(evt), _emitEvent(evt)
},
onRemove: function(evt) {
_emitEvent(evt, removed)
},
onSort: function(evt) {
_emitEvent(evt)
}
})), $el.on("$destroy", function() {
angular.forEach(watchers, function(unwatch) {
unwatch()
}), sortable.destroy(), el[expando] = null, el = null, watchers = null, sortable = null, nextSibling = null
}), angular.forEach(["sort", "disabled", "draggable", "handle", "animation", "group", "ghostClass", "filter", "onStart", "onEnd", "onAdd", "onUpdate", "onRemove", "onSort"], function(name) {
watchers.push(scope.$watch("ngSortable." + name, function(value) {
void 0 !== value && (options[name] = value, /^on[A-Z]/.test(name) || sortable.option(name, value))
}))
})
}
}
}])
});

View File

@@ -1,71 +0,0 @@
! function(factory) {
"use strict";
"undefined" != typeof module && void 0 !== module.exports ? module.exports = factory(require("./Sortable")) : "function" == typeof define && define.amd ? define(["./Sortable"], factory) : window.SortableMixin = factory(Sortable)
}(function(Sortable) {
"use strict";
function _getModelName(component) {
return component.sortableOptions && component.sortableOptions.model || _defaultOptions.model
}
function _getModelItems(component) {
var name = _getModelName(component);
return (component.state && component.state[name] || component.props[name]).slice()
}
function _extend(dst, src) {
for (var key in src) src.hasOwnProperty(key) && (dst[key] = src[key]);
return dst
}
var _nextSibling, _activeComponent, _defaultOptions = {
ref: "list",
model: "items",
animation: 100,
onStart: "handleStart",
onEnd: "handleEnd",
onAdd: "handleAdd",
onUpdate: "handleUpdate",
onRemove: "handleRemove",
onSort: "handleSort",
onFilter: "handleFilter",
onMove: "handleMove"
};
return {
sortableMixinVersion: "0.1.1",
_sortableInstance: null,
componentDidMount: function() {
var DOMNode, options = _extend(_extend({}, _defaultOptions), this.sortableOptions || {}),
copyOptions = _extend({}, options),
emitEvent = function(type, evt) {
var method = this[options[type]];
method && method.call(this, evt, this._sortableInstance)
}.bind(this);
"onStart onEnd onAdd onSort onUpdate onRemove onFilter onMove".split(" ").forEach(function(name) {
copyOptions[name] = function(evt) {
if ("onStart" === name) _nextSibling = evt.item.nextElementSibling, _activeComponent = this;
else if ("onAdd" === name || "onUpdate" === name) {
evt.from.insertBefore(evt.item, _nextSibling);
var remoteItems, item, newState = {},
remoteState = {},
oldIndex = evt.oldIndex,
newIndex = evt.newIndex,
items = _getModelItems(this);
"onAdd" === name ? (remoteItems = _getModelItems(_activeComponent), item = remoteItems.splice(oldIndex, 1)[0], items.splice(newIndex, 0, item), remoteState[_getModelName(_activeComponent)] = remoteItems) : items.splice(newIndex, 0, items.splice(oldIndex, 1)[0]), newState[_getModelName(this)] = items, copyOptions.stateHandler ? this[copyOptions.stateHandler](newState) : this.setState(newState), this !== _activeComponent && _activeComponent.setState(remoteState)
}
setTimeout(function() {
emitEvent(name, evt)
}, 0)
}.bind(this)
}, this), DOMNode = this.getDOMNode() ? (this.refs[options.ref] || this).getDOMNode() : this.refs[options.ref] || this, this._sortableInstance = Sortable.create(DOMNode, copyOptions)
},
componentWillReceiveProps: function(nextProps) {
var newState = {},
modelName = _getModelName(this),
items = nextProps[modelName];
items && (newState[modelName] = items, this.setState(newState))
},
componentWillUnmount: function() {
this._sortableInstance.destroy(), this._sortableInstance = null
}
}
});

View File

@@ -1,582 +0,0 @@
/**
* Swiper 3.3.1
* Most modern mobile touch slider and framework with hardware accelerated transitions
*
* http://www.idangero.us/swiper/
*
* Copyright 2016, Vladimir Kharlampidi
* The iDangero.us
* http://www.idangero.us/
*
* Licensed under MIT
*
* Released on: February 7, 2016
*/
.swiper-container {
margin: 0 auto;
position: relative;
overflow: hidden;
z-index: 1
}
.swiper-container-no-flexbox .swiper-slide {
float: left
}
.swiper-container-vertical>.swiper-wrapper {
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column
}
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
-ms-transition-property: -ms-transform;
transition-property: transform;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box
}
.swiper-container-android .swiper-slide,
.swiper-wrapper {
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-o-transform: translate(0, 0);
-ms-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
.swiper-container-multirow>.swiper-wrapper {
-webkit-box-lines: multiple;
-moz-box-lines: multiple;
-ms-flex-wrap: wrap;
-webkit-flex-wrap: wrap;
flex-wrap: wrap
}
.swiper-container-free-mode>.swiper-wrapper {
-webkit-transition-timing-function: ease-out;
-moz-transition-timing-function: ease-out;
-ms-transition-timing-function: ease-out;
-o-transition-timing-function: ease-out;
transition-timing-function: ease-out;
margin: 0 auto
}
.swiper-slide {
-webkit-flex-shrink: 0;
-ms-flex: 0 0 auto;
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative
}
.swiper-container-autoheight,
.swiper-container-autoheight .swiper-slide {
height: auto
}
.swiper-container-autoheight .swiper-wrapper {
-webkit-box-align: start;
-ms-flex-align: start;
-webkit-align-items: flex-start;
align-items: flex-start;
-webkit-transition-property: -webkit-transform, height;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
-ms-transition-property: -ms-transform;
transition-property: transform, height
}
.swiper-container .swiper-notification {
position: absolute;
left: 0;
top: 0;
pointer-events: none;
opacity: 0;
z-index: -1000
}
.swiper-wp8-horizontal {
-ms-touch-action: pan-y;
touch-action: pan-y
}
.swiper-wp8-vertical {
-ms-touch-action: pan-x;
touch-action: pan-x
}
.swiper-button-next,
.swiper-button-prev {
position: absolute;
top: 50%;
width: 27px;
height: 44px;
margin-top: -22px;
z-index: 10;
cursor: pointer;
-moz-background-size: 27px 44px;
-webkit-background-size: 27px 44px;
background-size: 27px 44px;
background-position: center;
background-repeat: no-repeat
}
.swiper-button-next.swiper-button-disabled,
.swiper-button-prev.swiper-button-disabled {
opacity: .35;
cursor: auto;
pointer-events: none
}
.swiper-button-prev,
.swiper-container-rtl .swiper-button-next {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
left: 10px;
right: auto
}
.swiper-button-prev.swiper-button-black,
.swiper-container-rtl .swiper-button-next.swiper-button-black {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")
}
.swiper-button-prev.swiper-button-white,
.swiper-container-rtl .swiper-button-next.swiper-button-white {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")
}
.swiper-button-next,
.swiper-container-rtl .swiper-button-prev {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
right: 10px;
left: auto
}
.swiper-button-next.swiper-button-black,
.swiper-container-rtl .swiper-button-prev.swiper-button-black {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")
}
.swiper-button-next.swiper-button-white,
.swiper-container-rtl .swiper-button-prev.swiper-button-white {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")
}
.swiper-pagination {
position: absolute;
text-align: center;
-webkit-transition: .3s;
-moz-transition: .3s;
-o-transition: .3s;
transition: .3s;
-webkit-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
z-index: 10
}
.swiper-pagination.swiper-pagination-hidden {
opacity: 0
}
.swiper-container-horizontal>.swiper-pagination-bullets,
.swiper-pagination-custom,
.swiper-pagination-fraction {
bottom: 10px;
left: 0;
width: 100%
}
.swiper-pagination-bullet {
width: 8px;
height: 8px;
display: inline-block;
border-radius: 100%;
background: #000;
opacity: .2
}
button.swiper-pagination-bullet {
border: none;
margin: 0;
padding: 0;
box-shadow: none;
-moz-appearance: none;
-ms-appearance: none;
-webkit-appearance: none;
appearance: none
}
.swiper-pagination-clickable .swiper-pagination-bullet {
cursor: pointer
}
.swiper-pagination-white .swiper-pagination-bullet {
background: #fff
}
.swiper-pagination-bullet-active {
opacity: 1;
background: #007aff
}
.swiper-pagination-white .swiper-pagination-bullet-active {
background: #fff
}
.swiper-pagination-black .swiper-pagination-bullet-active {
background: #000
}
.swiper-container-vertical>.swiper-pagination-bullets {
right: 10px;
top: 50%;
-webkit-transform: translate3d(0, -50%, 0);
-moz-transform: translate3d(0, -50%, 0);
-o-transform: translate(0, -50%);
-ms-transform: translate3d(0, -50%, 0);
transform: translate3d(0, -50%, 0)
}
.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet {
margin: 5px 0;
display: block
}
.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet {
margin: 0 5px
}
.swiper-pagination-progress {
background: rgba(0, 0, 0, .25);
position: absolute
}
.swiper-pagination-progress .swiper-pagination-progressbar {
background: #007aff;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
-webkit-transform: scale(0);
-ms-transform: scale(0);
-o-transform: scale(0);
transform: scale(0);
-webkit-transform-origin: left top;
-moz-transform-origin: left top;
-ms-transform-origin: left top;
-o-transform-origin: left top;
transform-origin: left top
}
.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
-webkit-transform-origin: right top;
-moz-transform-origin: right top;
-ms-transform-origin: right top;
-o-transform-origin: right top;
transform-origin: right top
}
.swiper-container-horizontal>.swiper-pagination-progress {
width: 100%;
height: 4px;
left: 0;
top: 0
}
.swiper-container-vertical>.swiper-pagination-progress {
width: 4px;
height: 100%;
left: 0;
top: 0
}
.swiper-pagination-progress.swiper-pagination-white {
background: rgba(255, 255, 255, .5)
}
.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
background: #fff
}
.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
background: #000
}
.swiper-container-3d {
-webkit-perspective: 1200px;
-moz-perspective: 1200px;
-o-perspective: 1200px;
perspective: 1200px
}
.swiper-container-3d .swiper-cube-shadow,
.swiper-container-3d .swiper-slide,
.swiper-container-3d .swiper-slide-shadow-bottom,
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
.swiper-container-3d .swiper-slide-shadow-top,
.swiper-container-3d .swiper-wrapper {
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
transform-style: preserve-3d
}
.swiper-container-3d .swiper-slide-shadow-bottom,
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
.swiper-container-3d .swiper-slide-shadow-top {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 10
}
.swiper-container-3d .swiper-slide-shadow-left {
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -moz-linear-gradient(right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -o-linear-gradient(right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: linear-gradient(to left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-3d .swiper-slide-shadow-right {
background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -moz-linear-gradient(left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: linear-gradient(to right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-3d .swiper-slide-shadow-top {
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: linear-gradient(to top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-3d .swiper-slide-shadow-bottom {
background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, 0)));
background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -moz-linear-gradient(top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: -o-linear-gradient(top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0));
background-image: linear-gradient(to bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-coverflow .swiper-wrapper,
.swiper-container-flip .swiper-wrapper {
-ms-perspective: 1200px
}
.swiper-container-cube,
.swiper-container-flip {
overflow: visible
}
.swiper-container-cube .swiper-slide,
.swiper-container-flip .swiper-slide {
pointer-events: none;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;
z-index: 1
}
.swiper-container-cube .swiper-slide .swiper-slide,
.swiper-container-flip .swiper-slide .swiper-slide {
pointer-events: none
}
.swiper-container-cube .swiper-slide-active,
.swiper-container-cube .swiper-slide-active .swiper-slide-active,
.swiper-container-flip .swiper-slide-active,
.swiper-container-flip .swiper-slide-active .swiper-slide-active {
pointer-events: auto
}
.swiper-container-cube .swiper-slide-shadow-bottom,
.swiper-container-cube .swiper-slide-shadow-left,
.swiper-container-cube .swiper-slide-shadow-right,
.swiper-container-cube .swiper-slide-shadow-top,
.swiper-container-flip .swiper-slide-shadow-bottom,
.swiper-container-flip .swiper-slide-shadow-left,
.swiper-container-flip .swiper-slide-shadow-right,
.swiper-container-flip .swiper-slide-shadow-top {
z-index: 0;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden
}
.swiper-container-cube .swiper-slide {
visibility: hidden;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
width: 100%;
height: 100%
}
.swiper-container-cube.swiper-container-rtl .swiper-slide {
-webkit-transform-origin: 100% 0;
-moz-transform-origin: 100% 0;
-ms-transform-origin: 100% 0;
transform-origin: 100% 0
}
.swiper-container-cube .swiper-slide-active,
.swiper-container-cube .swiper-slide-next,
.swiper-container-cube .swiper-slide-next+.swiper-slide,
.swiper-container-cube .swiper-slide-prev {
pointer-events: auto;
visibility: visible
}
.swiper-container-cube .swiper-cube-shadow {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 100%;
background: #000;
opacity: .6;
-webkit-filter: blur(50px);
filter: blur(50px);
z-index: 0
}
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
-webkit-transition-timing-function: ease-out;
-moz-transition-timing-function: ease-out;
-ms-transition-timing-function: ease-out;
-o-transition-timing-function: ease-out;
transition-timing-function: ease-out
}
.swiper-container-fade .swiper-slide {
pointer-events: none;
-webkit-transition-property: opacity;
-moz-transition-property: opacity;
-o-transition-property: opacity;
transition-property: opacity
}
.swiper-container-fade .swiper-slide .swiper-slide {
pointer-events: none
}
.swiper-container-fade .swiper-slide-active,
.swiper-container-fade .swiper-slide-active .swiper-slide-active {
pointer-events: auto
}
.swiper-scrollbar {
border-radius: 10px;
position: relative;
-ms-touch-action: none;
background: rgba(0, 0, 0, .1)
}
.swiper-container-horizontal>.swiper-scrollbar {
position: absolute;
left: 1%;
bottom: 3px;
z-index: 50;
height: 5px;
width: 98%
}
.swiper-container-vertical>.swiper-scrollbar {
position: absolute;
right: 3px;
top: 1%;
z-index: 50;
width: 5px;
height: 98%
}
.swiper-scrollbar-drag {
height: 100%;
width: 100%;
position: relative;
background: rgba(0, 0, 0, .5);
border-radius: 10px;
left: 0;
top: 0
}
.swiper-scrollbar-cursor-drag {
cursor: move
}
.swiper-lazy-preloader {
width: 42px;
height: 42px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -21px;
margin-top: -21px;
z-index: 10;
-webkit-transform-origin: 50%;
-moz-transform-origin: 50%;
transform-origin: 50%;
-webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
-moz-animation: swiper-preloader-spin 1s steps(12, end) infinite;
animation: swiper-preloader-spin 1s steps(12, end) infinite
}
.swiper-lazy-preloader:after {
display: block;
content: "";
width: 100%;
height: 100%;
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
background-position: 50%;
-webkit-background-size: 100%;
background-size: 100%;
background-repeat: no-repeat
}
.swiper-lazy-preloader-white:after {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")
}
@-webkit-keyframes swiper-preloader-spin {
100% {
-webkit-transform: rotate(360deg)
}
}
@keyframes swiper-preloader-spin {
100% {
transform: rotate(360deg)
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +0,0 @@
var version = "3.3.1";
Package.describe({
name: "nolimits4web:swiper",
summary: "iDangero.us Swiper - mobile touch slider with hardware accelerated transitions and native behavior",
version: version,
git: "https://github.com/nolimits4web/Swiper"
}), Package.onUse(function(api) {
api.versionsFrom("1.1.0.2"), api.addFiles(["dist/css/swiper.min.css", "dist/js/swiper.js"], ["client"])
}), Package.onTest(function(api) {});

View File

@@ -239,6 +239,7 @@ var requirejs, require, define;
}
function delayedError(e) {
console.log(e.stack);
return setTimeout(function() {
e.dynaId && trackedErrors[e.dynaId] || (trackedErrors[e.dynaId] = !0, req.onError(e))
}), e
@@ -265,7 +266,7 @@ var requirejs, require, define;
trackedErrors = obj(),
urlFetched = obj(),
bundlesMap = obj(),
asyncResolve = Promise.resolve();
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))
@@ -415,4 +416,4 @@ var requirejs, require, define;
baseUrl: subPath
})), topReq([dataMain])))
}
}(this, "undefined" != typeof Promise ? Promise : void 0);
}(this, "undefined" != typeof Promise ? Promise : void 0);

View File

@@ -1,6 +1,11 @@
define(["apiclientcore", "localassetmanager"], function(ApiClient, localassetmanager) {
//TODO: (vitorsemeano) modify this lines for webpack
define(["bower_components/apiclient/apiclientcore", "localassetmanager"], function(ApiClient, localassetmanager) {
"use strict";
if ("cordova" !== window.appMode && "android" !== window.appMode) {
return ApiClient;
}
function isLocalId(str) {
return startsWith(str, localPrefix)
}

View File

@@ -242,7 +242,7 @@ define(["events", "appStorage"], function(events, appStorage) {
var url = serverAddress || this._serverAddress;
if (!url) throw new Error("serverAddress is yet not set");
var lowered = url.toLowerCase();
return -1 === lowered.indexOf("/emby") && -1 === lowered.indexOf("/mediabrowser") && (url += "/emby"), "/" !== name.charAt(0) && (url += "/"), url += name, params && (params = paramsToString(params)) && (url += "?" + params), url
return "/" !== name.charAt(0) && (url += "/"), url += name, params && (params = paramsToString(params)) && (url += "?" + params), url
}, ApiClient.prototype.fetchWithFailover = function(request, enableReconnection) {
console.log("Requesting " + request.url), request.timeout = 3e4;
var instance = this;
@@ -303,6 +303,7 @@ define(["events", "appStorage"], function(events, appStorage) {
}, ApiClient.prototype.logout = function() {
stopBitrateDetection(this), this.closeWebSocket();
var done = function() {
appStorage.removeItem("user-" + this._currentUser.Id + "-" + this._currentUser.ServerId)
this.setAuthenticationInfo(null, null)
}.bind(this);
if (this.accessToken()) {
@@ -1189,14 +1190,12 @@ define(["events", "appStorage"], function(events, appStorage) {
data: JSON.stringify(info),
contentType: "application/json"
})
}, ApiClient.prototype.createUser = function(name) {
}, ApiClient.prototype.createUser = function(user) {
var url = this.getUrl("Users/New");
return this.ajax({
type: "POST",
url: url,
data: {
Name: name
},
data: user,
dataType: "json"
})
}, ApiClient.prototype.updateUser = function(user) {

View File

@@ -0,0 +1,53 @@
define([], function() {
"use strict";
function onCachePutFail(e) {
console.log(e);
}
function updateCache(instance) {
if (instance.cache) {
instance.cache.put("data", new Response(JSON.stringify(instance.localData))).catch(onCachePutFail);
}
}
function onCacheOpened(result) {
this.cache = result;
this.localData = {};
}
function MyStore() {
this.setItem = function(name, value) {
localStorage.setItem(name, value);
if (this.localData && this.localData[name] !== value) {
this.localData[name] = value;
updateCache(this);
}
};
this.getItem = function(name) {
return localStorage.getItem(name);
};
this.removeItem = function(name) {
localStorage.removeItem(name);
if (this.localData) {
delete this.localData[name];
updateCache(this);
}
};
try {
if (self.caches) {
self.caches.open("embydata").then(onCacheOpened.bind(this));
}
} catch (err) {
console.log("Error opening cache: " + err);
}
}
return new MyStore;
});

View File

@@ -36,11 +36,11 @@ define(["events", "apiclient", "appStorage"], function(events, apiClientFactory,
}
function updateServerInfo(server, systemInfo) {
server.Name = systemInfo.ServerName, systemInfo.Id && (server.Id = systemInfo.Id), systemInfo.LocalAddress && (server.LocalAddress = systemInfo.LocalAddress), systemInfo.WanAddress && (server.RemoteAddress = systemInfo.WanAddress)
server.Name = systemInfo.ServerName, systemInfo.Id && (server.Id = systemInfo.Id), systemInfo.LocalAddress && (server.LocalAddress = systemInfo.LocalAddress)
}
function getEmbyServerUrl(baseUrl, handler) {
return baseUrl + "/emby/" + handler
return baseUrl + "/" + handler
}
function getFetchPromise(request) {
@@ -269,12 +269,15 @@ define(["events", "apiclient", "appStorage"], function(events, apiClientFactory,
});
resolve(servers)
};
require(["serverdiscovery"], function(serverDiscovery) {
serverDiscovery.findServers(1e3).then(onFinish, function() {
if (window.NativeShell && typeof window.NativeShell.findServers === 'function') {
window.NativeShell.findServers(1e3).then(onFinish, function() {
onFinish([])
})
})
})
});
} else {
resolve([]);
}
});
}
function convertEndpointAddressToManualAddress(info) {
@@ -741,4 +744,4 @@ define(["events", "apiclient", "appStorage"], function(events, apiClientFactory,
}
}
}, ConnectionManager
});
});

View File

@@ -13,7 +13,7 @@ define(["events", "appStorage"], function(events, appStorage) {
}
function Credentials(key) {
this.key = key || "servercredentials3"
this.key = key || "jellyfin_credentials"
}
return Credentials.prototype.clear = function() {
this._credentials = null, appStorage.removeItem(this.key)

View File

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

View File

@@ -1,23 +0,0 @@
define([], function() {
"use strict";
function MyStore() {}
function updateCache(instance) {
instance.cache.put("data", new Response(JSON.stringify(instance.localData)))
}
return MyStore.prototype.init = function() {
var instance = this;
return caches.open("embydata").then(function(result) {
instance.cache = result, instance.localData = {}
})
}, MyStore.prototype.setItem = function(name, value) {
if (this.localData) {
this.localData[name] !== value && (this.localData[name] = value, updateCache(this))
}
}, MyStore.prototype.getItem = function(name) {
if (this.localData) return this.localData[name]
}, MyStore.prototype.removeItem = function(name) {
this.localData && (this.localData[name] = null, delete this.localData[name], updateCache(this))
}, new MyStore
});

View File

@@ -1,37 +0,0 @@
define([], function() {
"use strict";
function onCachePutFail(e) {
console.log(e)
}
function updateCache(instance) {
var cache = instance.cache;
cache && cache.put("data", new Response(JSON.stringify(instance.localData))).catch(onCachePutFail)
}
function onCacheOpened(result) {
this.cache = result, this.localData = {}
}
function MyStore() {
try {
self.caches && caches.open("embydata").then(onCacheOpened.bind(this))
} catch (err) {
console.log("Error opening cache: " + err)
}
}
return MyStore.prototype.setItem = function(name, value) {
localStorage.setItem(name, value);
var localData = this.localData;
if (localData) {
localData[name] !== value && (localData[name] = value, updateCache(this))
}
}, MyStore.prototype.getItem = function(name) {
return localStorage.getItem(name)
}, MyStore.prototype.removeItem = function(name) {
localStorage.removeItem(name);
var localData = this.localData;
localData && (localData[name] = null, delete localData[name], updateCache(this))
}, new MyStore
});

View File

@@ -1,14 +0,0 @@
define([], function() {
"use strict";
function MyStore() {
this.localData = {}
}
return MyStore.prototype.setItem = function(name, value) {
this.localData[name] = value
}, MyStore.prototype.getItem = function(name) {
return this.localData[name]
}, MyStore.prototype.removeItem = function(name) {
this.localData[name] = null
}, new MyStore
});

View File

@@ -1,8 +0,0 @@
define([], function() {
"use strict";
function FileUpload() {}
return FileUpload.prototype.upload = function(file, url) {
return Promise.reject()
}, FileUpload
});

View File

@@ -1,8 +0,0 @@
define([], function() {
"use strict";
return {
findServers: function(timeoutMs) {
return Promise.resolve([])
}
}
});

View File

@@ -1,15 +0,0 @@
define([], function() {
"use strict";
function send(info) {
return Promise.reject()
}
function isSupported() {
return !1
}
return {
send: send,
isSupported: isSupported
}
});

View File

@@ -1,34 +0,0 @@
define(['dialog', 'globalize'], function (dialog, globalize) {
'use strict';
return function (text, title) {
var options;
if (typeof text === 'string') {
options = {
title: title,
text: text
};
} else {
options = text;
}
var items = [];
items.push({
name: globalize.translate('ButtonGotIt'),
id: 'ok',
type: 'submit'
});
options.buttons = items;
return dialog(options).then(function (result) {
if (result === 'ok') {
return Promise.resolve();
}
return Promise.reject();
});
};
});

View File

@@ -1,23 +0,0 @@
define([], function () {
'use strict';
function replaceAll(str, find, replace) {
return str.split(find).join(replace);
}
return function (options) {
if (typeof options === 'string') {
options = {
text: options
};
}
var text = replaceAll(options.text || '', '<br/>', '\n');
alert(text);
return Promise.resolve();
};
});

View File

@@ -1,7 +0,0 @@
.card-round:focus > .cardBox-focustransform {
transform: scale(1.26, 1.26);
}
.cardImageContainer-round, .cardImage-round {
border-radius: 1000px;
}

View File

@@ -1,60 +0,0 @@
.emby-scrollbuttons-scroller {
position: relative;
}
.scrollbuttoncontainer {
position: absolute;
top: 0;
bottom: 0;
align-items: center;
justify-content: center;
z-index: 1;
font-size: 3em;
color: #fff;
display: none;
overflow: hidden;
}
.scrollbuttoncontainer-left {
background: rgba(20, 20, 20, .5);
background: -moz-linear-gradient(left,#000 0,rgba(0,0,0,0) 100%);
background: -webkit-linear-gradient(left,#000 0,rgba(0,0,0,0) 100%);
background: linear-gradient(to right,#000,rgba(0,0,0,0));
}
.scrollbuttoncontainer-right {
background: rgba(20, 20, 20, .5);
background: -moz-linear-gradient(right,#000 0,rgba(0,0,0,0) 100%);
background: -webkit-linear-gradient(right,#000 0,rgba(0,0,0,0) 100%);
background: linear-gradient(to left,#000,rgba(0,0,0,0));
}
.emby-scrollbuttons-scroller:hover .scrollbuttoncontainer {
display: flex;
}
.scrollbuttoncontainer-left {
left: 0;
}
.scrollbuttoncontainer-right {
right: 0;
}
.emby-scrollbuttons-scrollbutton {
margin: 0 -.2em;
transition: transform 160ms ease-out;
}
.scrollbuttoncontainer:hover > .emby-scrollbuttons-scrollbutton {
transform: scale(1.3, 1.3);
}
.emby-scrollbuttons-scrollbutton:after {
content: '';
display: none !important;
}
.emby-scrollbuttons-scrollbutton:focus {
color: inherit !important;
}

View File

@@ -1,12 +0,0 @@
define(['multi-download'], function (multiDownload) {
'use strict';
return {
download: function (items) {
multiDownload(items.map(function (item) {
return item.url;
}));
}
};
});

View File

@@ -1,12 +0,0 @@
define([], function () {
'use strict';
return {
fileExists: function (path) {
return Promise.reject();
},
directoryExists: function (path) {
return Promise.reject();
}
};
});

View File

@@ -1,26 +0,0 @@
define(['dom', 'fullscreenManager'], function (dom, fullscreenManager) {
'use strict';
function isTargetValid(target) {
if (dom.parentWithTag(target, ['BUTTON', 'INPUT', 'TEXTAREA'])) {
return false;
}
return true;
}
dom.addEventListener(window, 'dblclick', function (e) {
if (isTargetValid(e.target)) {
if (fullscreenManager.isFullScreen()) {
fullscreenManager.exitFullscreen();
} else {
fullscreenManager.requestFullscreen();
}
}
}, {
passive: true
});
});

View File

@@ -1,88 +0,0 @@
define(['dialogHelper', 'layoutManager', 'globalize', 'require', 'events', 'homescreenSettings', 'paper-icon-button-light', 'css!./../formdialog'], function (dialogHelper, layoutManager, globalize, require, events, HomescreenSettings) {
'use strict';
function centerFocus(elem, horiz, on) {
require(['scrollHelper'], function (scrollHelper) {
var fn = on ? 'on' : 'off';
scrollHelper.centerFocus[fn](elem, horiz);
});
}
function show(options) {
return new Promise(function (resolve, reject) {
require(['text!./homescreensettingsdialog.template.html'], function (template) {
var dialogOptions = {
removeOnClose: true,
scrollY: false
};
if (layoutManager.tv) {
dialogOptions.size = 'fullscreen';
} else {
dialogOptions.size = 'medium-tall';
}
var dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add('formDialog');
var html = '';
var submitted = false;
html += globalize.translateDocument(template, 'core');
dlg.innerHTML = html;
if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, true);
}
var homescreenSettingsInstance = new HomescreenSettings({
serverId: options.serverId,
userId: options.userId,
element: dlg.querySelector('.settingsContent'),
userSettings: options.userSettings,
enableSaveButton: false,
enableSaveConfirmation: false
});
dialogHelper.open(dlg);
dlg.addEventListener('close', function () {
if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false);
}
if (submitted) {
resolve();
} else {
reject();
}
});
dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
dialogHelper.close(dlg);
});
dlg.querySelector('.btnSave').addEventListener('click', function (e) {
submitted = true;
homescreenSettingsInstance.submit();
});
events.on(homescreenSettingsInstance, 'saved', function () {
submitted = true;
dialogHelper.close(dlg);
});
});
});
}
return {
show: show
};
});

View File

@@ -1,22 +0,0 @@
<div class="formDialogHeader">
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="md-icon">&#xE5C4;</i></button>
<h3 class="formDialogHeaderTitle">
${HeaderDisplaySettings}
</h3>
</div>
<div class="formDialogContent smoothScrollY">
<div class="dialogContentInner dialog-content-centered">
<div class="settingsContent">
</div>
<div class="formDialogFooter">
<button is="emby-button" type="button" class="raised button-submit block formDialogFooterItem btnSave">
<span>${Save}</span>
</button>
</div>
</div>
</div>

View File

@@ -1,11 +0,0 @@
.homeLibraryButton {
min-width: 18%;
margin: .5em !important;
}
@media all and (max-width: 50em) {
.homeLibraryButton {
width: 46% !important;
}
}

View File

@@ -1,44 +0,0 @@
<div class="formDialogHeader">
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="md-icon">&#xE5C4;</i></button>
<h3 class="formDialogHeaderTitle">
${Search}
</h3>
</div>
<div class="formDialogContent">
<div class="dialogContentInner">
<div class="flex align-items-center justify-content-center flex-wrap-wrap" style="margin: 2em 0;">
<div style="margin: 0;">
<label for="selectImageProvider" style="display: inline-block;">${LabelSource}</label>
<select id="selectImageProvider" style="padding-left:.5em;padding-right:0;display: inline-block;width:auto!important;">
<option value="">${All}</option>
</select>
</div>
<div style="margin-left:1em;">
<label for="selectBrowsableImageType" style="display: inline-block;">${LabelType}</label>
<select id="selectBrowsableImageType" style="padding-left:.5em;padding-right:0;display: inline-block;width:auto!important;">
<option value="Primary">${Primary}</option>
<option value="Art">${Art}</option>
<option value="Backdrop">${Backdrop}</option>
<option value="Banner">${Banner}</option>
<option value="Box">${Box}</option>
<option value="BoxRear">${BoxRear}</option>
<option value="Disc">${Disc}</option>
<option value="Logo">${Logo}</option>
<option value="Menu">${Menu}</option>
<option value="Screenshot">${Screenshot}</option>
<option value="Thumb">${Thumb}</option>
</select>
</div>
<div class="availableImagesPaging" style="margin-left:1em;"></div>
<label style="margin: 0 0 0 1em;width:auto;">
<input id="chkAllLanguages" type="checkbox" is="emby-checkbox" />
<span>${AllLanguages}</span>
</label>
</div>
<div class="availableImagesList vertical-wrap centered"></div>
</div>
</div>

View File

@@ -1,255 +0,0 @@
define(['lazyLoader', 'imageFetcher', 'layoutManager', 'browser', 'appSettings', 'require', 'css!./style'], function (lazyLoader, imageFetcher, layoutManager, browser, appSettings, require) {
'use strict';
var requestIdleCallback = window.requestIdleCallback || function (fn) {
fn();
};
var self = {};
// seeing slow performance with firefox
var enableFade = false;
function fillImage(elem, source, enableEffects) {
if (!elem) {
throw new Error('elem cannot be null');
}
if (!source) {
source = elem.getAttribute('data-src');
}
if (!source) {
return;
}
fillImageElement(elem, source, enableEffects);
}
function fillImageElement(elem, source, enableEffects) {
imageFetcher.loadImage(elem, source).then(function () {
var fillingVibrant = false;//fillVibrant(elem, source);
if (enableFade && enableEffects !== false && !fillingVibrant) {
fadeIn(elem);
}
elem.removeAttribute("data-src");
});
}
function fillVibrant(img, url, canvas, canvasContext) {
var vibrantElement = img.getAttribute('data-vibrant');
if (!vibrantElement) {
return false;
}
if (window.Vibrant) {
fillVibrantOnLoaded(img, url, vibrantElement, canvas, canvasContext);
return true;
}
require(['vibrant'], function () {
fillVibrantOnLoaded(img, url, vibrantElement, canvas, canvasContext);
});
return true;
}
function fillVibrantOnLoaded(img, url, vibrantElement) {
vibrantElement = document.getElementById(vibrantElement);
if (!vibrantElement) {
return;
}
requestIdleCallback(function () {
//var now = new Date().getTime();
getVibrantInfoFromElement(img, url).then(function (vibrantInfo) {
var swatch = vibrantInfo.split('|');
//console.log('vibrant took ' + (new Date().getTime() - now) + 'ms');
if (swatch.length) {
var index = 0;
var style = vibrantElement.style;
style.backgroundColor = swatch[index];
style.color = swatch[index + 1];
var classList = vibrantElement.classList;
if (classList.contains('cardFooter')) {
classList.add('cardFooter-vibrant');
} else {
classList.add('vibrant');
}
}
});
});
/*
* Results into:
* Vibrant #7a4426
* Muted #7b9eae
* DarkVibrant #348945
* DarkMuted #141414
* LightVibrant #f3ccb4
*/
}
function getVibrantInfoFromElement(elem, url) {
return new Promise(function (resolve, reject) {
require(['vibrant'], function () {
if (elem.tagName === 'IMG') {
resolve(getVibrantInfo(elem, url));
return;
}
var img = new Image();
img.onload = function () {
resolve(getVibrantInfo(img, url));
};
img.src = url;
});
});
}
function getSettingsKey(url) {
var parts = url.split('://');
url = parts[parts.length - 1];
url = url.substring(url.indexOf('/') + 1);
url = url.split('?')[0];
var cacheKey = 'vibrant31';
//cacheKey = 'vibrant' + new Date().getTime();
return cacheKey + url;
}
function getCachedVibrantInfo(url) {
return appSettings.get(getSettingsKey(url));
}
function getVibrantInfo(img, url) {
var value = getCachedVibrantInfo(url);
if (value) {
return value;
}
var vibrant = new Vibrant(img);
var swatches = vibrant.swatches();
value = '';
var swatch = swatches.DarkVibrant;
value += getSwatchString(swatch);
appSettings.set(getSettingsKey(url), value);
return value;
}
function getSwatchString(swatch) {
if (swatch) {
return swatch.getHex() + '|' + swatch.getBodyTextColor() + '|' + swatch.getTitleTextColor();
}
return '||';
}
function fadeIn(elem) {
var cssClass = 'lazy-image-fadein';
elem.classList.add(cssClass);
}
function lazyChildren(elem) {
lazyLoader.lazyChildren(elem, fillImage);
}
function getPrimaryImageAspectRatio(items) {
var values = [];
for (var i = 0, length = items.length; i < length; i++) {
var ratio = items[i].PrimaryImageAspectRatio || 0;
if (!ratio) {
continue;
}
values[values.length] = ratio;
}
if (!values.length) {
return null;
}
// Use the median
values.sort(function (a, b) { return a - b; });
var half = Math.floor(values.length / 2);
var result;
if (values.length % 2) {
result = values[half];
}
else {
result = (values[half - 1] + values[half]) / 2.0;
}
// If really close to 2:3 (poster image), just return 2:3
var aspect2x3 = 2 / 3;
if (Math.abs(aspect2x3 - result) <= 0.15) {
return aspect2x3;
}
// If really close to 16:9 (episode image), just return 16:9
var aspect16x9 = 16 / 9;
if (Math.abs(aspect16x9 - result) <= 0.2) {
return aspect16x9;
}
// If really close to 1 (square image), just return 1
if (Math.abs(1 - result) <= 0.15) {
return 1;
}
// If really close to 4:3 (poster image), just return 2:3
var aspect4x3 = 4 / 3;
if (Math.abs(aspect4x3 - result) <= 0.15) {
return aspect4x3;
}
return result;
}
function fillImages(elems) {
for (var i = 0, length = elems.length; i < length; i++) {
var elem = elems[0];
fillImage(elem);
}
}
self.fillImages = fillImages;
self.lazyImage = fillImage;
self.lazyChildren = lazyChildren;
self.getPrimaryImageAspectRatio = getPrimaryImageAspectRatio;
self.getCachedVibrantInfo = getCachedVibrantInfo;
self.getVibrantInfoFromElement = getVibrantInfoFromElement;
return self;
});

View File

@@ -1,672 +0,0 @@
define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', 'playbackManager', 'loading', 'appSettings', 'browser', 'actionsheet'], function (appHost, globalize, connectionManager, itemHelper, appRouter, playbackManager, loading, appSettings, browser, actionsheet) {
'use strict';
function getCommands(options) {
var item = options.item;
var canPlay = playbackManager.canPlay(item);
var commands = [];
var user = options.user;
var restrictOptions = (browser.operaTv || browser.web0s) && !user.Policy.IsAdministrator;
if (canPlay && item.MediaType !== 'Photo') {
if (options.play !== false) {
commands.push({
name: globalize.translate('Play'),
id: 'resume'
});
}
if (options.playAllFromHere && item.Type !== 'Program' && item.Type !== 'TvChannel') {
commands.push({
name: globalize.translate('PlayAllFromHere'),
id: 'playallfromhere'
});
}
}
if (playbackManager.canQueue(item)) {
if (options.queue !== false) {
commands.push({
name: globalize.translate('AddToPlayQueue'),
id: 'queue'
});
}
if (options.queue !== false) {
commands.push({
name: globalize.translate('PlayNext'),
id: 'queuenext'
});
}
//if (options.queueAllFromHere) {
// commands.push({
// name: globalize.translate('QueueAllFromHere'),
// id: 'queueallfromhere'
// });
//}
}
if (item.IsFolder || item.Type === "MusicArtist" || item.Type === "MusicGenre") {
if (item.CollectionType !== 'livetv') {
if (options.shuffle !== false) {
commands.push({
name: globalize.translate('Shuffle'),
id: 'shuffle'
});
}
}
}
if (item.MediaType === "Audio" || item.Type === "MusicAlbum" || item.Type === "MusicArtist" || item.Type === "MusicGenre") {
if (options.instantMix !== false && !itemHelper.isLocalItem(item)) {
commands.push({
name: globalize.translate('InstantMix'),
id: 'instantmix'
});
}
}
if (commands.length) {
commands.push({
divider: true
});
}
if (!restrictOptions) {
if (itemHelper.supportsAddingToCollection(item)) {
commands.push({
name: globalize.translate('AddToCollection'),
id: 'addtocollection'
});
}
if (itemHelper.supportsAddingToPlaylist(item)) {
commands.push({
name: globalize.translate('AddToPlaylist'),
id: 'addtoplaylist'
});
}
}
if ((item.Type === 'Timer') && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
commands.push({
name: globalize.translate('CancelRecording'),
id: 'canceltimer'
});
}
if ((item.Type === 'Recording' && item.Status === 'InProgress') && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
commands.push({
name: globalize.translate('CancelRecording'),
id: 'canceltimer'
});
}
if ((item.Type === 'SeriesTimer') && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
commands.push({
name: globalize.translate('CancelSeries'),
id: 'cancelseriestimer'
});
}
if (itemHelper.canConvert(item, user, connectionManager.getApiClient(item))) {
commands.push({
name: globalize.translate('Convert'),
id: 'convert'
});
}
if (item.CanDelete && options.deleteItem !== false) {
if (item.Type === 'Playlist' || item.Type === 'BoxSet') {
commands.push({
name: globalize.translate('Delete'),
id: 'delete'
});
} else {
commands.push({
name: globalize.translate('DeleteMedia'),
id: 'delete'
});
}
}
if (item.CanDownload && appHost.supports('filedownload')) {
commands.push({
name: globalize.translate('Download'),
id: 'download'
});
}
if (appHost.supports('sync') && options.syncLocal !== false) {
if (itemHelper.canSync(user, item)) {
commands.push({
name: globalize.translate('Download'),
id: 'synclocal'
});
}
}
var canEdit = itemHelper.canEdit(user, item);
if (canEdit) {
if (options.edit !== false && item.Type !== 'SeriesTimer') {
var text = (item.Type === 'Timer' || item.Type === 'SeriesTimer') ? globalize.translate('Edit') : globalize.translate('EditMetadata');
commands.push({
name: text,
id: 'edit'
});
}
}
if (itemHelper.canEditImages(user, item)) {
if (options.editImages !== false) {
commands.push({
name: globalize.translate('EditImages'),
id: 'editimages'
});
}
}
if (canEdit) {
if (item.MediaType === 'Video' && item.Type !== 'TvChannel' && item.Type !== 'Program' && item.LocationType !== 'Virtual' && !(item.Type === 'Recording' && item.Status !== 'Completed')) {
if (options.editSubtitles !== false) {
commands.push({
name: globalize.translate('EditSubtitles'),
id: 'editsubtitles'
});
}
}
}
if (options.identify !== false) {
if (itemHelper.canIdentify(user, item)) {
commands.push({
name: globalize.translate('Identify'),
id: 'identify'
});
}
}
if (item.Type === 'Program' && options.record !== false) {
if (item.TimerId) {
commands.push({
name: Globalize.translate('ManageRecording'),
id: 'record'
});
}
}
if (item.Type === 'Program' && options.record !== false) {
if (!item.TimerId) {
commands.push({
name: Globalize.translate('Record'),
id: 'record'
});
}
}
if (itemHelper.canRefreshMetadata(item, user)) {
commands.push({
name: globalize.translate('RefreshMetadata'),
id: 'refresh'
});
}
if (item.PlaylistItemId && options.playlistId) {
commands.push({
name: globalize.translate('RemoveFromPlaylist'),
id: 'removefromplaylist'
});
}
if (options.collectionId) {
commands.push({
name: globalize.translate('RemoveFromCollection'),
id: 'removefromcollection'
});
}
if (!restrictOptions) {
if (options.share === true) {
if (itemHelper.canShare(item, user)) {
commands.push({
name: globalize.translate('Share'),
id: 'share'
});
}
}
}
if (options.sync !== false) {
if (itemHelper.canSync(user, item)) {
commands.push({
name: globalize.translate('Sync'),
id: 'sync'
});
}
}
if (options.openAlbum !== false && item.AlbumId && item.MediaType !== 'Photo') {
commands.push({
name: Globalize.translate('ViewAlbum'),
id: 'album'
});
}
if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) {
commands.push({
name: Globalize.translate('ViewArtist'),
id: 'artist'
});
}
return commands;
}
function getResolveFunction(resolve, id, changed, deleted) {
return function () {
resolve({
command: id,
updated: changed,
deleted: deleted
});
};
}
function executeCommand(item, id, options) {
var itemId = item.Id;
var serverId = item.ServerId;
var apiClient = connectionManager.getApiClient(serverId);
return new Promise(function (resolve, reject) {
switch (id) {
case 'addtocollection':
{
require(['collectionEditor'], function (collectionEditor) {
new collectionEditor().show({
items: [itemId],
serverId: serverId
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
});
break;
}
case 'addtoplaylist':
{
require(['playlistEditor'], function (playlistEditor) {
new playlistEditor().show({
items: [itemId],
serverId: serverId
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
});
break;
}
case 'download':
{
require(['fileDownloader'], function (fileDownloader) {
var downloadHref = apiClient.getItemDownloadUrl(itemId);
fileDownloader.download([
{
url: downloadHref,
itemId: itemId,
serverId: serverId
}]);
getResolveFunction(getResolveFunction(resolve, id), id)();
});
break;
}
case 'editsubtitles':
{
require(['subtitleEditor'], function (subtitleEditor) {
subtitleEditor.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
});
break;
}
case 'edit':
{
editItem(apiClient, item).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
break;
}
case 'editimages':
{
require(['imageEditor'], function (imageEditor) {
imageEditor.show({
itemId: itemId,
serverId: serverId
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
});
break;
}
case 'identify':
{
require(['itemIdentifier'], function (itemIdentifier) {
itemIdentifier.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
});
break;
}
case 'refresh':
{
refresh(apiClient, item);
getResolveFunction(resolve, id)();
break;
}
case 'open':
{
appRouter.showItem(item);
getResolveFunction(resolve, id)();
break;
}
case 'play':
{
play(item, false);
getResolveFunction(resolve, id)();
break;
}
case 'resume':
{
play(item, true);
getResolveFunction(resolve, id)();
break;
}
case 'queue':
{
play(item, false, true);
getResolveFunction(resolve, id)();
break;
}
case 'queuenext':
{
play(item, false, true, true);
getResolveFunction(resolve, id)();
break;
}
case 'record':
require(['recordingCreator'], function (recordingCreator) {
recordingCreator.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
});
break;
case 'shuffle':
{
playbackManager.shuffle(item);
getResolveFunction(resolve, id)();
break;
}
case 'instantmix':
{
playbackManager.instantMix(item);
getResolveFunction(resolve, id)();
break;
}
case 'delete':
{
deleteItem(apiClient, item).then(getResolveFunction(resolve, id, true, true), getResolveFunction(resolve, id));
break;
}
case 'share':
{
navigator.share({
title: item.Name,
text: item.Overview,
url: "https://github.com/jellyfin/jellyfin"
});
break;
}
case 'album':
{
appRouter.showItem(item.AlbumId, item.ServerId);
getResolveFunction(resolve, id)();
break;
}
case 'artist':
{
appRouter.showItem(item.ArtistItems[0].Id, item.ServerId);
getResolveFunction(resolve, id)();
break;
}
case 'playallfromhere':
{
getResolveFunction(resolve, id)();
break;
}
case 'queueallfromhere':
{
getResolveFunction(resolve, id)();
break;
}
case 'convert':
{
require(['syncDialog'], function (syncDialog) {
syncDialog.showMenu({
items: [item],
serverId: serverId,
mode: 'convert'
});
});
getResolveFunction(resolve, id)();
break;
}
case 'sync':
{
require(['syncDialog'], function (syncDialog) {
syncDialog.showMenu({
items: [item],
serverId: serverId,
mode: 'sync'
});
});
getResolveFunction(resolve, id)();
break;
}
case 'synclocal':
{
require(['syncDialog'], function (syncDialog) {
syncDialog.showMenu({
items: [item],
serverId: serverId,
mode: 'download'
});
});
getResolveFunction(resolve, id)();
break;
}
case 'removefromplaylist':
apiClient.ajax({
url: apiClient.getUrl('Playlists/' + options.playlistId + '/Items', {
EntryIds: [item.PlaylistItemId].join(',')
}),
type: 'DELETE'
}).then(function () {
getResolveFunction(resolve, id, true)();
});
break;
case 'removefromcollection':
apiClient.ajax({
type: "DELETE",
url: apiClient.getUrl("Collections/" + options.collectionId + "/Items", {
Ids: [item.Id].join(',')
})
}).then(function () {
getResolveFunction(resolve, id, true)();
});
break;
case 'canceltimer':
deleteTimer(apiClient, item, resolve, id);
break;
case 'cancelseriestimer':
deleteSeriesTimer(apiClient, item, resolve, id);
break;
default:
reject();
break;
}
});
}
function deleteTimer(apiClient, item, resolve, command) {
require(['recordingHelper'], function (recordingHelper) {
var timerId = item.TimerId || item.Id;
recordingHelper.cancelTimerWithConfirmation(timerId, item.ServerId).then(function () {
getResolveFunction(resolve, command, true)();
});
});
}
function deleteSeriesTimer(apiClient, item, resolve, command) {
require(['recordingHelper'], function (recordingHelper) {
recordingHelper.cancelSeriesTimerWithConfirmation(item.Id, item.ServerId).then(function () {
getResolveFunction(resolve, command, true)();
});
});
}
function play(item, resume, queue, queueNext) {
var method = queue ? (queueNext ? 'queueNext' : 'queue') : 'play';
var startPosition = 0;
if (resume && item.UserData && item.UserData.PlaybackPositionTicks) {
startPosition = item.UserData.PlaybackPositionTicks;
}
if (item.Type === 'Program') {
playbackManager[method]({
ids: [item.ChannelId],
startPositionTicks: startPosition,
serverId: item.ServerId
});
} else {
playbackManager[method]({
items: [item],
startPositionTicks: startPosition
});
}
}
function editItem(apiClient, item) {
return new Promise(function (resolve, reject) {
var serverId = apiClient.serverInfo().Id;
if (item.Type === 'Timer') {
require(['recordingEditor'], function (recordingEditor) {
recordingEditor.show(item.Id, serverId).then(resolve, reject);
});
} else if (item.Type === 'SeriesTimer') {
require(['seriesRecordingEditor'], function (recordingEditor) {
recordingEditor.show(item.Id, serverId).then(resolve, reject);
});
} else {
require(['metadataEditor'], function (metadataEditor) {
metadataEditor.show(item.Id, serverId).then(resolve, reject);
});
}
});
}
function deleteItem(apiClient, item) {
return new Promise(function (resolve, reject) {
require(['deleteHelper'], function (deleteHelper) {
deleteHelper.deleteItem({
item: item,
navigate: false
}).then(function () {
resolve(true);
}, reject);
});
});
}
function refresh(apiClient, item) {
require(['refreshDialog'], function (refreshDialog) {
new refreshDialog({
itemIds: [item.Id],
serverId: apiClient.serverInfo().Id,
mode: item.Type === 'CollectionFolder' ? 'scan' : null
}).show();
});
}
function show(options) {
var commands = getCommands(options);
if (!commands.length) {
return Promise.reject();
}
return actionsheet.show({
items: commands,
positionTo: options.positionTo,
resolveOnClick: ['share']
}).then(function (id) {
return executeCommand(options.item, id, options);
});
}
return {
getCommands: getCommands,
show: show
};
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -1,80 +0,0 @@
define(['playbackManager', 'itemHelper'], function (playbackManager, itemHelper) {
"use strict";
function getRequirePromise(deps) {
return new Promise(function (resolve, reject) {
require(deps, resolve);
});
}
function validatePlayback(options) {
var feature = 'playback';
if (options.item && (options.item.Type === 'TvChannel' || options.item.Type === 'Recording')) {
feature = 'livetv';
}
if (feature === 'playback') {
var player = playbackManager.getCurrentPlayer();
if (player && !player.isLocalPlayer) {
return Promise.resolve();
}
}
return getRequirePromise(["registrationServices"]).then(function (registrationServices) {
return registrationServices.validateFeature(feature, options).then(function (result) {
if (result && result.enableTimeLimit) {
startAutoStopTimer();
}
});
});
}
var autoStopTimeout;
function startAutoStopTimer() {
stopAutoStopTimer();
autoStopTimeout = setTimeout(onAutoStopTimeout, 63000);
}
function onAutoStopTimeout() {
stopAutoStopTimer();
playbackManager.stop();
}
function stopAutoStopTimer() {
var timeout = autoStopTimeout;
if (timeout) {
clearTimeout(timeout);
autoStopTimeout = null;
}
}
function PlaybackValidation() {
this.name = 'Playback validation';
this.type = 'preplayintercept';
this.id = 'playbackvalidation';
this.order = -1;
}
PlaybackValidation.prototype.intercept = function (options) {
// Don't care about video backdrops, or theme music or any kind of non-fullscreen playback
if (!options.fullscreen) {
return Promise.resolve();
}
if (options.item && itemHelper.isLocalItem(options.item)) {
return Promise.resolve();
}
return validatePlayback(options);
};
return PlaybackValidation;
});

View File

@@ -1,25 +0,0 @@
if (!Array.prototype.filter) {
Array.prototype.filter = function (fun /*, thisp*/) {
"use strict";
if (this == null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t) {
var val = t[i]; // in case fun mutates this
if (fun.call(thisp, val, i, t))
res.push(val);
}
}
return res;
};
}

View File

@@ -1,27 +0,0 @@
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== 'function') {
// closest thing possible to the ECMAScript 5
// internal IsCallable function
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () { },
fBound = function () {
return fToBind.apply(this instanceof fNOP
? this
: oThis,
aArgs.concat(Array.prototype.slice.call(arguments)));
};
if (this.prototype) {
// Function.prototype doesn't have a prototype property
fNOP.prototype = this.prototype;
}
fBound.prototype = new fNOP();
return fBound;
};
}

View File

@@ -1,31 +0,0 @@
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
// MIT license
(function () {
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame']
|| window[vendors[x] + 'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame)
window.requestAnimationFrame = function (callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function () { callback(currTime + timeToCall); },
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
}());

View File

@@ -1,16 +0,0 @@
define(['appSettings', 'loading', 'apphost', 'events', 'shell', 'globalize', 'dialogHelper', 'connectionManager', 'layoutManager', 'emby-button', 'emby-linkbutton'], function (appSettings, loading, appHost, events, shell, globalize, dialogHelper, connectionManager, layoutManager) {
'use strict';
function validateFeature(feature, options) {
return Promise.resolve();
}
function showPremiereInfo() {
return Promise.resolve();
}
return {
validateFeature: validateFeature,
showPremiereInfo: showPremiereInfo
};
});

View File

@@ -1,6 +0,0 @@
self.addEventListener('sync', function (event) {
'use strict';
if (event.tag === 'emby-sync') {
}
});

View File

@@ -1,21 +0,0 @@
define([], function () {
'use strict';
return {
openUrl: function (url) {
window.open(url, '_blank');
},
canExec: false,
exec: function (options) {
// options.path
// options.arguments
return Promise.reject();
},
enableFullscreen: function () {
// do nothing since this is for native apps
},
disableFullscreen: function () {
// do nothing since this is for native apps
}
};
});

View File

@@ -1,355 +0,0 @@
define(['apphost', 'userSettings', 'browser', 'events', 'pluginManager', 'backdrop', 'globalize', 'require', 'appSettings'], function (appHost, userSettings, browser, events, pluginManager, backdrop, globalize, require, appSettings) {
'use strict';
var currentSkin;
function getCurrentSkin() {
return currentSkin;
}
function getRequirePromise(deps) {
return new Promise(function (resolve, reject) {
require(deps, resolve);
});
}
function loadSkin(id) {
var newSkin = pluginManager.plugins().filter(function (p) {
return p.id === id;
})[0];
if (!newSkin) {
newSkin = pluginManager.plugins().filter(function (p) {
return p.id === 'defaultskin';
})[0];
}
var unloadPromise;
if (currentSkin) {
if (currentSkin.id === newSkin.id) {
// Nothing to do, it's already the active skin
return Promise.resolve(currentSkin);
}
unloadPromise = unloadSkin(currentSkin);
} else {
unloadPromise = Promise.resolve();
}
return unloadPromise.then(function () {
var deps = newSkin.getDependencies();
console.log('Loading skin dependencies');
return getRequirePromise(deps).then(function () {
console.log('Skin dependencies loaded');
var strings = newSkin.getTranslations ? newSkin.getTranslations() : [];
return globalize.loadStrings({
name: newSkin.id,
strings: strings
}).then(function () {
globalize.defaultModule(newSkin.id);
return loadSkinHeader(newSkin);
});
});
});
}
function unloadSkin(skin) {
unloadTheme();
backdrop.clear();
console.log('Unloading skin: ' + skin.name);
// TODO: unload css
return skin.unload().then(function () {
document.dispatchEvent(new CustomEvent("skinunload", {
detail: {
name: skin.name
}
}));
});
}
function loadSkinHeader(skin) {
return getSkinHeader(skin).then(function (headerHtml) {
document.querySelector('.skinHeader').innerHTML = headerHtml;
currentSkin = skin;
skin.load();
return skin;
});
}
var cacheParam = new Date().getTime();
function getSkinHeader(skin) {
return new Promise(function (resolve, reject) {
if (!skin.getHeaderTemplate) {
resolve('');
return;
}
var xhr = new XMLHttpRequest();
var url = skin.getHeaderTemplate();
url += url.indexOf('?') === -1 ? '?' : '&';
url += 'v=' + cacheParam;
xhr.open('GET', url, true);
xhr.onload = function (e) {
if (this.status < 400) {
resolve(this.response);
} else {
resolve('');
}
};
xhr.send();
});
}
function loadUserSkin(options) {
var skin = userSettings.get('skin', false) || 'defaultskin';
loadSkin(skin).then(function (skin) {
options = options || {};
if (options.start) {
Emby.Page.invokeShortcut(options.start);
} else {
Emby.Page.goHome();
}
});
}
events.on(userSettings, 'change', function (e, name) {
if (name === 'skin' || name === 'language') {
loadUserSkin();
}
});
var themeStyleElement;
var currentThemeId;
function unloadTheme() {
var elem = themeStyleElement;
if (elem) {
elem.parentNode.removeChild(elem);
themeStyleElement = null;
currentThemeId = null;
}
}
function getThemes() {
if (currentSkin.getThemes) {
return currentSkin.getThemes();
}
return [];
}
var skinManager = {
getCurrentSkin: getCurrentSkin,
loadSkin: loadSkin,
loadUserSkin: loadUserSkin,
getThemes: getThemes
};
function onRegistrationSuccess() {
appSettings.set('appthemesregistered', 'true');
}
function onRegistrationFailure() {
appSettings.set('appthemesregistered', 'false');
}
function isRegistered() {
getRequirePromise(['registrationServices']).then(function (registrationServices) {
registrationServices.validateFeature('themes', {
showDialog: false
}).then(onRegistrationSuccess, onRegistrationFailure);
});
return appSettings.get('appthemesregistered') !== 'false';
}
function getThemeStylesheetInfo(id, requiresRegistration, isDefaultProperty) {
var themes = skinManager.getThemes();
var defaultTheme;
var selectedTheme;
for (var i = 0, length = themes.length; i < length; i++) {
var theme = themes[i];
if (theme[isDefaultProperty]) {
defaultTheme = theme;
}
if (id === theme.id) {
selectedTheme = theme;
}
}
selectedTheme = selectedTheme || defaultTheme;
if (selectedTheme.id !== defaultTheme.id && requiresRegistration && !isRegistered()) {
selectedTheme = defaultTheme;
}
var embyWebComponentsBowerPath = 'bower_components/emby-webcomponents';
return {
stylesheetPath: require.toUrl(embyWebComponentsBowerPath + '/themes/' + selectedTheme.id + '/theme.css'),
themeId: selectedTheme.id
};
}
var themeResources = {};
var lastSound = 0;
var currentSound;
function loadThemeResources(id) {
lastSound = 0;
if (currentSound) {
currentSound.stop();
currentSound = null;
}
backdrop.clear();
}
function onThemeLoaded() {
document.documentElement.classList.remove('preload');
try {
var color = getComputedStyle(document.querySelector('.skinHeader')).getPropertyValue("background-color");
if (color) {
appHost.setThemeColor(color);
}
}
catch (err) {
console.log('Error setting theme color: ' + err);
}
}
skinManager.setTheme = function (id, context) {
return new Promise(function (resolve, reject) {
var requiresRegistration = true;
if (currentThemeId && currentThemeId === id) {
resolve();
return;
}
var isDefaultProperty = context === 'serverdashboard' ? 'isDefaultServerDashboard' : 'isDefault';
var info = getThemeStylesheetInfo(id, requiresRegistration, isDefaultProperty);
if (currentThemeId && currentThemeId === info.themeId) {
resolve();
return;
}
var linkUrl = info.stylesheetPath;
unloadTheme();
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('type', 'text/css');
link.onload = function () {
onThemeLoaded();
resolve();
};
link.setAttribute('href', linkUrl);
document.head.appendChild(link);
themeStyleElement = link;
currentThemeId = info.themeId;
loadThemeResources(info.themeId);
onViewBeforeShow({});
});
};
function onViewBeforeShow(e) {
if (e.detail && e.detail.type === 'video-osd') {
return;
}
if (themeResources.backdrop) {
backdrop.setBackdrop(themeResources.backdrop);
}
if (!browser.mobile && userSettings.enableThemeSongs()) {
if (lastSound === 0) {
if (themeResources.themeSong) {
playSound(themeResources.themeSong);
}
} else if ((new Date().getTime() - lastSound) > 30000) {
if (themeResources.effect) {
playSound(themeResources.effect);
}
}
}
}
document.addEventListener('viewshow', onViewBeforeShow);
function playSound(path, volume) {
lastSound = new Date().getTime();
require(['howler'], function (howler) {
try {
var sound = new Howl({
src: [path],
volume: volume || 0.1
});
sound.play();
currentSound = sound;
}
catch (err) {
console.log('Error playing sound: ' + err);
}
});
}
return skinManager;
});

View File

@@ -1,129 +0,0 @@
define([], function () {
'use strict';
function getStaticBackdrops() {
var list = [];
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg1-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg2-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg3-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg4-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg5-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg6-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg7-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg8-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg9-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg10-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg11-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg12-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg13-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg14-1920.jpg',
width: 1920
}
]);
list.push([
{
url: 'https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/wallpaper/bg15-1920.jpg',
width: 1920
}
]);
return list;
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getRandomImageUrl() {
var images = getStaticBackdrops();
var index = getRandomInt(0, images.length - 1);
return images[index][0].url;
}
return {
getStaticBackdrops: getStaticBackdrops,
getRandomImageUrl: getRandomImageUrl
};
});

View File

@@ -1,188 +0,0 @@
define(['connectionManager', 'serverNotifications', 'events', 'globalize', 'emby-button'], function (connectionManager, serverNotifications, events, globalize, EmbyButtonPrototype) {
'use strict';
function onClick(e) {
var button = this;
var id = button.getAttribute('data-id');
var serverId = button.getAttribute('data-serverid');
var apiClient = connectionManager.getApiClient(serverId);
if (!button.classList.contains('downloadbutton-on')) {
require(['syncDialog'], function (syncDialog) {
syncDialog.showMenu({
items: [id],
mode: 'download',
serverId: serverId
}).then(function () {
button.dispatchEvent(new CustomEvent('download', {
cancelable: false
}));
});
});
} else {
require(['confirm'], function (confirm) {
confirm({
text: globalize.translate('ConfirmRemoveDownload'),
confirmText: globalize.translate('RemoveDownload'),
cancelText: globalize.translate('KeepDownload'),
primary: 'cancel'
}).then(function () {
apiClient.cancelSyncItems([id]);
button.dispatchEvent(new CustomEvent('download-cancel', {
cancelable: false
}));
});
});
}
}
function updateSyncStatus(button, syncPercent) {
var icon = button.iconElement;
if (!icon) {
button.iconElement = button.querySelector('i');
icon = button.iconElement;
}
if (syncPercent != null) {
button.classList.add('downloadbutton-on');
if (icon) {
icon.classList.add('downloadbutton-icon-on');
}
} else {
button.classList.remove('downloadbutton-on');
if (icon) {
icon.classList.remove('downloadbutton-icon-on');
}
}
if ((syncPercent || 0) >= 100) {
button.classList.add('downloadbutton-complete');
if (icon) {
icon.classList.add('downloadbutton-icon-complete');
}
} else {
button.classList.remove('downloadbutton-complete');
if (icon) {
icon.classList.remove('downloadbutton-icon-complete');
}
}
var text;
if ((syncPercent || 0) >= 100) {
text = globalize.translate('Downloaded');
} else if (syncPercent != null) {
text = globalize.translate('Downloading');
} else {
text = globalize.translate('Download');
}
var textElement = button.querySelector('.emby-downloadbutton-downloadtext');
if (textElement) {
textElement.innerHTML = text;
}
button.title = text;
}
function clearEvents(button) {
button.removeEventListener('click', onClick);
}
function bindEvents(button) {
clearEvents(button);
button.addEventListener('click', onClick);
}
var EmbyDownloadButtonPrototype = Object.create(EmbyButtonPrototype);
EmbyDownloadButtonPrototype.createdCallback = function () {
// base method
if (EmbyButtonPrototype.createdCallback) {
EmbyButtonPrototype.createdCallback.call(this);
}
};
EmbyDownloadButtonPrototype.attachedCallback = function () {
// base method
if (EmbyButtonPrototype.attachedCallback) {
EmbyButtonPrototype.attachedCallback.call(this);
}
var itemId = this.getAttribute('data-id');
var serverId = this.getAttribute('data-serverid');
if (itemId && serverId) {
bindEvents(this);
}
};
EmbyDownloadButtonPrototype.detachedCallback = function () {
// base method
if (EmbyButtonPrototype.detachedCallback) {
EmbyButtonPrototype.detachedCallback.call(this);
}
clearEvents(this);
this.iconElement = null;
};
function fetchAndUpdate(button, item) {
connectionManager.getApiClient(item.ServerId).getSyncStatus(item.Id).then(function (result) {
updateSyncStatus(button, result.Progress);
}, function () {
});
}
EmbyDownloadButtonPrototype.setItem = function (item) {
if (item) {
this.setAttribute('data-id', item.Id);
this.setAttribute('data-serverid', item.ServerId);
fetchAndUpdate(this, item);
bindEvents(this);
} else {
this.removeAttribute('data-id');
this.removeAttribute('data-serverid');
clearEvents(this);
}
};
document.registerElement('emby-downloadbutton', {
prototype: EmbyDownloadButtonPrototype,
extends: 'button'
});
});

View File

@@ -1,736 +0,0 @@
define(['apphost', 'globalize', 'connectionManager', 'layoutManager', 'focusManager', 'scrollHelper', 'appSettings', 'registrationServices', 'dialogHelper', 'paper-icon-button-light', 'formDialogStyle'], function (appHost, globalize, connectionManager, layoutManager, focusManager, scrollHelper, appSettings, registrationServices, dialogHelper) {
'use strict';
var currentDialogOptions;
function submitJob(dlg, apiClient, userId, syncOptions, form) {
if (!userId) {
throw new Error('userId cannot be null');
}
if (!syncOptions) {
throw new Error('syncOptions cannot be null');
}
if (!form) {
throw new Error('form cannot be null');
}
var selectSyncTarget = form.querySelector('#selectSyncTarget');
var target = selectSyncTarget ? selectSyncTarget.value : null;
if (!target) {
require(['toast'], function (toast) {
toast(globalize.translate('PleaseSelectDeviceToSyncTo'));
});
return false;
}
var options = {
userId: userId,
TargetId: target,
ParentId: syncOptions.ParentId,
Category: syncOptions.Category
};
setJobValues(options, form);
if (syncOptions.items && syncOptions.items.length) {
options.ItemIds = (syncOptions.items || []).map(function (i) {
return i.Id || i;
}).join(',');
}
apiClient.ajax({
type: "POST",
url: apiClient.getUrl("Sync/Jobs"),
data: JSON.stringify(options),
contentType: "application/json",
dataType: 'json'
}).then(function () {
dialogHelper.close(dlg);
require(['toast'], function (toast) {
showSubmissionToast(target, apiClient);
if (syncOptions.mode === 'download') {
syncNow();
}
});
});
return true;
}
function showSubmissionToast(targetId, apiClient) {
require(['toast'], function (toast) {
var msg = targetId === apiClient.deviceId() ?
globalize.translate('DownloadingDots') :
globalize.translate('SyncingDots');
toast(msg);
});
}
function syncNow() {
require(['localsync'], function (localSync) {
localSync.sync();
});
}
function submitQuickSyncJob(apiClient, userId, targetId, syncOptions) {
if (!userId) {
throw new Error('userId cannot be null');
}
if (!syncOptions) {
throw new Error('syncOptions cannot be null');
}
if (!targetId) {
throw new Error('targetId cannot be null');
}
var options = {
userId: userId,
TargetId: targetId,
ParentId: syncOptions.ParentId,
Category: syncOptions.Category,
Quality: syncOptions.Quality,
Bitrate: syncOptions.Bitrate
};
if (syncOptions.items && syncOptions.items.length) {
options.ItemIds = (syncOptions.items || []).map(function (i) {
return i.Id || i;
}).join(',');
}
return apiClient.ajax({
type: "POST",
url: apiClient.getUrl("Sync/Jobs"),
data: JSON.stringify(options),
contentType: "application/json",
dataType: 'json'
}).then(function () {
require(['toast'], function (toast) {
showSubmissionToast(targetId, apiClient);
if (syncOptions.mode === 'download') {
syncNow();
}
});
});
}
function setJobValues(job, form) {
var txtBitrate = form.querySelector('#txtBitrate');
var bitrate = txtBitrate ? txtBitrate.value : null;
if (bitrate) {
bitrate = parseFloat(bitrate) * 1000000;
}
job.Bitrate = bitrate;
var selectQuality = form.querySelector('#selectQuality');
if (selectQuality) {
job.Quality = selectQuality.value;
appSettings.set('sync-lastquality', job.Quality || '');
}
var selectProfile = form.querySelector('#selectProfile');
if (selectProfile) {
job.Profile = selectProfile.value;
}
var txtItemLimit = form.querySelector('#txtItemLimit');
if (txtItemLimit) {
job.ItemLimit = txtItemLimit.value || null;
}
var chkSyncNewContent = form.querySelector('#chkSyncNewContent');
if (chkSyncNewContent) {
job.SyncNewContent = chkSyncNewContent.checked;
}
var chkUnwatchedOnly = form.querySelector('#chkUnwatchedOnly');
if (chkUnwatchedOnly) {
job.UnwatchedOnly = chkUnwatchedOnly.checked;
}
}
function renderForm(options) {
return new Promise(function (resolve, reject) {
require(['emby-checkbox', 'emby-input', 'emby-select'], function () {
renderFormInternal(options, connectionManager.deviceId(), resolve);
});
});
}
function renderFormInternal(options, defaultTargetId, resolve) {
var elem = options.elem;
var dialogOptions = options.dialogOptions;
var targets = dialogOptions.Targets;
var html = '';
var mode = options.mode;
var targetContainerClass = mode === 'download' ? ' hide' : '';
var syncTargetLabel = mode === 'convert' ? globalize.translate('LabelConvertTo') : globalize.translate('LabelSyncTo');
if (options.readOnlySyncTarget) {
html += '<div class="inputContainer' + targetContainerClass + '">';
html += '<input is="emby-input" type="text" id="selectSyncTarget" readonly label="' + syncTargetLabel + '"/>';
html += '</div>';
} else {
html += '<div class="selectContainer' + targetContainerClass + '">';
html += '<select is="emby-select" id="selectSyncTarget" required="required" label="' + syncTargetLabel + '">';
html += targets.map(function (t) {
var isSelected = defaultTargetId === t.Id;
var selectedHtml = isSelected ? ' selected="selected"' : '';
return '<option' + selectedHtml + ' value="' + t.Id + '">' + t.Name + '</option>';
}).join('');
html += '</select>';
if (!targets.length) {
html += '<div class="fieldDescription">' + globalize.translate('LabelSyncNoTargetsHelp') + '</div>';
}
if (appHost.supports('externallinks')) {
html += '<div class="fieldDescription"><a is="emby-linkbutton" class="button-link lnkLearnMore" href="https://github.com/MediaBrowser/Wiki/wiki/Sync" target="_blank">' + globalize.translate('LearnMore') + '</a></div>';
}
html += '</div>';
}
html += '<div class="fldProfile selectContainer hide">';
html += '<select is="emby-select" id="selectProfile" label="' + globalize.translate('LabelProfile') + '">';
html += '</select>';
html += '<div class="fieldDescription profileDescription"></div>';
html += '</div>';
html += '<div class="fldQuality selectContainer hide">';
html += '<select is="emby-select" id="selectQuality" required="required" label="' + globalize.translate('LabelQuality') + '">';
html += '</select>';
html += '<div class="fieldDescription qualityDescription"></div>';
html += '</div>';
html += '<div class="fldBitrate inputContainer hide">';
html += '<input is="emby-input" type="number" step=".1" min=".1" id="txtBitrate" label="' + globalize.translate('LabelBitrateMbps') + '"/>';
html += '</div>';
if (dialogOptions.Options.indexOf('UnwatchedOnly') !== -1) {
html += '<div class="checkboxContainer checkboxContainer-withDescription">';
html += '<label>';
html += '<input is="emby-checkbox" type="checkbox" id="chkUnwatchedOnly"/>';
if (mode === 'convert') {
html += '<span>' + globalize.translate('ConvertUnwatchedVideosOnly') + '</span>';
} else {
html += '<span>' + globalize.translate('SyncUnwatchedVideosOnly') + '</span>';
}
html += '</label>';
if (mode === 'convert') {
html += '<div class="fieldDescription checkboxFieldDescription">' + globalize.translate('ConvertUnwatchedVideosOnlyHelp') + '</div>';
} else {
html += '<div class="fieldDescription checkboxFieldDescription">' + globalize.translate('SyncUnwatchedVideosOnlyHelp') + '</div>';
}
html += '</div>';
}
if (dialogOptions.Options.indexOf('SyncNewContent') !== -1) {
html += '<div class="checkboxContainer checkboxContainer-withDescription">';
html += '<label>';
html += '<input is="emby-checkbox" type="checkbox" id="chkSyncNewContent"/>';
if (mode === 'convert') {
html += '<span>' + globalize.translate('AutomaticallyConvertNewContent') + '</span>';
} else {
html += '<span>' + globalize.translate('AutomaticallySyncNewContent') + '</span>';
}
html += '</label>';
if (mode === 'convert') {
html += '<div class="fieldDescription checkboxFieldDescription">' + globalize.translate('AutomaticallyConvertNewContentHelp') + '</div>';
} else {
html += '<div class="fieldDescription checkboxFieldDescription">' + globalize.translate('AutomaticallySyncNewContentHelp') + '</div>';
}
html += '</div>';
}
if (dialogOptions.Options.indexOf('ItemLimit') !== -1) {
html += '<div class="inputContainer">';
html += '<input is="emby-input" type="number" step="1" min="1" id="txtItemLimit" label="' + globalize.translate('LabelItemLimit') + '"/>';
if (mode === 'convert') {
html += '<div class="fieldDescription">' + globalize.translate('ConvertItemLimitHelp') + '</div>';
} else {
html += '<div class="fieldDescription">' + globalize.translate('DownloadItemLimitHelp') + '</div>';
}
html += '</div>';
}
//html += '</div>';
//html += '</div>';
elem.innerHTML = html;
var selectSyncTarget = elem.querySelector('#selectSyncTarget');
if (selectSyncTarget) {
selectSyncTarget.addEventListener('change', function () {
loadQualityOptions(elem, this.value, options.dialogOptionsFn).then(resolve);
});
selectSyncTarget.dispatchEvent(new CustomEvent('change', {
bubbles: true
}));
}
var selectProfile = elem.querySelector('#selectProfile');
if (selectProfile) {
selectProfile.addEventListener('change', function () {
onProfileChange(elem, this.value);
});
if (dialogOptions.ProfileOptions.length) {
selectProfile.dispatchEvent(new CustomEvent('change', {
bubbles: true
}));
}
}
var selectQuality = elem.querySelector('#selectQuality');
if (selectQuality) {
selectQuality.addEventListener('change', function () {
onQualityChange(elem, this.value);
});
selectQuality.dispatchEvent(new CustomEvent('change', {
bubbles: true
}));
}
// This isn't ideal, but allow time for the change handlers above to run
setTimeout(function () {
focusManager.autoFocus(elem);
}, 100);
}
function showWifiMessage() {
require(['dialog', 'appRouter'], function (dialog, appRouter) {
var options = {
title: globalize.translate('HeaderWaitingForWifi'),
text: globalize.translate('WifiRequiredToDownload')
};
var items = [];
items.push({
name: options.confirmText || globalize.translate('ButtonOk'),
id: 'ok',
type: 'submit'
});
items.push({
name: options.cancelText || globalize.translate('HeaderDownloadSettings'),
id: 'downloadsettings',
type: 'cancel'
});
options.buttons = items;
dialog(options).then(function (result) {
if (result === 'ok') {
return Promise.resolve();
}
if (result === 'downloadsettings') {
appRouter.show(appRouter.getRouteUrl('downloadsettings'));
return Promise.resolve();
}
return Promise.reject();
});
});
}
function validateNetwork() {
var network = navigator.connection ? navigator.connection.type : null;
switch (network) {
case 'cellular':
case 'bluetooth':
showWifiMessage();
return false;
default:
return true;
}
}
function showSyncMenu(options) {
if (options.mode === 'download' && appSettings.syncOnlyOnWifi() && !validateNetwork()) {
return Promise.reject();
}
return registrationServices.validateFeature('sync').then(function () {
return showSyncMenuInternal(options);
});
}
function enableAutoSync(options) {
if (options.mode !== 'download') {
return false;
}
var firstItem = (options.items || [])[0] || {};
if (firstItem.Type === 'Audio') {
return true;
}
if (firstItem.Type === 'MusicAlbum') {
return true;
}
if (firstItem.Type === 'MusicArtist') {
return true;
}
if (firstItem.Type === 'MusicGenre') {
return true;
}
if (firstItem.Type === 'Playlist' && firstItem.MediaType === 'Audio') {
return true;
}
return false;
}
function showSyncMenuInternal(options) {
var apiClient = connectionManager.getApiClient(options.serverId);
var userId = apiClient.getCurrentUserId();
if (enableAutoSync(options)) {
return submitQuickSyncJob(apiClient, userId, apiClient.deviceId(), {
items: options.items,
Quality: 'custom',
Bitrate: appSettings.maxStaticMusicBitrate()
});
}
var dialogOptionsFn = getTargetDialogOptionsFn(apiClient, {
UserId: userId,
ItemIds: (options.items || []).map(function (i) {
return i.Id || i;
}).join(','),
ParentId: options.ParentId,
Category: options.Category,
IncludeProviders: options.mode === 'convert' ? 'ConvertSyncProvider' : null,
ExcludeProviders: options.mode === 'convert' ? null : 'ConvertSyncProvider'
});
return dialogOptionsFn().then(function (dialogOptions) {
currentDialogOptions = dialogOptions;
var dlgElementOptions = {
removeOnClose: true,
scrollY: false,
autoFocus: false
};
if (layoutManager.tv) {
dlgElementOptions.size = 'fullscreen';
} else {
dlgElementOptions.size = 'small';
}
var dlg = dialogHelper.createDialog(dlgElementOptions);
dlg.classList.add('formDialog');
var html = '';
html += '<div class="formDialogHeader">';
html += '<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="md-icon">&#xE5C4;</i></button>';
html += '<h3 class="formDialogHeaderTitle">';
var syncButtonLabel = options.mode === 'download' ?
globalize.translate('Download') :
(options.mode === 'convert' ? globalize.translate('Convert') : globalize.translate('Sync'));
html += syncButtonLabel;
html += '</h3>';
if (appHost.supports('externallinks')) {
html += '<a is="emby-linkbutton" href="https://github.com/MediaBrowser/Wiki/wiki/Sync" target="_blank" class="button-link lnkHelp" style="margin-top:0;display:inline-block;vertical-align:middle;margin-left:auto;"><i class="md-icon">info</i><span>' + globalize.translate('Help') + '</span></a>';
}
html += '</div>';
html += '<div class="formDialogContent smoothScrollY" style="padding-top:2em;">';
html += '<div class="dialogContentInner dialog-content-centered">';
html += '<form class="formSubmitSyncRequest" style="margin: auto;">';
html += '<div class="formFields"></div>';
html += '<div class="formDialogFooter">';
html += '<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem"><span>' + syncButtonLabel + '</span></button>';
html += '</div>';
html += '</form>';
html += '</div>';
html += '</div>';
dlg.innerHTML = html;
var submitted = false;
dlg.querySelector('form').addEventListener('submit', function (e) {
submitted = submitJob(dlg, apiClient, userId, options, this);
e.preventDefault();
return false;
});
dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg);
});
if (layoutManager.tv) {
scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false);
}
var promise = dialogHelper.open(dlg);
renderForm({
elem: dlg.querySelector('.formFields'),
dialogOptions: dialogOptions,
dialogOptionsFn: dialogOptionsFn,
mode: options.mode
});
return promise.then(function () {
if (layoutManager.tv) {
scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false);
}
if (submitted) {
return Promise.resolve();
}
return Promise.reject();
});
});
}
function getTargetDialogOptionsFn(apiClient, query) {
return function (targetId) {
query.TargetId = targetId;
return apiClient.getJSON(apiClient.getUrl('Sync/Options', query));
};
}
function setQualityFieldVisible(form, visible) {
var fldQuality = form.querySelector('.fldQuality');
var selectQuality = form.querySelector('#selectQuality');
if (visible) {
if (fldQuality) {
fldQuality.classList.remove('hide');
}
if (selectQuality) {
//selectQuality.setAttribute('required', 'required');
// This is a hack due to what appears to be a edge bug but it shoudln't matter as the list always has selectable items
selectQuality.removeAttribute('required');
}
} else {
if (fldQuality) {
fldQuality.classList.add('hide');
}
if (selectQuality) {
selectQuality.removeAttribute('required');
}
}
}
function onProfileChange(form, profileId) {
var options = currentDialogOptions || {};
var profileOptions = options.ProfileOptions || [];
if (!profileOptions.length) {
return;
}
var option = profileOptions.filter(function (o) {
return o.Id === profileId;
})[0];
var qualityOptions = options.QualityOptions || [];
if (option) {
form.querySelector('.profileDescription').innerHTML = option.Description || '';
setQualityFieldVisible(form, qualityOptions.length > 0 && option.EnableQualityOptions && options.Options.indexOf('Quality') !== -1);
} else {
form.querySelector('.profileDescription').innerHTML = '';
setQualityFieldVisible(form, qualityOptions.length > 0 && options.Options.indexOf('Quality') !== -1);
}
}
function onQualityChange(form, qualityId) {
var options = currentDialogOptions || {};
var option = (options.QualityOptions || []).filter(function (o) {
return o.Id === qualityId;
})[0];
var qualityDescription = form.querySelector('.qualityDescription');
if (option) {
qualityDescription.innerHTML = option.Description || '';
} else {
qualityDescription.innerHTML = '';
}
var fldBitrate = form.querySelector('.fldBitrate');
var txtBitrate = form.querySelector('#txtBitrate');
if (qualityId === 'custom') {
if (fldBitrate) {
fldBitrate.classList.remove('hide');
}
if (txtBitrate) {
txtBitrate.setAttribute('required', 'required');
}
} else {
if (fldBitrate) {
fldBitrate.classList.add('hide');
}
if (txtBitrate) {
txtBitrate.removeAttribute('required');
}
}
}
function renderTargetDialogOptions(form, options) {
currentDialogOptions = options;
var fldProfile = form.querySelector('.fldProfile');
var selectProfile = form.querySelector('#selectProfile');
if (options.ProfileOptions.length && options.Options.indexOf('Profile') !== -1) {
if (fldProfile) {
fldProfile.classList.remove('hide');
}
if (selectProfile) {
selectProfile.setAttribute('required', 'required');
}
} else {
if (fldProfile) {
fldProfile.classList.add('hide');
}
if (selectProfile) {
selectProfile.removeAttribute('required');
}
}
setQualityFieldVisible(form, options.QualityOptions.length > 0);
if (selectProfile) {
selectProfile.innerHTML = options.ProfileOptions.map(function (o) {
var selectedAttribute = o.IsDefault ? ' selected="selected"' : '';
return '<option value="' + o.Id + '"' + selectedAttribute + '>' + o.Name + '</option>';
}).join('');
selectProfile.dispatchEvent(new CustomEvent('change', {
bubbles: true
}));
}
var selectQuality = form.querySelector('#selectQuality');
if (selectQuality) {
selectQuality.innerHTML = options.QualityOptions.map(function (o) {
var selectedAttribute = o.IsDefault ? ' selected="selected"' : '';
return '<option value="' + o.Id + '"' + selectedAttribute + '>' + o.Name + '</option>';
}).join('');
var lastQuality = appSettings.get('sync-lastquality');
if (lastQuality && options.QualityOptions.filter(function (i) {
return i.Id === lastQuality;
}).length) {
selectQuality.value = lastQuality;
}
selectQuality.dispatchEvent(new CustomEvent('change', {
bubbles: true
}));
}
}
function loadQualityOptions(form, targetId, dialogOptionsFn) {
return dialogOptionsFn(targetId).then(function (options) {
return renderTargetDialogOptions(form, options);
});
}
return {
showMenu: showSyncMenu,
renderForm: renderForm,
setJobValues: setJobValues
};
});

View File

@@ -1,451 +0,0 @@
.skinHeader,
html {
color: #eee;
color: rgba(255, 255, 255, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #52B54B
}
.emby-collapsible-button {
border-color: #383838;
border-color: rgba(255, 255, 255, .135)
}
.skinHeader {
color: #ccc;
color: rgba(255, 255, 255, .78)
}
.skinHeader-withBackground {
background-color: #52B54B;
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37)
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
-webkit-box-shadow: none;
box-shadow: none
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
.dialog,
html {
background-color: #282828
}
.backgroundContainer.withBackdrop {
background-color: rgba(0, 0, 0, .86)
}
.paper-icon-button-light:focus {
color: #52B54B;
background-color: rgba(82, 181, 75, .2)
}
.skinHeader-withBackground .paper-icon-button-light:focus {
color: #fff;
background-color: rgba(255, 255, 255, .2)
}
.fab,
.raised {
background: #404040;
color: #fff
}
.fab:focus,
.raised:focus {
background: #505050
}
.button-submit {
background: #52B54B;
color: #fff
}
.button-submit:focus {
background: #5EC157;
color: #fff
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #bbb;
color: rgba(255, 255, 255, .7)
}
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #52B54B
}
.checkboxOutline {
border-color: currentColor
}
.collapseContent,
.formDialogFooter:not(.formDialogFooter-clear),
.formDialogHeader:not(.formDialogHeader-clear),
.paperList,
.visualCardBox {
background-color: #222
}
.defaultCardBackground1 {
background-color: #d2b019
}
.defaultCardBackground2 {
background-color: #338abb
}
.defaultCardBackground3 {
background-color: #6b689d
}
.defaultCardBackground4 {
background-color: #dd452b
}
.defaultCardBackground5 {
background-color: #5ccea9
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #999;
color: rgba(255, 255, 255, .5)
}
.actionsheetDivider {
background: #444;
background: rgba(255, 255, 255, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.actionSheetMenuItem:hover {
background-color: #222
}
.toast {
background: #303030;
color: #fff;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #101010;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.itemSelectionPanel {
border: 1px solid #52B54B
}
.selectionCommandsPanel {
background: #52B54B;
color: #fff
}
.upNextDialog-countdownText {
color: #52B54B
}
.alphaPickerButton {
color: #999;
color: rgba(255, 255, 255, .5);
background-color: transparent
}
.alphaPickerButton-selected {
color: #fff
}
.alphaPickerButton-tv:focus {
background-color: #52B54B;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #1c1c1c;
background: rgba(30, 30, 30, .9)
}
.listItem-border {
border-color: rgba(30, 30, 30, .9) !important
}
.listItem:focus {
background: #333
}
.progressring-spiner {
border-color: #52B54B
}
.button-flat-accent,
.button-link {
color: #52B54B
}
.mediaInfoText {
color: #ddd;
background: rgba(170, 170, 190, .2)
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #1c1c1c;
border: .07em solid #1c1c1c;
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #52B54B
}
.emby-select-withcolor {
color: inherit;
background: #1c1c1c;
border: .07em solid #1c1c1c
}
.emby-select-withcolor>option {
color: inherit;
background: #222
}
.emby-select-withcolor:focus {
border-color: #52B54B !important
}
.emby-select-tv-withcolor:focus {
background-color: #52B54B !important;
color: #fff !important
}
.emby-checkbox:checked+span+span+.checkboxOutline {
border-color: #52B54B
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(82, 181, 75, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #52B54B
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #52B54B
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background-color: #1c1c1f;
color: #ccc;
color: rgba(255, 255, 255, .7)
}
.navMenuOption:hover {
background: #252528
}
.navMenuOption-selected {
background: #52B54B !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #52B54B;
color: #fff
}
.emby-tab-button {
color: #999;
color: rgba(255, 255, 255, .5)
}
.emby-tab-button-active,
.emby-tab-button-active.emby-button-tv {
color: #fff
}
.emby-tab-button.emby-button-tv:focus {
color: #fff;
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: #383838
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: #1e1e1e !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #52B54B !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(255, 255, 255, .3)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #52B54B
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #52B54B;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#191919));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #191919);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #191919);
background: linear-gradient(rgba(0, 0, 0, 0), #191919)
}
.infoBanner {
color: #ddd;
background: #111;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #52B54B
}
.layout-desktop ::-webkit-scrollbar {
width: 1em;
height: 1em
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3)
}
::-webkit-scrollbar-track-piece {
background-color: #3b3b3b
}
::-webkit-scrollbar-thumb:horizontal,
::-webkit-scrollbar-thumb:vertical {
-webkit-border-radius: 2px;
background: center no-repeat #888
}

View File

@@ -1,449 +0,0 @@
.skinHeader,
html {
color: #eee;
color: rgba(255, 255, 255, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #c33
}
.emby-collapsible-button {
border-color: #383838;
border-color: rgba(255, 255, 255, .135)
}
.skinHeader {
color: #ccc;
color: rgba(255, 255, 255, .78)
}
.skinHeader-withBackground {
background-color: #c33;
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37)
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
-webkit-box-shadow: none;
box-shadow: none
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
.dialog,
html {
background-color: #282828
}
.backgroundContainer.withBackdrop {
background-color: rgba(0, 0, 0, .86)
}
.paper-icon-button-light:focus {
color: #c33;
background-color: rgba(204, 51, 51, .2)
}
.skinHeader-withBackground .paper-icon-button-light:focus {
color: #fff;
background-color: rgba(255, 255, 255, .2)
}
.fab,
.raised {
background: #404040;
color: #fff
}
.fab:focus,
.raised:focus {
background: #505050
}
.button-submit {
background: #c33
}
.button-submit:focus {
background: #D83F3F
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #bbb;
color: rgba(255, 255, 255, .7)
}
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #c33
}
.checkboxOutline {
border-color: currentColor
}
.collapseContent,
.formDialogFooter:not(.formDialogFooter-clear),
.formDialogHeader:not(.formDialogHeader-clear),
.paperList,
.visualCardBox {
background-color: #222
}
.defaultCardBackground1 {
background-color: #d2b019
}
.defaultCardBackground2 {
background-color: #338abb
}
.defaultCardBackground3 {
background-color: #6b689d
}
.defaultCardBackground4 {
background-color: #dd452b
}
.defaultCardBackground5 {
background-color: #5ccea9
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #999;
color: rgba(255, 255, 255, .5)
}
.actionsheetDivider {
background: #444;
background: rgba(255, 255, 255, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.actionSheetMenuItem:hover {
background-color: #222
}
.toast {
background: #303030;
color: #fff;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #101010;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.itemSelectionPanel {
border: 1px solid #c33
}
.selectionCommandsPanel {
background: #c33;
color: #fff
}
.upNextDialog-countdownText {
color: #c33
}
.alphaPickerButton {
color: #999;
color: rgba(255, 255, 255, .5);
background-color: transparent
}
.alphaPickerButton-selected {
color: #fff
}
.alphaPickerButton-tv:focus {
background-color: #c33;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #1c1c1c;
background: rgba(30, 30, 30, .9)
}
.listItem-border {
border-color: rgba(30, 30, 30, .9) !important
}
.listItem:focus {
background: #333
}
.progressring-spiner {
border-color: #c33
}
.button-flat-accent,
.button-link {
color: #c33
}
.mediaInfoText {
color: #ddd;
background: rgba(170, 170, 190, .2)
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #1c1c1c;
border: .07em solid #1c1c1c;
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #c33
}
.emby-select-withcolor {
color: inherit;
background: #1c1c1c;
border: .07em solid #1c1c1c
}
.emby-select-withcolor>option {
color: inherit;
background: #222
}
.emby-select-withcolor:focus {
border-color: #c33 !important
}
.emby-select-tv-withcolor:focus {
background-color: #c33 !important;
color: #fff !important
}
.emby-checkbox:checked+span+span+.checkboxOutline {
border-color: #c33
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(204, 51, 51, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #c33
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.playedIndicator {
background: #c33
}
.fullSyncIndicator {
background: #c33;
color: #fff
}
.mainDrawer {
background-color: #1c1c1f;
color: #ccc;
color: rgba(255, 255, 255, .7)
}
.navMenuOption:hover {
background: #252528
}
.navMenuOption-selected {
background: #c33 !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #c33;
color: #fff
}
.emby-tab-button {
color: #999;
color: rgba(255, 255, 255, .5)
}
.emby-tab-button-active,
.emby-tab-button-active.emby-button-tv {
color: #fff
}
.emby-tab-button.emby-button-tv:focus {
color: #fff;
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: #383838
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: #1e1e1e !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #c33 !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(255, 255, 255, .3)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #c33
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #c33;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#191919));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #191919);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #191919);
background: linear-gradient(rgba(0, 0, 0, 0), #191919)
}
.infoBanner {
color: #ddd;
background: #111;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #c33
}
.layout-desktop ::-webkit-scrollbar {
width: 1em;
height: 1em
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3)
}
::-webkit-scrollbar-track-piece {
background-color: #3b3b3b
}
::-webkit-scrollbar-thumb:horizontal,
::-webkit-scrollbar-thumb:vertical {
-webkit-border-radius: 2px;
background: center no-repeat #888
}

View File

@@ -1,433 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #2196F3
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.skinHeader-withBackground {
background-color: #2196F3;
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
color: #fff
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
html {
background-color: #f2f2f2
}
.backgroundContainer.withBackdrop {
background-color: rgba(255, 255, 255, .94)
}
.dialog {
background-color: #f0f0f0
}
.paper-icon-button-light:focus {
color: #2196F3;
background-color: rgba(33, 150, 243, .2)
}
.skinHeader-withBackground .paper-icon-button-light:focus {
color: #fff;
background-color: rgba(255, 255, 255, .2)
}
.fab,
.raised {
background: #d8d8d8;
color: inherit
}
.fab:focus,
.raised:focus {
background: #ccc;
color: inherit
}
.button-submit {
background: #2196F3;
color: #fff
}
.button-submit:focus {
background: #2DA2FF;
color: #fff
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #2196F3
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #fff
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogHeader:not(.formDialogHeader-clear) {
background-color: #2196F3;
color: #fff
}
.formDialogFooter:not(.formDialogFooter-clear) {
background-color: #f0f0f0;
border-top: 1px solid rgba(0, 0, 0, .08);
color: inherit
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #282828;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #2196F3
}
.selectionCommandsPanel {
background: #2196F3;
color: #fff
}
.upNextDialog-countdownText {
color: #2196F3
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #2196F3;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8
}
.listItem-border {
border-color: #f0f0f0 !important
}
.listItem:focus {
background: #ddd
}
.progressring-spiner {
border-color: #2196F3
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #2196F3
}
.emby-select-withcolor {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #2196F3
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #2196F3;
color: #fff
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(33, 150, 243, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #2196F3
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #2196F3
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #2196F3 !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #2196F3;
color: #fff
}
.emby-tab-button {
color: #fff;
color: rgba(255, 255, 255, .5)
}
.emby-tab-button-active,
.emby-tab-button-active.emby-button-tv {
color: #fff;
color: rgba(255, 255, 255, 1)
}
.emby-tab-button.emby-button-tv:focus {
color: #fff;
color: rgba(255, 255, 255, 1);
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(0, 0, 0, .12)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #2196F3 !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #2196F3
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #2196F3;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#f2f2f2));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: linear-gradient(rgba(0, 0, 0, 0), #f2f2f2)
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #2196F3
}

View File

@@ -1,434 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #303030
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.skinHeader-withBackground {
background-color: #303030;
color: #ccc;
color: rgba(255, 255, 255, .87);
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37)
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
html {
background-color: #f2f2f2
}
.backgroundContainer.withBackdrop {
background-color: rgba(255, 255, 255, .94)
}
.dialog {
background-color: #f0f0f0
}
.paper-icon-button-light:focus {
color: #52b54b;
background-color: rgba(82, 181, 75, .2)
}
.fab,
.raised {
background: #d8d8d8;
color: inherit
}
.fab:focus,
.raised:focus {
background: #ccc
}
.button-submit {
background: #52b54b;
color: #fff
}
.button-submit:focus {
background: #5EC157
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: green
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #fff
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogHeader:not(.formDialogHeader-clear) {
background-color: #52b54b;
color: #fff
}
.formDialogFooter:not(.formDialogFooter-clear) {
background-color: #f0f0f0;
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0, 0, 0, .08);
color: inherit
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888
}
.actionsheetDivider {
background: #ddd;
background: rgba(0, 0, 0, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #282828;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #52b54b
}
.selectionCommandsPanel {
background: #52b54b;
color: #fff
}
.upNextDialog-countdownText {
color: #52b54b
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #52b54b;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8
}
.listItem-border {
border-color: #f0f0f0 !important
}
.listItem:focus {
background: #ddd
}
.progressring-spiner {
border-color: #52b54b
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #52b54b
}
.emby-select-withcolor {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #52b54b
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #52b54b;
color: #fff
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(82, 181, 75, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #52b54b
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #52b54b
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #52b54b !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #52b54b;
color: #fff
}
.emby-tab-button {
color: #999;
color: rgba(255, 255, 255, .5)
}
.emby-tab-button-active {
color: #52b54b
}
.emby-tab-button-active.emby-button-tv {
color: #fff
}
.emby-tab-button.emby-button-tv:focus {
color: #52b54b;
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(0, 0, 0, .12)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #52b54b !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #52b54b
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #52b54b;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#f2f2f2));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: linear-gradient(rgba(0, 0, 0, 0), #f2f2f2)
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #52b54b
}

View File

@@ -1,443 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #52B54B
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.skinHeader-withBackground {
background-color: #52B54B;
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
color: #fff
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
html {
background-color: #f2f2f2
}
.backgroundContainer.withBackdrop {
background-color: rgba(255, 255, 255, .94)
}
.dialog {
background-color: #f0f0f0
}
.paper-icon-button-light:focus {
color: #52B54B;
background-color: rgba(82, 181, 75, .2)
}
.skinHeader-withBackground .paper-icon-button-light:focus {
color: #fff;
background-color: rgba(255, 255, 255, .2)
}
.skinHeader-withBackground .button-link {
color: #fff
}
.fab,
.raised {
background: #d8d8d8;
color: inherit
}
.fab:focus,
.raised:focus {
background: #ccc;
color: inherit
}
.button-submit {
background: #52B54B;
color: #fff
}
.button-submit:focus {
background: #5EC157;
color: #fff
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: green
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #fff
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogHeader:not(.formDialogHeader-clear) {
background-color: #52B54B;
color: #fff
}
.formDialogFooter:not(.formDialogFooter-clear) {
background-color: #f0f0f0;
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0, 0, 0, .08);
color: inherit
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888
}
.actionsheetDivider {
background: #ddd;
background: rgba(0, 0, 0, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #282828;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #52B54B
}
.selectionCommandsPanel {
background: #52B54B;
color: #fff
}
.upNextDialog-countdownText {
color: #52B54B
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #52B54B;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8
}
.listItem-border {
border-color: #f0f0f0 !important
}
.listItem:focus {
background: #ddd
}
.progressring-spiner {
border-color: #52B54B
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #52B54B
}
.emby-select-withcolor {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #52B54B
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #52B54B;
color: #fff
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(82, 181, 75, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #52B54B
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #52B54B
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #52B54B !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #52B54B;
color: #fff
}
.emby-tab-button {
color: #fff;
color: rgba(255, 255, 255, .5)
}
.emby-tab-button-active,
.emby-tab-button-active.emby-button-tv {
color: #fff;
color: rgba(255, 255, 255, 1)
}
.emby-tab-button.emby-button-tv:focus {
color: #fff;
color: rgba(255, 255, 255, 1);
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(0, 0, 0, .12)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #52B54B !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #52B54B
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #52B54B;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#f2f2f2));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: linear-gradient(rgba(0, 0, 0, 0), #f2f2f2)
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #52B54B
}

View File

@@ -1,440 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #E91E63
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.skinHeader-withBackground {
background-color: #E91E63;
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
color: #fff
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
html {
background-color: #f2f2f2
}
.backgroundContainer.withBackdrop {
background-color: rgba(255, 255, 255, .94)
}
.dialog {
background-color: #f0f0f0
}
.paper-icon-button-light:focus {
color: #E91E63;
background-color: rgba(233, 30, 99, .2)
}
.skinHeader-withBackground .paper-icon-button-light:focus {
color: #fff;
background-color: rgba(255, 255, 255, .2)
}
.fab,
.raised {
background: #d8d8d8;
color: inherit
}
.fab:focus,
.raised:focus {
background: #ccc;
color: inherit
}
.button-submit {
background: #E91E63;
color: #fff
}
.button-submit:focus {
background: #F52A6F;
color: #fff
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555;
color: rgba(0, 0, 0, .7)
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #E91E63
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #F8BBD0
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogHeader:not(.formDialogHeader-clear) {
background-color: #E91E63;
color: #fff
}
.formDialogFooter:not(.formDialogFooter-clear) {
background-color: #f0f0f0;
border-top: 1px solid rgba(0, 0, 0, .08);
color: inherit
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888;
color: rgba(0, 0, 0, .54)
}
.actionsheetDivider {
background: #ddd;
background: rgba(0, 0, 0, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #282828;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #E91E63
}
.selectionCommandsPanel {
background: #E91E63;
color: #fff
}
.upNextDialog-countdownText {
color: #E91E63
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #E91E63;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8
}
.listItem-border {
border-color: #f0f0f0 !important
}
.listItem:focus {
background: #ddd
}
.progressring-spiner {
border-color: #E91E63
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #E91E63
}
.emby-select-withcolor {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #E91E63
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #E91E63;
color: #fff
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(233, 30, 99, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #E91E63
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #E91E63
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #E91E63 !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #E91E63;
color: #fff
}
.emby-tab-button {
color: #fff;
color: rgba(255, 255, 255, .5)
}
.emby-tab-button-active,
.emby-tab-button-active.emby-button-tv {
color: #fff;
color: rgba(255, 255, 255, 1)
}
.emby-tab-button.emby-button-tv:focus {
color: #fff;
color: rgba(255, 255, 255, 1);
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(0, 0, 0, .12)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #E91E63 !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #E91E63
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #E91E63;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#f2f2f2));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: linear-gradient(rgba(0, 0, 0, 0), #f2f2f2)
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #E91E63
}

View File

@@ -1,441 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #673AB7
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.skinHeader-withBackground {
background-color: #673AB7;
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
color: #fff
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
html {
background-color: #EDE7F6
}
.backgroundContainer.withBackdrop {
background-color: rgba(237, 241, 236, .94)
}
.dialog {
background-color: #f0f0f0
}
.paper-icon-button-light:focus {
color: #673AB7;
background-color: rgba(103, 58, 183, .2)
}
.skinHeader-withBackground .paper-icon-button-light:focus {
color: #fff;
background-color: rgba(255, 255, 255, .2)
}
.fab,
.raised {
background: #d8d8d8;
color: inherit
}
.fab:focus,
.raised:focus {
background: #ccc;
color: inherit
}
.button-submit {
background: #673AB7;
color: #fff
}
.button-submit:focus {
background: #7346C3;
color: #fff
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555;
color: rgba(0, 0, 0, .7)
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #673AB7
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #D1C4E9
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogHeader:not(.formDialogHeader-clear) {
background-color: #673AB7;
color: #fff
}
.formDialogFooter:not(.formDialogFooter-clear) {
background-color: #f0f0f0;
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0, 0, 0, .08);
color: inherit
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888;
color: rgba(0, 0, 0, .54)
}
.actionsheetDivider {
background: #ddd;
background: rgba(0, 0, 0, .14)
}
.listItem:focus {
background: #ddd
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #282828;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #673AB7
}
.selectionCommandsPanel {
background: #673AB7;
color: #fff
}
.upNextDialog-countdownText {
color: #673AB7
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #673AB7;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8
}
.listItem-border {
border-color: #f0f0f0 !important
}
.progressring-spiner {
border-color: #673AB7
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #673AB7
}
.emby-select-withcolor {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #673AB7
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #673AB7;
color: #fff
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(103, 58, 183, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #673AB7
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #673AB7
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #673AB7 !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #673AB7;
color: #fff
}
.emby-tab-button {
color: #fff;
color: rgba(255, 255, 255, .54)
}
.emby-tab-button-active,
.emby-tab-button-active.emby-button-tv {
color: #fff;
color: rgba(255, 255, 255, 1)
}
.emby-tab-button.emby-button-tv:focus {
color: #fff;
color: rgba(255, 255, 255, 1);
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(0, 0, 0, .12)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #673AB7 !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #673AB7
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #673AB7;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#EDE7F6));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #EDE7F6);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #EDE7F6);
background: linear-gradient(rgba(0, 0, 0, 0), #EDE7F6)
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #673AB7
}

View File

@@ -1,439 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #c33
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.skinHeader-withBackground {
background-color: #c33;
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
color: #fff
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
html {
background-color: #f2f2f2
}
.backgroundContainer.withBackdrop {
background-color: rgba(255, 255, 255, .94)
}
.dialog {
background-color: #f0f0f0
}
.paper-icon-button-light:focus {
color: #c33;
background-color: rgba(204, 51, 51, .2)
}
.skinHeader-withBackground .paper-icon-button-light:focus {
color: #fff;
background-color: rgba(255, 255, 255, .2)
}
.fab,
.raised {
background: #d8d8d8;
color: inherit
}
.fab:focus,
.raised:focus {
background: #ccc;
color: inherit
}
.button-submit {
background: #c33;
color: #fff
}
.button-submit:focus {
background: #D83F3F;
color: #fff
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #c33
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #fff
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogHeader:not(.formDialogHeader-clear) {
background-color: #c33;
color: #fff
}
.formDialogFooter:not(.formDialogFooter-clear) {
background-color: #f0f0f0;
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0, 0, 0, .08);
color: inherit
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888
}
.actionsheetDivider {
background: #ddd;
background: rgba(0, 0, 0, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #282828;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #c33
}
.selectionCommandsPanel {
background: #c33;
color: #fff
}
.upNextDialog-countdownText {
color: #c33
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #c33;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8
}
.listItem-border {
border-color: #f0f0f0 !important
}
.listItem:focus {
background: #ddd
}
.progressring-spiner {
border-color: #c33
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #c33
}
.emby-select-withcolor {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #c33
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #c33;
color: #fff
}
.emby-checkbox:focus+span+.emby-checkbox-focushelper {
background-color: rgba(204, 51, 51, .26)
}
.emby-checkbox:checked+span+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #c33
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.playedIndicator {
background: #c33
}
.fullSyncIndicator {
background: #c33;
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #c33 !important;
color: #fff
}
.emby-button-focusscale:focus {
background: #c33;
color: #fff
}
.emby-tab-button {
color: #fff;
color: rgba(255, 255, 255, .5)
}
.emby-tab-button-active,
.emby-tab-button-active.emby-button-tv {
color: #fff;
color: rgba(255, 255, 255, 1)
}
.emby-tab-button.emby-button-tv:focus {
color: #fff;
color: rgba(255, 255, 255, 1);
background: 0 0
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(0, 0, 0, .12)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #c33 !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #00a4dc
}
.guide-date-tab-button.emby-button-tv:focus {
background-color: #00a4dc;
color: #fff
}
.itemBackdropFader {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#f2f2f2));
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: -o-linear-gradient(rgba(0, 0, 0, 0), #f2f2f2);
background: linear-gradient(rgba(0, 0, 0, 0), #f2f2f2)
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .card-focuscontent {
border-color: #c33
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -1,313 +0,0 @@
define(['browser', 'dom', 'layoutManager', 'css!./viewcontainer-lite'], function (browser, dom, layoutManager) {
'use strict';
var mainAnimatedPages = document.querySelector('.mainAnimatedPages');
var allPages = [];
var currentUrls = [];
var pageContainerCount = 3;
var selectedPageIndex = -1;
function enableAnimation() {
// too slow
if (browser.tv) {
return false;
}
return browser.supportsCssAnimation();
}
function findLastView(parent, className) {
var nodes = parent.childNodes;
for (var i = nodes.length - 1; i >= 0; i--) {
var node = nodes[i];
var classList = node.classList;
if (classList && classList.contains(className)) {
return node;
}
}
}
function findViewBefore(elem, className) {
var node = elem.previousSibling;
while (node) {
var classList = node.classList;
if (classList && classList.contains(className)) {
return node;
}
node = node.previousSibling;
}
}
function loadView(options) {
if (options.cancel) {
return;
}
cancelActiveAnimations();
var selected = selectedPageIndex;
var previousAnimatable = selected === -1 ? null : allPages[selected];
var pageIndex = selected + 1;
if (pageIndex >= pageContainerCount) {
pageIndex = 0;
}
var viewHtml = options.view;
var properties = [];
if (options.fullscreen) {
properties.push('fullscreen');
}
var currentPage = allPages[pageIndex];
var view;
if (currentPage) {
triggerDestroy(currentPage);
currentPage.insertAdjacentHTML('beforebegin', viewHtml);
view = findViewBefore(currentPage, 'view');
mainAnimatedPages.removeChild(currentPage);
} else {
mainAnimatedPages.insertAdjacentHTML('beforeend', viewHtml);
view = findLastView(mainAnimatedPages, 'view');
}
view.classList.add('mainAnimatedPage');
if (properties.length) {
view.setAttribute('data-properties', properties.join(','));
}
if (options.type) {
view.setAttribute('data-type', options.type);
}
allPages[pageIndex] = view;
if (onBeforeChange) {
onBeforeChange(view, false, options);
}
beforeAnimate(allPages, pageIndex, selected);
// animate here
return animate(view, previousAnimatable, options.transition, options.isBack).then(function () {
selectedPageIndex = pageIndex;
currentUrls[pageIndex] = options.url;
if (!options.cancel && previousAnimatable) {
afterAnimate(allPages, pageIndex);
}
return view;
});
}
function beforeAnimate(allPages, newPageIndex, oldPageIndex) {
for (var i = 0, length = allPages.length; i < length; i++) {
if (newPageIndex === i || oldPageIndex === i) {
//allPages[i].classList.remove('hide');
} else {
allPages[i].classList.add('hide');
}
}
}
function afterAnimate(allPages, newPageIndex) {
for (var i = 0, length = allPages.length; i < length; i++) {
if (newPageIndex === i) {
//allPages[i].classList.remove('hide');
} else {
allPages[i].classList.add('hide');
}
}
}
function animate(newAnimatedPage, oldAnimatedPage, transition, isBack) {
if (enableAnimation() && oldAnimatedPage) {
if (transition === 'slide') {
return slide(newAnimatedPage, oldAnimatedPage, transition, isBack);
} else if (transition === 'fade') {
return fade(newAnimatedPage, oldAnimatedPage, transition, isBack);
} else {
clearAnimation(newAnimatedPage);
if (oldAnimatedPage) {
clearAnimation(oldAnimatedPage);
}
}
}
return Promise.resolve();
}
function clearAnimation(elem) {
setAnimation(elem, 'none');
}
function slide(newAnimatedPage, oldAnimatedPage, transition, isBack) {
return new Promise(function (resolve, reject) {
var duration = layoutManager.tv ? 450 : 160;
var animations = [];
if (oldAnimatedPage) {
if (isBack) {
setAnimation(oldAnimatedPage, 'view-slideright-r ' + duration + 'ms ease-out normal both');
} else {
setAnimation(oldAnimatedPage, 'view-slideleft-r ' + duration + 'ms ease-out normal both');
}
animations.push(oldAnimatedPage);
}
if (isBack) {
setAnimation(newAnimatedPage, 'view-slideright ' + duration + 'ms ease-out normal both');
} else {
setAnimation(newAnimatedPage, 'view-slideleft ' + duration + 'ms ease-out normal both');
}
animations.push(newAnimatedPage);
currentAnimations = animations;
var onAnimationComplete = function () {
dom.removeEventListener(newAnimatedPage, dom.whichAnimationEvent(), onAnimationComplete, {
once: true
});
resolve();
};
dom.addEventListener(newAnimatedPage, dom.whichAnimationEvent(), onAnimationComplete, {
once: true
});
});
}
function fade(newAnimatedPage, oldAnimatedPage, transition, isBack) {
return new Promise(function (resolve, reject) {
var duration = layoutManager.tv ? 450 : 270;
var animations = [];
newAnimatedPage.style.opacity = 0;
setAnimation(newAnimatedPage, 'view-fadein ' + duration + 'ms ease-in normal both');
animations.push(newAnimatedPage);
if (oldAnimatedPage) {
setAnimation(oldAnimatedPage, 'view-fadeout ' + duration + 'ms ease-out normal both');
animations.push(oldAnimatedPage);
}
currentAnimations = animations;
var onAnimationComplete = function () {
dom.removeEventListener(newAnimatedPage, dom.whichAnimationEvent(), onAnimationComplete, {
once: true
});
resolve();
};
dom.addEventListener(newAnimatedPage, dom.whichAnimationEvent(), onAnimationComplete, {
once: true
});
});
}
function setAnimation(elem, value) {
requestAnimationFrame(function () {
elem.style.animation = value;
});
}
var currentAnimations = [];
function cancelActiveAnimations() {
var animations = currentAnimations;
for (var i = 0, length = animations.length; i < length; i++) {
animations[i].style.animation = 'none';
}
}
var onBeforeChange;
function setOnBeforeChange(fn) {
onBeforeChange = fn;
}
function tryRestoreView(options) {
var url = options.url;
var index = currentUrls.indexOf(url);
if (index !== -1) {
var animatable = allPages[index];
var view = animatable;
if (view) {
if (options.cancel) {
return;
}
cancelActiveAnimations();
var selected = selectedPageIndex;
var previousAnimatable = selected === -1 ? null : allPages[selected];
if (onBeforeChange) {
onBeforeChange(view, true, options);
}
beforeAnimate(allPages, index, selected);
animatable.classList.remove('hide');
return animate(animatable, previousAnimatable, options.transition, options.isBack).then(function () {
selectedPageIndex = index;
if (!options.cancel && previousAnimatable) {
afterAnimate(allPages, index);
}
return view;
});
}
}
return Promise.reject();
}
function triggerDestroy(view) {
view.dispatchEvent(new CustomEvent('viewdestroy', {
cancelable: false
}));
}
function reset() {
allPages = [];
currentUrls = [];
mainAnimatedPages.innerHTML = '';
selectedPageIndex = -1;
}
return {
loadView: loadView,
tryRestoreView: tryRestoreView,
reset: reset,
setOnBeforeChange: setOnBeforeChange
};
});

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +0,0 @@
{
"folders":
[
{
"path": ".",
"folder_exclude_patterns": [
".git",
"node_modules",
"dist",
"lib"
],
"file_exclude_patterns": [
".gitignore",
"hls.js.sublime-project",
"hls.js.sublime-workspace"
]
}
]
}

View File

@@ -1,853 +0,0 @@
/*! howler.js v2.0.14 | (c) 2013-2018, James Simpson of GoldFire Studios | MIT License | howlerjs.com */ ! function() {
"use strict";
var e = function() {
this.init()
};
e.prototype = {
init: function() {
var e = this || n;
return e._counter = 1e3, e._codecs = {}, e._howls = [], e._muted = !1, e._volume = 1, e._canPlayEvent = "canplaythrough", e._navigator = "undefined" != typeof window && window.navigator ? window.navigator : null, e.masterGain = null, e.noAudio = !1, e.usingWebAudio = !0, e.autoSuspend = !0, e.ctx = null, e.mobileAutoEnable = !0, e._setup(), e
},
volume: function(e) {
var o = this || n;
if (e = parseFloat(e), o.ctx || _(), void 0 !== e && e >= 0 && e <= 1) {
if (o._volume = e, o._muted) return o;
o.usingWebAudio && o.masterGain.gain.setValueAtTime(e, n.ctx.currentTime);
for (var t = 0; t < o._howls.length; t++)
if (!o._howls[t]._webAudio)
for (var r = o._howls[t]._getSoundIds(), a = 0; a < r.length; a++) {
var u = o._howls[t]._soundById(r[a]);
u && u._node && (u._node.volume = u._volume * e)
}
return o
}
return o._volume
},
mute: function(e) {
var o = this || n;
o.ctx || _(), o._muted = e, o.usingWebAudio && o.masterGain.gain.setValueAtTime(e ? 0 : o._volume, n.ctx.currentTime);
for (var t = 0; t < o._howls.length; t++)
if (!o._howls[t]._webAudio)
for (var r = o._howls[t]._getSoundIds(), a = 0; a < r.length; a++) {
var u = o._howls[t]._soundById(r[a]);
u && u._node && (u._node.muted = !!e || u._muted)
}
return o
},
unload: function() {
for (var e = this || n, o = e._howls.length - 1; o >= 0; o--) e._howls[o].unload();
return e.usingWebAudio && e.ctx && void 0 !== e.ctx.close && (e.ctx.close(), e.ctx = null, _()), e
},
codecs: function(e) {
return (this || n)._codecs[e.replace(/^x-/, "")]
},
_setup: function() {
var e = this || n;
if (e.state = e.ctx ? e.ctx.state || "running" : "running", e._autoSuspend(), !e.usingWebAudio)
if ("undefined" != typeof Audio) try {
var o = new Audio;
void 0 === o.oncanplaythrough && (e._canPlayEvent = "canplay")
} catch (n) {
e.noAudio = !0
} else e.noAudio = !0;
try {
var o = new Audio;
o.muted && (e.noAudio = !0)
} catch (e) {}
return e.noAudio || e._setupCodecs(), e
},
_setupCodecs: function() {
var e = this || n,
o = null;
try {
o = "undefined" != typeof Audio ? new Audio : null
} catch (n) {
return e
}
if (!o || "function" != typeof o.canPlayType) return e;
var t = o.canPlayType("audio/mpeg;").replace(/^no$/, ""),
r = e._navigator && e._navigator.userAgent.match(/OPR\/([0-6].)/g),
a = r && parseInt(r[0].split("/")[1], 10) < 33;
return e._codecs = {
mp3: !(a || !t && !o.canPlayType("audio/mp3;").replace(/^no$/, "")),
mpeg: !!t,
opus: !!o.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""),
ogg: !!o.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
oga: !!o.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
wav: !!o.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""),
aac: !!o.canPlayType("audio/aac;").replace(/^no$/, ""),
caf: !!o.canPlayType("audio/x-caf;").replace(/^no$/, ""),
m4a: !!(o.canPlayType("audio/x-m4a;") || o.canPlayType("audio/m4a;") || o.canPlayType("audio/aac;")).replace(/^no$/, ""),
mp4: !!(o.canPlayType("audio/x-mp4;") || o.canPlayType("audio/mp4;") || o.canPlayType("audio/aac;")).replace(/^no$/, ""),
weba: !!o.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
webm: !!o.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
dolby: !!o.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/, ""),
flac: !!(o.canPlayType("audio/x-flac;") || o.canPlayType("audio/flac;")).replace(/^no$/, "")
}, e
},
_enableMobileAudio: function() {
var e = this || n,
o = /iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi|Chrome/i.test(e._navigator && e._navigator.userAgent);
if (!e._mobileEnabled && e.ctx && o) {
e._mobileEnabled = !1, e.mobileAutoEnable = !1, e._mobileUnloaded || 44100 === e.ctx.sampleRate || (e._mobileUnloaded = !0, e.unload()), e._scratchBuffer = e.ctx.createBuffer(1, 1, 22050);
var t = function(o) {
o.preventDefault(), n._autoResume();
var r = e.ctx.createBufferSource();
r.buffer = e._scratchBuffer, r.connect(e.ctx.destination), void 0 === r.start ? r.noteOn(0) : r.start(0), "function" == typeof e.ctx.resume && e.ctx.resume(), r.onended = function() {
r.disconnect(0), e._mobileEnabled = !0, document.removeEventListener("touchstart", t, !0), document.removeEventListener("touchend", t, !0), document.removeEventListener("click", t, !0);
for (var n = 0; n < e._howls.length; n++) e._howls[n]._emit("unlock")
}
};
return document.addEventListener("touchstart", t, !0), document.addEventListener("touchend", t, !0), document.addEventListener("click", t, !0), e
}
},
_autoSuspend: function() {
var e = this;
if (e.autoSuspend && e.ctx && void 0 !== e.ctx.suspend && n.usingWebAudio) {
for (var o = 0; o < e._howls.length; o++)
if (e._howls[o]._webAudio)
for (var t = 0; t < e._howls[o]._sounds.length; t++)
if (!e._howls[o]._sounds[t]._paused) return e;
return e._suspendTimer && clearTimeout(e._suspendTimer), e._suspendTimer = setTimeout(function() {
e.autoSuspend && (e._suspendTimer = null, e.state = "suspending", e.ctx.suspend().then(function() {
e.state = "suspended", e._resumeAfterSuspend && (delete e._resumeAfterSuspend, e._autoResume())
}))
}, 3e4), e
}
},
_autoResume: function() {
var e = this;
if (e.ctx && void 0 !== e.ctx.resume && n.usingWebAudio) return "running" === e.state && e._suspendTimer ? (clearTimeout(e._suspendTimer), e._suspendTimer = null) : "suspended" === e.state ? (e.ctx.resume().then(function() {
e.state = "running";
for (var n = 0; n < e._howls.length; n++) e._howls[n]._emit("resume")
}), e._suspendTimer && (clearTimeout(e._suspendTimer), e._suspendTimer = null)) : "suspending" === e.state && (e._resumeAfterSuspend = !0), e
}
};
var n = new e,
o = function(e) {
var n = this;
if (!e.src || 0 === e.src.length) return void console.error("An array of source files must be passed with any new Howl.");
n.init(e)
};
o.prototype = {
init: function(e) {
var o = this;
return n.ctx || _(), o._autoplay = e.autoplay || !1, o._format = "string" != typeof e.format ? e.format : [e.format], o._html5 = e.html5 || !1, o._muted = e.mute || !1, o._loop = e.loop || !1, o._pool = e.pool || 5, o._preload = "boolean" != typeof e.preload || e.preload, o._rate = e.rate || 1, o._sprite = e.sprite || {}, o._src = "string" != typeof e.src ? e.src : [e.src], o._volume = void 0 !== e.volume ? e.volume : 1, o._xhrWithCredentials = e.xhrWithCredentials || !1, o._duration = 0, o._state = "unloaded", o._sounds = [], o._endTimers = {}, o._queue = [], o._playLock = !1, o._onend = e.onend ? [{
fn: e.onend
}] : [], o._onfade = e.onfade ? [{
fn: e.onfade
}] : [], o._onload = e.onload ? [{
fn: e.onload
}] : [], o._onloaderror = e.onloaderror ? [{
fn: e.onloaderror
}] : [], o._onplayerror = e.onplayerror ? [{
fn: e.onplayerror
}] : [], o._onpause = e.onpause ? [{
fn: e.onpause
}] : [], o._onplay = e.onplay ? [{
fn: e.onplay
}] : [], o._onstop = e.onstop ? [{
fn: e.onstop
}] : [], o._onmute = e.onmute ? [{
fn: e.onmute
}] : [], o._onvolume = e.onvolume ? [{
fn: e.onvolume
}] : [], o._onrate = e.onrate ? [{
fn: e.onrate
}] : [], o._onseek = e.onseek ? [{
fn: e.onseek
}] : [], o._onunlock = e.onunlock ? [{
fn: e.onunlock
}] : [], o._onresume = [], o._webAudio = n.usingWebAudio && !o._html5, void 0 !== n.ctx && n.ctx && n.mobileAutoEnable && n._enableMobileAudio(), n._howls.push(o), o._autoplay && o._queue.push({
event: "play",
action: function() {
o.play()
}
}), o._preload && o.load(), o
},
load: function() {
var e = this,
o = null;
if (n.noAudio) return void e._emit("loaderror", null, "No audio support.");
"string" == typeof e._src && (e._src = [e._src]);
for (var r = 0; r < e._src.length; r++) {
var u, i;
if (e._format && e._format[r]) u = e._format[r];
else {
if ("string" != typeof(i = e._src[r])) {
e._emit("loaderror", null, "Non-string found in selected audio sources - ignoring.");
continue
}
u = /^data:audio\/([^;,]+);/i.exec(i), u || (u = /\.([^.]+)$/.exec(i.split("?", 1)[0])), u && (u = u[1].toLowerCase())
}
if (u || console.warn('No file extension was found. Consider using the "format" property or specify an extension.'), u && n.codecs(u)) {
o = e._src[r];
break
}
}
return o ? (e._src = o, e._state = "loading", "https:" === window.location.protocol && "http:" === o.slice(0, 5) && (e._html5 = !0, e._webAudio = !1), new t(e), e._webAudio && a(e), e) : void e._emit("loaderror", null, "No codec support for selected audio sources.")
},
play: function(e, o) {
var t = this,
r = null;
if ("number" == typeof e) r = e, e = null;
else {
if ("string" == typeof e && "loaded" === t._state && !t._sprite[e]) return null;
if (void 0 === e) {
e = "__default";
for (var a = 0, u = 0; u < t._sounds.length; u++) t._sounds[u]._paused && !t._sounds[u]._ended && (a++, r = t._sounds[u]._id);
1 === a ? e = null : r = null
}
}
var i = r ? t._soundById(r) : t._inactiveSound();
if (!i) return null;
if (r && !e && (e = i._sprite || "__default"), "loaded" !== t._state) {
i._sprite = e, i._ended = !1;
var d = i._id;
return t._queue.push({
event: "play",
action: function() {
t.play(d)
}
}), d
}
if (r && !i._paused) return o || t._loadQueue("play"), i._id;
t._webAudio && n._autoResume();
var _ = Math.max(0, i._seek > 0 ? i._seek : t._sprite[e][0] / 1e3),
s = Math.max(0, (t._sprite[e][0] + t._sprite[e][1]) / 1e3 - _),
l = 1e3 * s / Math.abs(i._rate);
if (i._paused = !1, i._ended = !1, i._sprite = e, i._seek = _, i._start = t._sprite[e][0] / 1e3, i._stop = (t._sprite[e][0] + t._sprite[e][1]) / 1e3, i._loop = !(!i._loop && !t._sprite[e][2]), i._seek >= i._stop) return void t._ended(i);
var c = i._node;
if (t._webAudio) {
var f = function() {
t._refreshBuffer(i);
var e = i._muted || t._muted ? 0 : i._volume;
c.gain.setValueAtTime(e, n.ctx.currentTime), i._playStart = n.ctx.currentTime, void 0 === c.bufferSource.start ? i._loop ? c.bufferSource.noteGrainOn(0, _, 86400) : c.bufferSource.noteGrainOn(0, _, s) : i._loop ? c.bufferSource.start(0, _, 86400) : c.bufferSource.start(0, _, s), l !== 1 / 0 && (t._endTimers[i._id] = setTimeout(t._ended.bind(t, i), l)), o || setTimeout(function() {
t._emit("play", i._id)
}, 0)
};
"running" === n.state ? f() : (t.once("resume", f), t._clearTimer(i._id))
} else {
var p = function() {
c.currentTime = _, c.muted = i._muted || t._muted || n._muted || c.muted, c.volume = i._volume * n.volume(), c.playbackRate = i._rate;
try {
var r = c.play();
if ("undefined" != typeof Promise && (r instanceof Promise || "function" == typeof r.then) ? (t._playLock = !0, r.then(function() {
t._playLock = !1, o || t._emit("play", i._id)
}).catch(function() {
t._playLock = !1, t._emit("playerror", i._id, "Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.")
})) : o || t._emit("play", i._id), c.playbackRate = i._rate, c.paused) return void t._emit("playerror", i._id, "Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");
"__default" !== e || i._loop ? t._endTimers[i._id] = setTimeout(t._ended.bind(t, i), l) : (t._endTimers[i._id] = function() {
t._ended(i), c.removeEventListener("ended", t._endTimers[i._id], !1)
}, c.addEventListener("ended", t._endTimers[i._id], !1))
} catch (e) {
t._emit("playerror", i._id, e)
}
},
m = window && window.ejecta || !c.readyState && n._navigator.isCocoonJS;
if (c.readyState >= 3 || m) p();
else {
var v = function() {
p(), c.removeEventListener(n._canPlayEvent, v, !1)
};
c.addEventListener(n._canPlayEvent, v, !1), t._clearTimer(i._id)
}
}
return i._id
},
pause: function(e) {
var n = this;
if ("loaded" !== n._state || n._playLock) return n._queue.push({
event: "pause",
action: function() {
n.pause(e)
}
}), n;
for (var o = n._getSoundIds(e), t = 0; t < o.length; t++) {
n._clearTimer(o[t]);
var r = n._soundById(o[t]);
if (r && !r._paused && (r._seek = n.seek(o[t]), r._rateSeek = 0, r._paused = !0, n._stopFade(o[t]), r._node))
if (n._webAudio) {
if (!r._node.bufferSource) continue;
void 0 === r._node.bufferSource.stop ? r._node.bufferSource.noteOff(0) : r._node.bufferSource.stop(0), n._cleanBuffer(r._node)
} else isNaN(r._node.duration) && r._node.duration !== 1 / 0 || r._node.pause();
arguments[1] || n._emit("pause", r ? r._id : null)
}
return n
},
stop: function(e, n) {
var o = this;
if ("loaded" !== o._state || o._playLock) return o._queue.push({
event: "stop",
action: function() {
o.stop(e)
}
}), o;
for (var t = o._getSoundIds(e), r = 0; r < t.length; r++) {
o._clearTimer(t[r]);
var a = o._soundById(t[r]);
a && (a._seek = a._start || 0, a._rateSeek = 0, a._paused = !0, a._ended = !0, o._stopFade(t[r]), a._node && (o._webAudio ? a._node.bufferSource && (void 0 === a._node.bufferSource.stop ? a._node.bufferSource.noteOff(0) : a._node.bufferSource.stop(0), o._cleanBuffer(a._node)) : isNaN(a._node.duration) && a._node.duration !== 1 / 0 || (a._node.currentTime = a._start || 0, a._node.pause())), n || o._emit("stop", a._id))
}
return o
},
mute: function(e, o) {
var t = this;
if ("loaded" !== t._state || t._playLock) return t._queue.push({
event: "mute",
action: function() {
t.mute(e, o)
}
}), t;
if (void 0 === o) {
if ("boolean" != typeof e) return t._muted;
t._muted = e
}
for (var r = t._getSoundIds(o), a = 0; a < r.length; a++) {
var u = t._soundById(r[a]);
u && (u._muted = e, u._interval && t._stopFade(u._id), t._webAudio && u._node ? u._node.gain.setValueAtTime(e ? 0 : u._volume, n.ctx.currentTime) : u._node && (u._node.muted = !!n._muted || e), t._emit("mute", u._id))
}
return t
},
volume: function() {
var e, o, t = this,
r = arguments;
if (0 === r.length) return t._volume;
if (1 === r.length || 2 === r.length && void 0 === r[1]) {
t._getSoundIds().indexOf(r[0]) >= 0 ? o = parseInt(r[0], 10) : e = parseFloat(r[0])
} else r.length >= 2 && (e = parseFloat(r[0]), o = parseInt(r[1], 10));
var a;
if (!(void 0 !== e && e >= 0 && e <= 1)) return a = o ? t._soundById(o) : t._sounds[0], a ? a._volume : 0;
if ("loaded" !== t._state || t._playLock) return t._queue.push({
event: "volume",
action: function() {
t.volume.apply(t, r)
}
}), t;
void 0 === o && (t._volume = e), o = t._getSoundIds(o);
for (var u = 0; u < o.length; u++)(a = t._soundById(o[u])) && (a._volume = e, r[2] || t._stopFade(o[u]), t._webAudio && a._node && !a._muted ? a._node.gain.setValueAtTime(e, n.ctx.currentTime) : a._node && !a._muted && (a._node.volume = e * n.volume()), t._emit("volume", a._id));
return t
},
fade: function(e, o, t, r) {
var a = this;
if ("loaded" !== a._state || a._playLock) return a._queue.push({
event: "fade",
action: function() {
a.fade(e, o, t, r)
}
}), a;
a.volume(e, r);
for (var u = a._getSoundIds(r), i = 0; i < u.length; i++) {
var d = a._soundById(u[i]);
if (d) {
if (r || a._stopFade(u[i]), a._webAudio && !d._muted) {
var _ = n.ctx.currentTime,
s = _ + t / 1e3;
d._volume = e, d._node.gain.setValueAtTime(e, _), d._node.gain.linearRampToValueAtTime(o, s)
}
a._startFadeInterval(d, e, o, t, u[i], void 0 === r)
}
}
return a
},
_startFadeInterval: function(e, n, o, t, r, a) {
var u = this,
i = n,
d = o - n,
_ = Math.abs(d / .01),
s = Math.max(4, _ > 0 ? t / _ : t),
l = Date.now();
e._fadeTo = o, e._interval = setInterval(function() {
var r = (Date.now() - l) / t;
l = Date.now(), i += d * r, i = Math.max(0, i), i = Math.min(1, i), i = Math.round(100 * i) / 100, u._webAudio ? e._volume = i : u.volume(i, e._id, !0), a && (u._volume = i), (o < n && i <= o || o > n && i >= o) && (clearInterval(e._interval), e._interval = null, e._fadeTo = null, u.volume(o, e._id), u._emit("fade", e._id))
}, s)
},
_stopFade: function(e) {
var o = this,
t = o._soundById(e);
return t && t._interval && (o._webAudio && t._node.gain.cancelScheduledValues(n.ctx.currentTime), clearInterval(t._interval), t._interval = null, o.volume(t._fadeTo, e), t._fadeTo = null, o._emit("fade", e)), o
},
loop: function() {
var e, n, o, t = this,
r = arguments;
if (0 === r.length) return t._loop;
if (1 === r.length) {
if ("boolean" != typeof r[0]) return !!(o = t._soundById(parseInt(r[0], 10))) && o._loop;
e = r[0], t._loop = e
} else 2 === r.length && (e = r[0], n = parseInt(r[1], 10));
for (var a = t._getSoundIds(n), u = 0; u < a.length; u++)(o = t._soundById(a[u])) && (o._loop = e, t._webAudio && o._node && o._node.bufferSource && (o._node.bufferSource.loop = e, e && (o._node.bufferSource.loopStart = o._start || 0, o._node.bufferSource.loopEnd = o._stop)));
return t
},
rate: function() {
var e, o, t = this,
r = arguments;
if (0 === r.length) o = t._sounds[0]._id;
else if (1 === r.length) {
var a = t._getSoundIds(),
u = a.indexOf(r[0]);
u >= 0 ? o = parseInt(r[0], 10) : e = parseFloat(r[0])
} else 2 === r.length && (e = parseFloat(r[0]), o = parseInt(r[1], 10));
var i;
if ("number" != typeof e) return i = t._soundById(o), i ? i._rate : t._rate;
if ("loaded" !== t._state || t._playLock) return t._queue.push({
event: "rate",
action: function() {
t.rate.apply(t, r)
}
}), t;
void 0 === o && (t._rate = e), o = t._getSoundIds(o);
for (var d = 0; d < o.length; d++)
if (i = t._soundById(o[d])) {
i._rateSeek = t.seek(o[d]), i._playStart = t._webAudio ? n.ctx.currentTime : i._playStart, i._rate = e, t._webAudio && i._node && i._node.bufferSource ? i._node.bufferSource.playbackRate.setValueAtTime(e, n.ctx.currentTime) : i._node && (i._node.playbackRate = e);
var _ = t.seek(o[d]),
s = (t._sprite[i._sprite][0] + t._sprite[i._sprite][1]) / 1e3 - _,
l = 1e3 * s / Math.abs(i._rate);
!t._endTimers[o[d]] && i._paused || (t._clearTimer(o[d]), t._endTimers[o[d]] = setTimeout(t._ended.bind(t, i), l)), t._emit("rate", i._id)
} return t
},
seek: function() {
var e, o, t = this,
r = arguments;
if (0 === r.length) o = t._sounds[0]._id;
else if (1 === r.length) {
var a = t._getSoundIds(),
u = a.indexOf(r[0]);
u >= 0 ? o = parseInt(r[0], 10) : t._sounds.length && (o = t._sounds[0]._id, e = parseFloat(r[0]))
} else 2 === r.length && (e = parseFloat(r[0]), o = parseInt(r[1], 10));
if (void 0 === o) return t;
if ("loaded" !== t._state || t._playLock) return t._queue.push({
event: "seek",
action: function() {
t.seek.apply(t, r)
}
}), t;
var i = t._soundById(o);
if (i) {
if (!("number" == typeof e && e >= 0)) {
if (t._webAudio) {
var d = t.playing(o) ? n.ctx.currentTime - i._playStart : 0,
_ = i._rateSeek ? i._rateSeek - i._seek : 0;
return i._seek + (_ + d * Math.abs(i._rate))
}
return i._node.currentTime
}
var s = t.playing(o);
s && t.pause(o, !0), i._seek = e, i._ended = !1, t._clearTimer(o), !t._webAudio && i._node && (i._node.currentTime = e);
var l = function() {
t._emit("seek", o), s && t.play(o, !0)
};
if (s && !t._webAudio) {
var c = function() {
t._playLock ? setTimeout(c, 0) : l()
};
setTimeout(c, 0)
} else l()
}
return t
},
playing: function(e) {
var n = this;
if ("number" == typeof e) {
var o = n._soundById(e);
return !!o && !o._paused
}
for (var t = 0; t < n._sounds.length; t++)
if (!n._sounds[t]._paused) return !0;
return !1
},
duration: function(e) {
var n = this,
o = n._duration,
t = n._soundById(e);
return t && (o = n._sprite[t._sprite][1] / 1e3), o
},
state: function() {
return this._state
},
unload: function() {
for (var e = this, o = e._sounds, t = 0; t < o.length; t++) {
if (o[t]._paused || e.stop(o[t]._id), !e._webAudio) {
/MSIE |Trident\//.test(n._navigator && n._navigator.userAgent) || (o[t]._node.src = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"), o[t]._node.removeEventListener("error", o[t]._errorFn, !1), o[t]._node.removeEventListener(n._canPlayEvent, o[t]._loadFn, !1)
}
delete o[t]._node, e._clearTimer(o[t]._id)
}
var a = n._howls.indexOf(e);
a >= 0 && n._howls.splice(a, 1);
var u = !0;
for (t = 0; t < n._howls.length; t++)
if (n._howls[t]._src === e._src) {
u = !1;
break
} return r && u && delete r[e._src], n.noAudio = !1, e._state = "unloaded", e._sounds = [], e = null, null
},
on: function(e, n, o, t) {
var r = this,
a = r["_on" + e];
return "function" == typeof n && a.push(t ? {
id: o,
fn: n,
once: t
} : {
id: o,
fn: n
}), r
},
off: function(e, n, o) {
var t = this,
r = t["_on" + e],
a = 0;
if ("number" == typeof n && (o = n, n = null), n || o)
for (a = 0; a < r.length; a++) {
var u = o === r[a].id;
if (n === r[a].fn && u || !n && u) {
r.splice(a, 1);
break
}
} else if (e) t["_on" + e] = [];
else {
var i = Object.keys(t);
for (a = 0; a < i.length; a++) 0 === i[a].indexOf("_on") && Array.isArray(t[i[a]]) && (t[i[a]] = [])
} return t
},
once: function(e, n, o) {
var t = this;
return t.on(e, n, o, 1), t
},
_emit: function(e, n, o) {
for (var t = this, r = t["_on" + e], a = r.length - 1; a >= 0; a--) r[a].id && r[a].id !== n && "load" !== e || (setTimeout(function(e) {
e.call(this, n, o)
}.bind(t, r[a].fn), 0), r[a].once && t.off(e, r[a].fn, r[a].id));
return t._loadQueue(e), t
},
_loadQueue: function(e) {
var n = this;
if (n._queue.length > 0) {
var o = n._queue[0];
o.event === e && (n._queue.shift(), n._loadQueue()), e || o.action()
}
return n
},
_ended: function(e) {
var o = this,
t = e._sprite;
if (!o._webAudio && e._node && !e._node.paused && !e._node.ended && e._node.currentTime < e._stop) return setTimeout(o._ended.bind(o, e), 100), o;
var r = !(!e._loop && !o._sprite[t][2]);
if (o._emit("end", e._id), !o._webAudio && r && o.stop(e._id, !0).play(e._id), o._webAudio && r) {
o._emit("play", e._id), e._seek = e._start || 0, e._rateSeek = 0, e._playStart = n.ctx.currentTime;
var a = 1e3 * (e._stop - e._start) / Math.abs(e._rate);
o._endTimers[e._id] = setTimeout(o._ended.bind(o, e), a)
}
return o._webAudio && !r && (e._paused = !0, e._ended = !0, e._seek = e._start || 0, e._rateSeek = 0, o._clearTimer(e._id), o._cleanBuffer(e._node), n._autoSuspend()), o._webAudio || r || o.stop(e._id, !0), o
},
_clearTimer: function(e) {
var n = this;
if (n._endTimers[e]) {
if ("function" != typeof n._endTimers[e]) clearTimeout(n._endTimers[e]);
else {
var o = n._soundById(e);
o && o._node && o._node.removeEventListener("ended", n._endTimers[e], !1)
}
delete n._endTimers[e]
}
return n
},
_soundById: function(e) {
for (var n = this, o = 0; o < n._sounds.length; o++)
if (e === n._sounds[o]._id) return n._sounds[o];
return null
},
_inactiveSound: function() {
var e = this;
e._drain();
for (var n = 0; n < e._sounds.length; n++)
if (e._sounds[n]._ended) return e._sounds[n].reset();
return new t(e)
},
_drain: function() {
var e = this,
n = e._pool,
o = 0,
t = 0;
if (!(e._sounds.length < n)) {
for (t = 0; t < e._sounds.length; t++) e._sounds[t]._ended && o++;
for (t = e._sounds.length - 1; t >= 0; t--) {
if (o <= n) return;
e._sounds[t]._ended && (e._webAudio && e._sounds[t]._node && e._sounds[t]._node.disconnect(0), e._sounds.splice(t, 1), o--)
}
}
},
_getSoundIds: function(e) {
var n = this;
if (void 0 === e) {
for (var o = [], t = 0; t < n._sounds.length; t++) o.push(n._sounds[t]._id);
return o
}
return [e]
},
_refreshBuffer: function(e) {
var o = this;
return e._node.bufferSource = n.ctx.createBufferSource(), e._node.bufferSource.buffer = r[o._src], e._panner ? e._node.bufferSource.connect(e._panner) : e._node.bufferSource.connect(e._node), e._node.bufferSource.loop = e._loop, e._loop && (e._node.bufferSource.loopStart = e._start || 0, e._node.bufferSource.loopEnd = e._stop || 0), e._node.bufferSource.playbackRate.setValueAtTime(e._rate, n.ctx.currentTime), o
},
_cleanBuffer: function(e) {
var o = this;
if (n._scratchBuffer && e.bufferSource) {
e.bufferSource.onended = null, e.bufferSource.disconnect(0);
try {
e.bufferSource.buffer = n._scratchBuffer
} catch (e) {}
}
return e.bufferSource = null, o
}
};
var t = function(e) {
this._parent = e, this.init()
};
t.prototype = {
init: function() {
var e = this,
o = e._parent;
return e._muted = o._muted, e._loop = o._loop, e._volume = o._volume, e._rate = o._rate, e._seek = 0, e._paused = !0, e._ended = !0, e._sprite = "__default", e._id = ++n._counter, o._sounds.push(e), e.create(), e
},
create: function() {
var e = this,
o = e._parent,
t = n._muted || e._muted || e._parent._muted ? 0 : e._volume;
return o._webAudio ? (e._node = void 0 === n.ctx.createGain ? n.ctx.createGainNode() : n.ctx.createGain(), e._node.gain.setValueAtTime(t, n.ctx.currentTime), e._node.paused = !0, e._node.connect(n.masterGain)) : (e._node = new Audio, e._errorFn = e._errorListener.bind(e), e._node.addEventListener("error", e._errorFn, !1), e._loadFn = e._loadListener.bind(e), e._node.addEventListener(n._canPlayEvent, e._loadFn, !1), e._node.src = o._src, e._node.preload = "auto", e._node.volume = t * n.volume(), e._node.load()), e
},
reset: function() {
var e = this,
o = e._parent;
return e._muted = o._muted, e._loop = o._loop, e._volume = o._volume, e._rate = o._rate, e._seek = 0, e._rateSeek = 0, e._paused = !0, e._ended = !0, e._sprite = "__default", e._id = ++n._counter, e
},
_errorListener: function() {
var e = this;
e._parent._emit("loaderror", e._id, e._node.error ? e._node.error.code : 0), e._node.removeEventListener("error", e._errorFn, !1)
},
_loadListener: function() {
var e = this,
o = e._parent;
o._duration = Math.ceil(10 * e._node.duration) / 10, 0 === Object.keys(o._sprite).length && (o._sprite = {
__default: [0, 1e3 * o._duration]
}), "loaded" !== o._state && (o._state = "loaded", o._emit("load"), o._loadQueue()), e._node.removeEventListener(n._canPlayEvent, e._loadFn, !1)
}
};
var r = {},
a = function(e) {
var n = e._src;
if (r[n]) return e._duration = r[n].duration, void d(e);
if (/^data:[^;]+;base64,/.test(n)) {
for (var o = atob(n.split(",")[1]), t = new Uint8Array(o.length), a = 0; a < o.length; ++a) t[a] = o.charCodeAt(a);
i(t.buffer, e)
} else {
var _ = new XMLHttpRequest;
_.open("GET", n, !0), _.withCredentials = e._xhrWithCredentials, _.responseType = "arraybuffer", _.onload = function() {
var n = (_.status + "")[0];
if ("0" !== n && "2" !== n && "3" !== n) return void e._emit("loaderror", null, "Failed loading audio file with status: " + _.status + ".");
i(_.response, e)
}, _.onerror = function() {
e._webAudio && (e._html5 = !0, e._webAudio = !1, e._sounds = [], delete r[n], e.load())
}, u(_)
}
},
u = function(e) {
try {
e.send()
} catch (n) {
e.onerror()
}
},
i = function(e, o) {
var t = function(e) {
e && o._sounds.length > 0 ? (r[o._src] = e, d(o, e)) : onError()
},
a = function() {
o._emit("loaderror", null, "Decoding audio data failed.")
};
"undefined" != typeof Promise && 1 === n.ctx.decodeAudioData.length ? n.ctx.decodeAudioData(e).then(t).catch(a) : n.ctx.decodeAudioData(e, t, a)
},
d = function(e, n) {
n && !e._duration && (e._duration = n.duration), 0 === Object.keys(e._sprite).length && (e._sprite = {
__default: [0, 1e3 * e._duration]
}), "loaded" !== e._state && (e._state = "loaded", e._emit("load"), e._loadQueue())
},
_ = function() {
try {
"undefined" != typeof AudioContext ? n.ctx = new AudioContext : "undefined" != typeof webkitAudioContext ? n.ctx = new webkitAudioContext : n.usingWebAudio = !1
} catch (e) {
n.usingWebAudio = !1
}
var e = /iP(hone|od|ad)/.test(n._navigator && n._navigator.platform),
o = n._navigator && n._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),
t = o ? parseInt(o[1], 10) : null;
if (e && t && t < 9) {
var r = /safari/.test(n._navigator && n._navigator.userAgent.toLowerCase());
(n._navigator && n._navigator.standalone && !r || n._navigator && !n._navigator.standalone && !r) && (n.usingWebAudio = !1)
}
n.usingWebAudio && (n.masterGain = void 0 === n.ctx.createGain ? n.ctx.createGainNode() : n.ctx.createGain(), n.masterGain.gain.setValueAtTime(n._muted ? 0 : 1, n.ctx.currentTime), n.masterGain.connect(n.ctx.destination)), n._setup()
};
"function" == typeof define && define.amd && define([], function() {
return {
Howler: n,
Howl: o
}
}), "undefined" != typeof exports && (exports.Howler = n, exports.Howl = o), "undefined" != typeof window ? (window.HowlerGlobal = e, window.Howler = n, window.Howl = o, window.Sound = t) : "undefined" != typeof global && (global.HowlerGlobal = e, global.Howler = n, global.Howl = o, global.Sound = t)
}();
/*! Spatial Plugin */
! function() {
"use strict";
HowlerGlobal.prototype._pos = [0, 0, 0], HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0], HowlerGlobal.prototype.stereo = function(e) {
var n = this;
if (!n.ctx || !n.ctx.listener) return n;
for (var t = n._howls.length - 1; t >= 0; t--) n._howls[t].stereo(e);
return n
}, HowlerGlobal.prototype.pos = function(e, n, t) {
var r = this;
return r.ctx && r.ctx.listener ? (n = "number" != typeof n ? r._pos[1] : n, t = "number" != typeof t ? r._pos[2] : t, "number" != typeof e ? r._pos : (r._pos = [e, n, t], void 0 !== r.ctx.listener.positionX ? (r.ctx.listener.positionX.setTargetAtTime(r._pos[0], Howler.ctx.currentTime, .1), r.ctx.listener.positionY.setTargetAtTime(r._pos[1], Howler.ctx.currentTime, .1), r.ctx.listener.positionZ.setTargetAtTime(r._pos[2], Howler.ctx.currentTime, .1)) : r.ctx.listener.setPosition(r._pos[0], r._pos[1], r._pos[2]), r)) : r
}, HowlerGlobal.prototype.orientation = function(e, n, t, r, o, i) {
var a = this;
if (!a.ctx || !a.ctx.listener) return a;
var p = a._orientation;
return n = "number" != typeof n ? p[1] : n, t = "number" != typeof t ? p[2] : t, r = "number" != typeof r ? p[3] : r, o = "number" != typeof o ? p[4] : o, i = "number" != typeof i ? p[5] : i, "number" != typeof e ? p : (a._orientation = [e, n, t, r, o, i], void 0 !== a.ctx.listener.forwardX ? (a.ctx.listener.forwardX.setTargetAtTime(e, Howler.ctx.currentTime, .1), a.ctx.listener.forwardY.setTargetAtTime(n, Howler.ctx.currentTime, .1), a.ctx.listener.forwardZ.setTargetAtTime(t, Howler.ctx.currentTime, .1), a.ctx.listener.upX.setTargetAtTime(e, Howler.ctx.currentTime, .1), a.ctx.listener.upY.setTargetAtTime(n, Howler.ctx.currentTime, .1), a.ctx.listener.upZ.setTargetAtTime(t, Howler.ctx.currentTime, .1)) : a.ctx.listener.setOrientation(e, n, t, r, o, i), a)
}, Howl.prototype.init = function(e) {
return function(n) {
var t = this;
return t._orientation = n.orientation || [1, 0, 0], t._stereo = n.stereo || null, t._pos = n.pos || null, t._pannerAttr = {
coneInnerAngle: void 0 !== n.coneInnerAngle ? n.coneInnerAngle : 360,
coneOuterAngle: void 0 !== n.coneOuterAngle ? n.coneOuterAngle : 360,
coneOuterGain: void 0 !== n.coneOuterGain ? n.coneOuterGain : 0,
distanceModel: void 0 !== n.distanceModel ? n.distanceModel : "inverse",
maxDistance: void 0 !== n.maxDistance ? n.maxDistance : 1e4,
panningModel: void 0 !== n.panningModel ? n.panningModel : "HRTF",
refDistance: void 0 !== n.refDistance ? n.refDistance : 1,
rolloffFactor: void 0 !== n.rolloffFactor ? n.rolloffFactor : 1
}, t._onstereo = n.onstereo ? [{
fn: n.onstereo
}] : [], t._onpos = n.onpos ? [{
fn: n.onpos
}] : [], t._onorientation = n.onorientation ? [{
fn: n.onorientation
}] : [], e.call(this, n)
}
}(Howl.prototype.init), Howl.prototype.stereo = function(n, t) {
var r = this;
if (!r._webAudio) return r;
if ("loaded" !== r._state) return r._queue.push({
event: "stereo",
action: function() {
r.stereo(n, t)
}
}), r;
var o = void 0 === Howler.ctx.createStereoPanner ? "spatial" : "stereo";
if (void 0 === t) {
if ("number" != typeof n) return r._stereo;
r._stereo = n, r._pos = [n, 0, 0]
}
for (var i = r._getSoundIds(t), a = 0; a < i.length; a++) {
var p = r._soundById(i[a]);
if (p) {
if ("number" != typeof n) return p._stereo;
p._stereo = n, p._pos = [n, 0, 0], p._node && (p._pannerAttr.panningModel = "equalpower", p._panner && p._panner.pan || e(p, o), "spatial" === o ? void 0 !== p._panner.positionX ? (p._panner.positionX.setValueAtTime(n, Howler.ctx.currentTime), p._panner.positionY.setValueAtTime(0, Howler.ctx.currentTime), p._panner.positionZ.setValueAtTime(0, Howler.ctx.currentTime)) : p._panner.setPosition(n, 0, 0) : p._panner.pan.setValueAtTime(n, Howler.ctx.currentTime)), r._emit("stereo", p._id)
}
}
return r
}, Howl.prototype.pos = function(n, t, r, o) {
var i = this;
if (!i._webAudio) return i;
if ("loaded" !== i._state) return i._queue.push({
event: "pos",
action: function() {
i.pos(n, t, r, o)
}
}), i;
if (t = "number" != typeof t ? 0 : t, r = "number" != typeof r ? -.5 : r, void 0 === o) {
if ("number" != typeof n) return i._pos;
i._pos = [n, t, r]
}
for (var a = i._getSoundIds(o), p = 0; p < a.length; p++) {
var s = i._soundById(a[p]);
if (s) {
if ("number" != typeof n) return s._pos;
s._pos = [n, t, r], s._node && (s._panner && !s._panner.pan || e(s, "spatial"), void 0 !== s._panner.positionX ? (s._panner.positionX.setValueAtTime(n, Howler.ctx.currentTime), s._panner.positionY.setValueAtTime(t, Howler.ctx.currentTime), s._panner.positionZ.setValueAtTime(r, Howler.ctx.currentTime)) : s._panner.setOrientation(n, t, r)), i._emit("pos", s._id)
}
}
return i
}, Howl.prototype.orientation = function(n, t, r, o) {
var i = this;
if (!i._webAudio) return i;
if ("loaded" !== i._state) return i._queue.push({
event: "orientation",
action: function() {
i.orientation(n, t, r, o)
}
}), i;
if (t = "number" != typeof t ? i._orientation[1] : t, r = "number" != typeof r ? i._orientation[2] : r, void 0 === o) {
if ("number" != typeof n) return i._orientation;
i._orientation = [n, t, r]
}
for (var a = i._getSoundIds(o), p = 0; p < a.length; p++) {
var s = i._soundById(a[p]);
if (s) {
if ("number" != typeof n) return s._orientation;
s._orientation = [n, t, r], s._node && (s._panner || (s._pos || (s._pos = i._pos || [0, 0, -.5]), e(s, "spatial")), void 0 !== s._panner.orientationX ? (s._panner.orientationX.setValueAtTime(n, Howler.ctx.currentTime), s._panner.orientationY.setValueAtTime(t, Howler.ctx.currentTime), s._panner.orientationZ.setValueAtTime(r, Howler.ctx.currentTime)) : s._panner.setOrientation(n, t, r)), i._emit("orientation", s._id)
}
}
return i
}, Howl.prototype.pannerAttr = function() {
var n, t, r, o = this,
i = arguments;
if (!o._webAudio) return o;
if (0 === i.length) return o._pannerAttr;
if (1 === i.length) {
if ("object" != typeof i[0]) return r = o._soundById(parseInt(i[0], 10)), r ? r._pannerAttr : o._pannerAttr;
n = i[0], void 0 === t && (n.pannerAttr || (n.pannerAttr = {
coneInnerAngle: n.coneInnerAngle,
coneOuterAngle: n.coneOuterAngle,
coneOuterGain: n.coneOuterGain,
distanceModel: n.distanceModel,
maxDistance: n.maxDistance,
refDistance: n.refDistance,
rolloffFactor: n.rolloffFactor,
panningModel: n.panningModel
}), o._pannerAttr = {
coneInnerAngle: void 0 !== n.pannerAttr.coneInnerAngle ? n.pannerAttr.coneInnerAngle : o._coneInnerAngle,
coneOuterAngle: void 0 !== n.pannerAttr.coneOuterAngle ? n.pannerAttr.coneOuterAngle : o._coneOuterAngle,
coneOuterGain: void 0 !== n.pannerAttr.coneOuterGain ? n.pannerAttr.coneOuterGain : o._coneOuterGain,
distanceModel: void 0 !== n.pannerAttr.distanceModel ? n.pannerAttr.distanceModel : o._distanceModel,
maxDistance: void 0 !== n.pannerAttr.maxDistance ? n.pannerAttr.maxDistance : o._maxDistance,
refDistance: void 0 !== n.pannerAttr.refDistance ? n.pannerAttr.refDistance : o._refDistance,
rolloffFactor: void 0 !== n.pannerAttr.rolloffFactor ? n.pannerAttr.rolloffFactor : o._rolloffFactor,
panningModel: void 0 !== n.pannerAttr.panningModel ? n.pannerAttr.panningModel : o._panningModel
})
} else 2 === i.length && (n = i[0], t = parseInt(i[1], 10));
for (var a = o._getSoundIds(t), p = 0; p < a.length; p++)
if (r = o._soundById(a[p])) {
var s = r._pannerAttr;
s = {
coneInnerAngle: void 0 !== n.coneInnerAngle ? n.coneInnerAngle : s.coneInnerAngle,
coneOuterAngle: void 0 !== n.coneOuterAngle ? n.coneOuterAngle : s.coneOuterAngle,
coneOuterGain: void 0 !== n.coneOuterGain ? n.coneOuterGain : s.coneOuterGain,
distanceModel: void 0 !== n.distanceModel ? n.distanceModel : s.distanceModel,
maxDistance: void 0 !== n.maxDistance ? n.maxDistance : s.maxDistance,
refDistance: void 0 !== n.refDistance ? n.refDistance : s.refDistance,
rolloffFactor: void 0 !== n.rolloffFactor ? n.rolloffFactor : s.rolloffFactor,
panningModel: void 0 !== n.panningModel ? n.panningModel : s.panningModel
};
var c = r._panner;
c ? (c.coneInnerAngle = s.coneInnerAngle, c.coneOuterAngle = s.coneOuterAngle, c.coneOuterGain = s.coneOuterGain, c.distanceModel = s.distanceModel, c.maxDistance = s.maxDistance, c.refDistance = s.refDistance, c.rolloffFactor = s.rolloffFactor, c.panningModel = s.panningModel) : (r._pos || (r._pos = o._pos || [0, 0, -.5]), e(r, "spatial"))
} return o
}, Sound.prototype.init = function(e) {
return function() {
var n = this,
t = n._parent;
n._orientation = t._orientation, n._stereo = t._stereo, n._pos = t._pos, n._pannerAttr = t._pannerAttr, e.call(this), n._stereo ? t.stereo(n._stereo) : n._pos && t.pos(n._pos[0], n._pos[1], n._pos[2], n._id)
}
}(Sound.prototype.init), Sound.prototype.reset = function(e) {
return function() {
var n = this,
t = n._parent;
return n._orientation = t._orientation, n._stereo = t._stereo, n._pos = t._pos, n._pannerAttr = t._pannerAttr, n._stereo ? t.stereo(n._stereo) : n._pos ? t.pos(n._pos[0], n._pos[1], n._pos[2], n._id) : n._panner && (n._panner.disconnect(0), n._panner = void 0, t._refreshBuffer(n)), e.call(this)
}
}(Sound.prototype.reset);
var e = function(e, n) {
n = n || "spatial", "spatial" === n ? (e._panner = Howler.ctx.createPanner(), e._panner.coneInnerAngle = e._pannerAttr.coneInnerAngle, e._panner.coneOuterAngle = e._pannerAttr.coneOuterAngle, e._panner.coneOuterGain = e._pannerAttr.coneOuterGain, e._panner.distanceModel = e._pannerAttr.distanceModel, e._panner.maxDistance = e._pannerAttr.maxDistance, e._panner.refDistance = e._pannerAttr.refDistance, e._panner.rolloffFactor = e._pannerAttr.rolloffFactor, e._panner.panningModel = e._pannerAttr.panningModel, void 0 !== e._panner.positionX ? (e._panner.positionX.setValueAtTime(e._pos[0], Howler.ctx.currentTime), e._panner.positionY.setValueAtTime(e._pos[1], Howler.ctx.currentTime), e._panner.positionZ.setValueAtTime(e._pos[2], Howler.ctx.currentTime)) : e._panner.setPosition(e._pos[0], e._pos[1], e._pos[2]), void 0 !== e._panner.orientationX ? (e._panner.orientationX.setValueAtTime(e._orientation[0], Howler.ctx.currentTime), e._panner.orientationY.setValueAtTime(e._orientation[1], Howler.ctx.currentTime), e._panner.orientationZ.setValueAtTime(e._orientation[2], Howler.ctx.currentTime)) : e._panner.setOrientation(e._orientation[0], e._orientation[1], e._orientation[2])) : (e._panner = Howler.ctx.createStereoPanner(), e._panner.pan.setValueAtTime(e._stereo, Howler.ctx.currentTime)), e._panner.connect(e._node), e._paused || e._parent.pause(e._id, !0).play(e._id, !0)
}
}();

File diff suppressed because it is too large Load Diff

View File

@@ -1,91 +0,0 @@
.libjass-wrapper {
position: relative;
overflow: hidden
}
.libjass-subs,
.libjass-subs .an {
position: absolute
}
.libjass-subs {
overflow: hidden;
line-height: 0
}
.libjass-subs,
.libjass-subs * {
pointer-events: none;
-webkit-animation-fill-mode: both !important;
animation-fill-mode: both !important
}
.libjass-subs.paused * {
-webkit-animation-play-state: paused !important;
animation-play-state: paused !important
}
.libjass-subs .an1,
.libjass-subs .an2,
.libjass-subs .an3 {
bottom: 0
}
.libjass-subs .an4,
.libjass-subs .an5,
.libjass-subs .an6 {
display: table;
width: 100%;
height: 100%
}
.libjass-subs .an4>*,
.libjass-subs .an5>*,
.libjass-subs .an6>* {
display: table-cell;
vertical-align: middle
}
.libjass-subs .an7,
.libjass-subs .an8,
.libjass-subs .an9 {
top: 0
}
.libjass-subs .an1,
.libjass-subs .an4,
.libjass-subs .an7 {
text-align: left
}
.libjass-subs .an2,
.libjass-subs .an5,
.libjass-subs .an8 {
text-align: center
}
.libjass-subs .an3,
.libjass-subs .an6,
.libjass-subs .an9 {
text-align: right
}
.libjass-subs div[data-dialogue-id]>span {
-webkit-perspective-origin: center;
perspective-origin: center;
-webkit-perspective: 400px;
perspective: 400px
}
.libjass-font-measure {
position: absolute;
visibility: hidden;
border: 0;
margin: 0;
padding: 0;
line-height: normal
}
.libjass-filters {
display: block
}

File diff suppressed because it is too large Load Diff

36
src/bundle.js Normal file
View File

@@ -0,0 +1,36 @@
/**
* require.js module definitions bundled by webpack
*/
// Use define from require.js not webpack's define
var _define = window.define;
// jstree
var jstree = require("jstree");
require("jstree/dist/themes/default/style.css");
_define("jstree", function() { return jstree; });
// jquery
var jquery = require("jquery");
_define("jQuery", function() { return jquery; });
// hlsjs
var hlsjs = require("hls.js");
_define("hlsjs", function() { return hlsjs; });
// howler
var howler = require("howler");
_define("howler", function() { return howler; });
// swiper
var swiper = require("swiper");
require("swiper/dist/css/swiper.min.css");
_define("swiper", function() { return swiper; });
// sortable
var sortable = require("sortablejs");
_define("sortable", function() { return sortable; });
// libjass
var libjass = require("libjass");
require("libjass/libjass.css");
_define("libjass", function() { return libjass; });

View File

@@ -36,6 +36,7 @@
font-weight: inherit;
box-shadow: none;
flex-shrink: 0;
border-radius: 0;
}
.actionSheetMenuItem:focus {

View File

@@ -41,10 +41,6 @@ define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-bu
var windowHeight = windowSize.innerHeight;
var windowWidth = windowSize.innerWidth;
if (windowWidth < 600 || windowHeight < 600) {
return null;
}
var pos = getOffsets([options.positionTo])[0];
if (options.positionY !== 'top') {
@@ -56,7 +52,7 @@ define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-bu
var height = dlg.offsetHeight || 300;
var width = dlg.offsetWidth || 160;
// Account for popup size
// Account for popup size
pos.top -= height / 2;
pos.left -= width / 2;

View File

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

View File

@@ -4,14 +4,21 @@ define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotific
function getEntryHtml(entry, apiClient) {
var html = "";
html += '<div class="listItem listItem-border">';
var color = "Error" == entry.Severity || "Fatal" == entry.Severity || "Warn" == entry.Severity ? "#cc0000" : "#00a4dc";
var color = "#00a4dc";
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, {
type: "Primary",
tag: entry.UserPrimaryImageTag,
height: 40
}) + "');background-repeat:no-repeat;background-position:center center;background-size: cover;\">dvr</i>"
} else html += '<i class="listItemIcon md-icon" style="background-color:' + color + '">dvr</i>';
} else {
html += '<i class="listItemIcon md-icon" 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>"
@@ -86,4 +93,4 @@ define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotific
var onUpdate = this.updateFn;
onUpdate && events.off(serverNotifications, "ActivityLogEntry", onUpdate), this.items = null, this.options = null
}, ActivityLog
});
});

45
src/components/alert.js Normal file
View File

@@ -0,0 +1,45 @@
define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize) {
'use strict';
function replaceAll(originalString, strReplace, strWith) {
var reg = new RegExp(strReplace, 'ig');
return originalString.replace(reg, strWith);
}
return function (text, title) {
var options;
if (typeof text === 'string') {
options = {
title: title,
text: text
};
} else {
options = text;
}
if (browser.tv && window.alert) {
alert(replaceAll(options.text || '', '<br/>', '\n'));
} else {
var items = [];
items.push({
name: globalize.translate('ButtonGotIt'),
id: 'ok',
type: 'submit'
});
options.buttons = items;
return dialog(options).then(function (result) {
if (result === 'ok') {
return Promise.resolve();
}
return Promise.reject();
});
}
return Promise.resolve();
};
});

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