From 6ddc62857d2dd07793c4d0a716dad28d5d35fc27 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 23 Feb 2019 18:05:42 +0000 Subject: [PATCH 01/69] move emby-webcomponents to components and reflect paths --- .../actionsheet/actionsheet.css | 0 .../actionsheet/actionsheet.js | 0 .../alert/alert.js | 0 .../alert/nativealert.js | 0 .../alphanumericshortcuts.js | 0 .../alphapicker/alphapicker.js | 0 .../alphapicker/style.css | 0 .../appfooter/appfooter.css | 0 .../appfooter/appfooter.js | 0 .../appsettings.js | 0 .../backdrop/backdrop.js | 0 .../backdrop/style.css | 0 .../browser.js | 0 .../browserdeviceprofile.js | 0 .../cardbuilder/card.css | 0 .../cardbuilder/cardbuilder.js | 0 .../cardbuilder/chaptercardbuilder.js | 0 .../cardbuilder/peoplecardbuilder.js | 0 .../cardbuilder/roundcard.css | 0 .../chromecast/chromecasthelpers.js | 0 .../chromecast/chromecastplayer.js | 0 .../clearbutton.css | 0 .../collectioneditor/collectioneditor.js | 0 .../confirm/confirm.js | 0 .../confirm/nativeconfirm.js | 0 .../datetime.js | 0 .../deletehelper.js | 0 .../dialog/dialog.js | 0 .../dialog/dialog.template.html | 0 .../dialoghelper/dialoghelper.css | 0 .../dialoghelper/dialoghelper.js | 0 .../displaysettings/displaysettings.js | 0 .../displaysettings.template.html | 0 .../emby-webcomponents => components}/dom.js | 0 .../emby-button/emby-button.css | 0 .../emby-button/emby-button.js | 0 .../emby-button/paper-icon-button-light.js | 0 .../emby-checkbox/emby-checkbox.css | 0 .../emby-checkbox/emby-checkbox.js | 0 .../emby-collapse/emby-collapse.css | 0 .../emby-collapse/emby-collapse.js | 0 .../emby-input/emby-input.css | 0 .../emby-input/emby-input.js | 0 .../emby-itemrefreshindicator.js | 0 .../emby-itemscontainer.js | 0 .../emby-progressring/emby-progressring.css | 0 .../emby-progressring/emby-progressring.js | 0 .../emby-progressring.template.html | 0 .../emby-radio/emby-radio.css | 0 .../emby-radio/emby-radio.js | 0 .../emby-scrollbuttons/emby-scrollbuttons.css | 0 .../emby-scrollbuttons/emby-scrollbuttons.js | 0 .../emby-scroller/emby-scroller.js | 0 .../emby-select/emby-select.css | 0 .../emby-select/emby-select.js | 0 .../emby-slider/emby-slider.css | 0 .../emby-slider/emby-slider.js | 0 .../emby-tabs/emby-tabs.css | 0 .../emby-tabs/emby-tabs.js | 0 .../emby-textarea/emby-textarea.css | 0 .../emby-textarea/emby-textarea.js | 0 .../emby-toggle/emby-toggle.css | 0 .../emby-toggle/emby-toggle.js | 0 .../fetchhelper.js | 0 .../filedownloader.js | 0 .../filesystem.js | 0 .../filtermenu/filtermenu.js | 0 .../filtermenu/filtermenu.template.html | 0 .../flexstyles.css | 0 .../flvjs/flv.min.js | 0 .../focusmanager.js | 0 .../fonts/fonts.css | 0 .../fonts/fonts.sized.css | 0 .../flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff | Bin .../flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 | Bin .../fonts/material-icons/style.css | 0 .../formdialog.css | 0 .../fullscreen/fullscreen-dc.js | 0 .../fullscreen/fullscreenmanager.js | 0 .../globalize.js | 0 .../guide/guide-settings.js | 0 .../guide/guide-settings.template.html | 0 .../guide/guide.css | 0 .../guide/guide.js | 0 .../guide/programs.css | 0 .../guide/tvguide.template.html | 0 .../headroom/headroom.css | 0 .../headroom/headroom.js | 0 .../homescreensettings/homescreensettings.js | 0 .../homescreensettings.template.html | 0 .../homescreensettingsdialog.js | 0 .../homescreensettingsdialog.template.html | 0 .../homesections/homesections.css | 0 .../homesections/homesections.js | 0 .../htmlaudioplayer/plugin.js | 0 .../htmlvideoplayer/htmlmediahelper.js | 0 .../htmlvideoplayer/plugin.js | 0 .../htmlvideoplayer/style.css | 0 .../imagedownloader/imagedownloader.js | 0 .../imagedownloader.template.html | 0 .../imageeditor/imageeditor.css | 0 .../imageeditor/imageeditor.js | 0 .../imageeditor/imageeditor.template.html | 0 .../images/basicimagefetcher.js | 0 .../images/imagehelper.js | 0 .../images/style.css | 0 .../imageuploader/imageuploader.js | 0 .../imageuploader/imageuploader.template.html | 0 .../imageuploader/style.css | 0 .../indicators/indicators.css | 0 .../indicators/indicators.js | 0 .../input/api.js | 0 .../input/gamepadtokey.js | 0 .../input/mouse.js | 0 .../inputmanager.js | 0 .../itemcontextmenu.js | 0 .../itemhelper.js | 0 .../itemidentifier/itemidentifier.js | 0 .../itemidentifier.template.html | 0 .../itemsrefresher.js | 0 .../layoutmanager.js | 0 .../lazyloader/lazyedgehack.css | 0 .../lazyloader-intersectionobserver.js | 0 .../lazyloader/lazyloader-scroll.js | 0 .../listview/listview.css | 0 .../listview/listview.js | 0 .../loading/loader2.gif | Bin .../loading/loading-legacy.css | 0 .../loading/loading-legacy.js | 0 .../loading/loading-lite.css | 0 .../loading/loading-lite.js | 0 .../loadingdialog/loadingdialog.js | 0 .../maintabsmanager.js | 0 .../mediainfo/fresh.png | Bin .../mediainfo/mediainfo.css | 0 .../mediainfo/mediainfo.js | 0 .../mediainfo/rotten.png | Bin .../metadataeditor/metadataeditor.js | 0 .../metadataeditor.template.html | 0 .../metadataeditor/personeditor.js | 0 .../metadataeditor/personeditor.template.html | 0 .../multidownload.js | 0 .../multiselect/multiselect.css | 0 .../multiselect/multiselect.js | 0 .../native-promise-only/lib/npo.src.js | 0 .../native-promise-only/test_adapter.js | 0 .../notifications/badge.png | Bin .../notifications/notificationicon.png | Bin .../notifications/notifications.js | 0 .../nowplayingbar/nowplayingbar.css | 0 .../nowplayingbar/nowplayingbar.js | 0 .../packagemanager.js | 0 .../pagejs/page.js | 0 .../photoplayer/plugin.js | 0 .../playback/autoplaydetect.js | 0 .../playback/brightnessosd.js | 0 .../playback/experimentalwarnings.js | 0 .../playback/iconosd.css | 0 .../playback/mediasession.js | 0 .../playback/nowplayinghelper.js | 0 .../playback/playaccessvalidation.js | 0 .../playback/playbackmanager.js | 0 .../playback/playbackorientation.js | 0 .../playback/playbackvalidation.js | 0 .../playback/playerselection.js | 0 .../playback/playersettingsmenu.js | 0 .../playback/playmethodhelper.js | 0 .../playback/playqueuemanager.js | 0 .../playback/remotecontrolautoplay.js | 0 .../playback/volumeosd.js | 0 .../playbacksettings/playbacksettings.js | 0 .../playbacksettings.template.html | 0 .../playerstats/playerstats.css | 0 .../playerstats/playerstats.js | 0 .../playlisteditor/playlisteditor.js | 0 .../playmenu.js | 0 .../pluginmanager.js | 0 .../polyfills/array.js | 0 .../polyfills/bind.js | 0 .../polyfills/objectassign.js | 0 .../polyfills/raf.js | 0 .../prompt/nativeprompt.js | 0 .../prompt/prompt.js | 0 .../prompt/prompt.template.html | 0 .../qualityoptions.js | 0 .../recordingcreator/empty.png | Bin .../recordingcreator/recordingbutton.js | 0 .../recordingcreator/recordingcreator.css | 0 .../recordingcreator/recordingcreator.js | 0 .../recordingcreator.template.html | 0 .../recordingcreator/recordingeditor.js | 0 .../recordingeditor.template.html | 0 .../recordingcreator/recordingfields.css | 0 .../recordingcreator/recordingfields.js | 0 .../recordingfields.template.html | 0 .../recordingcreator/recordinghelper.js | 0 .../recordingcreator/seriesrecordingeditor.js | 0 .../seriesrecordingeditor.template.html | 0 .../refreshdialog/refreshdialog.js | 0 .../registrationservices.js | 0 .../require/requirecss.js | 2 +- .../require/requiretext.js | 0 .../ResizeObserver.js | 0 .../router.js | 0 .../sanitizefilename.js | 0 .../scroller/smoothscroller.js | 0 .../scrollhelper.js | 0 .../scrollstyles.css | 0 .../search/searchfields.css | 0 .../search/searchfields.js | 0 .../search/searchfields.template.html | 0 .../search/searchresults.js | 0 .../search/searchresults.template.html | 0 .../serverrestartdialog.js | 0 .../serviceworker/notifications.js | 0 .../serviceworker/sync.js | 0 .../sessionplayer.js | 0 .../shell.js | 0 .../shortcuts.js | 0 .../skinmanager.js | 2 +- .../slideshow/slideshow.js | 0 .../slideshow/style.css | 0 .../sortmenu/sortmenu.js | 0 .../sortmenu/sortmenu.template.html | 0 .../staticbackdrops.js | 0 .../subtitleeditor/subtitleeditor.css | 0 .../subtitleeditor/subtitleeditor.js | 0 .../subtitleeditor.template.html | 0 .../subtitleappearancehelper.js | 0 .../subtitlesettings/subtitlesettings.js | 0 .../subtitlesettings.template.html | 0 .../sync/emby-downloadbutton.js | 0 .../sync/sync.js | 0 .../tabbedview/itemstab.js | 0 .../tabbedview/tabbedview.js | 0 .../thememediaplayer.js | 0 .../themes/appletv/theme.css | 0 .../themes/blueradiance/bg.jpg | Bin .../themes/blueradiance/theme.css | 0 .../themes/dark-classic/theme.css | 0 .../themes/dark-green/theme.css | 0 .../themes/dark-red/theme.css | 0 .../themes/dark/theme.css | 0 .../themes/light-blue/theme.css | 0 .../themes/light-classic/theme.css | 0 .../themes/light-green/theme.css | 0 .../themes/light-pink/theme.css | 0 .../themes/light-purple/theme.css | 0 .../themes/light-red/theme.css | 0 .../themes/light/theme.css | 0 .../themes/logodark.png | Bin .../themes/logowhite.png | Bin .../themes/wmc/theme.css | 0 .../toast/toast.css | 0 .../toast/toast.js | 0 .../touchhelper.js | 0 .../upnextdialog/upnextdialog.css | 0 .../upnextdialog/upnextdialog.js | 0 .../userdatabuttons/emby-playstatebutton.js | 0 .../userdatabuttons/emby-ratingbutton.js | 0 .../userdatabuttons/userdatabuttons.css | 0 .../userdatabuttons/userdatabuttons.js | 0 .../usersettings/usersettings.js | 0 .../usersettings/usersettingsbuilder.js | 0 src/components/viewcontainer-lite.js | 2 +- .../viewmanager/viewcontainer-lite.css | 0 .../viewmanager/viewcontainer-lite.js | 0 .../viewmanager/viewmanager.js | 0 .../viewsettings/viewsettings.js | 0 .../viewsettings/viewsettings.template.html | 0 .../visibleinviewport.js | 0 .../youtubeplayer/plugin.js | 0 .../youtubeplayer/style.css | 0 src/scripts/site.js | 32 +++++++++--------- src/serviceworker.js | 2 +- 275 files changed, 20 insertions(+), 20 deletions(-) rename src/{bower_components/emby-webcomponents => components}/actionsheet/actionsheet.css (100%) rename src/{bower_components/emby-webcomponents => components}/actionsheet/actionsheet.js (100%) rename src/{bower_components/emby-webcomponents => components}/alert/alert.js (100%) rename src/{bower_components/emby-webcomponents => components}/alert/nativealert.js (100%) rename src/{bower_components/emby-webcomponents => components}/alphanumericshortcuts/alphanumericshortcuts.js (100%) rename src/{bower_components/emby-webcomponents => components}/alphapicker/alphapicker.js (100%) rename src/{bower_components/emby-webcomponents => components}/alphapicker/style.css (100%) rename src/{bower_components/emby-webcomponents => components}/appfooter/appfooter.css (100%) rename src/{bower_components/emby-webcomponents => components}/appfooter/appfooter.js (100%) rename src/{bower_components/emby-webcomponents => components}/appsettings.js (100%) rename src/{bower_components/emby-webcomponents => components}/backdrop/backdrop.js (100%) rename src/{bower_components/emby-webcomponents => components}/backdrop/style.css (100%) rename src/{bower_components/emby-webcomponents => components}/browser.js (100%) rename src/{bower_components/emby-webcomponents => components}/browserdeviceprofile.js (100%) rename src/{bower_components/emby-webcomponents => components}/cardbuilder/card.css (100%) rename src/{bower_components/emby-webcomponents => components}/cardbuilder/cardbuilder.js (100%) rename src/{bower_components/emby-webcomponents => components}/cardbuilder/chaptercardbuilder.js (100%) rename src/{bower_components/emby-webcomponents => components}/cardbuilder/peoplecardbuilder.js (100%) rename src/{bower_components/emby-webcomponents => components}/cardbuilder/roundcard.css (100%) rename src/{bower_components/emby-webcomponents => components}/chromecast/chromecasthelpers.js (100%) rename src/{bower_components/emby-webcomponents => components}/chromecast/chromecastplayer.js (100%) rename src/{bower_components/emby-webcomponents => components}/clearbutton.css (100%) rename src/{bower_components/emby-webcomponents => components}/collectioneditor/collectioneditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/confirm/confirm.js (100%) rename src/{bower_components/emby-webcomponents => components}/confirm/nativeconfirm.js (100%) rename src/{bower_components/emby-webcomponents => components}/datetime.js (100%) rename src/{bower_components/emby-webcomponents => components}/deletehelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/dialog/dialog.js (100%) rename src/{bower_components/emby-webcomponents => components}/dialog/dialog.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/dialoghelper/dialoghelper.css (100%) rename src/{bower_components/emby-webcomponents => components}/dialoghelper/dialoghelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/displaysettings/displaysettings.js (100%) rename src/{bower_components/emby-webcomponents => components}/displaysettings/displaysettings.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/dom.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-button/emby-button.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-button/emby-button.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-button/paper-icon-button-light.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-checkbox/emby-checkbox.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-checkbox/emby-checkbox.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-collapse/emby-collapse.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-collapse/emby-collapse.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-input/emby-input.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-input/emby-input.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-itemrefreshindicator/emby-itemrefreshindicator.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-itemscontainer/emby-itemscontainer.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-progressring/emby-progressring.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-progressring/emby-progressring.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-progressring/emby-progressring.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/emby-radio/emby-radio.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-radio/emby-radio.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-scrollbuttons/emby-scrollbuttons.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-scrollbuttons/emby-scrollbuttons.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-scroller/emby-scroller.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-select/emby-select.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-select/emby-select.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-slider/emby-slider.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-slider/emby-slider.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-tabs/emby-tabs.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-tabs/emby-tabs.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-textarea/emby-textarea.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-textarea/emby-textarea.js (100%) rename src/{bower_components/emby-webcomponents => components}/emby-toggle/emby-toggle.css (100%) rename src/{bower_components/emby-webcomponents => components}/emby-toggle/emby-toggle.js (100%) rename src/{bower_components/emby-webcomponents => components}/fetchhelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/filedownloader.js (100%) rename src/{bower_components/emby-webcomponents => components}/filesystem.js (100%) rename src/{bower_components/emby-webcomponents => components}/filtermenu/filtermenu.js (100%) rename src/{bower_components/emby-webcomponents => components}/filtermenu/filtermenu.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/flexstyles.css (100%) rename src/{bower_components/emby-webcomponents => components}/flvjs/flv.min.js (100%) rename src/{bower_components/emby-webcomponents => components}/focusmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/fonts/fonts.css (100%) rename src/{bower_components/emby-webcomponents => components}/fonts/fonts.sized.css (100%) rename src/{bower_components/emby-webcomponents => components}/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff (100%) rename src/{bower_components/emby-webcomponents => components}/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 (100%) rename src/{bower_components/emby-webcomponents => components}/fonts/material-icons/style.css (100%) rename src/{bower_components/emby-webcomponents => components}/formdialog.css (100%) rename src/{bower_components/emby-webcomponents => components}/fullscreen/fullscreen-dc.js (100%) rename src/{bower_components/emby-webcomponents => components}/fullscreen/fullscreenmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/globalize.js (100%) rename src/{bower_components/emby-webcomponents => components}/guide/guide-settings.js (100%) rename src/{bower_components/emby-webcomponents => components}/guide/guide-settings.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/guide/guide.css (100%) rename src/{bower_components/emby-webcomponents => components}/guide/guide.js (100%) rename src/{bower_components/emby-webcomponents => components}/guide/programs.css (100%) rename src/{bower_components/emby-webcomponents => components}/guide/tvguide.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/headroom/headroom.css (100%) rename src/{bower_components/emby-webcomponents => components}/headroom/headroom.js (100%) rename src/{bower_components/emby-webcomponents => components}/homescreensettings/homescreensettings.js (100%) rename src/{bower_components/emby-webcomponents => components}/homescreensettings/homescreensettings.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/homescreensettings/homescreensettingsdialog.js (100%) rename src/{bower_components/emby-webcomponents => components}/homescreensettings/homescreensettingsdialog.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/homesections/homesections.css (100%) rename src/{bower_components/emby-webcomponents => components}/homesections/homesections.js (100%) rename src/{bower_components/emby-webcomponents => components}/htmlaudioplayer/plugin.js (100%) rename src/{bower_components/emby-webcomponents => components}/htmlvideoplayer/htmlmediahelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/htmlvideoplayer/plugin.js (100%) rename src/{bower_components/emby-webcomponents => components}/htmlvideoplayer/style.css (100%) rename src/{bower_components/emby-webcomponents => components}/imagedownloader/imagedownloader.js (100%) rename src/{bower_components/emby-webcomponents => components}/imagedownloader/imagedownloader.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/imageeditor/imageeditor.css (100%) rename src/{bower_components/emby-webcomponents => components}/imageeditor/imageeditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/imageeditor/imageeditor.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/images/basicimagefetcher.js (100%) rename src/{bower_components/emby-webcomponents => components}/images/imagehelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/images/style.css (100%) rename src/{bower_components/emby-webcomponents => components}/imageuploader/imageuploader.js (100%) rename src/{bower_components/emby-webcomponents => components}/imageuploader/imageuploader.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/imageuploader/style.css (100%) rename src/{bower_components/emby-webcomponents => components}/indicators/indicators.css (100%) rename src/{bower_components/emby-webcomponents => components}/indicators/indicators.js (100%) rename src/{bower_components/emby-webcomponents => components}/input/api.js (100%) rename src/{bower_components/emby-webcomponents => components}/input/gamepadtokey.js (100%) rename src/{bower_components/emby-webcomponents => components}/input/mouse.js (100%) rename src/{bower_components/emby-webcomponents => components}/inputmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/itemcontextmenu.js (100%) rename src/{bower_components/emby-webcomponents => components}/itemhelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/itemidentifier/itemidentifier.js (100%) rename src/{bower_components/emby-webcomponents => components}/itemidentifier/itemidentifier.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/itemsrefresher.js (100%) rename src/{bower_components/emby-webcomponents => components}/layoutmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/lazyloader/lazyedgehack.css (100%) rename src/{bower_components/emby-webcomponents => components}/lazyloader/lazyloader-intersectionobserver.js (100%) rename src/{bower_components/emby-webcomponents => components}/lazyloader/lazyloader-scroll.js (100%) rename src/{bower_components/emby-webcomponents => components}/listview/listview.css (100%) rename src/{bower_components/emby-webcomponents => components}/listview/listview.js (100%) rename src/{bower_components/emby-webcomponents => components}/loading/loader2.gif (100%) rename src/{bower_components/emby-webcomponents => components}/loading/loading-legacy.css (100%) rename src/{bower_components/emby-webcomponents => components}/loading/loading-legacy.js (100%) rename src/{bower_components/emby-webcomponents => components}/loading/loading-lite.css (100%) rename src/{bower_components/emby-webcomponents => components}/loading/loading-lite.js (100%) rename src/{bower_components/emby-webcomponents => components}/loadingdialog/loadingdialog.js (100%) rename src/{bower_components/emby-webcomponents => components}/maintabsmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/mediainfo/fresh.png (100%) rename src/{bower_components/emby-webcomponents => components}/mediainfo/mediainfo.css (100%) rename src/{bower_components/emby-webcomponents => components}/mediainfo/mediainfo.js (100%) rename src/{bower_components/emby-webcomponents => components}/mediainfo/rotten.png (100%) rename src/{bower_components/emby-webcomponents => components}/metadataeditor/metadataeditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/metadataeditor/metadataeditor.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/metadataeditor/personeditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/metadataeditor/personeditor.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/multidownload.js (100%) rename src/{bower_components/emby-webcomponents => components}/multiselect/multiselect.css (100%) rename src/{bower_components/emby-webcomponents => components}/multiselect/multiselect.js (100%) rename src/{bower_components/emby-webcomponents => components}/native-promise-only/lib/npo.src.js (100%) rename src/{bower_components/emby-webcomponents => components}/native-promise-only/test_adapter.js (100%) rename src/{bower_components/emby-webcomponents => components}/notifications/badge.png (100%) rename src/{bower_components/emby-webcomponents => components}/notifications/notificationicon.png (100%) rename src/{bower_components/emby-webcomponents => components}/notifications/notifications.js (100%) rename src/{bower_components/emby-webcomponents => components}/nowplayingbar/nowplayingbar.css (100%) rename src/{bower_components/emby-webcomponents => components}/nowplayingbar/nowplayingbar.js (100%) rename src/{bower_components/emby-webcomponents => components}/packagemanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/pagejs/page.js (100%) rename src/{bower_components/emby-webcomponents => components}/photoplayer/plugin.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/autoplaydetect.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/brightnessosd.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/experimentalwarnings.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/iconosd.css (100%) rename src/{bower_components/emby-webcomponents => components}/playback/mediasession.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/nowplayinghelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playaccessvalidation.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playbackmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playbackorientation.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playbackvalidation.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playerselection.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playersettingsmenu.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playmethodhelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/playqueuemanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/remotecontrolautoplay.js (100%) rename src/{bower_components/emby-webcomponents => components}/playback/volumeosd.js (100%) rename src/{bower_components/emby-webcomponents => components}/playbacksettings/playbacksettings.js (100%) rename src/{bower_components/emby-webcomponents => components}/playbacksettings/playbacksettings.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/playerstats/playerstats.css (100%) rename src/{bower_components/emby-webcomponents => components}/playerstats/playerstats.js (100%) rename src/{bower_components/emby-webcomponents => components}/playlisteditor/playlisteditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/playmenu.js (100%) rename src/{bower_components/emby-webcomponents => components}/pluginmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/polyfills/array.js (100%) rename src/{bower_components/emby-webcomponents => components}/polyfills/bind.js (100%) rename src/{bower_components/emby-webcomponents => components}/polyfills/objectassign.js (100%) rename src/{bower_components/emby-webcomponents => components}/polyfills/raf.js (100%) rename src/{bower_components/emby-webcomponents => components}/prompt/nativeprompt.js (100%) rename src/{bower_components/emby-webcomponents => components}/prompt/prompt.js (100%) rename src/{bower_components/emby-webcomponents => components}/prompt/prompt.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/qualityoptions.js (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/empty.png (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingbutton.js (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingcreator.css (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingcreator.js (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingcreator.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingeditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingeditor.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingfields.css (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingfields.js (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordingfields.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/recordinghelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/seriesrecordingeditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/recordingcreator/seriesrecordingeditor.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/refreshdialog/refreshdialog.js (100%) rename src/{bower_components/emby-webcomponents => components}/registrationservices/registrationservices.js (100%) rename src/{bower_components/emby-webcomponents => components}/require/requirecss.js (96%) rename src/{bower_components/emby-webcomponents => components}/require/requiretext.js (100%) rename src/{bower_components/emby-webcomponents => components}/resize-observer-polyfill/ResizeObserver.js (100%) rename src/{bower_components/emby-webcomponents => components}/router.js (100%) rename src/{bower_components/emby-webcomponents => components}/sanitizefilename.js (100%) rename src/{bower_components/emby-webcomponents => components}/scroller/smoothscroller.js (100%) rename src/{bower_components/emby-webcomponents => components}/scrollhelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/scrollstyles.css (100%) rename src/{bower_components/emby-webcomponents => components}/search/searchfields.css (100%) rename src/{bower_components/emby-webcomponents => components}/search/searchfields.js (100%) rename src/{bower_components/emby-webcomponents => components}/search/searchfields.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/search/searchresults.js (100%) rename src/{bower_components/emby-webcomponents => components}/search/searchresults.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/serverrestartdialog/serverrestartdialog.js (100%) rename src/{bower_components/emby-webcomponents => components}/serviceworker/notifications.js (100%) rename src/{bower_components/emby-webcomponents => components}/serviceworker/sync.js (100%) rename src/{bower_components/emby-webcomponents => components}/sessionplayer.js (100%) rename src/{bower_components/emby-webcomponents => components}/shell.js (100%) rename src/{bower_components/emby-webcomponents => components}/shortcuts.js (100%) rename src/{bower_components/emby-webcomponents => components}/skinmanager.js (99%) rename src/{bower_components/emby-webcomponents => components}/slideshow/slideshow.js (100%) rename src/{bower_components/emby-webcomponents => components}/slideshow/style.css (100%) rename src/{bower_components/emby-webcomponents => components}/sortmenu/sortmenu.js (100%) rename src/{bower_components/emby-webcomponents => components}/sortmenu/sortmenu.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/staticbackdrops.js (100%) rename src/{bower_components/emby-webcomponents => components}/subtitleeditor/subtitleeditor.css (100%) rename src/{bower_components/emby-webcomponents => components}/subtitleeditor/subtitleeditor.js (100%) rename src/{bower_components/emby-webcomponents => components}/subtitleeditor/subtitleeditor.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/subtitlesettings/subtitleappearancehelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/subtitlesettings/subtitlesettings.js (100%) rename src/{bower_components/emby-webcomponents => components}/subtitlesettings/subtitlesettings.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/sync/emby-downloadbutton.js (100%) rename src/{bower_components/emby-webcomponents => components}/sync/sync.js (100%) rename src/{bower_components/emby-webcomponents => components}/tabbedview/itemstab.js (100%) rename src/{bower_components/emby-webcomponents => components}/tabbedview/tabbedview.js (100%) rename src/{bower_components/emby-webcomponents => components}/thememediaplayer.js (100%) rename src/{bower_components/emby-webcomponents => components}/themes/appletv/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/blueradiance/bg.jpg (100%) rename src/{bower_components/emby-webcomponents => components}/themes/blueradiance/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/dark-classic/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/dark-green/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/dark-red/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/dark/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/light-blue/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/light-classic/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/light-green/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/light-pink/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/light-purple/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/light-red/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/light/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/themes/logodark.png (100%) rename src/{bower_components/emby-webcomponents => components}/themes/logowhite.png (100%) rename src/{bower_components/emby-webcomponents => components}/themes/wmc/theme.css (100%) rename src/{bower_components/emby-webcomponents => components}/toast/toast.css (100%) rename src/{bower_components/emby-webcomponents => components}/toast/toast.js (100%) rename src/{bower_components/emby-webcomponents => components}/touchhelper.js (100%) rename src/{bower_components/emby-webcomponents => components}/upnextdialog/upnextdialog.css (100%) rename src/{bower_components/emby-webcomponents => components}/upnextdialog/upnextdialog.js (100%) rename src/{bower_components/emby-webcomponents => components}/userdatabuttons/emby-playstatebutton.js (100%) rename src/{bower_components/emby-webcomponents => components}/userdatabuttons/emby-ratingbutton.js (100%) rename src/{bower_components/emby-webcomponents => components}/userdatabuttons/userdatabuttons.css (100%) rename src/{bower_components/emby-webcomponents => components}/userdatabuttons/userdatabuttons.js (100%) rename src/{bower_components/emby-webcomponents => components}/usersettings/usersettings.js (100%) rename src/{bower_components/emby-webcomponents => components}/usersettings/usersettingsbuilder.js (100%) rename src/{bower_components/emby-webcomponents => components}/viewmanager/viewcontainer-lite.css (100%) rename src/{bower_components/emby-webcomponents => components}/viewmanager/viewcontainer-lite.js (100%) rename src/{bower_components/emby-webcomponents => components}/viewmanager/viewmanager.js (100%) rename src/{bower_components/emby-webcomponents => components}/viewsettings/viewsettings.js (100%) rename src/{bower_components/emby-webcomponents => components}/viewsettings/viewsettings.template.html (100%) rename src/{bower_components/emby-webcomponents => components}/visibleinviewport.js (100%) rename src/{bower_components/emby-webcomponents => components}/youtubeplayer/plugin.js (100%) rename src/{bower_components/emby-webcomponents => components}/youtubeplayer/style.css (100%) diff --git a/src/bower_components/emby-webcomponents/actionsheet/actionsheet.css b/src/components/actionsheet/actionsheet.css similarity index 100% rename from src/bower_components/emby-webcomponents/actionsheet/actionsheet.css rename to src/components/actionsheet/actionsheet.css diff --git a/src/bower_components/emby-webcomponents/actionsheet/actionsheet.js b/src/components/actionsheet/actionsheet.js similarity index 100% rename from src/bower_components/emby-webcomponents/actionsheet/actionsheet.js rename to src/components/actionsheet/actionsheet.js diff --git a/src/bower_components/emby-webcomponents/alert/alert.js b/src/components/alert/alert.js similarity index 100% rename from src/bower_components/emby-webcomponents/alert/alert.js rename to src/components/alert/alert.js diff --git a/src/bower_components/emby-webcomponents/alert/nativealert.js b/src/components/alert/nativealert.js similarity index 100% rename from src/bower_components/emby-webcomponents/alert/nativealert.js rename to src/components/alert/nativealert.js diff --git a/src/bower_components/emby-webcomponents/alphanumericshortcuts/alphanumericshortcuts.js b/src/components/alphanumericshortcuts/alphanumericshortcuts.js similarity index 100% rename from src/bower_components/emby-webcomponents/alphanumericshortcuts/alphanumericshortcuts.js rename to src/components/alphanumericshortcuts/alphanumericshortcuts.js diff --git a/src/bower_components/emby-webcomponents/alphapicker/alphapicker.js b/src/components/alphapicker/alphapicker.js similarity index 100% rename from src/bower_components/emby-webcomponents/alphapicker/alphapicker.js rename to src/components/alphapicker/alphapicker.js diff --git a/src/bower_components/emby-webcomponents/alphapicker/style.css b/src/components/alphapicker/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/alphapicker/style.css rename to src/components/alphapicker/style.css diff --git a/src/bower_components/emby-webcomponents/appfooter/appfooter.css b/src/components/appfooter/appfooter.css similarity index 100% rename from src/bower_components/emby-webcomponents/appfooter/appfooter.css rename to src/components/appfooter/appfooter.css diff --git a/src/bower_components/emby-webcomponents/appfooter/appfooter.js b/src/components/appfooter/appfooter.js similarity index 100% rename from src/bower_components/emby-webcomponents/appfooter/appfooter.js rename to src/components/appfooter/appfooter.js diff --git a/src/bower_components/emby-webcomponents/appsettings.js b/src/components/appsettings.js similarity index 100% rename from src/bower_components/emby-webcomponents/appsettings.js rename to src/components/appsettings.js diff --git a/src/bower_components/emby-webcomponents/backdrop/backdrop.js b/src/components/backdrop/backdrop.js similarity index 100% rename from src/bower_components/emby-webcomponents/backdrop/backdrop.js rename to src/components/backdrop/backdrop.js diff --git a/src/bower_components/emby-webcomponents/backdrop/style.css b/src/components/backdrop/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/backdrop/style.css rename to src/components/backdrop/style.css diff --git a/src/bower_components/emby-webcomponents/browser.js b/src/components/browser.js similarity index 100% rename from src/bower_components/emby-webcomponents/browser.js rename to src/components/browser.js diff --git a/src/bower_components/emby-webcomponents/browserdeviceprofile.js b/src/components/browserdeviceprofile.js similarity index 100% rename from src/bower_components/emby-webcomponents/browserdeviceprofile.js rename to src/components/browserdeviceprofile.js diff --git a/src/bower_components/emby-webcomponents/cardbuilder/card.css b/src/components/cardbuilder/card.css similarity index 100% rename from src/bower_components/emby-webcomponents/cardbuilder/card.css rename to src/components/cardbuilder/card.css diff --git a/src/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js b/src/components/cardbuilder/cardbuilder.js similarity index 100% rename from src/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js rename to src/components/cardbuilder/cardbuilder.js diff --git a/src/bower_components/emby-webcomponents/cardbuilder/chaptercardbuilder.js b/src/components/cardbuilder/chaptercardbuilder.js similarity index 100% rename from src/bower_components/emby-webcomponents/cardbuilder/chaptercardbuilder.js rename to src/components/cardbuilder/chaptercardbuilder.js diff --git a/src/bower_components/emby-webcomponents/cardbuilder/peoplecardbuilder.js b/src/components/cardbuilder/peoplecardbuilder.js similarity index 100% rename from src/bower_components/emby-webcomponents/cardbuilder/peoplecardbuilder.js rename to src/components/cardbuilder/peoplecardbuilder.js diff --git a/src/bower_components/emby-webcomponents/cardbuilder/roundcard.css b/src/components/cardbuilder/roundcard.css similarity index 100% rename from src/bower_components/emby-webcomponents/cardbuilder/roundcard.css rename to src/components/cardbuilder/roundcard.css diff --git a/src/bower_components/emby-webcomponents/chromecast/chromecasthelpers.js b/src/components/chromecast/chromecasthelpers.js similarity index 100% rename from src/bower_components/emby-webcomponents/chromecast/chromecasthelpers.js rename to src/components/chromecast/chromecasthelpers.js diff --git a/src/bower_components/emby-webcomponents/chromecast/chromecastplayer.js b/src/components/chromecast/chromecastplayer.js similarity index 100% rename from src/bower_components/emby-webcomponents/chromecast/chromecastplayer.js rename to src/components/chromecast/chromecastplayer.js diff --git a/src/bower_components/emby-webcomponents/clearbutton.css b/src/components/clearbutton.css similarity index 100% rename from src/bower_components/emby-webcomponents/clearbutton.css rename to src/components/clearbutton.css diff --git a/src/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js b/src/components/collectioneditor/collectioneditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js rename to src/components/collectioneditor/collectioneditor.js diff --git a/src/bower_components/emby-webcomponents/confirm/confirm.js b/src/components/confirm/confirm.js similarity index 100% rename from src/bower_components/emby-webcomponents/confirm/confirm.js rename to src/components/confirm/confirm.js diff --git a/src/bower_components/emby-webcomponents/confirm/nativeconfirm.js b/src/components/confirm/nativeconfirm.js similarity index 100% rename from src/bower_components/emby-webcomponents/confirm/nativeconfirm.js rename to src/components/confirm/nativeconfirm.js diff --git a/src/bower_components/emby-webcomponents/datetime.js b/src/components/datetime.js similarity index 100% rename from src/bower_components/emby-webcomponents/datetime.js rename to src/components/datetime.js diff --git a/src/bower_components/emby-webcomponents/deletehelper.js b/src/components/deletehelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/deletehelper.js rename to src/components/deletehelper.js diff --git a/src/bower_components/emby-webcomponents/dialog/dialog.js b/src/components/dialog/dialog.js similarity index 100% rename from src/bower_components/emby-webcomponents/dialog/dialog.js rename to src/components/dialog/dialog.js diff --git a/src/bower_components/emby-webcomponents/dialog/dialog.template.html b/src/components/dialog/dialog.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/dialog/dialog.template.html rename to src/components/dialog/dialog.template.html diff --git a/src/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css b/src/components/dialoghelper/dialoghelper.css similarity index 100% rename from src/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css rename to src/components/dialoghelper/dialoghelper.css diff --git a/src/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js b/src/components/dialoghelper/dialoghelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js rename to src/components/dialoghelper/dialoghelper.js diff --git a/src/bower_components/emby-webcomponents/displaysettings/displaysettings.js b/src/components/displaysettings/displaysettings.js similarity index 100% rename from src/bower_components/emby-webcomponents/displaysettings/displaysettings.js rename to src/components/displaysettings/displaysettings.js diff --git a/src/bower_components/emby-webcomponents/displaysettings/displaysettings.template.html b/src/components/displaysettings/displaysettings.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/displaysettings/displaysettings.template.html rename to src/components/displaysettings/displaysettings.template.html diff --git a/src/bower_components/emby-webcomponents/dom.js b/src/components/dom.js similarity index 100% rename from src/bower_components/emby-webcomponents/dom.js rename to src/components/dom.js diff --git a/src/bower_components/emby-webcomponents/emby-button/emby-button.css b/src/components/emby-button/emby-button.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-button/emby-button.css rename to src/components/emby-button/emby-button.css diff --git a/src/bower_components/emby-webcomponents/emby-button/emby-button.js b/src/components/emby-button/emby-button.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-button/emby-button.js rename to src/components/emby-button/emby-button.js diff --git a/src/bower_components/emby-webcomponents/emby-button/paper-icon-button-light.js b/src/components/emby-button/paper-icon-button-light.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-button/paper-icon-button-light.js rename to src/components/emby-button/paper-icon-button-light.js diff --git a/src/bower_components/emby-webcomponents/emby-checkbox/emby-checkbox.css b/src/components/emby-checkbox/emby-checkbox.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-checkbox/emby-checkbox.css rename to src/components/emby-checkbox/emby-checkbox.css diff --git a/src/bower_components/emby-webcomponents/emby-checkbox/emby-checkbox.js b/src/components/emby-checkbox/emby-checkbox.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-checkbox/emby-checkbox.js rename to src/components/emby-checkbox/emby-checkbox.js diff --git a/src/bower_components/emby-webcomponents/emby-collapse/emby-collapse.css b/src/components/emby-collapse/emby-collapse.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-collapse/emby-collapse.css rename to src/components/emby-collapse/emby-collapse.css diff --git a/src/bower_components/emby-webcomponents/emby-collapse/emby-collapse.js b/src/components/emby-collapse/emby-collapse.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-collapse/emby-collapse.js rename to src/components/emby-collapse/emby-collapse.js diff --git a/src/bower_components/emby-webcomponents/emby-input/emby-input.css b/src/components/emby-input/emby-input.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-input/emby-input.css rename to src/components/emby-input/emby-input.css diff --git a/src/bower_components/emby-webcomponents/emby-input/emby-input.js b/src/components/emby-input/emby-input.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-input/emby-input.js rename to src/components/emby-input/emby-input.js diff --git a/src/bower_components/emby-webcomponents/emby-itemrefreshindicator/emby-itemrefreshindicator.js b/src/components/emby-itemrefreshindicator/emby-itemrefreshindicator.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-itemrefreshindicator/emby-itemrefreshindicator.js rename to src/components/emby-itemrefreshindicator/emby-itemrefreshindicator.js diff --git a/src/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js b/src/components/emby-itemscontainer/emby-itemscontainer.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js rename to src/components/emby-itemscontainer/emby-itemscontainer.js diff --git a/src/bower_components/emby-webcomponents/emby-progressring/emby-progressring.css b/src/components/emby-progressring/emby-progressring.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-progressring/emby-progressring.css rename to src/components/emby-progressring/emby-progressring.css diff --git a/src/bower_components/emby-webcomponents/emby-progressring/emby-progressring.js b/src/components/emby-progressring/emby-progressring.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-progressring/emby-progressring.js rename to src/components/emby-progressring/emby-progressring.js diff --git a/src/bower_components/emby-webcomponents/emby-progressring/emby-progressring.template.html b/src/components/emby-progressring/emby-progressring.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/emby-progressring/emby-progressring.template.html rename to src/components/emby-progressring/emby-progressring.template.html diff --git a/src/bower_components/emby-webcomponents/emby-radio/emby-radio.css b/src/components/emby-radio/emby-radio.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-radio/emby-radio.css rename to src/components/emby-radio/emby-radio.css diff --git a/src/bower_components/emby-webcomponents/emby-radio/emby-radio.js b/src/components/emby-radio/emby-radio.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-radio/emby-radio.js rename to src/components/emby-radio/emby-radio.js diff --git a/src/bower_components/emby-webcomponents/emby-scrollbuttons/emby-scrollbuttons.css b/src/components/emby-scrollbuttons/emby-scrollbuttons.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-scrollbuttons/emby-scrollbuttons.css rename to src/components/emby-scrollbuttons/emby-scrollbuttons.css diff --git a/src/bower_components/emby-webcomponents/emby-scrollbuttons/emby-scrollbuttons.js b/src/components/emby-scrollbuttons/emby-scrollbuttons.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-scrollbuttons/emby-scrollbuttons.js rename to src/components/emby-scrollbuttons/emby-scrollbuttons.js diff --git a/src/bower_components/emby-webcomponents/emby-scroller/emby-scroller.js b/src/components/emby-scroller/emby-scroller.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-scroller/emby-scroller.js rename to src/components/emby-scroller/emby-scroller.js diff --git a/src/bower_components/emby-webcomponents/emby-select/emby-select.css b/src/components/emby-select/emby-select.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-select/emby-select.css rename to src/components/emby-select/emby-select.css diff --git a/src/bower_components/emby-webcomponents/emby-select/emby-select.js b/src/components/emby-select/emby-select.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-select/emby-select.js rename to src/components/emby-select/emby-select.js diff --git a/src/bower_components/emby-webcomponents/emby-slider/emby-slider.css b/src/components/emby-slider/emby-slider.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-slider/emby-slider.css rename to src/components/emby-slider/emby-slider.css diff --git a/src/bower_components/emby-webcomponents/emby-slider/emby-slider.js b/src/components/emby-slider/emby-slider.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-slider/emby-slider.js rename to src/components/emby-slider/emby-slider.js diff --git a/src/bower_components/emby-webcomponents/emby-tabs/emby-tabs.css b/src/components/emby-tabs/emby-tabs.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-tabs/emby-tabs.css rename to src/components/emby-tabs/emby-tabs.css diff --git a/src/bower_components/emby-webcomponents/emby-tabs/emby-tabs.js b/src/components/emby-tabs/emby-tabs.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-tabs/emby-tabs.js rename to src/components/emby-tabs/emby-tabs.js diff --git a/src/bower_components/emby-webcomponents/emby-textarea/emby-textarea.css b/src/components/emby-textarea/emby-textarea.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-textarea/emby-textarea.css rename to src/components/emby-textarea/emby-textarea.css diff --git a/src/bower_components/emby-webcomponents/emby-textarea/emby-textarea.js b/src/components/emby-textarea/emby-textarea.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-textarea/emby-textarea.js rename to src/components/emby-textarea/emby-textarea.js diff --git a/src/bower_components/emby-webcomponents/emby-toggle/emby-toggle.css b/src/components/emby-toggle/emby-toggle.css similarity index 100% rename from src/bower_components/emby-webcomponents/emby-toggle/emby-toggle.css rename to src/components/emby-toggle/emby-toggle.css diff --git a/src/bower_components/emby-webcomponents/emby-toggle/emby-toggle.js b/src/components/emby-toggle/emby-toggle.js similarity index 100% rename from src/bower_components/emby-webcomponents/emby-toggle/emby-toggle.js rename to src/components/emby-toggle/emby-toggle.js diff --git a/src/bower_components/emby-webcomponents/fetchhelper.js b/src/components/fetchhelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/fetchhelper.js rename to src/components/fetchhelper.js diff --git a/src/bower_components/emby-webcomponents/filedownloader.js b/src/components/filedownloader.js similarity index 100% rename from src/bower_components/emby-webcomponents/filedownloader.js rename to src/components/filedownloader.js diff --git a/src/bower_components/emby-webcomponents/filesystem.js b/src/components/filesystem.js similarity index 100% rename from src/bower_components/emby-webcomponents/filesystem.js rename to src/components/filesystem.js diff --git a/src/bower_components/emby-webcomponents/filtermenu/filtermenu.js b/src/components/filtermenu/filtermenu.js similarity index 100% rename from src/bower_components/emby-webcomponents/filtermenu/filtermenu.js rename to src/components/filtermenu/filtermenu.js diff --git a/src/bower_components/emby-webcomponents/filtermenu/filtermenu.template.html b/src/components/filtermenu/filtermenu.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/filtermenu/filtermenu.template.html rename to src/components/filtermenu/filtermenu.template.html diff --git a/src/bower_components/emby-webcomponents/flexstyles.css b/src/components/flexstyles.css similarity index 100% rename from src/bower_components/emby-webcomponents/flexstyles.css rename to src/components/flexstyles.css diff --git a/src/bower_components/emby-webcomponents/flvjs/flv.min.js b/src/components/flvjs/flv.min.js similarity index 100% rename from src/bower_components/emby-webcomponents/flvjs/flv.min.js rename to src/components/flvjs/flv.min.js diff --git a/src/bower_components/emby-webcomponents/focusmanager.js b/src/components/focusmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/focusmanager.js rename to src/components/focusmanager.js diff --git a/src/bower_components/emby-webcomponents/fonts/fonts.css b/src/components/fonts/fonts.css similarity index 100% rename from src/bower_components/emby-webcomponents/fonts/fonts.css rename to src/components/fonts/fonts.css diff --git a/src/bower_components/emby-webcomponents/fonts/fonts.sized.css b/src/components/fonts/fonts.sized.css similarity index 100% rename from src/bower_components/emby-webcomponents/fonts/fonts.sized.css rename to src/components/fonts/fonts.sized.css diff --git a/src/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff b/src/components/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff similarity index 100% rename from src/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff rename to src/components/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff diff --git a/src/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 b/src/components/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 similarity index 100% rename from src/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 rename to src/components/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 diff --git a/src/bower_components/emby-webcomponents/fonts/material-icons/style.css b/src/components/fonts/material-icons/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/fonts/material-icons/style.css rename to src/components/fonts/material-icons/style.css diff --git a/src/bower_components/emby-webcomponents/formdialog.css b/src/components/formdialog.css similarity index 100% rename from src/bower_components/emby-webcomponents/formdialog.css rename to src/components/formdialog.css diff --git a/src/bower_components/emby-webcomponents/fullscreen/fullscreen-dc.js b/src/components/fullscreen/fullscreen-dc.js similarity index 100% rename from src/bower_components/emby-webcomponents/fullscreen/fullscreen-dc.js rename to src/components/fullscreen/fullscreen-dc.js diff --git a/src/bower_components/emby-webcomponents/fullscreen/fullscreenmanager.js b/src/components/fullscreen/fullscreenmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/fullscreen/fullscreenmanager.js rename to src/components/fullscreen/fullscreenmanager.js diff --git a/src/bower_components/emby-webcomponents/globalize.js b/src/components/globalize.js similarity index 100% rename from src/bower_components/emby-webcomponents/globalize.js rename to src/components/globalize.js diff --git a/src/bower_components/emby-webcomponents/guide/guide-settings.js b/src/components/guide/guide-settings.js similarity index 100% rename from src/bower_components/emby-webcomponents/guide/guide-settings.js rename to src/components/guide/guide-settings.js diff --git a/src/bower_components/emby-webcomponents/guide/guide-settings.template.html b/src/components/guide/guide-settings.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/guide/guide-settings.template.html rename to src/components/guide/guide-settings.template.html diff --git a/src/bower_components/emby-webcomponents/guide/guide.css b/src/components/guide/guide.css similarity index 100% rename from src/bower_components/emby-webcomponents/guide/guide.css rename to src/components/guide/guide.css diff --git a/src/bower_components/emby-webcomponents/guide/guide.js b/src/components/guide/guide.js similarity index 100% rename from src/bower_components/emby-webcomponents/guide/guide.js rename to src/components/guide/guide.js diff --git a/src/bower_components/emby-webcomponents/guide/programs.css b/src/components/guide/programs.css similarity index 100% rename from src/bower_components/emby-webcomponents/guide/programs.css rename to src/components/guide/programs.css diff --git a/src/bower_components/emby-webcomponents/guide/tvguide.template.html b/src/components/guide/tvguide.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/guide/tvguide.template.html rename to src/components/guide/tvguide.template.html diff --git a/src/bower_components/emby-webcomponents/headroom/headroom.css b/src/components/headroom/headroom.css similarity index 100% rename from src/bower_components/emby-webcomponents/headroom/headroom.css rename to src/components/headroom/headroom.css diff --git a/src/bower_components/emby-webcomponents/headroom/headroom.js b/src/components/headroom/headroom.js similarity index 100% rename from src/bower_components/emby-webcomponents/headroom/headroom.js rename to src/components/headroom/headroom.js diff --git a/src/bower_components/emby-webcomponents/homescreensettings/homescreensettings.js b/src/components/homescreensettings/homescreensettings.js similarity index 100% rename from src/bower_components/emby-webcomponents/homescreensettings/homescreensettings.js rename to src/components/homescreensettings/homescreensettings.js diff --git a/src/bower_components/emby-webcomponents/homescreensettings/homescreensettings.template.html b/src/components/homescreensettings/homescreensettings.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/homescreensettings/homescreensettings.template.html rename to src/components/homescreensettings/homescreensettings.template.html diff --git a/src/bower_components/emby-webcomponents/homescreensettings/homescreensettingsdialog.js b/src/components/homescreensettings/homescreensettingsdialog.js similarity index 100% rename from src/bower_components/emby-webcomponents/homescreensettings/homescreensettingsdialog.js rename to src/components/homescreensettings/homescreensettingsdialog.js diff --git a/src/bower_components/emby-webcomponents/homescreensettings/homescreensettingsdialog.template.html b/src/components/homescreensettings/homescreensettingsdialog.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/homescreensettings/homescreensettingsdialog.template.html rename to src/components/homescreensettings/homescreensettingsdialog.template.html diff --git a/src/bower_components/emby-webcomponents/homesections/homesections.css b/src/components/homesections/homesections.css similarity index 100% rename from src/bower_components/emby-webcomponents/homesections/homesections.css rename to src/components/homesections/homesections.css diff --git a/src/bower_components/emby-webcomponents/homesections/homesections.js b/src/components/homesections/homesections.js similarity index 100% rename from src/bower_components/emby-webcomponents/homesections/homesections.js rename to src/components/homesections/homesections.js diff --git a/src/bower_components/emby-webcomponents/htmlaudioplayer/plugin.js b/src/components/htmlaudioplayer/plugin.js similarity index 100% rename from src/bower_components/emby-webcomponents/htmlaudioplayer/plugin.js rename to src/components/htmlaudioplayer/plugin.js diff --git a/src/bower_components/emby-webcomponents/htmlvideoplayer/htmlmediahelper.js b/src/components/htmlvideoplayer/htmlmediahelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/htmlvideoplayer/htmlmediahelper.js rename to src/components/htmlvideoplayer/htmlmediahelper.js diff --git a/src/bower_components/emby-webcomponents/htmlvideoplayer/plugin.js b/src/components/htmlvideoplayer/plugin.js similarity index 100% rename from src/bower_components/emby-webcomponents/htmlvideoplayer/plugin.js rename to src/components/htmlvideoplayer/plugin.js diff --git a/src/bower_components/emby-webcomponents/htmlvideoplayer/style.css b/src/components/htmlvideoplayer/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/htmlvideoplayer/style.css rename to src/components/htmlvideoplayer/style.css diff --git a/src/bower_components/emby-webcomponents/imagedownloader/imagedownloader.js b/src/components/imagedownloader/imagedownloader.js similarity index 100% rename from src/bower_components/emby-webcomponents/imagedownloader/imagedownloader.js rename to src/components/imagedownloader/imagedownloader.js diff --git a/src/bower_components/emby-webcomponents/imagedownloader/imagedownloader.template.html b/src/components/imagedownloader/imagedownloader.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/imagedownloader/imagedownloader.template.html rename to src/components/imagedownloader/imagedownloader.template.html diff --git a/src/bower_components/emby-webcomponents/imageeditor/imageeditor.css b/src/components/imageeditor/imageeditor.css similarity index 100% rename from src/bower_components/emby-webcomponents/imageeditor/imageeditor.css rename to src/components/imageeditor/imageeditor.css diff --git a/src/bower_components/emby-webcomponents/imageeditor/imageeditor.js b/src/components/imageeditor/imageeditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/imageeditor/imageeditor.js rename to src/components/imageeditor/imageeditor.js diff --git a/src/bower_components/emby-webcomponents/imageeditor/imageeditor.template.html b/src/components/imageeditor/imageeditor.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/imageeditor/imageeditor.template.html rename to src/components/imageeditor/imageeditor.template.html diff --git a/src/bower_components/emby-webcomponents/images/basicimagefetcher.js b/src/components/images/basicimagefetcher.js similarity index 100% rename from src/bower_components/emby-webcomponents/images/basicimagefetcher.js rename to src/components/images/basicimagefetcher.js diff --git a/src/bower_components/emby-webcomponents/images/imagehelper.js b/src/components/images/imagehelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/images/imagehelper.js rename to src/components/images/imagehelper.js diff --git a/src/bower_components/emby-webcomponents/images/style.css b/src/components/images/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/images/style.css rename to src/components/images/style.css diff --git a/src/bower_components/emby-webcomponents/imageuploader/imageuploader.js b/src/components/imageuploader/imageuploader.js similarity index 100% rename from src/bower_components/emby-webcomponents/imageuploader/imageuploader.js rename to src/components/imageuploader/imageuploader.js diff --git a/src/bower_components/emby-webcomponents/imageuploader/imageuploader.template.html b/src/components/imageuploader/imageuploader.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/imageuploader/imageuploader.template.html rename to src/components/imageuploader/imageuploader.template.html diff --git a/src/bower_components/emby-webcomponents/imageuploader/style.css b/src/components/imageuploader/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/imageuploader/style.css rename to src/components/imageuploader/style.css diff --git a/src/bower_components/emby-webcomponents/indicators/indicators.css b/src/components/indicators/indicators.css similarity index 100% rename from src/bower_components/emby-webcomponents/indicators/indicators.css rename to src/components/indicators/indicators.css diff --git a/src/bower_components/emby-webcomponents/indicators/indicators.js b/src/components/indicators/indicators.js similarity index 100% rename from src/bower_components/emby-webcomponents/indicators/indicators.js rename to src/components/indicators/indicators.js diff --git a/src/bower_components/emby-webcomponents/input/api.js b/src/components/input/api.js similarity index 100% rename from src/bower_components/emby-webcomponents/input/api.js rename to src/components/input/api.js diff --git a/src/bower_components/emby-webcomponents/input/gamepadtokey.js b/src/components/input/gamepadtokey.js similarity index 100% rename from src/bower_components/emby-webcomponents/input/gamepadtokey.js rename to src/components/input/gamepadtokey.js diff --git a/src/bower_components/emby-webcomponents/input/mouse.js b/src/components/input/mouse.js similarity index 100% rename from src/bower_components/emby-webcomponents/input/mouse.js rename to src/components/input/mouse.js diff --git a/src/bower_components/emby-webcomponents/inputmanager.js b/src/components/inputmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/inputmanager.js rename to src/components/inputmanager.js diff --git a/src/bower_components/emby-webcomponents/itemcontextmenu.js b/src/components/itemcontextmenu.js similarity index 100% rename from src/bower_components/emby-webcomponents/itemcontextmenu.js rename to src/components/itemcontextmenu.js diff --git a/src/bower_components/emby-webcomponents/itemhelper.js b/src/components/itemhelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/itemhelper.js rename to src/components/itemhelper.js diff --git a/src/bower_components/emby-webcomponents/itemidentifier/itemidentifier.js b/src/components/itemidentifier/itemidentifier.js similarity index 100% rename from src/bower_components/emby-webcomponents/itemidentifier/itemidentifier.js rename to src/components/itemidentifier/itemidentifier.js diff --git a/src/bower_components/emby-webcomponents/itemidentifier/itemidentifier.template.html b/src/components/itemidentifier/itemidentifier.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/itemidentifier/itemidentifier.template.html rename to src/components/itemidentifier/itemidentifier.template.html diff --git a/src/bower_components/emby-webcomponents/itemsrefresher.js b/src/components/itemsrefresher.js similarity index 100% rename from src/bower_components/emby-webcomponents/itemsrefresher.js rename to src/components/itemsrefresher.js diff --git a/src/bower_components/emby-webcomponents/layoutmanager.js b/src/components/layoutmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/layoutmanager.js rename to src/components/layoutmanager.js diff --git a/src/bower_components/emby-webcomponents/lazyloader/lazyedgehack.css b/src/components/lazyloader/lazyedgehack.css similarity index 100% rename from src/bower_components/emby-webcomponents/lazyloader/lazyedgehack.css rename to src/components/lazyloader/lazyedgehack.css diff --git a/src/bower_components/emby-webcomponents/lazyloader/lazyloader-intersectionobserver.js b/src/components/lazyloader/lazyloader-intersectionobserver.js similarity index 100% rename from src/bower_components/emby-webcomponents/lazyloader/lazyloader-intersectionobserver.js rename to src/components/lazyloader/lazyloader-intersectionobserver.js diff --git a/src/bower_components/emby-webcomponents/lazyloader/lazyloader-scroll.js b/src/components/lazyloader/lazyloader-scroll.js similarity index 100% rename from src/bower_components/emby-webcomponents/lazyloader/lazyloader-scroll.js rename to src/components/lazyloader/lazyloader-scroll.js diff --git a/src/bower_components/emby-webcomponents/listview/listview.css b/src/components/listview/listview.css similarity index 100% rename from src/bower_components/emby-webcomponents/listview/listview.css rename to src/components/listview/listview.css diff --git a/src/bower_components/emby-webcomponents/listview/listview.js b/src/components/listview/listview.js similarity index 100% rename from src/bower_components/emby-webcomponents/listview/listview.js rename to src/components/listview/listview.js diff --git a/src/bower_components/emby-webcomponents/loading/loader2.gif b/src/components/loading/loader2.gif similarity index 100% rename from src/bower_components/emby-webcomponents/loading/loader2.gif rename to src/components/loading/loader2.gif diff --git a/src/bower_components/emby-webcomponents/loading/loading-legacy.css b/src/components/loading/loading-legacy.css similarity index 100% rename from src/bower_components/emby-webcomponents/loading/loading-legacy.css rename to src/components/loading/loading-legacy.css diff --git a/src/bower_components/emby-webcomponents/loading/loading-legacy.js b/src/components/loading/loading-legacy.js similarity index 100% rename from src/bower_components/emby-webcomponents/loading/loading-legacy.js rename to src/components/loading/loading-legacy.js diff --git a/src/bower_components/emby-webcomponents/loading/loading-lite.css b/src/components/loading/loading-lite.css similarity index 100% rename from src/bower_components/emby-webcomponents/loading/loading-lite.css rename to src/components/loading/loading-lite.css diff --git a/src/bower_components/emby-webcomponents/loading/loading-lite.js b/src/components/loading/loading-lite.js similarity index 100% rename from src/bower_components/emby-webcomponents/loading/loading-lite.js rename to src/components/loading/loading-lite.js diff --git a/src/bower_components/emby-webcomponents/loadingdialog/loadingdialog.js b/src/components/loadingdialog/loadingdialog.js similarity index 100% rename from src/bower_components/emby-webcomponents/loadingdialog/loadingdialog.js rename to src/components/loadingdialog/loadingdialog.js diff --git a/src/bower_components/emby-webcomponents/maintabsmanager.js b/src/components/maintabsmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/maintabsmanager.js rename to src/components/maintabsmanager.js diff --git a/src/bower_components/emby-webcomponents/mediainfo/fresh.png b/src/components/mediainfo/fresh.png similarity index 100% rename from src/bower_components/emby-webcomponents/mediainfo/fresh.png rename to src/components/mediainfo/fresh.png diff --git a/src/bower_components/emby-webcomponents/mediainfo/mediainfo.css b/src/components/mediainfo/mediainfo.css similarity index 100% rename from src/bower_components/emby-webcomponents/mediainfo/mediainfo.css rename to src/components/mediainfo/mediainfo.css diff --git a/src/bower_components/emby-webcomponents/mediainfo/mediainfo.js b/src/components/mediainfo/mediainfo.js similarity index 100% rename from src/bower_components/emby-webcomponents/mediainfo/mediainfo.js rename to src/components/mediainfo/mediainfo.js diff --git a/src/bower_components/emby-webcomponents/mediainfo/rotten.png b/src/components/mediainfo/rotten.png similarity index 100% rename from src/bower_components/emby-webcomponents/mediainfo/rotten.png rename to src/components/mediainfo/rotten.png diff --git a/src/bower_components/emby-webcomponents/metadataeditor/metadataeditor.js b/src/components/metadataeditor/metadataeditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/metadataeditor/metadataeditor.js rename to src/components/metadataeditor/metadataeditor.js diff --git a/src/bower_components/emby-webcomponents/metadataeditor/metadataeditor.template.html b/src/components/metadataeditor/metadataeditor.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/metadataeditor/metadataeditor.template.html rename to src/components/metadataeditor/metadataeditor.template.html diff --git a/src/bower_components/emby-webcomponents/metadataeditor/personeditor.js b/src/components/metadataeditor/personeditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/metadataeditor/personeditor.js rename to src/components/metadataeditor/personeditor.js diff --git a/src/bower_components/emby-webcomponents/metadataeditor/personeditor.template.html b/src/components/metadataeditor/personeditor.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/metadataeditor/personeditor.template.html rename to src/components/metadataeditor/personeditor.template.html diff --git a/src/bower_components/emby-webcomponents/multidownload.js b/src/components/multidownload.js similarity index 100% rename from src/bower_components/emby-webcomponents/multidownload.js rename to src/components/multidownload.js diff --git a/src/bower_components/emby-webcomponents/multiselect/multiselect.css b/src/components/multiselect/multiselect.css similarity index 100% rename from src/bower_components/emby-webcomponents/multiselect/multiselect.css rename to src/components/multiselect/multiselect.css diff --git a/src/bower_components/emby-webcomponents/multiselect/multiselect.js b/src/components/multiselect/multiselect.js similarity index 100% rename from src/bower_components/emby-webcomponents/multiselect/multiselect.js rename to src/components/multiselect/multiselect.js diff --git a/src/bower_components/emby-webcomponents/native-promise-only/lib/npo.src.js b/src/components/native-promise-only/lib/npo.src.js similarity index 100% rename from src/bower_components/emby-webcomponents/native-promise-only/lib/npo.src.js rename to src/components/native-promise-only/lib/npo.src.js diff --git a/src/bower_components/emby-webcomponents/native-promise-only/test_adapter.js b/src/components/native-promise-only/test_adapter.js similarity index 100% rename from src/bower_components/emby-webcomponents/native-promise-only/test_adapter.js rename to src/components/native-promise-only/test_adapter.js diff --git a/src/bower_components/emby-webcomponents/notifications/badge.png b/src/components/notifications/badge.png similarity index 100% rename from src/bower_components/emby-webcomponents/notifications/badge.png rename to src/components/notifications/badge.png diff --git a/src/bower_components/emby-webcomponents/notifications/notificationicon.png b/src/components/notifications/notificationicon.png similarity index 100% rename from src/bower_components/emby-webcomponents/notifications/notificationicon.png rename to src/components/notifications/notificationicon.png diff --git a/src/bower_components/emby-webcomponents/notifications/notifications.js b/src/components/notifications/notifications.js similarity index 100% rename from src/bower_components/emby-webcomponents/notifications/notifications.js rename to src/components/notifications/notifications.js diff --git a/src/bower_components/emby-webcomponents/nowplayingbar/nowplayingbar.css b/src/components/nowplayingbar/nowplayingbar.css similarity index 100% rename from src/bower_components/emby-webcomponents/nowplayingbar/nowplayingbar.css rename to src/components/nowplayingbar/nowplayingbar.css diff --git a/src/bower_components/emby-webcomponents/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js similarity index 100% rename from src/bower_components/emby-webcomponents/nowplayingbar/nowplayingbar.js rename to src/components/nowplayingbar/nowplayingbar.js diff --git a/src/bower_components/emby-webcomponents/packagemanager.js b/src/components/packagemanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/packagemanager.js rename to src/components/packagemanager.js diff --git a/src/bower_components/emby-webcomponents/pagejs/page.js b/src/components/pagejs/page.js similarity index 100% rename from src/bower_components/emby-webcomponents/pagejs/page.js rename to src/components/pagejs/page.js diff --git a/src/bower_components/emby-webcomponents/photoplayer/plugin.js b/src/components/photoplayer/plugin.js similarity index 100% rename from src/bower_components/emby-webcomponents/photoplayer/plugin.js rename to src/components/photoplayer/plugin.js diff --git a/src/bower_components/emby-webcomponents/playback/autoplaydetect.js b/src/components/playback/autoplaydetect.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/autoplaydetect.js rename to src/components/playback/autoplaydetect.js diff --git a/src/bower_components/emby-webcomponents/playback/brightnessosd.js b/src/components/playback/brightnessosd.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/brightnessosd.js rename to src/components/playback/brightnessosd.js diff --git a/src/bower_components/emby-webcomponents/playback/experimentalwarnings.js b/src/components/playback/experimentalwarnings.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/experimentalwarnings.js rename to src/components/playback/experimentalwarnings.js diff --git a/src/bower_components/emby-webcomponents/playback/iconosd.css b/src/components/playback/iconosd.css similarity index 100% rename from src/bower_components/emby-webcomponents/playback/iconosd.css rename to src/components/playback/iconosd.css diff --git a/src/bower_components/emby-webcomponents/playback/mediasession.js b/src/components/playback/mediasession.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/mediasession.js rename to src/components/playback/mediasession.js diff --git a/src/bower_components/emby-webcomponents/playback/nowplayinghelper.js b/src/components/playback/nowplayinghelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/nowplayinghelper.js rename to src/components/playback/nowplayinghelper.js diff --git a/src/bower_components/emby-webcomponents/playback/playaccessvalidation.js b/src/components/playback/playaccessvalidation.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playaccessvalidation.js rename to src/components/playback/playaccessvalidation.js diff --git a/src/bower_components/emby-webcomponents/playback/playbackmanager.js b/src/components/playback/playbackmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playbackmanager.js rename to src/components/playback/playbackmanager.js diff --git a/src/bower_components/emby-webcomponents/playback/playbackorientation.js b/src/components/playback/playbackorientation.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playbackorientation.js rename to src/components/playback/playbackorientation.js diff --git a/src/bower_components/emby-webcomponents/playback/playbackvalidation.js b/src/components/playback/playbackvalidation.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playbackvalidation.js rename to src/components/playback/playbackvalidation.js diff --git a/src/bower_components/emby-webcomponents/playback/playerselection.js b/src/components/playback/playerselection.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playerselection.js rename to src/components/playback/playerselection.js diff --git a/src/bower_components/emby-webcomponents/playback/playersettingsmenu.js b/src/components/playback/playersettingsmenu.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playersettingsmenu.js rename to src/components/playback/playersettingsmenu.js diff --git a/src/bower_components/emby-webcomponents/playback/playmethodhelper.js b/src/components/playback/playmethodhelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playmethodhelper.js rename to src/components/playback/playmethodhelper.js diff --git a/src/bower_components/emby-webcomponents/playback/playqueuemanager.js b/src/components/playback/playqueuemanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/playqueuemanager.js rename to src/components/playback/playqueuemanager.js diff --git a/src/bower_components/emby-webcomponents/playback/remotecontrolautoplay.js b/src/components/playback/remotecontrolautoplay.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/remotecontrolautoplay.js rename to src/components/playback/remotecontrolautoplay.js diff --git a/src/bower_components/emby-webcomponents/playback/volumeosd.js b/src/components/playback/volumeosd.js similarity index 100% rename from src/bower_components/emby-webcomponents/playback/volumeosd.js rename to src/components/playback/volumeosd.js diff --git a/src/bower_components/emby-webcomponents/playbacksettings/playbacksettings.js b/src/components/playbacksettings/playbacksettings.js similarity index 100% rename from src/bower_components/emby-webcomponents/playbacksettings/playbacksettings.js rename to src/components/playbacksettings/playbacksettings.js diff --git a/src/bower_components/emby-webcomponents/playbacksettings/playbacksettings.template.html b/src/components/playbacksettings/playbacksettings.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/playbacksettings/playbacksettings.template.html rename to src/components/playbacksettings/playbacksettings.template.html diff --git a/src/bower_components/emby-webcomponents/playerstats/playerstats.css b/src/components/playerstats/playerstats.css similarity index 100% rename from src/bower_components/emby-webcomponents/playerstats/playerstats.css rename to src/components/playerstats/playerstats.css diff --git a/src/bower_components/emby-webcomponents/playerstats/playerstats.js b/src/components/playerstats/playerstats.js similarity index 100% rename from src/bower_components/emby-webcomponents/playerstats/playerstats.js rename to src/components/playerstats/playerstats.js diff --git a/src/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js b/src/components/playlisteditor/playlisteditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js rename to src/components/playlisteditor/playlisteditor.js diff --git a/src/bower_components/emby-webcomponents/playmenu.js b/src/components/playmenu.js similarity index 100% rename from src/bower_components/emby-webcomponents/playmenu.js rename to src/components/playmenu.js diff --git a/src/bower_components/emby-webcomponents/pluginmanager.js b/src/components/pluginmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/pluginmanager.js rename to src/components/pluginmanager.js diff --git a/src/bower_components/emby-webcomponents/polyfills/array.js b/src/components/polyfills/array.js similarity index 100% rename from src/bower_components/emby-webcomponents/polyfills/array.js rename to src/components/polyfills/array.js diff --git a/src/bower_components/emby-webcomponents/polyfills/bind.js b/src/components/polyfills/bind.js similarity index 100% rename from src/bower_components/emby-webcomponents/polyfills/bind.js rename to src/components/polyfills/bind.js diff --git a/src/bower_components/emby-webcomponents/polyfills/objectassign.js b/src/components/polyfills/objectassign.js similarity index 100% rename from src/bower_components/emby-webcomponents/polyfills/objectassign.js rename to src/components/polyfills/objectassign.js diff --git a/src/bower_components/emby-webcomponents/polyfills/raf.js b/src/components/polyfills/raf.js similarity index 100% rename from src/bower_components/emby-webcomponents/polyfills/raf.js rename to src/components/polyfills/raf.js diff --git a/src/bower_components/emby-webcomponents/prompt/nativeprompt.js b/src/components/prompt/nativeprompt.js similarity index 100% rename from src/bower_components/emby-webcomponents/prompt/nativeprompt.js rename to src/components/prompt/nativeprompt.js diff --git a/src/bower_components/emby-webcomponents/prompt/prompt.js b/src/components/prompt/prompt.js similarity index 100% rename from src/bower_components/emby-webcomponents/prompt/prompt.js rename to src/components/prompt/prompt.js diff --git a/src/bower_components/emby-webcomponents/prompt/prompt.template.html b/src/components/prompt/prompt.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/prompt/prompt.template.html rename to src/components/prompt/prompt.template.html diff --git a/src/bower_components/emby-webcomponents/qualityoptions.js b/src/components/qualityoptions.js similarity index 100% rename from src/bower_components/emby-webcomponents/qualityoptions.js rename to src/components/qualityoptions.js diff --git a/src/bower_components/emby-webcomponents/recordingcreator/empty.png b/src/components/recordingcreator/empty.png similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/empty.png rename to src/components/recordingcreator/empty.png diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingbutton.js b/src/components/recordingcreator/recordingbutton.js similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingbutton.js rename to src/components/recordingcreator/recordingbutton.js diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingcreator.css b/src/components/recordingcreator/recordingcreator.css similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingcreator.css rename to src/components/recordingcreator/recordingcreator.css diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js b/src/components/recordingcreator/recordingcreator.js similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js rename to src/components/recordingcreator/recordingcreator.js diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingcreator.template.html b/src/components/recordingcreator/recordingcreator.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingcreator.template.html rename to src/components/recordingcreator/recordingcreator.template.html diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js b/src/components/recordingcreator/recordingeditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js rename to src/components/recordingcreator/recordingeditor.js diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html b/src/components/recordingcreator/recordingeditor.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html rename to src/components/recordingcreator/recordingeditor.template.html diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingfields.css b/src/components/recordingcreator/recordingfields.css similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingfields.css rename to src/components/recordingcreator/recordingfields.css diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingfields.js rename to src/components/recordingcreator/recordingfields.js diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordingfields.template.html b/src/components/recordingcreator/recordingfields.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordingfields.template.html rename to src/components/recordingcreator/recordingfields.template.html diff --git a/src/bower_components/emby-webcomponents/recordingcreator/recordinghelper.js b/src/components/recordingcreator/recordinghelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/recordinghelper.js rename to src/components/recordingcreator/recordinghelper.js diff --git a/src/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.js b/src/components/recordingcreator/seriesrecordingeditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.js rename to src/components/recordingcreator/seriesrecordingeditor.js diff --git a/src/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html b/src/components/recordingcreator/seriesrecordingeditor.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html rename to src/components/recordingcreator/seriesrecordingeditor.template.html diff --git a/src/bower_components/emby-webcomponents/refreshdialog/refreshdialog.js b/src/components/refreshdialog/refreshdialog.js similarity index 100% rename from src/bower_components/emby-webcomponents/refreshdialog/refreshdialog.js rename to src/components/refreshdialog/refreshdialog.js diff --git a/src/bower_components/emby-webcomponents/registrationservices/registrationservices.js b/src/components/registrationservices/registrationservices.js similarity index 100% rename from src/bower_components/emby-webcomponents/registrationservices/registrationservices.js rename to src/components/registrationservices/registrationservices.js diff --git a/src/bower_components/emby-webcomponents/require/requirecss.js b/src/components/require/requirecss.js similarity index 96% rename from src/bower_components/emby-webcomponents/require/requirecss.js rename to src/components/require/requirecss.js index f65ed1fd04..78e5af2a08 100644 --- a/src/bower_components/emby-webcomponents/require/requirecss.js +++ b/src/components/require/requirecss.js @@ -29,7 +29,7 @@ define(function () { requireCss.load = function (cssId, req, load, config) { // Somehow if the url starts with /css, require will get all screwed up since this extension is also called css - var srch = '/emby-webcomponents/require/requirecss'; + var srch = 'components/require/requirecss'; var index = cssId.indexOf(srch); if (index !== -1) { diff --git a/src/bower_components/emby-webcomponents/require/requiretext.js b/src/components/require/requiretext.js similarity index 100% rename from src/bower_components/emby-webcomponents/require/requiretext.js rename to src/components/require/requiretext.js diff --git a/src/bower_components/emby-webcomponents/resize-observer-polyfill/ResizeObserver.js b/src/components/resize-observer-polyfill/ResizeObserver.js similarity index 100% rename from src/bower_components/emby-webcomponents/resize-observer-polyfill/ResizeObserver.js rename to src/components/resize-observer-polyfill/ResizeObserver.js diff --git a/src/bower_components/emby-webcomponents/router.js b/src/components/router.js similarity index 100% rename from src/bower_components/emby-webcomponents/router.js rename to src/components/router.js diff --git a/src/bower_components/emby-webcomponents/sanitizefilename.js b/src/components/sanitizefilename.js similarity index 100% rename from src/bower_components/emby-webcomponents/sanitizefilename.js rename to src/components/sanitizefilename.js diff --git a/src/bower_components/emby-webcomponents/scroller/smoothscroller.js b/src/components/scroller/smoothscroller.js similarity index 100% rename from src/bower_components/emby-webcomponents/scroller/smoothscroller.js rename to src/components/scroller/smoothscroller.js diff --git a/src/bower_components/emby-webcomponents/scrollhelper.js b/src/components/scrollhelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/scrollhelper.js rename to src/components/scrollhelper.js diff --git a/src/bower_components/emby-webcomponents/scrollstyles.css b/src/components/scrollstyles.css similarity index 100% rename from src/bower_components/emby-webcomponents/scrollstyles.css rename to src/components/scrollstyles.css diff --git a/src/bower_components/emby-webcomponents/search/searchfields.css b/src/components/search/searchfields.css similarity index 100% rename from src/bower_components/emby-webcomponents/search/searchfields.css rename to src/components/search/searchfields.css diff --git a/src/bower_components/emby-webcomponents/search/searchfields.js b/src/components/search/searchfields.js similarity index 100% rename from src/bower_components/emby-webcomponents/search/searchfields.js rename to src/components/search/searchfields.js diff --git a/src/bower_components/emby-webcomponents/search/searchfields.template.html b/src/components/search/searchfields.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/search/searchfields.template.html rename to src/components/search/searchfields.template.html diff --git a/src/bower_components/emby-webcomponents/search/searchresults.js b/src/components/search/searchresults.js similarity index 100% rename from src/bower_components/emby-webcomponents/search/searchresults.js rename to src/components/search/searchresults.js diff --git a/src/bower_components/emby-webcomponents/search/searchresults.template.html b/src/components/search/searchresults.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/search/searchresults.template.html rename to src/components/search/searchresults.template.html diff --git a/src/bower_components/emby-webcomponents/serverrestartdialog/serverrestartdialog.js b/src/components/serverrestartdialog/serverrestartdialog.js similarity index 100% rename from src/bower_components/emby-webcomponents/serverrestartdialog/serverrestartdialog.js rename to src/components/serverrestartdialog/serverrestartdialog.js diff --git a/src/bower_components/emby-webcomponents/serviceworker/notifications.js b/src/components/serviceworker/notifications.js similarity index 100% rename from src/bower_components/emby-webcomponents/serviceworker/notifications.js rename to src/components/serviceworker/notifications.js diff --git a/src/bower_components/emby-webcomponents/serviceworker/sync.js b/src/components/serviceworker/sync.js similarity index 100% rename from src/bower_components/emby-webcomponents/serviceworker/sync.js rename to src/components/serviceworker/sync.js diff --git a/src/bower_components/emby-webcomponents/sessionplayer.js b/src/components/sessionplayer.js similarity index 100% rename from src/bower_components/emby-webcomponents/sessionplayer.js rename to src/components/sessionplayer.js diff --git a/src/bower_components/emby-webcomponents/shell.js b/src/components/shell.js similarity index 100% rename from src/bower_components/emby-webcomponents/shell.js rename to src/components/shell.js diff --git a/src/bower_components/emby-webcomponents/shortcuts.js b/src/components/shortcuts.js similarity index 100% rename from src/bower_components/emby-webcomponents/shortcuts.js rename to src/components/shortcuts.js diff --git a/src/bower_components/emby-webcomponents/skinmanager.js b/src/components/skinmanager.js similarity index 99% rename from src/bower_components/emby-webcomponents/skinmanager.js rename to src/components/skinmanager.js index 48820512cf..556250137a 100644 --- a/src/bower_components/emby-webcomponents/skinmanager.js +++ b/src/components/skinmanager.js @@ -219,7 +219,7 @@ define(['apphost', 'userSettings', 'browser', 'events', 'pluginManager', 'backdr selectedTheme = defaultTheme; } - var embyWebComponentsBowerPath = 'bower_components/emby-webcomponents'; + var embyWebComponentsBowerPath = 'components'; return { stylesheetPath: require.toUrl(embyWebComponentsBowerPath + '/themes/' + selectedTheme.id + '/theme.css'), diff --git a/src/bower_components/emby-webcomponents/slideshow/slideshow.js b/src/components/slideshow/slideshow.js similarity index 100% rename from src/bower_components/emby-webcomponents/slideshow/slideshow.js rename to src/components/slideshow/slideshow.js diff --git a/src/bower_components/emby-webcomponents/slideshow/style.css b/src/components/slideshow/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/slideshow/style.css rename to src/components/slideshow/style.css diff --git a/src/bower_components/emby-webcomponents/sortmenu/sortmenu.js b/src/components/sortmenu/sortmenu.js similarity index 100% rename from src/bower_components/emby-webcomponents/sortmenu/sortmenu.js rename to src/components/sortmenu/sortmenu.js diff --git a/src/bower_components/emby-webcomponents/sortmenu/sortmenu.template.html b/src/components/sortmenu/sortmenu.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/sortmenu/sortmenu.template.html rename to src/components/sortmenu/sortmenu.template.html diff --git a/src/bower_components/emby-webcomponents/staticbackdrops.js b/src/components/staticbackdrops.js similarity index 100% rename from src/bower_components/emby-webcomponents/staticbackdrops.js rename to src/components/staticbackdrops.js diff --git a/src/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.css b/src/components/subtitleeditor/subtitleeditor.css similarity index 100% rename from src/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.css rename to src/components/subtitleeditor/subtitleeditor.css diff --git a/src/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js b/src/components/subtitleeditor/subtitleeditor.js similarity index 100% rename from src/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js rename to src/components/subtitleeditor/subtitleeditor.js diff --git a/src/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.template.html b/src/components/subtitleeditor/subtitleeditor.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.template.html rename to src/components/subtitleeditor/subtitleeditor.template.html diff --git a/src/bower_components/emby-webcomponents/subtitlesettings/subtitleappearancehelper.js b/src/components/subtitlesettings/subtitleappearancehelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/subtitlesettings/subtitleappearancehelper.js rename to src/components/subtitlesettings/subtitleappearancehelper.js diff --git a/src/bower_components/emby-webcomponents/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js similarity index 100% rename from src/bower_components/emby-webcomponents/subtitlesettings/subtitlesettings.js rename to src/components/subtitlesettings/subtitlesettings.js diff --git a/src/bower_components/emby-webcomponents/subtitlesettings/subtitlesettings.template.html b/src/components/subtitlesettings/subtitlesettings.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/subtitlesettings/subtitlesettings.template.html rename to src/components/subtitlesettings/subtitlesettings.template.html diff --git a/src/bower_components/emby-webcomponents/sync/emby-downloadbutton.js b/src/components/sync/emby-downloadbutton.js similarity index 100% rename from src/bower_components/emby-webcomponents/sync/emby-downloadbutton.js rename to src/components/sync/emby-downloadbutton.js diff --git a/src/bower_components/emby-webcomponents/sync/sync.js b/src/components/sync/sync.js similarity index 100% rename from src/bower_components/emby-webcomponents/sync/sync.js rename to src/components/sync/sync.js diff --git a/src/bower_components/emby-webcomponents/tabbedview/itemstab.js b/src/components/tabbedview/itemstab.js similarity index 100% rename from src/bower_components/emby-webcomponents/tabbedview/itemstab.js rename to src/components/tabbedview/itemstab.js diff --git a/src/bower_components/emby-webcomponents/tabbedview/tabbedview.js b/src/components/tabbedview/tabbedview.js similarity index 100% rename from src/bower_components/emby-webcomponents/tabbedview/tabbedview.js rename to src/components/tabbedview/tabbedview.js diff --git a/src/bower_components/emby-webcomponents/thememediaplayer.js b/src/components/thememediaplayer.js similarity index 100% rename from src/bower_components/emby-webcomponents/thememediaplayer.js rename to src/components/thememediaplayer.js diff --git a/src/bower_components/emby-webcomponents/themes/appletv/theme.css b/src/components/themes/appletv/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/appletv/theme.css rename to src/components/themes/appletv/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/blueradiance/bg.jpg b/src/components/themes/blueradiance/bg.jpg similarity index 100% rename from src/bower_components/emby-webcomponents/themes/blueradiance/bg.jpg rename to src/components/themes/blueradiance/bg.jpg diff --git a/src/bower_components/emby-webcomponents/themes/blueradiance/theme.css b/src/components/themes/blueradiance/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/blueradiance/theme.css rename to src/components/themes/blueradiance/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/dark-classic/theme.css b/src/components/themes/dark-classic/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/dark-classic/theme.css rename to src/components/themes/dark-classic/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/dark-green/theme.css b/src/components/themes/dark-green/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/dark-green/theme.css rename to src/components/themes/dark-green/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/dark-red/theme.css b/src/components/themes/dark-red/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/dark-red/theme.css rename to src/components/themes/dark-red/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/dark/theme.css b/src/components/themes/dark/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/dark/theme.css rename to src/components/themes/dark/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/light-blue/theme.css b/src/components/themes/light-blue/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/light-blue/theme.css rename to src/components/themes/light-blue/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/light-classic/theme.css b/src/components/themes/light-classic/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/light-classic/theme.css rename to src/components/themes/light-classic/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/light-green/theme.css b/src/components/themes/light-green/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/light-green/theme.css rename to src/components/themes/light-green/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/light-pink/theme.css b/src/components/themes/light-pink/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/light-pink/theme.css rename to src/components/themes/light-pink/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/light-purple/theme.css b/src/components/themes/light-purple/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/light-purple/theme.css rename to src/components/themes/light-purple/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/light-red/theme.css b/src/components/themes/light-red/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/light-red/theme.css rename to src/components/themes/light-red/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/light/theme.css b/src/components/themes/light/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/light/theme.css rename to src/components/themes/light/theme.css diff --git a/src/bower_components/emby-webcomponents/themes/logodark.png b/src/components/themes/logodark.png similarity index 100% rename from src/bower_components/emby-webcomponents/themes/logodark.png rename to src/components/themes/logodark.png diff --git a/src/bower_components/emby-webcomponents/themes/logowhite.png b/src/components/themes/logowhite.png similarity index 100% rename from src/bower_components/emby-webcomponents/themes/logowhite.png rename to src/components/themes/logowhite.png diff --git a/src/bower_components/emby-webcomponents/themes/wmc/theme.css b/src/components/themes/wmc/theme.css similarity index 100% rename from src/bower_components/emby-webcomponents/themes/wmc/theme.css rename to src/components/themes/wmc/theme.css diff --git a/src/bower_components/emby-webcomponents/toast/toast.css b/src/components/toast/toast.css similarity index 100% rename from src/bower_components/emby-webcomponents/toast/toast.css rename to src/components/toast/toast.css diff --git a/src/bower_components/emby-webcomponents/toast/toast.js b/src/components/toast/toast.js similarity index 100% rename from src/bower_components/emby-webcomponents/toast/toast.js rename to src/components/toast/toast.js diff --git a/src/bower_components/emby-webcomponents/touchhelper.js b/src/components/touchhelper.js similarity index 100% rename from src/bower_components/emby-webcomponents/touchhelper.js rename to src/components/touchhelper.js diff --git a/src/bower_components/emby-webcomponents/upnextdialog/upnextdialog.css b/src/components/upnextdialog/upnextdialog.css similarity index 100% rename from src/bower_components/emby-webcomponents/upnextdialog/upnextdialog.css rename to src/components/upnextdialog/upnextdialog.css diff --git a/src/bower_components/emby-webcomponents/upnextdialog/upnextdialog.js b/src/components/upnextdialog/upnextdialog.js similarity index 100% rename from src/bower_components/emby-webcomponents/upnextdialog/upnextdialog.js rename to src/components/upnextdialog/upnextdialog.js diff --git a/src/bower_components/emby-webcomponents/userdatabuttons/emby-playstatebutton.js b/src/components/userdatabuttons/emby-playstatebutton.js similarity index 100% rename from src/bower_components/emby-webcomponents/userdatabuttons/emby-playstatebutton.js rename to src/components/userdatabuttons/emby-playstatebutton.js diff --git a/src/bower_components/emby-webcomponents/userdatabuttons/emby-ratingbutton.js b/src/components/userdatabuttons/emby-ratingbutton.js similarity index 100% rename from src/bower_components/emby-webcomponents/userdatabuttons/emby-ratingbutton.js rename to src/components/userdatabuttons/emby-ratingbutton.js diff --git a/src/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.css b/src/components/userdatabuttons/userdatabuttons.css similarity index 100% rename from src/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.css rename to src/components/userdatabuttons/userdatabuttons.css diff --git a/src/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js b/src/components/userdatabuttons/userdatabuttons.js similarity index 100% rename from src/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js rename to src/components/userdatabuttons/userdatabuttons.js diff --git a/src/bower_components/emby-webcomponents/usersettings/usersettings.js b/src/components/usersettings/usersettings.js similarity index 100% rename from src/bower_components/emby-webcomponents/usersettings/usersettings.js rename to src/components/usersettings/usersettings.js diff --git a/src/bower_components/emby-webcomponents/usersettings/usersettingsbuilder.js b/src/components/usersettings/usersettingsbuilder.js similarity index 100% rename from src/bower_components/emby-webcomponents/usersettings/usersettingsbuilder.js rename to src/components/usersettings/usersettingsbuilder.js diff --git a/src/components/viewcontainer-lite.js b/src/components/viewcontainer-lite.js index d1729f1fab..fbcc2754e0 100644 --- a/src/components/viewcontainer-lite.js +++ b/src/components/viewcontainer-lite.js @@ -1,4 +1,4 @@ -define(["browser", "dom", "layoutManager", "css!bower_components/emby-webcomponents/viewmanager/viewcontainer-lite"], function(browser, dom, layoutManager) { +define(["browser", "dom", "layoutManager", "css!components/viewmanager/viewcontainer-lite"], function(browser, dom, layoutManager) { "use strict"; function setControllerClass(view, options) { diff --git a/src/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.css b/src/components/viewmanager/viewcontainer-lite.css similarity index 100% rename from src/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.css rename to src/components/viewmanager/viewcontainer-lite.css diff --git a/src/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js b/src/components/viewmanager/viewcontainer-lite.js similarity index 100% rename from src/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js rename to src/components/viewmanager/viewcontainer-lite.js diff --git a/src/bower_components/emby-webcomponents/viewmanager/viewmanager.js b/src/components/viewmanager/viewmanager.js similarity index 100% rename from src/bower_components/emby-webcomponents/viewmanager/viewmanager.js rename to src/components/viewmanager/viewmanager.js diff --git a/src/bower_components/emby-webcomponents/viewsettings/viewsettings.js b/src/components/viewsettings/viewsettings.js similarity index 100% rename from src/bower_components/emby-webcomponents/viewsettings/viewsettings.js rename to src/components/viewsettings/viewsettings.js diff --git a/src/bower_components/emby-webcomponents/viewsettings/viewsettings.template.html b/src/components/viewsettings/viewsettings.template.html similarity index 100% rename from src/bower_components/emby-webcomponents/viewsettings/viewsettings.template.html rename to src/components/viewsettings/viewsettings.template.html diff --git a/src/bower_components/emby-webcomponents/visibleinviewport.js b/src/components/visibleinviewport.js similarity index 100% rename from src/bower_components/emby-webcomponents/visibleinviewport.js rename to src/components/visibleinviewport.js diff --git a/src/bower_components/emby-webcomponents/youtubeplayer/plugin.js b/src/components/youtubeplayer/plugin.js similarity index 100% rename from src/bower_components/emby-webcomponents/youtubeplayer/plugin.js rename to src/components/youtubeplayer/plugin.js diff --git a/src/bower_components/emby-webcomponents/youtubeplayer/style.css b/src/components/youtubeplayer/style.css similarity index 100% rename from src/bower_components/emby-webcomponents/youtubeplayer/style.css rename to src/components/youtubeplayer/style.css diff --git a/src/scripts/site.js b/src/scripts/site.js index d30d27f9ea..984c01800e 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -431,14 +431,14 @@ var AppInfo = {}; return self.ResizeObserver; }); } else { - define("ResizeObserver", ["bower_components/emby-webcomponents/resize-observer-polyfill/ResizeObserver"], returnFirstDependency); + define("ResizeObserver", ["components/resize-observer-polyfill/ResizeObserver"], returnFirstDependency); } } function initRequireWithBrowser(browser) { var bowerPath = getBowerPath(); var apiClientBowerPath = bowerPath + "/emby-apiclient"; - var embyWebComponentsBowerPath = bowerPath + "/emby-webcomponents"; + var embyWebComponentsBowerPath = "components"; if ("android" === self.appMode) { define("filesystem", ["cordova/filesystem"], returnFirstDependency); @@ -1165,7 +1165,7 @@ var AppInfo = {}; function loadPlugins(externalPlugins, appHost, browser, shell) { console.log("Loading installed plugins"); - var list = ["bower_components/emby-webcomponents/playback/playbackvalidation", "bower_components/emby-webcomponents/playback/playaccessvalidation", "bower_components/emby-webcomponents/playback/experimentalwarnings", "bower_components/emby-webcomponents/htmlaudioplayer/plugin", "bower_components/emby-webcomponents/htmlvideoplayer/plugin", "bower_components/emby-webcomponents/photoplayer/plugin", "bower_components/emby-webcomponents/youtubeplayer/plugin"]; + var list = ["components/playback/playbackvalidation", "components/playback/playaccessvalidation", "components/playback/experimentalwarnings", "components/htmlaudioplayer/plugin", "components/htmlvideoplayer/plugin", "components/photoplayer/plugin", "components/youtubeplayer/plugin"]; if ("cordova" === self.appMode) { list.push("cordova/chromecast"); @@ -1176,10 +1176,10 @@ var AppInfo = {}; } if (appHost.supports("remotecontrol")) { - list.push("bower_components/emby-webcomponents/sessionplayer"); + list.push("components/sessionplayer"); if (browser.chrome || browser.opera) { - list.push("bower_components/emby-webcomponents/chromecast/chromecastplayer"); + list.push("components/chromecast/chromecastplayer"); } } @@ -1245,10 +1245,10 @@ var AppInfo = {}; }); if (!enableNativeGamepadKeyMapping() && isGamepadSupported()) { - require(["bower_components/emby-webcomponents/input/gamepadtokey"]); + require(["components/input/gamepadtokey"]); } - require(["bower_components/emby-webcomponents/thememediaplayer", "scripts/autobackdrops"]); + require(["components/thememediaplayer", "scripts/autobackdrops"]); if (!("cordova" !== self.appMode && "android" !== self.appMode)) { if (browser.android) { @@ -1259,15 +1259,15 @@ var AppInfo = {}; } if (!(browser.tv || browser.xboxOne || browser.ps4)) { - require(["bower_components/emby-webcomponents/nowplayingbar/nowplayingbar"]); + require(["components/nowplayingbar/nowplayingbar"]); } if (appHost.supports("remotecontrol")) { - require(["playerSelectionMenu", "bower_components/emby-webcomponents/playback/remotecontrolautoplay"]); + require(["playerSelectionMenu", "components/playback/remotecontrolautoplay"]); } if (!(appHost.supports("physicalvolumecontrol") && !browser.touch || browser.edge)) { - require(["bower_components/emby-webcomponents/playback/volumeosd"]); + require(["components/playback/volumeosd"]); } if (navigator.mediaSession) { @@ -1277,11 +1277,11 @@ var AppInfo = {}; require(["apiInput", "mouseManager"]); if (!(browser.tv || browser.xboxOne)) { - require(["bower_components/emby-webcomponents/playback/playbackorientation"]); + require(["components/playback/playbackorientation"]); registerServiceWorker(); if (window.Notification) { - require(["bower_components/emby-webcomponents/notifications/notifications"]); + require(["components/notifications/notifications"]); } } @@ -1345,7 +1345,7 @@ var AppInfo = {}; if (!window.Promise || browser.web0s) { initialDependencies.push(); - require(["bower_components/emby-webcomponents/native-promise-only/lib/npo.src"], init); + require(["components/native-promise-only/lib/npo.src"], init); } else { init(); } @@ -1357,7 +1357,7 @@ var AppInfo = {}; var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate()); var bowerPath = getBowerPath(); var apiClientBowerPath = bowerPath + "/emby-apiclient"; - var embyWebComponentsBowerPath = bowerPath + "/emby-webcomponents"; + var embyWebComponentsBowerPath = "components"; var paths = { velocity: bowerPath + "/velocity/velocity.min", vibrant: bowerPath + "/vibrant/dist/vibrant", @@ -1502,8 +1502,8 @@ var AppInfo = {}; waitSeconds: 0, map: { "*": { - css: bowerPath + "/emby-webcomponents/require/requirecss", - text: bowerPath + "/emby-webcomponents/require/requiretext" + css: "components/require/requirecss", + text: "components/require/requiretext" } }, urlArgs: urlArgs, diff --git a/src/serviceworker.js b/src/serviceworker.js index fba101b81f..01cf8d63ef 100644 --- a/src/serviceworker.js +++ b/src/serviceworker.js @@ -1 +1 @@ -importScripts("bower_components/emby-webcomponents/serviceworker/notifications.js", "bower_components/emby-webcomponents/serviceworker/sync.js"); \ No newline at end of file +importScripts("components/serviceworker/notifications.js", "components/serviceworker/sync.js"); \ No newline at end of file From 8e1c56adf5955a9c809abbd05c71ed74cf2dd1d7 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 23 Feb 2019 18:26:35 +0000 Subject: [PATCH 02/69] removed bower_components from .gitignore --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index cb9b773756..ce35528e1f 100644 --- a/.gitignore +++ b/.gitignore @@ -71,9 +71,6 @@ coverage # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt -# Bower dependency directory (https://bower.io/) -bower_components - # node-waf configuration .lock-wscript From 2665923bb0b3ef8ae5d071b0b39d7063e75c6fc8 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 23 Feb 2019 19:14:56 +0000 Subject: [PATCH 03/69] merged alert and nativeAlert for webpack --- src/components/alert.js | 40 +++++++++++++++++++++++++++++ src/components/alert/alert.js | 34 ------------------------ src/components/alert/nativealert.js | 23 ----------------- src/scripts/site.js | 10 ++------ 4 files changed, 42 insertions(+), 65 deletions(-) create mode 100644 src/components/alert.js delete mode 100644 src/components/alert/alert.js delete mode 100644 src/components/alert/nativealert.js diff --git a/src/components/alert.js b/src/components/alert.js new file mode 100644 index 0000000000..0e8c16501f --- /dev/null +++ b/src/components/alert.js @@ -0,0 +1,40 @@ +define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize) { + 'use strict'; + + 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 || '', '
', '\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(); + }; +}); \ No newline at end of file diff --git a/src/components/alert/alert.js b/src/components/alert/alert.js deleted file mode 100644 index ce434bac8a..0000000000 --- a/src/components/alert/alert.js +++ /dev/null @@ -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(); - }); - }; -}); \ No newline at end of file diff --git a/src/components/alert/nativealert.js b/src/components/alert/nativealert.js deleted file mode 100644 index f565e802c7..0000000000 --- a/src/components/alert/nativealert.js +++ /dev/null @@ -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 || '', '
', '\n'); - - alert(text); - - return Promise.resolve(); - }; -}); \ No newline at end of file diff --git a/src/scripts/site.js b/src/scripts/site.js index 984c01800e..c42acb6325 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -465,8 +465,6 @@ var AppInfo = {}; define("apiclient", ["bower_components/emby-apiclient/apiclient"], returnFirstDependency); } - define("actionsheet", ["webActionSheet"], returnFirstDependency); - if ("registerElement" in document) { define("registerElement", []); } else { @@ -491,11 +489,7 @@ var AppInfo = {}; var preferNativeAlerts = browser.tv; - if (preferNativeAlerts && window.alert) { - define("alert", [embyWebComponentsBowerPath + "/alert/nativealert"], returnFirstDependency); - } else { - define("alert", [embyWebComponentsBowerPath + "/alert/alert"], returnFirstDependency); - } + define("alert", [embyWebComponentsBowerPath + "/alert"], returnFirstDependency); defineResizeObserver(); define("dialog", [embyWebComponentsBowerPath + "/dialog/dialog"], returnFirstDependency); @@ -1400,7 +1394,7 @@ var AppInfo = {}; paths.shaka = embyWebComponentsBowerPath + "/shaka/shaka-player.compiled"; define("chromecastHelper", [embyWebComponentsBowerPath + "/chromecast/chromecasthelpers"], returnFirstDependency); define("mediaSession", [embyWebComponentsBowerPath + "/playback/mediasession"], returnFirstDependency); - define("webActionSheet", [embyWebComponentsBowerPath + "/actionsheet/actionsheet"], returnFirstDependency); + define("actionsheet", [embyWebComponentsBowerPath + "/actionsheet/actionsheet"], returnFirstDependency); define("libjass", [bowerPath + "/libjass/libjass.min", "css!" + bowerPath + "/libjass/libjass"], returnFirstDependency); define("tunerPicker", ["components/tunerpicker"], returnFirstDependency); define("mainTabsManager", [embyWebComponentsBowerPath + "/maintabsmanager"], returnFirstDependency); From 3dba261ae7090b7c44660bea1b0e22325b07fe43 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 23 Feb 2019 19:34:34 +0000 Subject: [PATCH 04/69] define apiInput as a module for webpack --- .../{input/api.js => apiInput/apiInput.js} | 19 +++++++++++++++ .../{input => apiInput}/gamepadtokey.js | 0 .../mouse.js => apiInput/mouseManager.js} | 0 src/components/apiInput/package.json | 3 +++ src/scripts/site.js | 23 +------------------ 5 files changed, 23 insertions(+), 22 deletions(-) rename src/components/{input/api.js => apiInput/apiInput.js} (92%) rename src/components/{input => apiInput}/gamepadtokey.js (100%) rename src/components/{input/mouse.js => apiInput/mouseManager.js} (100%) create mode 100644 src/components/apiInput/package.json diff --git a/src/components/input/api.js b/src/components/apiInput/apiInput.js similarity index 92% rename from src/components/input/api.js rename to src/components/apiInput/apiInput.js index c3be61e2e2..e6cb3d312c 100644 --- a/src/components/input/api.js +++ b/src/components/apiInput/apiInput.js @@ -234,6 +234,19 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus events.on(apiClient, "message", onMessageReceived); } + function enableNativeGamepadKeyMapping() { + if (!(!window.navigator || "string" != typeof window.navigator.gamepadInputEmulation)) { + window.navigator.gamepadInputEmulation = "keyboard"; + return true; + } + + return false; + } + + function isGamepadSupported() { + return "ongamepadconnected" in window || navigator.getGamepads || navigator.webkitGetGamepads; + } + connectionManager.getApiClients().forEach(bindEvents); events.on(connectionManager, 'apiclientcreated', function (e, newApiClient) { @@ -241,5 +254,11 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus bindEvents(newApiClient); }); + if (!enableNativeGamepadKeyMapping() && isGamepadSupported()) { + require(["components/apiInput/gamepadtokey"]); + } + + require(["components/apiInput/mouseManager"]); + return serverNotifications; }); diff --git a/src/components/input/gamepadtokey.js b/src/components/apiInput/gamepadtokey.js similarity index 100% rename from src/components/input/gamepadtokey.js rename to src/components/apiInput/gamepadtokey.js diff --git a/src/components/input/mouse.js b/src/components/apiInput/mouseManager.js similarity index 100% rename from src/components/input/mouse.js rename to src/components/apiInput/mouseManager.js diff --git a/src/components/apiInput/package.json b/src/components/apiInput/package.json new file mode 100644 index 0000000000..6c542951b2 --- /dev/null +++ b/src/components/apiInput/package.json @@ -0,0 +1,3 @@ +{ + "main": "apiInput.js" +} \ No newline at end of file diff --git a/src/scripts/site.js b/src/scripts/site.js index c42acb6325..8035c898ff 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1198,19 +1198,6 @@ var AppInfo = {}; }); } - function enableNativeGamepadKeyMapping() { - if (!(!window.navigator || "string" != typeof window.navigator.gamepadInputEmulation)) { - window.navigator.gamepadInputEmulation = "keyboard"; - return true; - } - - return false; - } - - function isGamepadSupported() { - return "ongamepadconnected" in window || navigator.getGamepads || navigator.webkitGetGamepads; - } - function onAppReady(browser) { console.log("Begin onAppReady"); @@ -1238,10 +1225,6 @@ var AppInfo = {}; hashbang: true }); - if (!enableNativeGamepadKeyMapping() && isGamepadSupported()) { - require(["components/input/gamepadtokey"]); - } - require(["components/thememediaplayer", "scripts/autobackdrops"]); if (!("cordova" !== self.appMode && "android" !== self.appMode)) { @@ -1268,8 +1251,6 @@ var AppInfo = {}; require(["mediaSession"]); } - require(["apiInput", "mouseManager"]); - if (!(browser.tv || browser.xboxOne)) { require(["components/playback/playbackorientation"]); registerServiceWorker(); @@ -1471,7 +1452,6 @@ var AppInfo = {}; define("cardBuilder", [embyWebComponentsBowerPath + "/cardbuilder/cardbuilder"], returnFirstDependency); define("peoplecardbuilder", [embyWebComponentsBowerPath + "/cardbuilder/peoplecardbuilder"], returnFirstDependency); define("chaptercardbuilder", [embyWebComponentsBowerPath + "/cardbuilder/chaptercardbuilder"], returnFirstDependency); - define("mouseManager", [embyWebComponentsBowerPath + "/input/mouse"], returnFirstDependency); define("flexStyles", ["css!" + embyWebComponentsBowerPath + "/flexstyles"], returnFirstDependency); define("deleteHelper", [embyWebComponentsBowerPath + "/deletehelper"], returnFirstDependency); define("tvguide", [embyWebComponentsBowerPath + "/guide/guide"], returnFirstDependency); @@ -1570,8 +1550,7 @@ var AppInfo = {}; define("fnchecked", ["legacy/fnchecked"], returnFirstDependency); define("dialogHelper", [embyWebComponentsBowerPath + "/dialoghelper/dialoghelper"], returnFirstDependency); define("inputmanager", ["inputManager"], returnFirstDependency); - define("apiInput", [embyWebComponentsBowerPath + "/input/api"], returnFirstDependency); - define("serverNotifications", ["apiInput"], returnFirstDependency); + define("serverNotifications", [embyWebComponentsBowerPath + "/apiInput/apiInput"], returnFirstDependency); define("headroom-window", ["headroom"], createWindowHeadroom); define("appFooter-shared", ["appFooter"], createSharedAppFooter); define("skinManager", [embyWebComponentsBowerPath + "/skinmanager"], function (skinManager) { From e45e8d3f00e359c1c28f69b0d7f418a87fb29e10 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 23 Feb 2019 19:34:50 +0000 Subject: [PATCH 05/69] add missing package.json for module actionsheet --- src/components/actionsheet/package.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/components/actionsheet/package.json diff --git a/src/components/actionsheet/package.json b/src/components/actionsheet/package.json new file mode 100644 index 0000000000..622f1e075d --- /dev/null +++ b/src/components/actionsheet/package.json @@ -0,0 +1,3 @@ +{ + "main": "actionsheet.js" +} \ No newline at end of file From 9d462263b9523f34d454a3e02ac04819c24638c7 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 11 Mar 2019 21:31:33 -0700 Subject: [PATCH 06/69] add web path as config option --- src/dashboard.html | 8 +++++++- src/dashboard/dashboardgeneral.js | 17 +++++++++++++++++ src/dashboardgeneral.html | 10 ++++++++++ src/scripts/dashboardpage.js | 5 +++-- src/strings/en-us.json | 3 +++ 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/dashboard.html b/src/dashboard.html index d2de21f166..6c751740c3 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -109,7 +109,13 @@
${LabelTranscodingTemporaryFiles}
-
+
+
+
+
+
+
${LabelWeb}
+
diff --git a/src/dashboard/dashboardgeneral.js b/src/dashboard/dashboardgeneral.js index c0ff217ffe..6ef1c4d221 100644 --- a/src/dashboard/dashboardgeneral.js +++ b/src/dashboard/dashboardgeneral.js @@ -109,6 +109,23 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb }) }); + $("#btnSelectWebPath", view).on("click.selectDirectory", function() { + require(["directorybrowser"], function(directoryBrowser) { + var picker = new directoryBrowser; + picker.show({ + callback: function(path) { + if (path) { + view.querySelector("#txtWebPath").value = path; + } + picker.close(); + }, + validateWriteable: true, + header: Globalize.translate("LabelWebPath"), + instruction: Globalize.translate("LabelWebPathHelp") + }) + }) + }); + $(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit); view.addEventListener("viewshow", function() { var promiseConfig = ApiClient.getServerConfiguration(); diff --git a/src/dashboardgeneral.html b/src/dashboardgeneral.html index f95246708f..8cc1177167 100644 --- a/src/dashboardgeneral.html +++ b/src/dashboardgeneral.html @@ -55,6 +55,16 @@
${LabelMetadataPathHelp}
+ +
+
+
+ +
+ +
+
${LabelWebPathHelp}
+
diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index f7bbc86866..0dc1f4e6fa 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -383,7 +383,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa for (var i = 0, length = tasks.length; i < length; i++) { var task = tasks[i]; - + html += "

"; html += task.Name + "
"; if (task.State === "Running") { @@ -407,8 +407,9 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa renderPaths: function (page, systemInfo) { page.querySelector("#cachePath").innerHTML = systemInfo.CachePath; page.querySelector("#logPath").innerHTML = systemInfo.LogPath; - page.querySelector("#transcodingTemporaryPath").innerHTML = systemInfo.TranscodingTempPath; + page.querySelector("#transcodePath").innerHTML = systemInfo.TranscodingTempPath; page.querySelector("#metadataPath").innerHTML = systemInfo.InternalMetadataPath; + page.querySelector("#webPath").innerHTML = systemInfo.WebPath; }, startInterval: function (apiClient) { apiClient.sendMessage("SessionsStart", "0,1500"); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5ac13f0aad..6fe64cdf4a 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1122,6 +1122,8 @@ "LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataPath": "Metadata path:", "LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata.", + "LabelWebPath": "Web path:", + "LabelWebPathHelp": "The path where the web client source is located.", "LabelMetadataReaders": "Metadata readers:", "LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataSavers": "Metadata savers:", @@ -1329,6 +1331,7 @@ "LabelVideoCodec": "Video: {0}", "LabelVideoType": "Video Type:", "LabelView": "View:", + "LabelWeb": "Web", "LabelWebsite": "Website:", "LabelWindowBackgroundColor": "Text background color:", "LabelXDlnaCap": "X-Dlna cap:", From 1cb487b9a39a4155c5f448da906b445a7497eb85 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Tue, 12 Mar 2019 21:41:46 +0000 Subject: [PATCH 07/69] merge from upstream --- src/components/apiInput/apiInput.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/apiInput/apiInput.js b/src/components/apiInput/apiInput.js index e6cb3d312c..c12f933553 100644 --- a/src/components/apiInput/apiInput.js +++ b/src/components/apiInput/apiInput.js @@ -235,7 +235,7 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus } function enableNativeGamepadKeyMapping() { - if (!(!window.navigator || "string" != typeof window.navigator.gamepadInputEmulation)) { + if (window.navigator && "string" == typeof window.navigator.gamepadInputEmulation) { window.navigator.gamepadInputEmulation = "keyboard"; return true; } From 6cbd26531c4befe30eed2946cdd4a76d86290179 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Tue, 12 Mar 2019 22:49:13 +0000 Subject: [PATCH 08/69] fix bug apphost naming resolution --- src/scripts/site.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 7c121ad943..75549cab3a 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1181,7 +1181,7 @@ var AppInfo = {}; console.log("Begin onAppReady"); // ensure that appHost is loaded in this point - require(['appHost'], function (appHost) { + require(['apphost'], function (appHost) { var isInBackground = -1 !== self.location.href.toString().toLowerCase().indexOf("start=backgroundsync"); window.Emby = {}; From 44fe392912d85449c37892a9a198a355486b4d84 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Tue, 12 Mar 2019 23:28:26 +0000 Subject: [PATCH 09/69] rename embyWebComponentsBower to components --- src/components/skinmanager.js | 4 +- src/scripts/site.js | 312 +++++++++++++++++----------------- 2 files changed, 157 insertions(+), 159 deletions(-) diff --git a/src/components/skinmanager.js b/src/components/skinmanager.js index 556250137a..5893a845e8 100644 --- a/src/components/skinmanager.js +++ b/src/components/skinmanager.js @@ -219,10 +219,8 @@ define(['apphost', 'userSettings', 'browser', 'events', 'pluginManager', 'backdr selectedTheme = defaultTheme; } - var embyWebComponentsBowerPath = 'components'; - return { - stylesheetPath: require.toUrl(embyWebComponentsBowerPath + '/themes/' + selectedTheme.id + '/theme.css'), + stylesheetPath: require.toUrl('components/themes/' + selectedTheme.id + '/theme.css'), themeId: selectedTheme.id }; } diff --git a/src/scripts/site.js b/src/scripts/site.js index 75549cab3a..fc24fe3b2e 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -427,24 +427,24 @@ var AppInfo = {}; function initRequireWithBrowser(browser) { var bowerPath = getBowerPath(); var apiClientBowerPath = bowerPath + "/emby-apiclient"; - var embyWebComponentsBowerPath = "components"; + var componentsPath = "components"; if ("android" === self.appMode) { define("filesystem", ["cordova/filesystem"], returnFirstDependency); } else { - define("filesystem", [embyWebComponentsBowerPath + "/filesystem"], returnFirstDependency); + define("filesystem", [componentsPath + "/filesystem"], returnFirstDependency); } if (window.IntersectionObserver && !browser.edge) { - define("lazyLoader", [embyWebComponentsBowerPath + "/lazyloader/lazyloader-intersectionobserver"], returnFirstDependency); + define("lazyLoader", [componentsPath + "/lazyloader/lazyloader-intersectionobserver"], returnFirstDependency); } else { - define("lazyLoader", [embyWebComponentsBowerPath + "/lazyloader/lazyloader-scroll"], returnFirstDependency); + define("lazyLoader", [componentsPath + "/lazyloader/lazyloader-scroll"], returnFirstDependency); } if ("android" === self.appMode) { define("shell", ["cordova/shell"], returnFirstDependency); } else { - define("shell", [embyWebComponentsBowerPath + "/shell"], returnFirstDependency); + define("shell", [componentsPath + "/shell"], returnFirstDependency); } if ("cordova" === self.appMode || "android" === self.appMode) { @@ -471,40 +471,40 @@ var AppInfo = {}; if ("cordova" === self.appMode && browser.iOSVersion && browser.iOSVersion < 11) { define("imageFetcher", ["cordova/imagestore"], returnFirstDependency); } else { - define("imageFetcher", [embyWebComponentsBowerPath + "/images/basicimagefetcher"], returnFirstDependency); + define("imageFetcher", [componentsPath + "/images/basicimagefetcher"], returnFirstDependency); } var preferNativeAlerts = browser.tv; - define("alert", [embyWebComponentsBowerPath + "/alert"], returnFirstDependency); + define("alert", [componentsPath + "/alert"], returnFirstDependency); defineResizeObserver(); - define("dialog", [embyWebComponentsBowerPath + "/dialog/dialog"], returnFirstDependency); + define("dialog", [componentsPath + "/dialog/dialog"], returnFirstDependency); if (preferNativeAlerts && window.confirm) { - define("confirm", [embyWebComponentsBowerPath + "/confirm/nativeconfirm"], returnFirstDependency); + define("confirm", [componentsPath + "/confirm/nativeconfirm"], returnFirstDependency); } else { - define("confirm", [embyWebComponentsBowerPath + "/confirm/confirm"], returnFirstDependency); + define("confirm", [componentsPath + "/confirm/confirm"], returnFirstDependency); } if ((preferNativeAlerts || browser.xboxOne) && window.confirm) { - define("prompt", [embyWebComponentsBowerPath + "/prompt/nativeprompt"], returnFirstDependency); + define("prompt", [componentsPath + "/prompt/nativeprompt"], returnFirstDependency); } else { - define("prompt", [embyWebComponentsBowerPath + "/prompt/prompt"], returnFirstDependency); + define("prompt", [componentsPath + "/prompt/prompt"], returnFirstDependency); } if (browser.tizen || browser.operaTv || browser.chromecast || browser.orsay || browser.web0s || browser.ps4) { - define("loading", [embyWebComponentsBowerPath + "/loading/loading-legacy"], returnFirstDependency); + define("loading", [componentsPath + "/loading/loading-legacy"], returnFirstDependency); } else { - define("loading", [embyWebComponentsBowerPath + "/loading/loading-lite"], returnFirstDependency); + define("loading", [componentsPath + "/loading/loading-lite"], returnFirstDependency); } - define("multi-download", [embyWebComponentsBowerPath + "/multidownload"], returnFirstDependency); + define("multi-download", [componentsPath + "/multidownload"], returnFirstDependency); if ("android" === self.appMode) { define("fileDownloader", ["cordova/filedownloader"], returnFirstDependency); } else { - define("fileDownloader", [embyWebComponentsBowerPath + "/filedownloader"], returnFirstDependency); + define("fileDownloader", [componentsPath + "/filedownloader"], returnFirstDependency); } define("localassetmanager", [apiClientBowerPath + "/localassetmanager"], returnFirstDependency); @@ -1306,11 +1306,11 @@ var AppInfo = {}; var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate()); var bowerPath = getBowerPath(); var apiClientBowerPath = bowerPath + "/emby-apiclient"; - var embyWebComponentsBowerPath = "components"; + var componentsPath = "components"; var paths = { velocity: bowerPath + "/velocity/velocity.min", vibrant: bowerPath + "/vibrant/dist/vibrant", - staticBackdrops: embyWebComponentsBowerPath + "/staticbackdrops", + staticBackdrops: componentsPath + "/staticbackdrops", ironCardList: "components/ironcardlist/ironcardlist", scrollThreshold: "components/scrollthreshold", playlisteditor: "components/playlisteditor/playlisteditor", @@ -1326,114 +1326,114 @@ var AppInfo = {}; events: apiClientBowerPath + "/events", credentialprovider: apiClientBowerPath + "/credentials", connectionManagerFactory: bowerPath + "/emby-apiclient/connectionmanager", - visibleinviewport: embyWebComponentsBowerPath + "/visibleinviewport", - browserdeviceprofile: embyWebComponentsBowerPath + "/browserdeviceprofile", - browser: embyWebComponentsBowerPath + "/browser", - inputManager: embyWebComponentsBowerPath + "/inputmanager", - qualityoptions: embyWebComponentsBowerPath + "/qualityoptions", + visibleinviewport: componentsPath + "/visibleinviewport", + browserdeviceprofile: componentsPath + "/browserdeviceprofile", + browser: componentsPath + "/browser", + inputManager: componentsPath + "/inputmanager", + qualityoptions: componentsPath + "/qualityoptions", hammer: bowerPath + "/hammerjs/hammer.min", - pageJs: embyWebComponentsBowerPath + "/pagejs/page", - focusManager: embyWebComponentsBowerPath + "/focusmanager", - datetime: embyWebComponentsBowerPath + "/datetime", - globalize: embyWebComponentsBowerPath + "/globalize", - itemHelper: embyWebComponentsBowerPath + "/itemhelper", - itemShortcuts: embyWebComponentsBowerPath + "/shortcuts", - playQueueManager: embyWebComponentsBowerPath + "/playback/playqueuemanager", - autoPlayDetect: embyWebComponentsBowerPath + "/playback/autoplaydetect", - nowPlayingHelper: embyWebComponentsBowerPath + "/playback/nowplayinghelper", - pluginManager: embyWebComponentsBowerPath + "/pluginmanager", - packageManager: embyWebComponentsBowerPath + "/packagemanager" + pageJs: componentsPath + "/pagejs/page", + focusManager: componentsPath + "/focusmanager", + datetime: componentsPath + "/datetime", + globalize: componentsPath + "/globalize", + itemHelper: componentsPath + "/itemhelper", + itemShortcuts: componentsPath + "/shortcuts", + playQueueManager: componentsPath + "/playback/playqueuemanager", + autoPlayDetect: componentsPath + "/playback/autoplaydetect", + nowPlayingHelper: componentsPath + "/playback/nowplayinghelper", + pluginManager: componentsPath + "/pluginmanager", + packageManager: componentsPath + "/packagemanager" }; paths.hlsjs = bowerPath + "/hlsjs/dist/hls.min"; - paths.flvjs = embyWebComponentsBowerPath + "/flvjs/flv.min"; - paths.shaka = embyWebComponentsBowerPath + "/shaka/shaka-player.compiled"; - define("chromecastHelper", [embyWebComponentsBowerPath + "/chromecast/chromecasthelpers"], returnFirstDependency); - define("mediaSession", [embyWebComponentsBowerPath + "/playback/mediasession"], returnFirstDependency); - define("actionsheet", [embyWebComponentsBowerPath + "/actionsheet/actionsheet"], returnFirstDependency); + paths.flvjs = componentsPath + "/flvjs/flv.min"; + paths.shaka = componentsPath + "/shaka/shaka-player.compiled"; + define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency); + define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency); + define("actionsheet", [componentsPath + "/actionsheet/actionsheet"], returnFirstDependency); define("libjass", [bowerPath + "/libjass/libjass.min", "css!" + bowerPath + "/libjass/libjass"], returnFirstDependency); define("tunerPicker", ["components/tunerpicker"], returnFirstDependency); - define("mainTabsManager", [embyWebComponentsBowerPath + "/maintabsmanager"], returnFirstDependency); - define("imageLoader", [embyWebComponentsBowerPath + "/images/imagehelper"], returnFirstDependency); - define("appFooter", [embyWebComponentsBowerPath + "/appfooter/appfooter"], returnFirstDependency); + define("mainTabsManager", [componentsPath + "/maintabsmanager"], returnFirstDependency); + define("imageLoader", [componentsPath + "/images/imagehelper"], returnFirstDependency); + define("appFooter", [componentsPath + "/appfooter/appfooter"], returnFirstDependency); define("directorybrowser", ["components/directorybrowser/directorybrowser"], returnFirstDependency); - define("metadataEditor", [embyWebComponentsBowerPath + "/metadataeditor/metadataeditor"], returnFirstDependency); - define("personEditor", [embyWebComponentsBowerPath + "/metadataeditor/personeditor"], returnFirstDependency); - define("playerSelectionMenu", [embyWebComponentsBowerPath + "/playback/playerselection"], returnFirstDependency); - define("playerSettingsMenu", [embyWebComponentsBowerPath + "/playback/playersettingsmenu"], returnFirstDependency); - define("playMethodHelper", [embyWebComponentsBowerPath + "/playback/playmethodhelper"], returnFirstDependency); - define("brightnessOsd", [embyWebComponentsBowerPath + "/playback/brightnessosd"], returnFirstDependency); + define("metadataEditor", [componentsPath + "/metadataeditor/metadataeditor"], returnFirstDependency); + define("personEditor", [componentsPath + "/metadataeditor/personeditor"], returnFirstDependency); + define("playerSelectionMenu", [componentsPath + "/playback/playerselection"], returnFirstDependency); + define("playerSettingsMenu", [componentsPath + "/playback/playersettingsmenu"], returnFirstDependency); + define("playMethodHelper", [componentsPath + "/playback/playmethodhelper"], returnFirstDependency); + define("brightnessOsd", [componentsPath + "/playback/brightnessosd"], returnFirstDependency); define("libraryMenu", ["scripts/librarymenu"], returnFirstDependency); - define("emby-collapse", [embyWebComponentsBowerPath + "/emby-collapse/emby-collapse"], returnFirstDependency); - define("emby-button", [embyWebComponentsBowerPath + "/emby-button/emby-button"], returnFirstDependency); + define("emby-collapse", [componentsPath + "/emby-collapse/emby-collapse"], returnFirstDependency); + define("emby-button", [componentsPath + "/emby-button/emby-button"], returnFirstDependency); define("emby-linkbutton", ["emby-button"], returnFirstDependency); - define("emby-itemscontainer", [embyWebComponentsBowerPath + "/emby-itemscontainer/emby-itemscontainer"], returnFirstDependency); - define("alphaNumericShortcuts", [embyWebComponentsBowerPath + "/alphanumericshortcuts/alphanumericshortcuts"], returnFirstDependency); - define("emby-scroller", [embyWebComponentsBowerPath + "/emby-scroller/emby-scroller"], returnFirstDependency); - define("emby-tabs", [embyWebComponentsBowerPath + "/emby-tabs/emby-tabs"], returnFirstDependency); - define("emby-scrollbuttons", [embyWebComponentsBowerPath + "/emby-scrollbuttons/emby-scrollbuttons"], returnFirstDependency); - define("emby-progressring", [embyWebComponentsBowerPath + "/emby-progressring/emby-progressring"], returnFirstDependency); - define("emby-itemrefreshindicator", [embyWebComponentsBowerPath + "/emby-itemrefreshindicator/emby-itemrefreshindicator"], returnFirstDependency); - define("multiSelect", [embyWebComponentsBowerPath + "/multiselect/multiselect"], returnFirstDependency); - define("alphaPicker", [embyWebComponentsBowerPath + "/alphapicker/alphapicker"], returnFirstDependency); - define("paper-icon-button-light", [embyWebComponentsBowerPath + "/emby-button/paper-icon-button-light"], returnFirstDependency); - define("tabbedView", [embyWebComponentsBowerPath + "/tabbedview/tabbedview"], returnFirstDependency); - define("itemsTab", [embyWebComponentsBowerPath + "/tabbedview/itemstab"], returnFirstDependency); - define("emby-input", [embyWebComponentsBowerPath + "/emby-input/emby-input"], returnFirstDependency); - define("emby-select", [embyWebComponentsBowerPath + "/emby-select/emby-select"], returnFirstDependency); - define("emby-slider", [embyWebComponentsBowerPath + "/emby-slider/emby-slider"], returnFirstDependency); - define("emby-checkbox", [embyWebComponentsBowerPath + "/emby-checkbox/emby-checkbox"], returnFirstDependency); - define("emby-toggle", [embyWebComponentsBowerPath + "/emby-toggle/emby-toggle"], returnFirstDependency); - define("emby-radio", [embyWebComponentsBowerPath + "/emby-radio/emby-radio"], returnFirstDependency); - define("emby-textarea", [embyWebComponentsBowerPath + "/emby-textarea/emby-textarea"], returnFirstDependency); - define("collectionEditor", [embyWebComponentsBowerPath + "/collectioneditor/collectioneditor"], returnFirstDependency); - define("serverRestartDialog", [embyWebComponentsBowerPath + "/serverrestartdialog/serverrestartdialog"], returnFirstDependency); - define("playlistEditor", [embyWebComponentsBowerPath + "/playlisteditor/playlisteditor"], returnFirstDependency); - define("recordingCreator", [embyWebComponentsBowerPath + "/recordingcreator/recordingcreator"], returnFirstDependency); - define("recordingEditor", [embyWebComponentsBowerPath + "/recordingcreator/recordingeditor"], returnFirstDependency); - define("seriesRecordingEditor", [embyWebComponentsBowerPath + "/recordingcreator/seriesrecordingeditor"], returnFirstDependency); - define("recordingFields", [embyWebComponentsBowerPath + "/recordingcreator/recordingfields"], returnFirstDependency); - define("recordingButton", [embyWebComponentsBowerPath + "/recordingcreator/recordingbutton"], returnFirstDependency); - define("recordingHelper", [embyWebComponentsBowerPath + "/recordingcreator/recordinghelper"], returnFirstDependency); - define("subtitleEditor", [embyWebComponentsBowerPath + "/subtitleeditor/subtitleeditor"], returnFirstDependency); - define("itemIdentifier", [embyWebComponentsBowerPath + "/itemidentifier/itemidentifier"], returnFirstDependency); - define("mediaInfo", [embyWebComponentsBowerPath + "/mediainfo/mediainfo"], returnFirstDependency); - define("itemContextMenu", [embyWebComponentsBowerPath + "/itemcontextmenu"], returnFirstDependency); - define("imageEditor", [embyWebComponentsBowerPath + "/imageeditor/imageeditor"], returnFirstDependency); - define("imageDownloader", [embyWebComponentsBowerPath + "/imagedownloader/imagedownloader"], returnFirstDependency); - define("dom", [embyWebComponentsBowerPath + "/dom"], returnFirstDependency); - define("playerStats", [embyWebComponentsBowerPath + "/playerstats/playerstats"], returnFirstDependency); - define("searchFields", [embyWebComponentsBowerPath + "/search/searchfields"], returnFirstDependency); - define("searchResults", [embyWebComponentsBowerPath + "/search/searchresults"], returnFirstDependency); - define("upNextDialog", [embyWebComponentsBowerPath + "/upnextdialog/upnextdialog"], returnFirstDependency); - define("fullscreen-doubleclick", [embyWebComponentsBowerPath + "/fullscreen/fullscreen-dc"], returnFirstDependency); - define("fullscreenManager", [embyWebComponentsBowerPath + "/fullscreen/fullscreenmanager", "events"], returnFirstDependency); - define("headroom", [embyWebComponentsBowerPath + "/headroom/headroom"], returnFirstDependency); - define("subtitleAppearanceHelper", [embyWebComponentsBowerPath + "/subtitlesettings/subtitleappearancehelper"], returnFirstDependency); - define("subtitleSettings", [embyWebComponentsBowerPath + "/subtitlesettings/subtitlesettings"], returnFirstDependency); - define("displaySettings", [embyWebComponentsBowerPath + "/displaysettings/displaysettings"], returnFirstDependency); - define("playbackSettings", [embyWebComponentsBowerPath + "/playbacksettings/playbacksettings"], returnFirstDependency); - define("homescreenSettings", [embyWebComponentsBowerPath + "/homescreensettings/homescreensettings"], returnFirstDependency); - define("homescreenSettingsDialog", [embyWebComponentsBowerPath + "/homescreensettings/homescreensettingsdialog"], returnFirstDependency); - define("playbackManager", [embyWebComponentsBowerPath + "/playback/playbackmanager"], getPlaybackManager); - define("layoutManager", [embyWebComponentsBowerPath + "/layoutmanager", "apphost"], getLayoutManager); - define("homeSections", [embyWebComponentsBowerPath + "/homesections/homesections"], returnFirstDependency); - define("playMenu", [embyWebComponentsBowerPath + "/playmenu"], returnFirstDependency); - define("refreshDialog", [embyWebComponentsBowerPath + "/refreshdialog/refreshdialog"], returnFirstDependency); - define("backdrop", [embyWebComponentsBowerPath + "/backdrop/backdrop"], returnFirstDependency); - define("fetchHelper", [embyWebComponentsBowerPath + "/fetchhelper"], returnFirstDependency); - define("roundCardStyle", ["cardStyle", "css!" + embyWebComponentsBowerPath + "/cardbuilder/roundcard"], returnFirstDependency); - define("cardStyle", ["css!" + embyWebComponentsBowerPath + "/cardbuilder/card"], returnFirstDependency); - define("cardBuilder", [embyWebComponentsBowerPath + "/cardbuilder/cardbuilder"], returnFirstDependency); - define("peoplecardbuilder", [embyWebComponentsBowerPath + "/cardbuilder/peoplecardbuilder"], returnFirstDependency); - define("chaptercardbuilder", [embyWebComponentsBowerPath + "/cardbuilder/chaptercardbuilder"], returnFirstDependency); - define("flexStyles", ["css!" + embyWebComponentsBowerPath + "/flexstyles"], returnFirstDependency); - define("deleteHelper", [embyWebComponentsBowerPath + "/deletehelper"], returnFirstDependency); - define("tvguide", [embyWebComponentsBowerPath + "/guide/guide"], returnFirstDependency); - define("programStyles", ["css!" + embyWebComponentsBowerPath + "/guide/programs"], returnFirstDependency); - define("guide-settings-dialog", [embyWebComponentsBowerPath + "/guide/guide-settings"], returnFirstDependency); - define("loadingDialog", [embyWebComponentsBowerPath + "/loadingdialog/loadingdialog"], returnFirstDependency); - define("syncDialog", [embyWebComponentsBowerPath + "/sync/sync"], returnFirstDependency); - define("viewManager", [embyWebComponentsBowerPath + "/viewmanager/viewmanager"], function (viewManager) { + define("emby-itemscontainer", [componentsPath + "/emby-itemscontainer/emby-itemscontainer"], returnFirstDependency); + define("alphaNumericShortcuts", [componentsPath + "/alphanumericshortcuts/alphanumericshortcuts"], returnFirstDependency); + define("emby-scroller", [componentsPath + "/emby-scroller/emby-scroller"], returnFirstDependency); + define("emby-tabs", [componentsPath + "/emby-tabs/emby-tabs"], returnFirstDependency); + define("emby-scrollbuttons", [componentsPath + "/emby-scrollbuttons/emby-scrollbuttons"], returnFirstDependency); + define("emby-progressring", [componentsPath + "/emby-progressring/emby-progressring"], returnFirstDependency); + define("emby-itemrefreshindicator", [componentsPath + "/emby-itemrefreshindicator/emby-itemrefreshindicator"], returnFirstDependency); + define("multiSelect", [componentsPath + "/multiselect/multiselect"], returnFirstDependency); + define("alphaPicker", [componentsPath + "/alphapicker/alphapicker"], returnFirstDependency); + define("paper-icon-button-light", [componentsPath + "/emby-button/paper-icon-button-light"], returnFirstDependency); + define("tabbedView", [componentsPath + "/tabbedview/tabbedview"], returnFirstDependency); + define("itemsTab", [componentsPath + "/tabbedview/itemstab"], returnFirstDependency); + define("emby-input", [componentsPath + "/emby-input/emby-input"], returnFirstDependency); + define("emby-select", [componentsPath + "/emby-select/emby-select"], returnFirstDependency); + define("emby-slider", [componentsPath + "/emby-slider/emby-slider"], returnFirstDependency); + define("emby-checkbox", [componentsPath + "/emby-checkbox/emby-checkbox"], returnFirstDependency); + define("emby-toggle", [componentsPath + "/emby-toggle/emby-toggle"], returnFirstDependency); + define("emby-radio", [componentsPath + "/emby-radio/emby-radio"], returnFirstDependency); + define("emby-textarea", [componentsPath + "/emby-textarea/emby-textarea"], returnFirstDependency); + define("collectionEditor", [componentsPath + "/collectioneditor/collectioneditor"], returnFirstDependency); + define("serverRestartDialog", [componentsPath + "/serverrestartdialog/serverrestartdialog"], returnFirstDependency); + define("playlistEditor", [componentsPath + "/playlisteditor/playlisteditor"], returnFirstDependency); + define("recordingCreator", [componentsPath + "/recordingcreator/recordingcreator"], returnFirstDependency); + define("recordingEditor", [componentsPath + "/recordingcreator/recordingeditor"], returnFirstDependency); + define("seriesRecordingEditor", [componentsPath + "/recordingcreator/seriesrecordingeditor"], returnFirstDependency); + define("recordingFields", [componentsPath + "/recordingcreator/recordingfields"], returnFirstDependency); + define("recordingButton", [componentsPath + "/recordingcreator/recordingbutton"], returnFirstDependency); + define("recordingHelper", [componentsPath + "/recordingcreator/recordinghelper"], returnFirstDependency); + define("subtitleEditor", [componentsPath + "/subtitleeditor/subtitleeditor"], returnFirstDependency); + define("itemIdentifier", [componentsPath + "/itemidentifier/itemidentifier"], returnFirstDependency); + define("mediaInfo", [componentsPath + "/mediainfo/mediainfo"], returnFirstDependency); + define("itemContextMenu", [componentsPath + "/itemcontextmenu"], returnFirstDependency); + define("imageEditor", [componentsPath + "/imageeditor/imageeditor"], returnFirstDependency); + define("imageDownloader", [componentsPath + "/imagedownloader/imagedownloader"], returnFirstDependency); + define("dom", [componentsPath + "/dom"], returnFirstDependency); + define("playerStats", [componentsPath + "/playerstats/playerstats"], returnFirstDependency); + define("searchFields", [componentsPath + "/search/searchfields"], returnFirstDependency); + define("searchResults", [componentsPath + "/search/searchresults"], returnFirstDependency); + define("upNextDialog", [componentsPath + "/upnextdialog/upnextdialog"], returnFirstDependency); + define("fullscreen-doubleclick", [componentsPath + "/fullscreen/fullscreen-dc"], returnFirstDependency); + define("fullscreenManager", [componentsPath + "/fullscreen/fullscreenmanager", "events"], returnFirstDependency); + define("headroom", [componentsPath + "/headroom/headroom"], returnFirstDependency); + define("subtitleAppearanceHelper", [componentsPath + "/subtitlesettings/subtitleappearancehelper"], returnFirstDependency); + define("subtitleSettings", [componentsPath + "/subtitlesettings/subtitlesettings"], returnFirstDependency); + define("displaySettings", [componentsPath + "/displaysettings/displaysettings"], returnFirstDependency); + define("playbackSettings", [componentsPath + "/playbacksettings/playbacksettings"], returnFirstDependency); + define("homescreenSettings", [componentsPath + "/homescreensettings/homescreensettings"], returnFirstDependency); + define("homescreenSettingsDialog", [componentsPath + "/homescreensettings/homescreensettingsdialog"], returnFirstDependency); + define("playbackManager", [componentsPath + "/playback/playbackmanager"], getPlaybackManager); + define("layoutManager", [componentsPath + "/layoutmanager", "apphost"], getLayoutManager); + define("homeSections", [componentsPath + "/homesections/homesections"], returnFirstDependency); + define("playMenu", [componentsPath + "/playmenu"], returnFirstDependency); + define("refreshDialog", [componentsPath + "/refreshdialog/refreshdialog"], returnFirstDependency); + define("backdrop", [componentsPath + "/backdrop/backdrop"], returnFirstDependency); + define("fetchHelper", [componentsPath + "/fetchhelper"], returnFirstDependency); + define("roundCardStyle", ["cardStyle", "css!" + componentsPath + "/cardbuilder/roundcard"], returnFirstDependency); + define("cardStyle", ["css!" + componentsPath + "/cardbuilder/card"], returnFirstDependency); + define("cardBuilder", [componentsPath + "/cardbuilder/cardbuilder"], returnFirstDependency); + define("peoplecardbuilder", [componentsPath + "/cardbuilder/peoplecardbuilder"], returnFirstDependency); + define("chaptercardbuilder", [componentsPath + "/cardbuilder/chaptercardbuilder"], returnFirstDependency); + define("flexStyles", ["css!" + componentsPath + "/flexstyles"], returnFirstDependency); + define("deleteHelper", [componentsPath + "/deletehelper"], returnFirstDependency); + define("tvguide", [componentsPath + "/guide/guide"], returnFirstDependency); + define("programStyles", ["css!" + componentsPath + "/guide/programs"], returnFirstDependency); + define("guide-settings-dialog", [componentsPath + "/guide/guide-settings"], returnFirstDependency); + define("loadingDialog", [componentsPath + "/loadingdialog/loadingdialog"], returnFirstDependency); + define("syncDialog", [componentsPath + "/sync/sync"], returnFirstDependency); + define("viewManager", [componentsPath + "/viewmanager/viewmanager"], function (viewManager) { window.ViewManager = viewManager; viewManager.dispatchPageEvents(true); return viewManager; @@ -1461,25 +1461,25 @@ var AppInfo = {}; requirejs.onError = onRequireJsError; define("jstree", ["thirdparty/jstree/jstree", "css!thirdparty/jstree/themes/default/style.css"], returnFirstDependency); define("dashboardcss", ["css!css/dashboard"], returnFirstDependency); - define("slideshow", [embyWebComponentsBowerPath + "/slideshow/slideshow"], returnFirstDependency); + define("slideshow", [componentsPath + "/slideshow/slideshow"], returnFirstDependency); define("fetch", [bowerPath + "/fetch/fetch"], returnFirstDependency); - define("raf", [embyWebComponentsBowerPath + "/polyfills/raf"], returnFirstDependency); - define("functionbind", [embyWebComponentsBowerPath + "/polyfills/bind"], returnFirstDependency); - define("arraypolyfills", [embyWebComponentsBowerPath + "/polyfills/array"], returnFirstDependency); - define("objectassign", [embyWebComponentsBowerPath + "/polyfills/objectassign"], returnFirstDependency); - define("clearButtonStyle", ["css!" + embyWebComponentsBowerPath + "/clearbutton"], returnFirstDependency); - define("userdataButtons", [embyWebComponentsBowerPath + "/userdatabuttons/userdatabuttons"], returnFirstDependency); - define("emby-playstatebutton", [embyWebComponentsBowerPath + "/userdatabuttons/emby-playstatebutton"], returnFirstDependency); - define("emby-ratingbutton", [embyWebComponentsBowerPath + "/userdatabuttons/emby-ratingbutton"], returnFirstDependency); - define("emby-downloadbutton", [embyWebComponentsBowerPath + "/sync/emby-downloadbutton"], returnFirstDependency); - define("listView", [embyWebComponentsBowerPath + "/listview/listview"], returnFirstDependency); - define("listViewStyle", ["css!" + embyWebComponentsBowerPath + "/listview/listview"], returnFirstDependency); - define("formDialogStyle", ["css!" + embyWebComponentsBowerPath + "/formdialog"], returnFirstDependency); - define("indicators", [embyWebComponentsBowerPath + "/indicators/indicators"], returnFirstDependency); - define("viewSettings", [embyWebComponentsBowerPath + "/viewsettings/viewsettings"], returnFirstDependency); - define("filterMenu", [embyWebComponentsBowerPath + "/filtermenu/filtermenu"], returnFirstDependency); - define("sortMenu", [embyWebComponentsBowerPath + "/sortmenu/sortmenu"], returnFirstDependency); - define("registrationServices", [embyWebComponentsBowerPath + "/registrationservices/registrationservices"], returnFirstDependency); + define("raf", [componentsPath + "/polyfills/raf"], returnFirstDependency); + define("functionbind", [componentsPath + "/polyfills/bind"], returnFirstDependency); + define("arraypolyfills", [componentsPath + "/polyfills/array"], returnFirstDependency); + define("objectassign", [componentsPath + "/polyfills/objectassign"], returnFirstDependency); + define("clearButtonStyle", ["css!" + componentsPath + "/clearbutton"], returnFirstDependency); + define("userdataButtons", [componentsPath + "/userdatabuttons/userdatabuttons"], returnFirstDependency); + define("emby-playstatebutton", [componentsPath + "/userdatabuttons/emby-playstatebutton"], returnFirstDependency); + define("emby-ratingbutton", [componentsPath + "/userdatabuttons/emby-ratingbutton"], returnFirstDependency); + define("emby-downloadbutton", [componentsPath + "/sync/emby-downloadbutton"], returnFirstDependency); + define("listView", [componentsPath + "/listview/listview"], returnFirstDependency); + define("listViewStyle", ["css!" + componentsPath + "/listview/listview"], returnFirstDependency); + define("formDialogStyle", ["css!" + componentsPath + "/formdialog"], returnFirstDependency); + define("indicators", [componentsPath + "/indicators/indicators"], returnFirstDependency); + define("viewSettings", [componentsPath + "/viewsettings/viewsettings"], returnFirstDependency); + define("filterMenu", [componentsPath + "/filtermenu/filtermenu"], returnFirstDependency); + define("sortMenu", [componentsPath + "/sortmenu/sortmenu"], returnFirstDependency); + define("registrationServices", [componentsPath + "/registrationservices/registrationservices"], returnFirstDependency); if ("cordova" === self.appMode || "android" === self.appMode) { define("fileupload", ["cordova/fileupload"], returnFirstDependency); @@ -1491,26 +1491,26 @@ var AppInfo = {}; define("serversync", [apiClientBowerPath + "/sync/serversync"], returnFirstDependency); define("multiserversync", [apiClientBowerPath + "/sync/multiserversync"], returnFirstDependency); define("mediasync", [apiClientBowerPath + "/sync/mediasync"], returnFirstDependency); - define("idb", [embyWebComponentsBowerPath + "/idb"], returnFirstDependency); - define("sanitizefilename", [embyWebComponentsBowerPath + "/sanitizefilename"], returnFirstDependency); + define("idb", [componentsPath + "/idb"], returnFirstDependency); + define("sanitizefilename", [componentsPath + "/sanitizefilename"], returnFirstDependency); define("itemrepository", [apiClientBowerPath + "/sync/itemrepository"], returnFirstDependency); define("useractionrepository", [apiClientBowerPath + "/sync/useractionrepository"], returnFirstDependency); define("swiper", [bowerPath + "/Swiper/dist/js/swiper.min", "css!" + bowerPath + "/Swiper/dist/css/swiper.min"], returnFirstDependency); - define("scroller", [embyWebComponentsBowerPath + "/scroller/smoothscroller"], returnFirstDependency); - define("toast", [embyWebComponentsBowerPath + "/toast/toast"], returnFirstDependency); - define("scrollHelper", [embyWebComponentsBowerPath + "/scrollhelper"], returnFirstDependency); - define("touchHelper", [embyWebComponentsBowerPath + "/touchhelper"], returnFirstDependency); - define("appSettings", [embyWebComponentsBowerPath + "/appsettings"], returnFirstDependency); - define("userSettings", [embyWebComponentsBowerPath + "/usersettings/usersettings"], returnFirstDependency); - define("userSettingsBuilder", [embyWebComponentsBowerPath + "/usersettings/usersettingsbuilder", "layoutManager", "browser"], getSettingsBuilder); - define("material-icons", ["css!" + embyWebComponentsBowerPath + "/fonts/material-icons/style"], returnFirstDependency); - define("systemFontsCss", ["css!" + embyWebComponentsBowerPath + "/fonts/fonts"], returnFirstDependency); - define("systemFontsSizedCss", ["css!" + embyWebComponentsBowerPath + "/fonts/fonts.sized"], returnFirstDependency); - define("scrollStyles", ["css!" + embyWebComponentsBowerPath + "/scrollstyles"], returnFirstDependency); - define("imageUploader", [embyWebComponentsBowerPath + "/imageuploader/imageuploader"], returnFirstDependency); + define("scroller", [componentsPath + "/scroller/smoothscroller"], returnFirstDependency); + define("toast", [componentsPath + "/toast/toast"], returnFirstDependency); + define("scrollHelper", [componentsPath + "/scrollhelper"], returnFirstDependency); + define("touchHelper", [componentsPath + "/touchhelper"], returnFirstDependency); + define("appSettings", [componentsPath + "/appsettings"], returnFirstDependency); + define("userSettings", [componentsPath + "/usersettings/usersettings"], returnFirstDependency); + define("userSettingsBuilder", [componentsPath + "/usersettings/usersettingsbuilder", "layoutManager", "browser"], getSettingsBuilder); + define("material-icons", ["css!" + componentsPath + "/fonts/material-icons/style"], returnFirstDependency); + define("systemFontsCss", ["css!" + componentsPath + "/fonts/fonts"], returnFirstDependency); + define("systemFontsSizedCss", ["css!" + componentsPath + "/fonts/fonts.sized"], returnFirstDependency); + define("scrollStyles", ["css!" + componentsPath + "/scrollstyles"], returnFirstDependency); + define("imageUploader", [componentsPath + "/imageuploader/imageuploader"], returnFirstDependency); define("navdrawer", ["components/navdrawer/navdrawer"], returnFirstDependency); - define("htmlMediaHelper", [embyWebComponentsBowerPath + "/htmlvideoplayer/htmlmediahelper"], returnFirstDependency); - define("viewcontainer", ["components/viewcontainer-lite", "css!" + embyWebComponentsBowerPath + "/viewmanager/viewcontainer-lite"], returnFirstDependency); + define("htmlMediaHelper", [componentsPath + "/htmlvideoplayer/htmlmediahelper"], returnFirstDependency); + define("viewcontainer", ["components/viewcontainer-lite", "css!" + componentsPath + "/viewmanager/viewcontainer-lite"], returnFirstDependency); define("queryString", [bowerPath + "/query-string/index"], function () { return queryString; }); @@ -1522,12 +1522,12 @@ var AppInfo = {}; return jQuery; }); define("fnchecked", ["legacy/fnchecked"], returnFirstDependency); - define("dialogHelper", [embyWebComponentsBowerPath + "/dialoghelper/dialoghelper"], returnFirstDependency); + define("dialogHelper", [componentsPath + "/dialoghelper/dialoghelper"], returnFirstDependency); define("inputmanager", ["inputManager"], returnFirstDependency); - define("serverNotifications", [embyWebComponentsBowerPath + "/apiInput/apiInput"], returnFirstDependency); + define("serverNotifications", [componentsPath + "/apiInput/apiInput"], returnFirstDependency); define("headroom-window", ["headroom"], createWindowHeadroom); define("appFooter-shared", ["appFooter"], createSharedAppFooter); - define("skinManager", [embyWebComponentsBowerPath + "/skinmanager"], function (skinManager) { + define("skinManager", [componentsPath + "/skinmanager"], function (skinManager) { skinManager.loadUserSkin = function (options) { require(["appRouter"], function (appRouter) { options = options || {}; @@ -1592,7 +1592,7 @@ var AppInfo = {}; return window.ApiClient; }; }); - define("appRouter", [embyWebComponentsBowerPath + "/router", "itemHelper"], function (appRouter, itemHelper) { + define("appRouter", [componentsPath + "/router", "itemHelper"], function (appRouter, itemHelper) { function showItem(item, serverId, options) { if ("string" == typeof item) { require(["connectionManager"], function (connectionManager) { From 70d66f64550f7457346552c40ef83420d63945ba Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Wed, 13 Mar 2019 23:22:17 +0000 Subject: [PATCH 10/69] remove unecessary var for onwebcomponentsready --- src/scripts/site.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index fc24fe3b2e..a47797ff3f 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1293,7 +1293,6 @@ var AppInfo = {}; } if (!window.Promise || browser.web0s) { - initialDependencies.push(); require(["components/native-promise-only/lib/npo.src"], init); } else { init(); From ca9e5d83bfb71c8eb77cfc1e3faaed31e645b66d Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 14 Mar 2019 00:05:45 -0700 Subject: [PATCH 11/69] remove write check and add warning to the description --- src/dashboard/dashboardgeneral.js | 1 - src/strings/en-us.json | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/dashboard/dashboardgeneral.js b/src/dashboard/dashboardgeneral.js index 6ef1c4d221..7ecd7cb1c9 100644 --- a/src/dashboard/dashboardgeneral.js +++ b/src/dashboard/dashboardgeneral.js @@ -119,7 +119,6 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb } picker.close(); }, - validateWriteable: true, header: Globalize.translate("LabelWebPath"), instruction: Globalize.translate("LabelWebPathHelp") }) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 6fe64cdf4a..dca0c0797e 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1123,7 +1123,7 @@ "LabelMetadataPath": "Metadata path:", "LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata.", "LabelWebPath": "Web path:", - "LabelWebPathHelp": "The path where the web client source is located.", + "LabelWebPathHelp": "The path where the web client source is located. Do not change this unless you plan on moving the web files, or the web interface will break.", "LabelMetadataReaders": "Metadata readers:", "LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataSavers": "Metadata savers:", @@ -2268,4 +2268,4 @@ "XmlTvSportsCategoriesHelp": "Programs with these categories will be displayed as sports programs. Separate multiple with '|'.", "Yes": "Yes", "Yesterday": "Yesterday" -} \ No newline at end of file +} From 9dde221c073e69782da0d39e4d2cefde6d0933b3 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Thu, 14 Mar 2019 23:40:56 +0000 Subject: [PATCH 12/69] remove forced volumeosd load for edge --- src/scripts/site.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index a47797ff3f..3d3c986aeb 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1224,7 +1224,7 @@ var AppInfo = {}; require(["playerSelectionMenu", "components/playback/remotecontrolautoplay"]); } - if (!(appHost.supports("physicalvolumecontrol") && !browser.touch || browser.edge)) { + if (!appHost.supports("physicalvolumecontrol") || browser.touch) { require(["components/playback/volumeosd"]); } From e38a34384a2933f2b3dab3f176c88f3e8d39d11f Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 16 Mar 2019 01:55:47 -0700 Subject: [PATCH 13/69] add ci for eslint --- .drone.yml | 9 +++++++++ .eslintrc.yml | 3 +++ run-eslint.sh | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 .drone.yml create mode 100644 .eslintrc.yml create mode 100644 run-eslint.sh diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000000..d1a67db6e8 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,9 @@ +--- +kind: pipeline +name: eslint + +steps: +- name: run + image: nextcloudci/eslint:eslint-1 + commands: + - ./run-eslint.sh diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000000..943b958ecd --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,3 @@ +env: + browser: true + amd: true diff --git a/run-eslint.sh b/run-eslint.sh new file mode 100644 index 0000000000..46b74c1a7e --- /dev/null +++ b/run-eslint.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +# used this pull request for reference +# https://github.com/nextcloud/spreed/pull/48 +ESLINT=$(which eslint || true) +if [ -z "$ESLINT" ] +then + echo "could not find eslint in $PATH" + exit 1 +fi + +echo checking scripts with $ESLINT +find -name "*.js" -print0 | xargs -0 $ESLINT + +# use this line to test changes locally +#find src -name "*.js" -exec sh -c 'npx eslint $1' -- {} \; From 9e38eeeb16eb99a3b969d2e46c4b559a8ee852a7 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 16:50:51 +0000 Subject: [PATCH 14/69] removing nativedirectorychooser require --- src/scripts/site.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 3d3c986aeb..2a2f8a6980 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -538,10 +538,6 @@ var AppInfo = {}; } function init() { - if ("android" === self.appMode) { - define("nativedirectorychooser", ["cordova/nativedirectorychooser"], returnFirstDependency); - } - define("livetvcss", ["css!css/livetv.css"], returnFirstDependency); define("detailtablecss", ["css!css/detailtable.css"], returnFirstDependency); define("buttonenabled", ["legacy/buttonenabled"], returnFirstDependency); From c2d35ee599eff085b8d01815db6fb9018132c2ee Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 16:52:41 +0000 Subject: [PATCH 15/69] removing require for module file upload --- src/scripts/site.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 2a2f8a6980..193f616b05 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1475,13 +1475,6 @@ var AppInfo = {}; define("filterMenu", [componentsPath + "/filtermenu/filtermenu"], returnFirstDependency); define("sortMenu", [componentsPath + "/sortmenu/sortmenu"], returnFirstDependency); define("registrationServices", [componentsPath + "/registrationservices/registrationservices"], returnFirstDependency); - - if ("cordova" === self.appMode || "android" === self.appMode) { - define("fileupload", ["cordova/fileupload"], returnFirstDependency); - } else { - define("fileupload", [apiClientBowerPath + "/fileupload"], returnFirstDependency); - } - define("connectionmanager", [apiClientBowerPath + "/connectionmanager"]); define("serversync", [apiClientBowerPath + "/sync/serversync"], returnFirstDependency); define("multiserversync", [apiClientBowerPath + "/sync/multiserversync"], returnFirstDependency); From c391eaf5453d99a4980f55ea759cf57d38c2a54d Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 16:52:49 +0000 Subject: [PATCH 16/69] removing module fileupload --- src/bower_components/emby-apiclient/fileupload.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/bower_components/emby-apiclient/fileupload.js diff --git a/src/bower_components/emby-apiclient/fileupload.js b/src/bower_components/emby-apiclient/fileupload.js deleted file mode 100644 index 91f77395e6..0000000000 --- a/src/bower_components/emby-apiclient/fileupload.js +++ /dev/null @@ -1,8 +0,0 @@ -define([], function() { - "use strict"; - - function FileUpload() {} - return FileUpload.prototype.upload = function(file, url) { - return Promise.reject() - }, FileUpload -}); \ No newline at end of file From 4be8a788b08e049284a5a1910976cf078d81a917 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 17:15:37 +0000 Subject: [PATCH 17/69] assume server discovery is in NativeShell api --- .../emby-apiclient/connectionmanager.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bower_components/emby-apiclient/connectionmanager.js b/src/bower_components/emby-apiclient/connectionmanager.js index 39824d31f7..93e9673a46 100644 --- a/src/bower_components/emby-apiclient/connectionmanager.js +++ b/src/bower_components/emby-apiclient/connectionmanager.js @@ -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) { From 04480fc8eb9006ef6394a76892f37e045ab80879 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 17:15:59 +0000 Subject: [PATCH 18/69] removed serverdiscovery require --- src/scripts/site.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 193f616b05..b64686ac67 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -462,12 +462,6 @@ var AppInfo = {}; define("registerElement", [bowerPath + "/document-register-element/build/document-register-element"], returnFirstDependency); } - if ("cordova" === self.appMode || "android" === self.appMode) { - define("serverdiscovery", ["cordova/serverdiscovery"], returnFirstDependency); - } else { - define("serverdiscovery", [apiClientBowerPath + "/serverdiscovery"], returnFirstDependency); - } - if ("cordova" === self.appMode && browser.iOSVersion && browser.iOSVersion < 11) { define("imageFetcher", ["cordova/imagestore"], returnFirstDependency); } else { From 60c0e58c647a51aa5349bc4c80d50f5cbd91d1f2 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 17:16:11 +0000 Subject: [PATCH 19/69] removed serverdiscovery module --- src/bower_components/emby-apiclient/serverdiscovery.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/bower_components/emby-apiclient/serverdiscovery.js diff --git a/src/bower_components/emby-apiclient/serverdiscovery.js b/src/bower_components/emby-apiclient/serverdiscovery.js deleted file mode 100644 index 4f18505ecc..0000000000 --- a/src/bower_components/emby-apiclient/serverdiscovery.js +++ /dev/null @@ -1,8 +0,0 @@ -define([], function() { - "use strict"; - return { - findServers: function(timeoutMs) { - return Promise.resolve([]) - } - } -}); \ No newline at end of file From bd17f0670806d923f9669e6b6ee4f5c2981191bc Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 17:51:24 +0000 Subject: [PATCH 20/69] fix require apiInput to serverNotifications --- src/scripts/site.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 3d3c986aeb..e1d91ee99c 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1232,7 +1232,7 @@ var AppInfo = {}; require(["mediaSession"]); } - require(["apiInput"]); + require(["serverNotifications"]); if (!browser.tv && !browser.xboxOne) { require(["components/playback/playbackorientation"]); From 3de82f210af7c08123af70bdb2f48fa3d4da324a Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 18:11:46 +0000 Subject: [PATCH 21/69] using NativeShell api for native apps in shell.js --- src/components/shell.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/shell.js b/src/components/shell.js index 0083404e19..762039ac42 100644 --- a/src/components/shell.js +++ b/src/components/shell.js @@ -2,8 +2,13 @@ define([], function () { 'use strict'; return { - openUrl: function (url) { - window.open(url, '_blank'); + openUrl: function (url, target) { + if (window.NativeShell) { + window.NativeShell.openUrl(url, target); + } else { + window.open(url, target || '_blank'); + } + }, canExec: false, exec: function (options) { @@ -12,10 +17,14 @@ define([], function () { return Promise.reject(); }, enableFullscreen: function () { - // do nothing since this is for native apps + if (window.NativeShell) { + window.NativeShell.enableFullscreen(); + } }, disableFullscreen: function () { - // do nothing since this is for native apps + if (window.NativeShell) { + window.NativeShell.disableFullscreen(); + } } }; }); \ No newline at end of file From c22ad0f204e8adc5c670e095ab308cc42aabf14e Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 18:13:26 +0000 Subject: [PATCH 22/69] removing require for module cordova shell --- src/scripts/site.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index b64686ac67..fc7d1d1cf6 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -441,11 +441,7 @@ var AppInfo = {}; define("lazyLoader", [componentsPath + "/lazyloader/lazyloader-scroll"], returnFirstDependency); } - if ("android" === self.appMode) { - define("shell", ["cordova/shell"], returnFirstDependency); - } else { - define("shell", [componentsPath + "/shell"], returnFirstDependency); - } + define("shell", [componentsPath + "/shell"], returnFirstDependency); if ("cordova" === self.appMode || "android" === self.appMode) { define("apiclientcore", ["bower_components/emby-apiclient/apiclient"], returnFirstDependency); @@ -1222,7 +1218,7 @@ var AppInfo = {}; require(["mediaSession"]); } - require(["apiInput"]); + require(["serverNotifications"]); if (!browser.tv && !browser.xboxOne) { require(["components/playback/playbackorientation"]); From d8d3b0b4c75a80405d69d80ad28627896e25640c Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 18:21:07 +0000 Subject: [PATCH 23/69] remove unused module wakeonlan --- src/bower_components/emby-apiclient/wakeonlan.js | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 src/bower_components/emby-apiclient/wakeonlan.js diff --git a/src/bower_components/emby-apiclient/wakeonlan.js b/src/bower_components/emby-apiclient/wakeonlan.js deleted file mode 100644 index 58c01e61a5..0000000000 --- a/src/bower_components/emby-apiclient/wakeonlan.js +++ /dev/null @@ -1,15 +0,0 @@ -define([], function() { - "use strict"; - - function send(info) { - return Promise.reject() - } - - function isSupported() { - return !1 - } - return { - send: send, - isSupported: isSupported - } -}); \ No newline at end of file From 5cc1821e1206c06c9c0158f2e6cd1c00d890f90f Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 18:26:42 +0000 Subject: [PATCH 24/69] remove require for module cordova chromecast --- src/scripts/site.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index fc7d1d1cf6..f5a4233bfb 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1126,10 +1126,6 @@ var AppInfo = {}; "components/youtubeplayer/plugin" ]; - if ("cordova" === self.appMode) { - list.push("cordova/chromecast"); - } - if ("android" === self.appMode) { list.push("cordova/externalplayer"); } From e13796e4f3d986a80a9c4369ec5e0b35dbf9d8d2 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 19:19:00 +0000 Subject: [PATCH 25/69] add NativeShell API to filesystem module --- src/components/filesystem.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/filesystem.js b/src/components/filesystem.js index 4489d2921f..e022a1c6d0 100644 --- a/src/components/filesystem.js +++ b/src/components/filesystem.js @@ -3,10 +3,14 @@ define([], function () { return { fileExists: function (path) { - return Promise.reject(); + if (window.NativeShell && window.NativeShell.FileSystem) { + return window.NativeShell.FileSystem.fileExists(path); + } }, directoryExists: function (path) { - return Promise.reject(); + if (window.NativeShell && window.NativeShell.FileSystem) { + return window.NativeShell.FileSystem.directoryExists(path); + } } }; }); \ No newline at end of file From 42beea23b6ce3a49fcd2a08c41c3f6fcf4961616 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 19:19:24 +0000 Subject: [PATCH 26/69] removed require for module cordova filesystem --- src/scripts/site.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index f5a4233bfb..989d3161f9 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -429,11 +429,7 @@ var AppInfo = {}; var apiClientBowerPath = bowerPath + "/emby-apiclient"; var componentsPath = "components"; - if ("android" === self.appMode) { - define("filesystem", ["cordova/filesystem"], returnFirstDependency); - } else { - define("filesystem", [componentsPath + "/filesystem"], returnFirstDependency); - } + define("filesystem", [componentsPath + "/filesystem"], returnFirstDependency); if (window.IntersectionObserver && !browser.edge) { define("lazyLoader", [componentsPath + "/lazyloader/lazyloader-intersectionobserver"], returnFirstDependency); From e39d364874827e98523771f444831dc6006b130c Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 19:20:38 +0000 Subject: [PATCH 27/69] removed require module for cordova imagestore --- src/scripts/site.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 989d3161f9..1908b2b816 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -454,11 +454,7 @@ var AppInfo = {}; define("registerElement", [bowerPath + "/document-register-element/build/document-register-element"], returnFirstDependency); } - if ("cordova" === self.appMode && browser.iOSVersion && browser.iOSVersion < 11) { - define("imageFetcher", ["cordova/imagestore"], returnFirstDependency); - } else { - define("imageFetcher", [componentsPath + "/images/basicimagefetcher"], returnFirstDependency); - } + define("imageFetcher", [componentsPath + "/images/basicimagefetcher"], returnFirstDependency); var preferNativeAlerts = browser.tv; From a77058de6192d44f19a99013a2ed62e147d9ced8 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 19:25:46 +0000 Subject: [PATCH 28/69] added NativeShell API to localsync module --- src/bower_components/emby-apiclient/sync/localsync.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/bower_components/emby-apiclient/sync/localsync.js b/src/bower_components/emby-apiclient/sync/localsync.js index cea244de08..f2f5f4e9e3 100644 --- a/src/bower_components/emby-apiclient/sync/localsync.js +++ b/src/bower_components/emby-apiclient/sync/localsync.js @@ -3,6 +3,10 @@ define(["connectionManager"], function(connectionManager) { var isSyncing; return { sync: function(options) { + if (window.NativeShell) { + return window.NativeShell.sync(options); + } + return console.log("localSync.sync starting..."), isSyncing ? Promise.resolve() : (isSyncing = !0, new Promise(function(resolve, reject) { require(["multiserversync", "appSettings"], function(MultiServerSync, appSettings) { options = options || {}, options.cameraUploadServers = appSettings.cameraUploadServers(), (new MultiServerSync).sync(connectionManager, options).then(function() { From 164bba2fafa3694dfc70524634fb282b7093b752 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 19:26:30 +0000 Subject: [PATCH 29/69] removed require for module cordova localsync --- src/scripts/site.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 1908b2b816..5683e1538c 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -512,12 +512,8 @@ var AppInfo = {}; define("filerepository", [apiClientBowerPath + "/sync/filerepository"], returnFirstDependency); } - if ("android" === self.appMode) { - define("localsync", ["cordova/localsync"], returnFirstDependency); - } else { define("localsync", [apiClientBowerPath + "/sync/localsync"], returnFirstDependency); } - } function init() { define("livetvcss", ["css!css/livetv.css"], returnFirstDependency); From 8b6b9974c79812fd9c7e0e761b66cb1309049852 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 19:34:19 +0000 Subject: [PATCH 30/69] removed require for cordova appshortcuts --- src/scripts/site.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 5683e1538c..e3bfe5c8b2 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -512,8 +512,8 @@ var AppInfo = {}; define("filerepository", [apiClientBowerPath + "/sync/filerepository"], returnFirstDependency); } - define("localsync", [apiClientBowerPath + "/sync/localsync"], returnFirstDependency); - } + define("localsync", [apiClientBowerPath + "/sync/localsync"], returnFirstDependency); + } function init() { define("livetvcss", ["css!css/livetv.css"], returnFirstDependency); @@ -1180,7 +1180,7 @@ var AppInfo = {}; if ("cordova" === self.appMode || "android" === self.appMode) { if (browser.android) { - require(["cordova/mediasession", "cordova/chromecast", "cordova/appshortcuts"]); + require(["cordova/mediasession"]); } else if (browser.safari) { require(["cordova/mediasession", "cordova/volume", "cordova/statusbar", "cordova/backgroundfetch"]); } From 856d87a9b2d1f43a0b7c9253966511f245fca236 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 21:21:40 +0000 Subject: [PATCH 31/69] clean filerepository and transfermanager requires --- src/scripts/site.js | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index e3bfe5c8b2..222717969c 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -497,21 +497,8 @@ var AppInfo = {}; define("castSenderApiLoader", [], getCastSenderApiLoader); } - if (self.Windows) { - define("bgtaskregister", ["environments/windows-uwp/bgtaskregister"], returnFirstDependency); - define("transfermanager", ["environments/windows-uwp/transfermanager"], returnFirstDependency); - define("filerepository", ["environments/windows-uwp/filerepository"], returnFirstDependency); - } else if ("cordova" === self.appMode) { - define("filerepository", ["cordova/filerepository"], returnFirstDependency); - define("transfermanager", ["filerepository"], returnFirstDependency); - } else if ("android" === self.appMode) { - define("transfermanager", ["cordova/transfermanager"], returnFirstDependency); - define("filerepository", ["cordova/filerepository"], returnFirstDependency); - } else { - define("transfermanager", [apiClientBowerPath + "/sync/transfermanager"], returnFirstDependency); - define("filerepository", [apiClientBowerPath + "/sync/filerepository"], returnFirstDependency); - } - + define("transfermanager", [apiClientBowerPath + "/sync/transfermanager"], returnFirstDependency); + define("filerepository", [apiClientBowerPath + "/sync/filerepository"], returnFirstDependency); define("localsync", [apiClientBowerPath + "/sync/localsync"], returnFirstDependency); } From 071963ec5a79f1552579fdaf474be088c93255a0 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 21:48:44 +0000 Subject: [PATCH 32/69] added nativeshell API to filedownloader module --- src/components/filedownloader.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/filedownloader.js b/src/components/filedownloader.js index c8e3011be2..c5810b460e 100644 --- a/src/components/filedownloader.js +++ b/src/components/filedownloader.js @@ -4,9 +4,15 @@ define(['multi-download'], function (multiDownload) { return { download: function (items) { - multiDownload(items.map(function (item) { - return item.url; - })); + if (window.NativeShell) { + items.map(function (item) { + window.NativeShell.downloadFile(item.url); + }); + } else { + multiDownload(items.map(function (item) { + return item.url; + })); + } } }; }); \ No newline at end of file From 01d38d04bacb62edd05d3bf5c2f55a87417c3f2e Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 21:49:05 +0000 Subject: [PATCH 33/69] removed require for module cordova filedownloader --- src/scripts/site.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 222717969c..d97b5d3bf2 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -482,13 +482,7 @@ var AppInfo = {}; } define("multi-download", [componentsPath + "/multidownload"], returnFirstDependency); - - if ("android" === self.appMode) { - define("fileDownloader", ["cordova/filedownloader"], returnFirstDependency); - } else { - define("fileDownloader", [componentsPath + "/filedownloader"], returnFirstDependency); - } - + define("fileDownloader", [componentsPath + "/filedownloader"], returnFirstDependency); define("localassetmanager", [apiClientBowerPath + "/localassetmanager"], returnFirstDependency); if ("cordova" === self.appMode || "android" === self.appMode) { From 7fc4165b538c105a4a0c65644d269c3622238088 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sat, 16 Mar 2019 22:56:55 +0000 Subject: [PATCH 34/69] remove some require modules of cordova --- src/scripts/site.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index d97b5d3bf2..d2a01c873e 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1160,11 +1160,7 @@ var AppInfo = {}; require(["components/thememediaplayer", "scripts/autobackdrops"]); if ("cordova" === self.appMode || "android" === self.appMode) { - if (browser.android) { - require(["cordova/mediasession"]); - } else if (browser.safari) { - require(["cordova/mediasession", "cordova/volume", "cordova/statusbar", "cordova/backgroundfetch"]); - } + require(["cordova/mediasession"]); } if (!browser.tv && !browser.xboxOne && !browser.ps4) { From e4c7282b92ce5f4f96655410adcfc57aa3a765bf Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sun, 17 Mar 2019 00:31:56 +0000 Subject: [PATCH 35/69] refactor mediaSession to support NativeShell API --- src/components/playback/mediasession.js | 170 ++++++++++++++++-------- 1 file changed, 116 insertions(+), 54 deletions(-) diff --git a/src/components/playback/mediasession.js b/src/components/playback/mediasession.js index 8e2f7d0c01..fc899918f6 100644 --- a/src/components/playback/mediasession.js +++ b/src/components/playback/mediasession.js @@ -1,5 +1,10 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], function (playbackManager, nowPlayingHelper, events, connectionManager) { "use strict"; + + // no support for mediaSession + if (!navigator.mediaSession && !window.NativeShell) { + return; + } // Reports media playback to the device for lock screen control @@ -64,15 +69,16 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f return null; } - function pushImageUrl(item, height, list) { - - var imageOptions = { - height: height - }; - + function pushImageUrl(item, imageOptions, list) { var url = seriesImageUrl(item, imageOptions) || imageUrl(item, imageOptions); + if (url) { - list.push({ src: url, sizes: height + 'x' + height }); + var height = imageOptions.height || imageOptions.maxHeight; + + list.push({ + src: url, + sizes: height + 'x' + height + }); } } @@ -80,12 +86,12 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f var list = []; - pushImageUrl(item, 96, list); - pushImageUrl(item, 128, list); - pushImageUrl(item, 192, list); - pushImageUrl(item, 256, list); - pushImageUrl(item, 384, list); - pushImageUrl(item, 512, list); + pushImageUrl(item, {height: 96}, list); + pushImageUrl(item, {height: 128}, list); + pushImageUrl(item, {height: 192}, list); + pushImageUrl(item, {height: 256}, list); + pushImageUrl(item, {height: 384}, list); + pushImageUrl(item, {height: 512}, list); return list; } @@ -99,6 +105,19 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f return; } + // dummy this up + if (eventName == 'init') { + eventName = 'timeupdate'; + } + + var isVideo = item.MediaType === 'Video'; + var isLocalPlayer = player.isLocalPlayer || false; + + // Local players do their own notifications + if (isLocalPlayer && isVideo) { + return; + } + var playState = state.PlayState || {}; var parts = nowPlayingHelper.getNowPlayingNames(item); @@ -106,8 +125,6 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f var artist = parts.length === 1 ? '' : parts[0].text; var title = parts[parts.length - 1].text; - var isVideo = item.MediaType === 'Video'; - // Switch these two around for video if (isVideo && parts.length > 1) { var temp = artist; @@ -131,18 +148,54 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f var isPaused = playState.IsPaused || false; var canSeek = playState.CanSeek || false; - navigator.mediaSession.metadata = new MediaMetadata({ - title: title, - artist: artist, - album: album, - artwork: getImageUrls(item), - albumArtist: albumArtist, - currentTime: currentTime, - duration: duration, - paused: isPaused, - itemId: itemId, - mediaType: item.MediaType - }); + var now = new Date().getTime(); + + // Don't go crazy reporting position changes + if (eventName == 'timeupdate' && (now - lastUpdateTime) < 5000) { + // Only report if this item hasn't been reported yet, or if there's an actual playback change. + // Don't report on simple time updates + return; + } + + lastUpdateTime = now; + + if (navigator.mediaSession){ + navigator.mediaSession.metadata = new MediaMetadata({ + title: title, + artist: artist, + album: album, + artwork: getImageUrls(item), + albumArtist: albumArtist, + currentTime: currentTime, + duration: duration, + paused: isPaused, + itemId: itemId, + mediaType: item.MediaType + }); + } else { + var imageUrl = []; + pushImageUrl(item, {maxHeight: 400}, imageUrl); + + if (imageUrl.length) { + imageUrl = imageUrl[0].src; + } else { + imageUrl = null; + } + + window.NativeShell.updateMediaSession({ + action: eventName, + isLocalPlayer: isLocalPlayer, + itemId: itemId, + title: title, + artist: artist, + album: album, + duration: duration, + position: currentTime, + imageUrl: imageUrl, + canSeek: canSeek, + isPaused: isPaused + }); + } } function onGeneralEvent(e) { @@ -191,7 +244,13 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f } function hideMediaControls() { - navigator.mediaSession.metadata = null; + lastUpdateTime = 0; + + if (navigator.mediaSession) { + navigator.mediaSession.metadata = null; + } else { + window.NativeShell.hideMediaSession(); + } } function bindToPlayer(player) { @@ -215,34 +274,37 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f events.on(currentPlayer, 'timeupdate', onGeneralEvent); } - function execute(name) { - playbackManager[name](currentPlayer); + if (navigator.mediaSession) { + + function execute(name) { + playbackManager[name](currentPlayer); + } + + navigator.mediaSession.setActionHandler('previoustrack', function () { + execute('previousTrack'); + }); + + navigator.mediaSession.setActionHandler('nexttrack', function () { + execute('nextTrack'); + }); + + navigator.mediaSession.setActionHandler('play', function () { + execute('unpause'); + }); + + navigator.mediaSession.setActionHandler('pause', function () { + execute('pause'); + }); + + navigator.mediaSession.setActionHandler('seekbackward', function () { + execute('rewind'); + }); + + navigator.mediaSession.setActionHandler('seekforward', function () { + execute('fastForward'); + }); } - navigator.mediaSession.setActionHandler('previoustrack', function () { - execute('previousTrack'); - }); - - navigator.mediaSession.setActionHandler('nexttrack', function () { - execute('nextTrack'); - }); - - navigator.mediaSession.setActionHandler('play', function () { - execute('unpause'); - }); - - navigator.mediaSession.setActionHandler('pause', function () { - execute('pause'); - }); - - navigator.mediaSession.setActionHandler('seekbackward', function () { - execute('rewind'); - }); - - navigator.mediaSession.setActionHandler('seekforward', function () { - execute('fastForward'); - }); - events.on(playbackManager, 'playerchange', function () { bindToPlayer(playbackManager.getCurrentPlayer()); From 01d82010ed5353bd16ff5c9ab772e37a10f430f5 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sun, 17 Mar 2019 00:32:15 +0000 Subject: [PATCH 36/69] cleanup for mediaSession require --- src/scripts/site.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index d2a01c873e..83c3b8bde2 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1159,10 +1159,6 @@ var AppInfo = {}; require(["components/thememediaplayer", "scripts/autobackdrops"]); - if ("cordova" === self.appMode || "android" === self.appMode) { - require(["cordova/mediasession"]); - } - if (!browser.tv && !browser.xboxOne && !browser.ps4) { require(["components/nowplayingbar/nowplayingbar"]); } @@ -1175,11 +1171,7 @@ var AppInfo = {}; require(["components/playback/volumeosd"]); } - if (navigator.mediaSession) { - require(["mediaSession"]); - } - - require(["serverNotifications"]); + require(["mediaSession", "serverNotifications"]); if (!browser.tv && !browser.xboxOne) { require(["components/playback/playbackorientation"]); From e29b0be9fd7a622fe24b0517a5e337aa32372630 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Sun, 17 Mar 2019 22:13:56 +0100 Subject: [PATCH 37/69] Remove no to nb --- src/strings/{no.json => nb.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/strings/{no.json => nb.json} (100%) diff --git a/src/strings/no.json b/src/strings/nb.json similarity index 100% rename from src/strings/no.json rename to src/strings/nb.json From 447ec2c3abd15aeac05e1acdc4b4e70c8fa39520 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Sun, 17 Mar 2019 22:24:49 +0100 Subject: [PATCH 38/69] Return inner promise in init require --- src/scripts/site.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index e1d91ee99c..c9b1e7fee8 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -275,7 +275,7 @@ var AppInfo = {}; var credentialProviderInstance = new credentialProvider(); var promises = [apphost.getSyncProfile(), apphost.init()]; - Promise.all(promises).then(function (responses) { + return Promise.all(promises).then(function (responses) { var deviceProfile = responses[0]; var capabilities = Dashboard.capabilities(apphost); @@ -293,7 +293,7 @@ var AppInfo = {}; console.log("creating ApiClient singleton"); var apiClient = new apiClientFactory(Dashboard.serverAddress(), apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId(), window.devicePixelRatio); - + apiClient.enableAutomaticNetworking = false; apiClient.manualAddressOnly = true; From 91ef01cbc00328438afb3b8d17d0e271ae191aa6 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sun, 17 Mar 2019 21:42:36 +0000 Subject: [PATCH 39/69] removed require for cordova externalPlayer --- src/scripts/site.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 83c3b8bde2..5d1f70df67 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1095,10 +1095,6 @@ var AppInfo = {}; "components/youtubeplayer/plugin" ]; - if ("android" === self.appMode) { - list.push("cordova/externalplayer"); - } - if (appHost.supports("remotecontrol")) { list.push("components/sessionplayer"); From 9967edcb353813393d9093a273af0aac8c190421 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sun, 17 Mar 2019 21:52:56 +0000 Subject: [PATCH 40/69] deuglify apphost.js --- src/components/apphost.js | 444 ++++++++++++++++++++++++++++---------- 1 file changed, 329 insertions(+), 115 deletions(-) diff --git a/src/components/apphost.js b/src/components/apphost.js index 9cffd2d8a4..21d474a3e1 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -1,109 +1,178 @@ -define(["appSettings", "browser", "events", "htmlMediaHelper"], function(appSettings, browser, events, htmlMediaHelper) { +define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSettings, browser, events, htmlMediaHelper) { "use strict"; function getBaseProfileOptions(item) { var disableHlsVideoAudioCodecs = []; - return item && htmlMediaHelper.enableHlsJsPlayer(item.RunTimeTicks, item.MediaType) && ((browser.edge || browser.msie) && disableHlsVideoAudioCodecs.push("mp3"), disableHlsVideoAudioCodecs.push("ac3"), disableHlsVideoAudioCodecs.push("eac3"), disableHlsVideoAudioCodecs.push("opus")), { - enableMkvProgressive: !1, - disableHlsVideoAudioCodecs: disableHlsVideoAudioCodecs + + if (item && htmlMediaHelper.enableHlsJsPlayer(item.RunTimeTicks, item.MediaType)) { + if (browser.edge || browser.msie) { + disableHlsVideoAudioCodecs.push("mp3"); + } + + disableHlsVideoAudioCodecs.push("ac3"); + disableHlsVideoAudioCodecs.push("eac3"); + disableHlsVideoAudioCodecs.push("opus"); } + + return { + enableMkvProgressive: false, + disableHlsVideoAudioCodecs: disableHlsVideoAudioCodecs + }; } function getDeviceProfileForWindowsUwp(item) { - return new Promise(function(resolve, reject) { - require(["browserdeviceprofile", "environments/windows-uwp/mediacaps"], function(profileBuilder, uwpMediaCaps) { + return new Promise(function (resolve, reject) { + require(["browserdeviceprofile", "environments/windows-uwp/mediacaps"], function (profileBuilder, uwpMediaCaps) { var profileOptions = getBaseProfileOptions(item); - profileOptions.supportsDts = uwpMediaCaps.supportsDTS(), profileOptions.supportsTrueHd = uwpMediaCaps.supportsDolby(), profileOptions.audioChannels = uwpMediaCaps.getAudioChannels(), resolve(profileBuilder(profileOptions)) - }) - }) + profileOptions.supportsDts = uwpMediaCaps.supportsDTS(); + profileOptions.supportsTrueHd = uwpMediaCaps.supportsDolby(); + profileOptions.audioChannels = uwpMediaCaps.getAudioChannels(); + resolve(profileBuilder(profileOptions)); + }); + }); } function getDeviceProfile(item, options) { - return options = options || {}, self.Windows ? getDeviceProfileForWindowsUwp(item) : new Promise(function(resolve, reject) { - require(["browserdeviceprofile"], function(profileBuilder) { + options = options || {}; + + if (self.Windows) { + return getDeviceProfileForWindowsUwp(item); + } + + return new Promise(function (resolve, reject) { + require(["browserdeviceprofile"], function (profileBuilder) { var profile = profileBuilder(getBaseProfileOptions(item)); - item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin") && (browser.orsay || browser.tizen || (profile.SubtitleProfiles.push({ - Format: "ass", - Method: "External" - }), profile.SubtitleProfiles.push({ - Format: "ssa", - Method: "External" - }))), resolve(profile) - }) - }) + + if (item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin")) { + if (!(browser.orsay || browser.tizen)) { + profile.SubtitleProfiles.push({ + Format: "ass", + Method: "External" + }); + profile.SubtitleProfiles.push({ + Format: "ssa", + Method: "External" + }); + } + } + + resolve(profile); + }); + }); } function escapeRegExp(str) { - return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1") + return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); } function replaceAll(originalString, strReplace, strWith) { - var strReplace2 = escapeRegExp(strReplace), - reg = new RegExp(strReplace2, "ig"); - return originalString.replace(reg, strWith) + var strReplace2 = escapeRegExp(strReplace); + var reg = new RegExp(strReplace2, "ig"); + return originalString.replace(reg, strWith); } function generateDeviceId() { var keys = []; - if (keys.push(navigator.userAgent), keys.push((new Date).getTime()), self.btoa) { + + if (keys.push(navigator.userAgent), keys.push(new Date().getTime()), self.btoa) { var result = replaceAll(btoa(keys.join("|")), "=", "1"); - return Promise.resolve(result) + return Promise.resolve(result); } - return Promise.resolve((new Date).getTime()) + + return Promise.resolve(new Date().getTime()); } function getDeviceId() { - var key = "_deviceId2", - deviceId = appSettings.get(key); - return deviceId ? Promise.resolve(deviceId) : generateDeviceId().then(function(deviceId) { - return appSettings.set(key, deviceId), deviceId - }) + var key = "_deviceId2"; + var deviceId = appSettings.get(key); + + if (deviceId) { + return Promise.resolve(deviceId); + } + + return generateDeviceId().then(function (deviceId) { + appSettings.set(key, deviceId); + return deviceId; + }); } function getDeviceName() { var deviceName; - return deviceName = browser.tizen ? "Samsung Smart TV" : browser.web0s ? "LG Smart TV" : browser.operaTv ? "Opera TV" : browser.xboxOne ? "Xbox One" : browser.ps4 ? "Sony PS4" : browser.chrome ? "Chrome" : browser.edge ? "Edge" : browser.firefox ? "Firefox" : browser.msie ? "Internet Explorer" : browser.opera ? "Opera" : "Web Browser", browser.ipad ? deviceName += " Ipad" : browser.iphone ? deviceName += " Iphone" : browser.android && (deviceName += " Android"), deviceName + deviceName = browser.tizen ? "Samsung Smart TV" : browser.web0s ? "LG Smart TV" : browser.operaTv ? "Opera TV" : browser.xboxOne ? "Xbox One" : browser.ps4 ? "Sony PS4" : browser.chrome ? "Chrome" : browser.edge ? "Edge" : browser.firefox ? "Firefox" : browser.msie ? "Internet Explorer" : browser.opera ? "Opera" : "Web Browser"; + + if (browser.ipad) { + deviceName += " Ipad"; + } else { + if (browser.iphone) { + deviceName += " Iphone"; + } else { + if (browser.android) { + deviceName += " Android"; + } + } + } + + return deviceName; } function supportsVoiceInput() { - return !browser.tv && (window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.oSpeechRecognition || window.msSpeechRecognition) + if (!browser.tv) { + return window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.oSpeechRecognition || window.msSpeechRecognition; + } + + return false; } function supportsFullscreen() { - if (browser.tv) return !1; + if (browser.tv) { + return false; + } + var element = document.documentElement; - return !!(element.requestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen || element.msRequestFullscreen) || !!document.createElement("video").webkitEnterFullscreen + return !!(element.requestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen || element.msRequestFullscreen) || !!document.createElement("video").webkitEnterFullscreen; } function getSyncProfile() { - return new Promise(function(resolve, reject) { - require(["browserdeviceprofile", "appSettings"], function(profileBuilder, appSettings) { + return new Promise(function (resolve, reject) { + require(["browserdeviceprofile", "appSettings"], function (profileBuilder, appSettings) { var profile = profileBuilder(); - profile.MaxStaticMusicBitrate = appSettings.maxStaticMusicBitrate(), resolve(profile) - }) - }) + profile.MaxStaticMusicBitrate = appSettings.maxStaticMusicBitrate(); + resolve(profile); + }); + }); } function getDefaultLayout() { - return "desktop" + return "desktop"; } function supportsHtmlMediaAutoplay() { - if (browser.edgeUwp || browser.tizen || browser.web0s || browser.orsay || browser.operaTv || browser.ps4 || browser.xboxOne) return !0; - if (browser.mobile) return !1; + if (browser.edgeUwp || browser.tizen || browser.web0s || browser.orsay || browser.operaTv || browser.ps4 || browser.xboxOne) { + return true; + } + + if (browser.mobile) { + return false; + } + var savedResult = appSettings.get(htmlMediaAutoplayAppStorageKey); - return "true" === savedResult || "false" !== savedResult && null + return "true" === savedResult || "false" !== savedResult && null; } function cueSupported() { try { - var video = document.createElement("video"), - style = document.createElement("style"); - style.textContent = "video::cue {background: inherit}", document.body.appendChild(style), document.body.appendChild(video); + var video = document.createElement("video"); + var style = document.createElement("style"); + style.textContent = "video::cue {background: inherit}"; + document.body.appendChild(style); + document.body.appendChild(video); var cue = window.getComputedStyle(video, "::cue").background; - return document.body.removeChild(style), document.body.removeChild(video), !!cue.length + document.body.removeChild(style); + document.body.removeChild(video); + return !!cue.length; } catch (err) { - return console.log("Error detecting cue support:" + err), !1 + console.log("Error detecting cue support:" + err); + return false; } } @@ -123,41 +192,104 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function(appSett } var htmlMediaAutoplayAppStorageKey = "supportshtmlmediaautoplay0"; - var supportedFeatures = function() { + + var supportedFeatures = function () { var features = []; - navigator.share && features.push("sharing"); - browser.edgeUwp || browser.tv || browser.xboxOne || browser.ps4 || features.push("filedownload"); - browser.operaTv || browser.tizen || browser.orsay || browser.web0s - ? features.push("exit") - : (features.push("exitmenu"), features.push("plugins")); - browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.ps4 || (features.push("externallinks"), features.push("externalpremium")); - browser.operaTv || features.push("externallinkdisplay"); - supportsVoiceInput() && features.push("voiceinput"); - !browser.tv && !browser.xboxOne && browser.ps4, supportsHtmlMediaAutoplay() && (features.push("htmlaudioautoplay"), features.push("htmlvideoautoplay")); - browser.edgeUwp && features.push("sync"); - supportsFullscreen() && features.push("fullscreenchange"); - (browser.chrome || browser.edge && !browser.slow) && (browser.noAnimation || browser.edgeUwp || browser.xboxOne || features.push("imageanalysis")); - (browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) && features.push("physicalvolumecontrol"); - browser.tv || browser.xboxOne || browser.ps4 || features.push("remotecontrol"); - browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp || features.push("remotevideo"); + + if (navigator.share) { + features.push("sharing"); + } + + if (!(browser.edgeUwp || browser.tv || browser.xboxOne || browser.ps4)) { + features.push("filedownload"); + } + + if (browser.operaTv || browser.tizen || browser.orsay || browser.web0s) { + features.push("exit"); + } else { + features.push("exitmenu"); + features.push("plugins"); + } + + if (!(browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.ps4)) { + features.push("externallinks"); + features.push("externalpremium"); + } + + if (!browser.operaTv) { + features.push("externallinkdisplay"); + } + + if (supportsVoiceInput()) { + features.push("voiceinput"); + } + + if (!browser.tv && !browser.xboxOne) { + browser.ps4; + } + + if (supportsHtmlMediaAutoplay()) { + features.push("htmlaudioautoplay"); + features.push("htmlvideoautoplay"); + } + + if (browser.edgeUwp) { + features.push("sync"); + } + + if (supportsFullscreen()) { + features.push("fullscreenchange"); + } + + if (browser.chrome || browser.edge && !browser.slow) { + if (!(browser.noAnimation || browser.edgeUwp || browser.xboxOne)) { + features.push("imageanalysis"); + } + } + + if (browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) { + features.push("physicalvolumecontrol"); + } + + if (!(browser.tv || browser.xboxOne || browser.ps4)) { + features.push("remotecontrol"); + } + + if (!(browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp)) { + features.push("remotevideo"); + } + features.push("displaylanguage"); features.push("otherapppromotions"); - features.push("targetblank"); - // allows users to connect to more than one server + features.push("targetblank"); // allows users to connect to more than one server //features.push("multiserver"); - browser.orsay || browser.tizen || browser.msie || !(browser.firefox || browser.ps4 || browser.edge || cueSupported()) || features.push("subtitleappearancesettings"); - browser.orsay || browser.tizen || features.push("subtitleburnsettings"); - browser.tv || browser.ps4 || browser.xboxOne || features.push("fileinput"); - browser.chrome && features.push("chromecast"); + + if (!(browser.orsay || browser.tizen || browser.msie || !(browser.firefox || browser.ps4 || browser.edge || cueSupported()))) { + features.push("subtitleappearancesettings"); + } + + if (!(browser.orsay || browser.tizen)) { + features.push("subtitleburnsettings"); + } + + if (!(browser.tv || browser.ps4 || browser.xboxOne)) { + features.push("fileinput"); + } + + if (browser.chrome) { + features.push("chromecast"); + } + return features; }(); + if (supportedFeatures.indexOf("htmlvideoautoplay") === -1 && supportsHtmlMediaAutoplay() !== false) { - require(["autoPlayDetect"], function(autoPlayDetect) { - autoPlayDetect.supportsHtmlMediaAutoplay().then(function() { + require(["autoPlayDetect"], function (autoPlayDetect) { + autoPlayDetect.supportsHtmlMediaAutoplay().then(function () { appSettings.set(htmlMediaAutoplayAppStorageKey, "true"); supportedFeatures.push("htmlvideoautoplay"); supportedFeatures.push("htmlaudioautoplay"); - }, function() { + }, function () { appSettings.set(htmlMediaAutoplayAppStorageKey, "false"); }); }); @@ -169,73 +301,155 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function(appSett var visibilityState; var appVersion = window.dashboardVersion || "3.0"; var appHost = { - getWindowState: function() { - return document.windowState || "Normal" + getWindowState: function () { + return document.windowState || "Normal"; }, - setWindowState: function(state) { - alert("setWindowState is not supported and should not be called") + setWindowState: function (state) { + alert("setWindowState is not supported and should not be called"); }, - exit: function() { - if (browser.tizen) try { - tizen.application.getCurrentApplication().exit() - } catch (err) { - console.log("error closing application: " + err) - } else window.close() + exit: function () { + if (browser.tizen) { + try { + tizen.application.getCurrentApplication().exit(); + } catch (err) { + console.log("error closing application: " + err); + } + } else { + window.close(); + } }, - supports: function(command) { - return -1 !== supportedFeatures.indexOf(command.toLowerCase()) + supports: function (command) { + return -1 !== supportedFeatures.indexOf(command.toLowerCase()); }, preferVisualCards: browser.android || browser.chrome, moreIcon: browser.android ? "dots-vert" : "dots-horiz", getSyncProfile: getSyncProfile, getDefaultLayout: getDefaultLayout, getDeviceProfile: getDeviceProfile, - init: function() { - return deviceName = getDeviceName(), getDeviceId().then(function(resolvedDeviceId) { - deviceId = resolvedDeviceId - }) + init: function () { + deviceName = getDeviceName(); + return getDeviceId().then(function (resolvedDeviceId) { + deviceId = resolvedDeviceId; + }); }, - deviceName: function() { - return deviceName + deviceName: function () { + return deviceName; }, - deviceId: function() { - return deviceId + deviceId: function () { + return deviceId; }, - appName: function() { - return "Jellyfin Web" + appName: function () { + return "Jellyfin Web"; }, - appVersion: function() { - return appVersion + appVersion: function () { + return appVersion; }, - getPushTokenInfo: function() { - return {} + getPushTokenInfo: function () { + return {}; }, - setThemeColor: function(color) { + setThemeColor: function (color) { var metaThemeColor = document.querySelector("meta[name=theme-color]"); - metaThemeColor && metaThemeColor.setAttribute("content", color) - }, - setUserScalable: function(scalable) { - if (!browser.tv) { - var att = scalable ? "width=device-width, initial-scale=1, minimum-scale=1, user-scalable=yes" : "width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"; - document.querySelector("meta[name=viewport]").setAttribute("content", att) + + if (metaThemeColor) { + metaThemeColor.setAttribute("content", color); } }, - deviceIconUrl: function() { - return browser.edgeUwp, browser.edgeUwp ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/windowsrt.png" : browser.opera || browser.operaTv ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/opera.png" : browser.orsay || browser.tizen ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/samsungtv.png" : browser.web0s ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/lgtv.png" : browser.ps4 ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/ps4.png" : browser.chromecast ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chromecast.png" : browser.chrome ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chrome.png" : browser.edge ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/edge.png" : browser.firefox ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/firefox.png" : browser.msie ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/internetexplorer.png" : browser.safari ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/safari.png" : "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/html5.png" + setUserScalable: function (scalable) { + if (!browser.tv) { + var att = scalable ? "width=device-width, initial-scale=1, minimum-scale=1, user-scalable=yes" : "width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"; + document.querySelector("meta[name=viewport]").setAttribute("content", att); + } + }, + deviceIconUrl: function () { + browser.edgeUwp; + + if (browser.edgeUwp) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/windowsrt.png"; + } + + if (browser.opera || browser.operaTv) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/opera.png"; + } + + if (browser.orsay || browser.tizen) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/samsungtv.png"; + } + + if (browser.web0s) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/lgtv.png"; + } + + if (browser.ps4) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/ps4.png"; + } + + if (browser.chromecast) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chromecast.png"; + } + + if (browser.chrome) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chrome.png"; + } + + if (browser.edge) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/edge.png"; + } + + if (browser.firefox) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/firefox.png"; + } + + if (browser.msie) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/internetexplorer.png"; + } + + if (browser.safari) { + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/safari.png"; + } + + return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/html5.png"; } }; - var doc = self.document; - doc && (void 0 !== doc.visibilityState ? (visibilityChange = "visibilitychange", visibilityState = "hidden") : void 0 !== doc.mozHidden ? (visibilityChange = "mozvisibilitychange", visibilityState = "mozVisibilityState") : void 0 !== doc.msHidden ? (visibilityChange = "msvisibilitychange", visibilityState = "msVisibilityState") : void 0 !== doc.webkitHidden && (visibilityChange = "webkitvisibilitychange", visibilityState = "webkitVisibilityState")); - var isHidden = false; + if (doc) { - doc.addEventListener(visibilityChange, function() { - document[visibilityState] ? onAppHidden() : onAppVisible() + if (void 0 !== doc.visibilityState) { + visibilityChange = "visibilitychange"; + visibilityState = "hidden"; + } else { + if (void 0 !== doc.mozHidden) { + visibilityChange = "mozvisibilitychange"; + visibilityState = "mozVisibilityState"; + } else { + if (void 0 !== doc.msHidden) { + visibilityChange = "msvisibilitychange"; + visibilityState = "msVisibilityState"; + } else { + if (void 0 !== doc.webkitHidden) { + visibilityChange = "webkitvisibilitychange"; + visibilityState = "webkitVisibilityState"; + } + } + } + } + } + + var isHidden = false; + + if (doc) { + doc.addEventListener(visibilityChange, function () { + if (document[visibilityState]) { + onAppHidden(); + } else { + onAppVisible(); + } }); } + if (self.addEventListener) { self.addEventListener("focus", onAppVisible); self.addEventListener("blur", onAppHidden); } + return appHost; }); From 8315f4a2d40398c01e9428e3247e780d5c079577 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sun, 17 Mar 2019 22:02:24 +0000 Subject: [PATCH 41/69] invert some conditions for readability in apphost --- src/components/apphost.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/apphost.js b/src/components/apphost.js index 21d474a3e1..d1d865a63a 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -44,7 +44,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet var profile = profileBuilder(getBaseProfileOptions(item)); if (item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin")) { - if (!(browser.orsay || browser.tizen)) { + if (!browser.orsay && !browser.tizen) { profile.SubtitleProfiles.push({ Format: "ass", Method: "External" @@ -129,7 +129,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet } var element = document.documentElement; - return !!(element.requestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen || element.msRequestFullscreen) || !!document.createElement("video").webkitEnterFullscreen; + return (element.requestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen || element.msRequestFullscreen) || document.createElement("video").webkitEnterFullscreen; } function getSyncProfile() { @@ -200,7 +200,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet features.push("sharing"); } - if (!(browser.edgeUwp || browser.tv || browser.xboxOne || browser.ps4)) { + if (!browser.edgeUwp && !browser.tv && !browser.xboxOne && !browser.ps4) { features.push("filedownload"); } @@ -211,7 +211,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet features.push("plugins"); } - if (!(browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.ps4)) { + if (!browser.operaTv && !browser.tizen && !browser.orsay && !browser.web0s && !browser.ps4) { features.push("externallinks"); features.push("externalpremium"); } @@ -242,7 +242,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet } if (browser.chrome || browser.edge && !browser.slow) { - if (!(browser.noAnimation || browser.edgeUwp || browser.xboxOne)) { + if (!browser.noAnimation && !browser.edgeUwp && !browser.xboxOne) { features.push("imageanalysis"); } } @@ -251,11 +251,11 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet features.push("physicalvolumecontrol"); } - if (!(browser.tv || browser.xboxOne || browser.ps4)) { + if (!browser.tv && !browser.xboxOne && !browser.ps4) { features.push("remotecontrol"); } - if (!(browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp)) { + if (!browser.operaTv && !browser.tizen && !browser.orsay && !browser.web0s && !browser.edgeUwp) { features.push("remotevideo"); } @@ -264,15 +264,15 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet features.push("targetblank"); // allows users to connect to more than one server //features.push("multiserver"); - if (!(browser.orsay || browser.tizen || browser.msie || !(browser.firefox || browser.ps4 || browser.edge || cueSupported()))) { + if (!browser.orsay && !browser.tizen && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || cueSupported())) { features.push("subtitleappearancesettings"); } - if (!(browser.orsay || browser.tizen)) { + if (!browser.orsay && !browser.tizen) { features.push("subtitleburnsettings"); } - if (!(browser.tv || browser.ps4 || browser.xboxOne)) { + if (!browser.tv && !browser.ps4 && !browser.xboxOne) { features.push("fileinput"); } From c4ada25fe72f6b169c8eff3fd881bd7f8ee870d9 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sun, 17 Mar 2019 23:23:45 +0000 Subject: [PATCH 42/69] nativeshell API added to apphost --- src/components/apphost.js | 71 +++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/src/components/apphost.js b/src/components/apphost.js index d1d865a63a..369dff0f6f 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -39,20 +39,26 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet return getDeviceProfileForWindowsUwp(item); } - return new Promise(function (resolve, reject) { + return new Promise(function (resolve) { require(["browserdeviceprofile"], function (profileBuilder) { - var profile = profileBuilder(getBaseProfileOptions(item)); + var profile; - if (item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin")) { - if (!browser.orsay && !browser.tizen) { - profile.SubtitleProfiles.push({ - Format: "ass", - Method: "External" - }); - profile.SubtitleProfiles.push({ - Format: "ssa", - Method: "External" - }); + if (window.NativeShell) { + profile = window.NativeShell.AppHost.getDeviceProfile(profileBuilder); + } else { + profile = profileBuilder(getBaseProfileOptions(item)); + + if (item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin")) { + if (!browser.orsay && !browser.tizen) { + profile.SubtitleProfiles.push({ + Format: "ass", + Method: "External" + }); + profile.SubtitleProfiles.push({ + Format: "ssa", + Method: "External" + }); + } } } @@ -133,10 +139,17 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet } function getSyncProfile() { - return new Promise(function (resolve, reject) { + return new Promise(function (resolve) { require(["browserdeviceprofile", "appSettings"], function (profileBuilder, appSettings) { - var profile = profileBuilder(); - profile.MaxStaticMusicBitrate = appSettings.maxStaticMusicBitrate(); + var profile; + + if (window.NativeShell) { + profile = window.NativeShell.AppHost.getSyncProfile(profileBuilder, appSettings); + } else { + profile = profileBuilder(); + profile.MaxStaticMusicBitrate = appSettings.maxStaticMusicBitrate(); + } + resolve(profile); }); }); @@ -308,7 +321,9 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet alert("setWindowState is not supported and should not be called"); }, exit: function () { - if (browser.tizen) { + if (window.NativeShell) { + window.NativeShell.AppHost.exit(); + } else if (browser.tizen) { try { tizen.application.getCurrentApplication().exit(); } catch (err) { @@ -319,30 +334,44 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet } }, supports: function (command) { + if (window.NativeShell) { + return window.NativeShell.AppHost.supports(command); + } + return -1 !== supportedFeatures.indexOf(command.toLowerCase()); }, preferVisualCards: browser.android || browser.chrome, moreIcon: browser.android ? "dots-vert" : "dots-horiz", getSyncProfile: getSyncProfile, - getDefaultLayout: getDefaultLayout, + getDefaultLayout: function () { + if (window.NativeShell) { + return window.NativeShell.AppHost.getDefaultLayout(); + } + + return getDefaultLayout() + }, getDeviceProfile: getDeviceProfile, init: function () { + if (window.NativeShell) { + return window.NativeShell.AppHost.init(); + } + deviceName = getDeviceName(); return getDeviceId().then(function (resolvedDeviceId) { deviceId = resolvedDeviceId; }); }, deviceName: function () { - return deviceName; + return window.NativeShell ? window.NativeShell.AppHost.deviceName() : deviceName; }, deviceId: function () { - return deviceId; + return window.NativeShell ? window.NativeShell.AppHost.deviceId() : deviceId; }, appName: function () { - return "Jellyfin Web"; + return window.NativeShell ? window.NativeShell.AppHost.appName() : "Jellyfin Web"; }, appVersion: function () { - return appVersion; + return window.NativeShell ? window.NativeShell.AppHost.appVersion() : appVersion; }, getPushTokenInfo: function () { return {}; From 19cb905d5ace5cadcd6adaed86db5ab48cc87461 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Sun, 17 Mar 2019 23:23:59 +0000 Subject: [PATCH 43/69] removed require for cordova apphost --- src/scripts/site.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 5d1f70df67..7f8e8aa720 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1373,13 +1373,9 @@ var AppInfo = {}; return viewManager; }); - if ("cordova" === self.appMode || "android" === self.appMode) { - paths.apphost = "cordova/apphost"; - } else { - paths.apphost = "components/apphost"; - } - + paths.apphost = "components/apphost"; paths.appStorage = getAppStorage(apiClientBowerPath); + requirejs.config({ waitSeconds: 0, map: { From e8e098f9b15eb20e0b14e24fb2349e1ffe5e5374 Mon Sep 17 00:00:00 2001 From: vitorsemeano Date: Mon, 18 Mar 2019 23:08:11 +0000 Subject: [PATCH 44/69] removed nativelshell sync invokation --- src/bower_components/emby-apiclient/sync/localsync.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/bower_components/emby-apiclient/sync/localsync.js b/src/bower_components/emby-apiclient/sync/localsync.js index f2f5f4e9e3..cea244de08 100644 --- a/src/bower_components/emby-apiclient/sync/localsync.js +++ b/src/bower_components/emby-apiclient/sync/localsync.js @@ -3,10 +3,6 @@ define(["connectionManager"], function(connectionManager) { var isSyncing; return { sync: function(options) { - if (window.NativeShell) { - return window.NativeShell.sync(options); - } - return console.log("localSync.sync starting..."), isSyncing ? Promise.resolve() : (isSyncing = !0, new Promise(function(resolve, reject) { require(["multiserversync", "appSettings"], function(MultiServerSync, appSettings) { options = options || {}, options.cameraUploadServers = appSettings.cameraUploadServers(), (new MultiServerSync).sync(connectionManager, options).then(function() { From ae7b8d59f2991de39e05db64737fe90c197b8a61 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 18 Mar 2019 22:58:48 -0700 Subject: [PATCH 45/69] remove web path modify option --- src/dashboard/dashboardgeneral.js | 18 +----------------- src/dashboardgeneral.html | 10 ---------- src/strings/en-us.json | 2 -- 3 files changed, 1 insertion(+), 29 deletions(-) diff --git a/src/dashboard/dashboardgeneral.js b/src/dashboard/dashboardgeneral.js index 7ecd7cb1c9..ed3b000b12 100644 --- a/src/dashboard/dashboardgeneral.js +++ b/src/dashboard/dashboardgeneral.js @@ -97,7 +97,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb $("#txtMetadataPath", view).val(path); } if (networkPath) { - $("#txtMetadataNetworkPath", view).val(networkPath)); + $("#txtMetadataNetworkPath", view).val(networkPath); } picker.close(); }, @@ -109,22 +109,6 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb }) }); - $("#btnSelectWebPath", view).on("click.selectDirectory", function() { - require(["directorybrowser"], function(directoryBrowser) { - var picker = new directoryBrowser; - picker.show({ - callback: function(path) { - if (path) { - view.querySelector("#txtWebPath").value = path; - } - picker.close(); - }, - header: Globalize.translate("LabelWebPath"), - instruction: Globalize.translate("LabelWebPathHelp") - }) - }) - }); - $(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit); view.addEventListener("viewshow", function() { var promiseConfig = ApiClient.getServerConfiguration(); diff --git a/src/dashboardgeneral.html b/src/dashboardgeneral.html index 8cc1177167..f95246708f 100644 --- a/src/dashboardgeneral.html +++ b/src/dashboardgeneral.html @@ -55,16 +55,6 @@

${LabelMetadataPathHelp}
- -
-
-
- -
- -
-
${LabelWebPathHelp}
-
diff --git a/src/strings/en-us.json b/src/strings/en-us.json index dca0c0797e..f29c5ac6ff 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1122,8 +1122,6 @@ "LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataPath": "Metadata path:", "LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata.", - "LabelWebPath": "Web path:", - "LabelWebPathHelp": "The path where the web client source is located. Do not change this unless you plan on moving the web files, or the web interface will break.", "LabelMetadataReaders": "Metadata readers:", "LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataSavers": "Metadata savers:", From 886dec11742a3fc692d3818e28919cf15cb94100 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 18 Mar 2019 22:22:48 -0700 Subject: [PATCH 46/69] remove all sync and convert buttons --- src/components/categorysyncbuttons.js | 31 - src/components/itemcontextmenu.js | 96 +-- src/components/multiselect/multiselect.js | 40 - src/components/serviceworker/notifications.js | 8 - src/components/serviceworker/sync.js | 6 - src/components/sync/emby-downloadbutton.js | 188 ----- src/components/sync/sync.js | 736 ------------------ src/itemdetails.html | 12 - src/livetv.html | 4 - src/movies.html | 3 - src/scripts/itemdetailpage.js | 64 +- src/scripts/livetvrecordings.js | 3 +- src/scripts/moviesrecommended.js | 4 +- src/scripts/site.js | 2 - src/scripts/tvlatest.js | 3 +- src/scripts/tvrecommended.js | 4 +- src/serviceworker.js | 2 +- src/tv.html | 6 - 18 files changed, 62 insertions(+), 1150 deletions(-) delete mode 100644 src/components/categorysyncbuttons.js delete mode 100644 src/components/serviceworker/sync.js delete mode 100644 src/components/sync/emby-downloadbutton.js delete mode 100644 src/components/sync/sync.js diff --git a/src/components/categorysyncbuttons.js b/src/components/categorysyncbuttons.js deleted file mode 100644 index 5a6075b196..0000000000 --- a/src/components/categorysyncbuttons.js +++ /dev/null @@ -1,31 +0,0 @@ -define(["itemHelper", "libraryMenu", "apphost"], function(itemHelper, libraryMenu, appHost) { - "use strict"; - - function initSyncButtons(view) { - var apiClient = window.ApiClient; - apiClient && apiClient.getCurrentUserId() && apiClient.getCurrentUser().then(function(user) { - for (var item = { - SupportsSync: !0 - }, categorySyncButtons = view.querySelectorAll(".categorySyncButton"), i = 0, length = categorySyncButtons.length; i < length; i++) categorySyncButtons[i].addEventListener("click", onCategorySyncButtonClick), itemHelper.canSync(user, item) ? categorySyncButtons[i].classList.remove("hide") : categorySyncButtons[i].classList.add("hide") - }) - } - - function onCategorySyncButtonClick(e) { - var button = this, - category = button.getAttribute("data-category"), - parentId = libraryMenu.getTopParentId(); - require(["syncDialog"], function(syncDialog) { - syncDialog.showMenu({ - ParentId: parentId, - Category: category, - serverId: ApiClient.serverId(), - mode: appHost.supports("sync") ? "download" : "sync" - }) - }) - } - return { - init: function(view) { - initSyncButtons(view) - } - } -}); \ No newline at end of file diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index 270345d3b7..6bc81f62b2 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -118,13 +118,6 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', }); } - 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') { @@ -147,15 +140,6 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', }); } - 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) { @@ -328,17 +312,13 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', { require(['fileDownloader'], function (fileDownloader) { var downloadHref = apiClient.getItemDownloadUrl(itemId); - - fileDownloader.download([ - { - url: downloadHref, - itemId: itemId, - serverId: serverId - }]); - + fileDownloader.download([{ + url: downloadHref, + itemId: itemId, + serverId: serverId + }]); getResolveFunction(getResolveFunction(resolve, id), id)(); }); - break; } case 'editsubtitles': @@ -433,102 +413,48 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', 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; - } + appRouter.showItem(item.AlbumId, item.ServerId); + getResolveFunction(resolve, id)(); + break; case 'artist': - { - appRouter.showItem(item.ArtistItems[0].Id, item.ServerId); - getResolveFunction(resolve, id)(); + appRouter.showItem(item.ArtistItems[0].Id, item.ServerId); + getResolveFunction(resolve, id)(); break; - } case 'playallfromhere': - { - getResolveFunction(resolve, id)(); + 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); diff --git a/src/components/multiselect/multiselect.js b/src/components/multiselect/multiselect.js index 32e3ab9f82..6eace46c7c 100644 --- a/src/components/multiselect/multiselect.js +++ b/src/components/multiselect/multiselect.js @@ -218,13 +218,6 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo }); } - if (user.Policy.EnableContentDownloading && appHost.supports('sync')) { - menuItems.push({ - name: globalize.translate('Download'), - id: 'synclocal' - }); - } - menuItems.push({ name: globalize.translate('GroupVersions'), id: 'groupvideos', @@ -254,20 +247,16 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo } require(['actionsheet'], function (actionsheet) { - actionsheet.show({ items: menuItems, positionTo: e.target, callback: function (id) { - var items = selectedItems.slice(0); var serverId = apiClient.serverInfo().Id; switch (id) { - case 'addtocollection': require(['collectionEditor'], function (collectionEditor) { - new collectionEditor().show({ items: items, serverId: serverId @@ -318,35 +307,6 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo hideSelections(); dispatchNeedsRefresh(); break; - case 'sync': - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: items.map(function (i) { - return { - Id: i - }; - }), - serverId: serverId - }); - }); - hideSelections(); - dispatchNeedsRefresh(); - break; - case 'synclocal': - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: items.map(function (i) { - return { - Id: i - }; - }), - isLocalSync: true, - serverId: serverId - }); - }); - hideSelections(); - dispatchNeedsRefresh(); - break; default: break; } diff --git a/src/components/serviceworker/notifications.js b/src/components/serviceworker/notifications.js index c566715bb7..9c5be840bf 100644 --- a/src/components/serviceworker/notifications.js +++ b/src/components/serviceworker/notifications.js @@ -4,20 +4,14 @@ var connectionManager; function getApiClient(serverId) { - if (connectionManager) { return Promise.resolve(connectionManager.getApiClient(serverId)); } - - //importScripts('serviceworker-cache-polyfill.js'); - return Promise.reject(); } function executeAction(action, data, serverId) { - return getApiClient(serverId).then(function (apiClient) { - switch (action) { case 'cancel-install': var id = data.id; @@ -32,7 +26,6 @@ } self.addEventListener('notificationclick', function (event) { - var notification = event.notification; notification.close(); @@ -47,6 +40,5 @@ } event.waitUntil(executeAction(action, data, serverId)); - }, false); })(); \ No newline at end of file diff --git a/src/components/serviceworker/sync.js b/src/components/serviceworker/sync.js deleted file mode 100644 index 3dcff8f363..0000000000 --- a/src/components/serviceworker/sync.js +++ /dev/null @@ -1,6 +0,0 @@ -self.addEventListener('sync', function (event) { - 'use strict'; - - if (event.tag === 'emby-sync') { - } -}); \ No newline at end of file diff --git a/src/components/sync/emby-downloadbutton.js b/src/components/sync/emby-downloadbutton.js deleted file mode 100644 index 74a9f6b3bb..0000000000 --- a/src/components/sync/emby-downloadbutton.js +++ /dev/null @@ -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' - }); -}); \ No newline at end of file diff --git a/src/components/sync/sync.js b/src/components/sync/sync.js deleted file mode 100644 index e7c51e3dc5..0000000000 --- a/src/components/sync/sync.js +++ /dev/null @@ -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 += '
'; - html += ''; - html += '
'; - } else { - html += '
'; - html += ''; - if (!targets.length) { - html += '
' + globalize.translate('LabelSyncNoTargetsHelp') + '
'; - } - - if (appHost.supports('externallinks')) { - html += ''; - } - html += '
'; - } - - html += '
'; - html += ''; - html += '
'; - html += '
'; - - html += '
'; - html += ''; - html += '
'; - html += '
'; - - html += '
'; - html += ''; - html += '
'; - - if (dialogOptions.Options.indexOf('UnwatchedOnly') !== -1) { - html += '
'; - html += ''; - - if (mode === 'convert') { - html += '
' + globalize.translate('ConvertUnwatchedVideosOnlyHelp') + '
'; - } else { - html += '
' + globalize.translate('SyncUnwatchedVideosOnlyHelp') + '
'; - } - - html += '
'; - } - - if (dialogOptions.Options.indexOf('SyncNewContent') !== -1) { - html += '
'; - html += ''; - - if (mode === 'convert') { - html += '
' + globalize.translate('AutomaticallyConvertNewContentHelp') + '
'; - } else { - html += '
' + globalize.translate('AutomaticallySyncNewContentHelp') + '
'; - } - html += '
'; - } - - if (dialogOptions.Options.indexOf('ItemLimit') !== -1) { - html += '
'; - html += ''; - - if (mode === 'convert') { - html += '
' + globalize.translate('ConvertItemLimitHelp') + '
'; - } else { - html += '
' + globalize.translate('DownloadItemLimitHelp') + '
'; - } - - html += '
'; - } - - //html += '
'; - //html += ''; - - 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 += '
'; - html += ''; - html += '

'; - - var syncButtonLabel = options.mode === 'download' ? - globalize.translate('Download') : - (options.mode === 'convert' ? globalize.translate('Convert') : globalize.translate('Sync')); - - html += syncButtonLabel; - html += '

'; - - if (appHost.supports('externallinks')) { - html += 'info' + globalize.translate('Help') + ''; - } - - html += '
'; - - html += '
'; - html += '
'; - - html += '
'; - - html += '
'; - - html += '
'; - - html += ''; - html += '
'; - - html += '
'; - - html += '
'; - html += '
'; - - 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 ''; - - }).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 ''; - - }).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 - }; -}); \ No newline at end of file diff --git a/src/itemdetails.html b/src/itemdetails.html index cf9433583b..30d6171f43 100644 --- a/src/itemdetails.html +++ b/src/itemdetails.html @@ -104,18 +104,6 @@ ${ButtonShuffle} - - - - - -
diff --git a/src/movies.html b/src/movies.html index 4830d6408a..c211d9686a 100644 --- a/src/movies.html +++ b/src/movies.html @@ -30,9 +30,6 @@

${HeaderLatestMovies}

-
diff --git a/src/scripts/itemdetailpage.js b/src/scripts/itemdetailpage.js index d8d952cba0..ba1bac9e24 100644 --- a/src/scripts/itemdetailpage.js +++ b/src/scripts/itemdetailpage.js @@ -1,4 +1,4 @@ -define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "apphost", "imageLoader", "libraryMenu", "globalize", "browser", "events", "scrollHelper", "playbackManager", "libraryBrowser", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-linkbutton", "emby-playstatebutton", "emby-ratingbutton", "emby-downloadbutton", "emby-scroller", "emby-select"], function(loading, appRouter, layoutManager, connectionManager, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, appHost, imageLoader, libraryMenu, globalize, browser, events, scrollHelper, playbackManager, libraryBrowser) { +define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "apphost", "imageLoader", "libraryMenu", "globalize", "browser", "events", "scrollHelper", "playbackManager", "libraryBrowser", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-linkbutton", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function(loading, appRouter, layoutManager, connectionManager, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, appHost, imageLoader, libraryMenu, globalize, browser, events, scrollHelper, playbackManager, libraryBrowser) { "use strict"; function getPromise(apiClient, params) { @@ -33,12 +33,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild user: user, share: !0 }; - return appHost.supports("sync") && (options.syncLocal = !1), options - } - - function renderSyncLocalContainer(page, params, user, item) { - if (appHost.supports("sync")) - for (var canSync = itemHelper.canSync(user, item), buttons = page.querySelectorAll(".btnSyncDownload"), i = 0, length = buttons.length; i < length; i++) buttons[i].setItem(item), canSync ? buttons[i].classList.remove("hide") : buttons[i].classList.add("hide") + return options; } function getProgramScheduleHtml(items, options) { @@ -286,7 +281,11 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild var apiClient = connectionManager.getApiClient(item.ServerId); renderSeriesTimerEditor(page, item, apiClient, user), renderTimerEditor(page, item, apiClient, user), renderImage(page, item, apiClient, user), renderLogo(page, item, apiClient), setTitle(item, apiClient), setInitialCollapsibleState(page, item, apiClient, context, user), renderDetails(page, item, apiClient, context), renderTrackSelections(page, instance, item), dom.getWindowSize().innerWidth >= 1e3 ? backdrop.setBackdrops([item]) : backdrop.clear(), renderDetailPageBackdrop(page, item, apiClient); var canPlay = reloadPlayButtons(page, item); - (item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers") ? hideAll(page, "btnPlayTrailer", !0) : hideAll(page, "btnPlayTrailer"), setTrailerButtonVisibility(page, item), item.CanDelete && !item.IsFolder ? hideAll(page, "btnDeleteItem", !0) : hideAll(page, "btnDeleteItem"), renderSyncLocalContainer(page, params, user, item), "Program" !== item.Type || canPlay ? hideAll(page, "mainDetailButtons", !0) : hideAll(page, "mainDetailButtons"), showRecordingFields(instance, page, item, user); + (item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers") ? hideAll(page, "btnPlayTrailer", !0) : hideAll(page, "btnPlayTrailer"); + setTrailerButtonVisibility(page, item); + item.CanDelete && !item.IsFolder ? hideAll(page, "btnDeleteItem", !0) : hideAll(page, "btnDeleteItem"); + "Program" !== item.Type || canPlay ? hideAll(page, "mainDetailButtons", !0) : hideAll(page, "mainDetailButtons"); + showRecordingFields(instance, page, item, user); var groupedVersions = (item.MediaSources || []).filter(function(g) { return "Grouping" == g.Type }); @@ -1166,30 +1165,55 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild })) } } - var currentItem, self = this, - apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient; + + var currentItem; + var self = this; + var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient; view.querySelectorAll(".btnPlay"); - bindAll(view, ".btnPlay", "click", onPlayClick), bindAll(view, ".btnResume", "click", onPlayClick), bindAll(view, ".btnInstantMix", "click", onInstantMixClick), bindAll(view, ".btnShuffle", "click", onShuffleClick), bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick), bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick), bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick), bindAll(view, ".btnDeleteItem", "click", onDeleteClick), bindAll(view, ".btnSyncDownload", "download", onDownloadChange), bindAll(view, ".btnSyncDownload", "download-cancel", onDownloadChange), view.querySelector(".btnMoreCommands i").innerHTML = "", view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit), view.querySelector(".btnSplitVersions").addEventListener("click", function() { + bindAll(view, ".btnPlay", "click", onPlayClick); + bindAll(view, ".btnResume", "click", onPlayClick); + bindAll(view, ".btnInstantMix", "click", onInstantMixClick); + bindAll(view, ".btnShuffle", "click", onShuffleClick); + bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick); + bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick); + bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick); + bindAll(view, ".btnDeleteItem", "click", onDeleteClick); + view.querySelector(".btnMoreCommands i").innerHTML = ""; + view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit); + view.querySelector(".btnSplitVersions").addEventListener("click", function() { splitVersions(self, view, apiClient, params) - }), bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick), view.querySelector(".selectSource").addEventListener("change", function() { - renderVideoSelections(view, self._currentPlaybackMediaSources), renderAudioSelections(view, self._currentPlaybackMediaSources), renderSubtitleSelections(view, self._currentPlaybackMediaSources) - }), view.addEventListener("click", function(e) { + }); + bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick); + view.querySelector(".selectSource").addEventListener("change", function() { + renderVideoSelections(view, self._currentPlaybackMediaSources); + renderAudioSelections(view, self._currentPlaybackMediaSources); + renderSubtitleSelections(view, self._currentPlaybackMediaSources); + }); + view.addEventListener("click", function(e) { dom.parentWithClass(e.target, "moreScenes") ? apiClient.getCurrentUser().then(function(user) { renderScenes(view, currentItem) }) : dom.parentWithClass(e.target, "morePeople") ? renderCast(view, currentItem, params.context) : dom.parentWithClass(e.target, "moreSpecials") && apiClient.getCurrentUser().then(function(user) { renderSpecials(view, currentItem, user) }) - }), view.querySelector(".detailImageContainer").addEventListener("click", function(e) { + }); + view.querySelector(".detailImageContainer").addEventListener("click", function(e) { dom.parentWithClass(e.target, "itemDetailGalleryLink") && editImages().then(function() { reload(self, view, params) }) - }), view.addEventListener("viewshow", function(e) { + }); + view.addEventListener("viewshow", function(e) { var page = this; libraryMenu.setTransparentMenu(!0), e.detail.isRestored ? currentItem && (setTitle(currentItem, connectionManager.getApiClient(currentItem.ServerId)), renderTrackSelections(page, self, currentItem, !0)) : reload(self, page, params), events.on(apiClient, "message", onWebSocketMessage), events.on(playbackManager, "playerchange", onPlayerChange) - }), view.addEventListener("viewbeforehide", function() { - events.off(apiClient, "message", onWebSocketMessage), events.off(playbackManager, "playerchange", onPlayerChange), libraryMenu.setTransparentMenu(!1) - }), view.addEventListener("viewdestroy", function() { - currentItem = null, self._currentPlaybackMediaSources = null, self.currentRecordingFields = null + }); + view.addEventListener("viewbeforehide", function() { + events.off(apiClient, "message", onWebSocketMessage); + events.off(playbackManager, "playerchange", onPlayerChange); + libraryMenu.setTransparentMenu(!1); + }); + view.addEventListener("viewdestroy", function() { + currentItem = null; + self._currentPlaybackMediaSources = null; + self.currentRecordingFields = null; }) } }); diff --git a/src/scripts/livetvrecordings.js b/src/scripts/livetvrecordings.js index 6c0ee4e515..c56956314d 100644 --- a/src/scripts/livetvrecordings.js +++ b/src/scripts/livetvrecordings.js @@ -1,4 +1,4 @@ -define(["layoutManager", "loading", "components/categorysyncbuttons", "cardBuilder", "apphost", "imageLoader", "scripts/livetvcomponents", "listViewStyle", "emby-itemscontainer"], function(layoutManager, loading, categorysyncbuttons, cardBuilder, appHost, imageLoader) { +define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "scripts/livetvcomponents", "listViewStyle", "emby-itemscontainer"], function(layoutManager, loading, cardBuilder, appHost, imageLoader) { "use strict"; function renderRecordings(elem, recordings, cardOptions, scrollX) { @@ -54,7 +54,6 @@ define(["layoutManager", "loading", "components/categorysyncbuttons", "cardBuild } var foldersPromise, latestPromise, self = this, lastFullRender = 0; - categorysyncbuttons.init(tabContent); for (var moreButtons = tabContent.querySelectorAll(".more"), i = 0, length = moreButtons.length; i < length; i++) moreButtons[i].addEventListener("click", onMoreClick); self.preRender = function() { enableFullRender() && (latestPromise = ApiClient.getLiveTvRecordings({ diff --git a/src/scripts/moviesrecommended.js b/src/scripts/moviesrecommended.js index 31c9bfba47..9f0379861f 100644 --- a/src/scripts/moviesrecommended.js +++ b/src/scripts/moviesrecommended.js @@ -1,4 +1,4 @@ -define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "components/categorysyncbuttons", "cardBuilder", "dom", "imageLoader", "playbackManager", "emby-itemscontainer", "emby-tabs", "emby-button"], function(events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, categorysyncbuttons, cardBuilder, dom, imageLoader, playbackManager) { +define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "emby-itemscontainer", "emby-tabs", "emby-button"], function(events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager) { "use strict"; function enableScrollX() { @@ -250,7 +250,7 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu" suggestionsTabIndex = 1; self.initTab = function() { var tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']"); - categorysyncbuttons.init(tabContent), initSuggestedTab(view, tabContent) + initSuggestedTab(view, tabContent); }, self.renderTab = function() { var tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']"); loadSuggestionsTab(view, params, tabContent) diff --git a/src/scripts/site.js b/src/scripts/site.js index c9b1e7fee8..7eef9f3809 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1431,7 +1431,6 @@ var AppInfo = {}; define("programStyles", ["css!" + componentsPath + "/guide/programs"], returnFirstDependency); define("guide-settings-dialog", [componentsPath + "/guide/guide-settings"], returnFirstDependency); define("loadingDialog", [componentsPath + "/loadingdialog/loadingdialog"], returnFirstDependency); - define("syncDialog", [componentsPath + "/sync/sync"], returnFirstDependency); define("viewManager", [componentsPath + "/viewmanager/viewmanager"], function (viewManager) { window.ViewManager = viewManager; viewManager.dispatchPageEvents(true); @@ -1470,7 +1469,6 @@ var AppInfo = {}; define("userdataButtons", [componentsPath + "/userdatabuttons/userdatabuttons"], returnFirstDependency); define("emby-playstatebutton", [componentsPath + "/userdatabuttons/emby-playstatebutton"], returnFirstDependency); define("emby-ratingbutton", [componentsPath + "/userdatabuttons/emby-ratingbutton"], returnFirstDependency); - define("emby-downloadbutton", [componentsPath + "/sync/emby-downloadbutton"], returnFirstDependency); define("listView", [componentsPath + "/listview/listview"], returnFirstDependency); define("listViewStyle", ["css!" + componentsPath + "/listview/listview"], returnFirstDependency); define("formDialogStyle", ["css!" + componentsPath + "/formdialog"], returnFirstDependency); diff --git a/src/scripts/tvlatest.js b/src/scripts/tvlatest.js index a3cebdd8ee..2f0c4a51aa 100644 --- a/src/scripts/tvlatest.js +++ b/src/scripts/tvlatest.js @@ -1,4 +1,4 @@ -define(["loading", "components/categorysyncbuttons", "components/groupedcards", "cardBuilder", "apphost", "imageLoader"], function(loading, categorysyncbuttons, groupedcards, cardBuilder, appHost, imageLoader) { +define(["loading", "components/groupedcards", "cardBuilder", "apphost", "imageLoader"], function(loading, groupedcards, cardBuilder, appHost, imageLoader) { "use strict"; function getLatestPromise(context, params) { @@ -43,7 +43,6 @@ define(["loading", "components/categorysyncbuttons", "components/groupedcards", } return function(view, params, tabContent) { var self = this; - categorysyncbuttons.init(tabContent); var latestPromise; self.preRender = function() { latestPromise = getLatestPromise(view, params) diff --git a/src/scripts/tvrecommended.js b/src/scripts/tvrecommended.js index 12fbd9081b..c575232831 100644 --- a/src/scripts/tvrecommended.js +++ b/src/scripts/tvrecommended.js @@ -1,4 +1,4 @@ -define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "components/categorysyncbuttons", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-button"], function(events, inputManager, libraryMenu, layoutManager, loading, dom, categorysyncbuttons, userSettings, cardBuilder, playbackManager, mainTabsManager) { +define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-button"], function(events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager) { "use strict"; function getTabs() { @@ -204,7 +204,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do initialTabIndex = currentTabIndex; self.initTab = function() { var tabContent = self.tabContent; - setScrollClasses(tabContent.querySelector("#resumableItems"), enableScrollX()), categorysyncbuttons.init(tabContent) + setScrollClasses(tabContent.querySelector("#resumableItems"), enableScrollX()) }, self.renderTab = function() { reload() }; diff --git a/src/serviceworker.js b/src/serviceworker.js index 01cf8d63ef..4d9e12ee6a 100644 --- a/src/serviceworker.js +++ b/src/serviceworker.js @@ -1 +1 @@ -importScripts("components/serviceworker/notifications.js", "components/serviceworker/sync.js"); \ No newline at end of file +importScripts("components/serviceworker/notifications.js"); \ No newline at end of file diff --git a/src/tv.html b/src/tv.html index fe95338af3..2a8c3ade26 100644 --- a/src/tv.html +++ b/src/tv.html @@ -30,9 +30,6 @@

${HeaderNextUp}

-
@@ -43,9 +40,6 @@

${HeaderLatestEpisodes}

-
From 65fafe9c58dcd6d6785d325fbf78d4117c2d608e Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 19 Mar 2019 17:03:11 -0700 Subject: [PATCH 47/69] remove registration services --- src/components/emby-button/emby-button.js | 16 +-- src/components/homesections/homesections.js | 91 +--------------- .../playback/playaccessvalidation.js | 6 - src/components/playback/playbackvalidation.js | 80 -------------- .../recordingcreator/recordingbutton.js | 2 +- .../recordingcreator/recordingfields.js | 103 +----------------- .../recordingfields.template.html | 12 -- .../recordingcreator/recordinghelper.js | 43 +++----- .../registrationservices.js | 16 --- src/components/skinmanager.js | 52 +-------- src/scripts/site.js | 2 - 11 files changed, 30 insertions(+), 393 deletions(-) delete mode 100644 src/components/playback/playbackvalidation.js delete mode 100644 src/components/registrationservices/registrationservices.js diff --git a/src/components/emby-button/emby-button.js b/src/components/emby-button/emby-button.js index 99a6aea925..d80b224d03 100644 --- a/src/components/emby-button/emby-button.js +++ b/src/components/emby-button/emby-button.js @@ -4,25 +4,11 @@ define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype); var EmbyLinkButtonPrototype = Object.create(HTMLAnchorElement.prototype); - function openPremiumInfo() { - - require(['registrationServices'], function (registrationServices) { - registrationServices.showPremiereInfo(); - }); - } - function onAnchorClick(e) { - var href = this.getAttribute('href') || ''; - if (href !== '#') { - if (this.getAttribute('target')) { - if (href.indexOf('emby.media/premiere') !== -1 && !appHost.supports('externalpremium')) { - e.preventDefault(); - openPremiumInfo(); - } - else if (!appHost.supports('targetblank')) { + if (!appHost.supports('targetblank')) { e.preventDefault(); shell.openUrl(href); } diff --git a/src/components/homesections/homesections.js b/src/components/homesections/homesections.js index 82f6041c3e..9c2ec05aac 100644 --- a/src/components/homesections/homesections.js +++ b/src/components/homesections/homesections.js @@ -1,4 +1,4 @@ -define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings', 'dom', 'apphost', 'layoutManager', 'imageLoader', 'globalize', 'itemShortcuts', 'itemHelper', 'appRouter', 'emby-button', 'paper-icon-button-light', 'emby-itemscontainer', 'emby-scroller', 'emby-linkbutton', 'css!./homesections'], function (connectionManager, cardBuilder, registrationServices, appSettings, dom, appHost, layoutManager, imageLoader, globalize, itemShortcuts, itemHelper, appRouter) { +define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'layoutManager', 'imageLoader', 'globalize', 'itemShortcuts', 'itemHelper', 'appRouter', 'emby-button', 'paper-icon-button-light', 'emby-itemscontainer', 'emby-scroller', 'emby-linkbutton', 'css!./homesections'], function (connectionManager, cardBuilder, appSettings, dom, appHost, layoutManager, imageLoader, globalize, itemShortcuts, itemHelper, appRouter) { 'use strict'; function getDefaultSection(index) { @@ -662,34 +662,10 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings itemsContainer.parentContainer = elem; } - function bindUnlockClick(elem) { - - var btnUnlock = elem.querySelector('.btnUnlock'); - if (btnUnlock) { - btnUnlock.addEventListener('click', function (e) { - - registrationServices.validateFeature('livetv', { - - viewOnly: true - - }).then(function () { - - dom.parentWithClass(elem, 'homeSectionsContainer').dispatchEvent(new CustomEvent('settingschange', { - cancelable: false - })); - }); - }); - } - } - function getOnNowFetchFn(serverId) { - return function () { - var apiClient = connectionManager.getApiClient(serverId); - return apiClient.getLiveTvRecommendedPrograms({ - userId: apiClient.getCurrentUserId(), IsAiring: true, limit: 24, @@ -697,15 +673,12 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings EnableImageTypes: "Primary,Thumb,Backdrop", EnableTotalRecordCount: false, Fields: "ChannelInfo,PrimaryImageAspectRatio" - }); }; } function getOnNowItemsHtml(items) { - var cardLayout = false; - return cardBuilder.getCardsHtml({ items: items, preferThumb: 'auto', @@ -728,27 +701,12 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings } function loadOnNow(elem, apiClient, user) { - if (!user.Policy.EnableLiveTvAccess) { return Promise.resolve(); } - var promises = []; - - promises.push(registrationServices.validateFeature('livetv', - { - viewOnly: true, - showDialog: false - }).then(function () { - return true; - }, function () { - return false; - })); - var userId = user.Id; - - promises.push(apiClient.getLiveTvRecommendedPrograms({ - + apiClient.getLiveTvRecommendedPrograms({ userId: apiClient.getCurrentUserId(), IsAiring: true, limit: 1, @@ -756,17 +714,9 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings EnableImageTypes: "Primary,Thumb,Backdrop", EnableTotalRecordCount: false, Fields: "ChannelInfo,PrimaryImageAspectRatio" - - })); - - return Promise.all(promises).then(function (responses) { - - var registered = responses[0]; - var result = responses[1]; + }).then(function (result) { var html = ''; - - if (result.Items.length && registered) { - + if (result.Items.length) { elem.classList.remove('padded-left'); elem.classList.remove('padded-right'); elem.classList.remove('padded-bottom'); @@ -774,51 +724,38 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings html += '
'; html += '
'; - html += '

' + globalize.translate('LiveTV') + '

'; - html += '
'; if (enableScrollX()) { html += '
'; html += '
'; - } - else { + } else { html += ''; - if (enableScrollX()) { html += '
'; } - html += '
'; html += '
'; @@ -826,12 +763,9 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings html += '
'; if (!layoutManager.tv) { - html += ''; html += '

'; html += globalize.translate('HeaderOnNow'); @@ -863,22 +797,7 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings itemsContainer.parentContainer = elem; itemsContainer.fetchData = getOnNowFetchFn(apiClient.serverId()); itemsContainer.getItemsHtml = getOnNowItemsHtml; - - } else if (result.Items.length && !registered) { - - elem.classList.add('padded-left'); - elem.classList.add('padded-right'); - elem.classList.add('padded-bottom'); - - html += '

' + globalize.translate('LiveTvRequiresUnlock') + '

'; - html += ''; - - elem.innerHTML = html; } - - bindUnlockClick(elem); }); } diff --git a/src/components/playback/playaccessvalidation.js b/src/components/playback/playaccessvalidation.js index bb0b8db3e0..35d8314fc1 100644 --- a/src/components/playback/playaccessvalidation.js +++ b/src/components/playback/playaccessvalidation.js @@ -2,16 +2,13 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz "use strict"; function getRequirePromise(deps) { - return new Promise(function (resolve, reject) { - require(deps, resolve); }); } function showErrorMessage() { return getRequirePromise(['alert']).then(function (alert) { - return alert(globalize.translate('MessagePlayAccessRestricted')).then(function () { return Promise.reject(); }); @@ -19,7 +16,6 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz } function PlayAccessValidation() { - this.name = 'Playback validation'; this.type = 'preplayintercept'; this.id = 'playaccessvalidation'; @@ -27,7 +23,6 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz } PlayAccessValidation.prototype.intercept = function (options) { - var item = options.item; if (!item) { return Promise.resolve(); @@ -38,7 +33,6 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz } return connectionManager.getApiClient(serverId).getCurrentUser().then(function (user) { - if (user.Policy.EnableMediaPlayback) { return Promise.resolve(); } diff --git a/src/components/playback/playbackvalidation.js b/src/components/playback/playbackvalidation.js deleted file mode 100644 index c36d5c1b5a..0000000000 --- a/src/components/playback/playbackvalidation.js +++ /dev/null @@ -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; -}); \ No newline at end of file diff --git a/src/components/recordingcreator/recordingbutton.js b/src/components/recordingcreator/recordingbutton.js index ef4645e6bb..0a76d3914c 100644 --- a/src/components/recordingcreator/recordingbutton.js +++ b/src/components/recordingcreator/recordingbutton.js @@ -1,4 +1,4 @@ -define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'registrationServices', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields'], function (globalize, connectionManager, require, loading, appHost, dom, recordingHelper, events, registrationServices) { +define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields'], function (globalize, connectionManager, require, loading, appHost, dom, recordingHelper, events) { 'use strict'; function onRecordingButtonClick(e) { diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index ac21784eb9..cb0229d873 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -1,75 +1,16 @@ -define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'registrationServices', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields', 'flexStyles'], function (globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events, registrationServices) { +define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields', 'flexStyles'], function (globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events) { 'use strict'; - function getRegistration(apiClient, feature) { - - return registrationServices.validateFeature(feature, { - showDialog: false, - viewOnly: true - }); - } - - function showConvertRecordingsUnlockMessage(context, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - }, function () { - context.querySelector('.convertRecordingsContainer').classList.remove('hide'); - }); - } - function showSeriesRecordingFields(context, programId, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.supporterContainer').classList.add('hide'); - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - context.querySelector('.recordSeriesContainer').classList.remove('hide'); - - }, function () { - - context.querySelector('.supporterContainerText').innerHTML = globalize.translate('MessageActiveSubscriptionRequiredSeriesRecordings'); - context.querySelector('.supporterContainer').classList.remove('hide'); - context.querySelector('.recordSeriesContainer').classList.add('hide'); - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - }); - } - - function getDvrFeatureCode() { - - return 'dvr'; + context.querySelector('.convertRecordingsContainer').classList.add('hide'); + context.querySelector('.recordSeriesContainer').classList.remove('hide'); } function showSingleRecordingFields(context, programId, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.supporterContainer').classList.add('hide'); - showConvertRecordingsUnlockMessage(context, apiClient); - - }, function () { - - context.querySelector('.supporterContainerText').innerHTML = globalize.translate('DvrSubscriptionRequired'); - context.querySelector('.supporterContainer').classList.remove('hide'); - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - }); - } - - function showRecordingFieldsContainer(context, programId, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.recordingFields').classList.remove('hide'); - - }, function () { - - context.querySelector('.recordingFields').classList.add('hide'); - }); + context.querySelector('.convertRecordingsContainer').classList.add('hide'); } function loadData(parent, program, apiClient) { - if (program.IsSeries) { parent.querySelector('.recordSeriesContainer').classList.remove('hide'); showSeriesRecordingFields(parent, program.Id, apiClient); @@ -91,13 +32,11 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa if (program.TimerId && program.Status !== 'Cancelled') { parent.querySelector('.btnManageRecording').classList.remove('hide'); parent.querySelector('.singleRecordingButton .recordingIcon').classList.add('recordingIcon-active'); - if (program.Status === 'InProgress') { parent.querySelector('.singleRecordingButton .buttonText').innerHTML = globalize.translate('StopRecording'); } else { parent.querySelector('.singleRecordingButton .buttonText').innerHTML = globalize.translate('DoNotRecord'); } - } else { parent.querySelector('.btnManageRecording').classList.add('hide'); parent.querySelector('.singleRecordingButton .recordingIcon').classList.remove('recordingIcon-active'); @@ -110,20 +49,16 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa var options = instance.options; var apiClient = connectionManager.getApiClient(options.serverId); - showRecordingFieldsContainer(options.parent, options.programId, apiClient); - + instance.querySelector('.recordingFields').classList.remove('hide'); return apiClient.getLiveTvProgram(options.programId, apiClient.getCurrentUserId()).then(function (program) { - instance.TimerId = program.TimerId; instance.Status = program.Status; instance.SeriesTimerId = program.SeriesTimerId; - loadData(options.parent, program, apiClient); }); } function onTimerChangedExternally(e, apiClient, data) { - var options = this.options; var refresh = false; @@ -144,7 +79,6 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa } function onSeriesTimerChangedExternally(e, apiClient, data) { - var options = this.options; var refresh = false; @@ -181,26 +115,16 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa events.on(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); } - function onSupporterButtonClick() { - registrationServices.showPremiereInfo(); - } - function onManageRecordingClick(e) { - var options = this.options; - if (!this.TimerId || this.Status === 'Cancelled') { return; } var self = this; - require(['recordingEditor'], function (recordingEditor) { - recordingEditor.show(self.TimerId, options.serverId, { - enableCancel: false - }).then(function () { self.changed = true; }); @@ -282,21 +206,16 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa if (isChecked) { showSeriesRecordingFields(options.parent, options.programId, apiClient); - if (!this.SeriesTimerId) { - var promise = this.TimerId ? recordingHelper.changeRecordingToSeries(apiClient, this.TimerId, options.programId) : recordingHelper.createRecording(apiClient, options.programId, true); - promise.then(function () { fetchData(self); }); } } else { - showSingleRecordingFields(options.parent, options.programId, apiClient); - if (this.SeriesTimerId) { apiClient.cancelLiveTvSeriesTimer(this.SeriesTimerId).then(function () { sendToast(globalize.translate('RecordingCancelled')); @@ -307,22 +226,13 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa } RecordingEditor.prototype.embed = function () { - var self = this; - return new Promise(function (resolve, reject) { - require(['text!./recordingfields.template.html'], function (template) { - var options = self.options; var context = options.parent; context.innerHTML = globalize.translateDocument(template, 'core'); - var supporterButtons = context.querySelectorAll('.btnSupporter'); - for (var i = 0, length = supporterButtons.length; i < length; i++) { - supporterButtons[i].addEventListener('click', onSupporterButtonClick); - } - context.querySelector('.singleRecordingButton').addEventListener('click', onRecordChange.bind(self)); context.querySelector('.seriesRecordingButton').addEventListener('click', onRecordSeriesChange.bind(self)); context.querySelector('.btnManageRecording').addEventListener('click', onManageRecordingClick.bind(self)); @@ -334,17 +244,14 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa }; RecordingEditor.prototype.hasChanged = function () { - return this.changed; }; RecordingEditor.prototype.refresh = function () { - fetchData(this); }; RecordingEditor.prototype.destroy = function () { - var timerChangedHandler = this.timerChangedHandler; this.timerChangedHandler = null; diff --git a/src/components/recordingcreator/recordingfields.template.html b/src/components/recordingcreator/recordingfields.template.html index 4e4fb4878b..895e533400 100644 --- a/src/components/recordingcreator/recordingfields.template.html +++ b/src/components/recordingcreator/recordingfields.template.html @@ -1,20 +1,8 @@

${HeaderConvertYourRecordings}

${PromoConvertRecordingsToStreamingFormat}
-
- -
-
-
-
-
-