diff --git a/dashboard-ui/collections.html b/dashboard-ui/collections.html
deleted file mode 100644
index e4d899dce5..0000000000
--- a/dashboard-ui/collections.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
${MessageNoCollectionsAvailable}
-
-
-
-
-
\ No newline at end of file
diff --git a/dashboard-ui/components/filterdialog/filterdialog.js b/dashboard-ui/components/filterdialog/filterdialog.js
index 7a83a31c3a..f729eb870e 100644
--- a/dashboard-ui/components/filterdialog/filterdialog.js
+++ b/dashboard-ui/components/filterdialog/filterdialog.js
@@ -1,4 +1,4 @@
-define(['dialogHelper', 'events', 'browser', 'jQuery', 'emby-checkbox', 'emby-collapsible', 'css!components/filterdialog/style', 'paper-radio-button', 'paper-radio-group'], function (dialogHelper, events, browser, $) {
+define(['dialogHelper', 'events', 'browser', 'emby-checkbox', 'emby-collapsible', 'css!components/filterdialog/style', 'paper-radio-button', 'paper-radio-group'], function (dialogHelper, events, browser) {
function renderOptions(context, selector, cssClass, items, isCheckedFn) {
@@ -85,6 +85,8 @@
var query = options.query;
+ var elems, i, length;
+
if (options.mode == 'livetvchannels') {
context.querySelector('.chkFavorite').checked = query.IsFavorite == true;
@@ -92,22 +94,26 @@
context.querySelector('.chkDislikes').checked = query.IsDisliked == true;
} else {
- $('.chkStandardFilter', context).each(function () {
+ elems = context.querySelectorAll('.chkStandardFilter');
+ for (i = 0, length = elems.length; i < length; i++) {
+ var chkStandardFilter = elems[i];
var filters = "," + (query.Filters || "");
- var filterName = this.getAttribute('data-filter');
+ var filterName = chkStandardFilter.getAttribute('data-filter');
- this.checked = filters.indexOf(',' + filterName) != -1;
- });
+ chkStandardFilter.checked = filters.indexOf(',' + filterName) != -1;
+ }
}
- $('.chkVideoTypeFilter', context).each(function () {
+ elems = context.querySelectorAll('.chkVideoTypeFilter');
+ for (i = 0, length = elems.length; i < length; i++) {
+ var chkVideoTypeFilter = elems[i];
var filters = "," + (query.VideoTypes || "");
- var filterName = this.getAttribute('data-filter');
+ var filterName = chkVideoTypeFilter.getAttribute('data-filter');
- this.checked = filters.indexOf(',' + filterName) != -1;
- });
+ chkVideoTypeFilter.checked = filters.indexOf(',' + filterName) != -1;
+ }
context.querySelector('.chk3DFilter').checked = query.Is3D == true;
context.querySelector('.chkHDFilter').checked = query.IsHD == true;
@@ -119,27 +125,30 @@
context.querySelector('#chkThemeVideo').checked = query.HasThemeVideo == true;
context.querySelector('#chkSpecialFeature').checked = query.HasSpecialFeature == true;
- $('#chkSpecialEpisode', context).checked(query.ParentIndexNumber == 0);
- $('#chkMissingEpisode', context).checked(query.IsMissing == true);
- $('#chkFutureEpisode', context).checked(query.IsUnaired == true);
+ context.querySelector('#chkSpecialEpisode').checked = query.ParentIndexNumber == 0;
+ context.querySelector('#chkMissingEpisode').checked = query.IsMissing == true;
+ context.querySelector('#chkFutureEpisode').checked = query.IsUnaired == true;
context.querySelector('.playersRadioGroup').selected = query.MinPlayers == null ? 'all' : query.MinPlayers;
- $('.chkStatus', context).each(function () {
+ for (i = 0, length = elems.length; i < length; i++) {
+ var chkStatus = elems[i];
var filters = "," + (query.SeriesStatus || "");
- var filterName = this.getAttribute('data-filter');
+ var filterName = chkStatus.getAttribute('data-filter');
- this.checked = filters.indexOf(',' + filterName) != -1;
- });
+ chkStatus.checked = filters.indexOf(',' + filterName) != -1;
+ }
- $('.chkAirDays', context).each(function () {
+ elems = context.querySelectorAll('.chkAirDays');
+ for (i = 0, length = elems.length; i < length; i++) {
+ var chkAirDays = elems[i];
var filters = "," + (query.AirDays || "");
- var filterName = this.getAttribute('data-filter');
+ var filterName = chkAirDays.getAttribute('data-filter');
- this.checked = filters.indexOf(',' + filterName) != -1;
- });
+ chkAirDays.checked = filters.indexOf(',' + filterName) != -1;
+ }
}
function triggerChange(instance) {
@@ -160,286 +169,6 @@
return elem;
}
- function bindEvents(instance, context, options) {
-
- var query = options.query;
-
- if (options.mode == 'livetvchannels') {
-
- $('.chkFavorite', context).on('change', function () {
- query.StartIndex = 0;
- query.IsFavorite = this.checked ? true : null;
- triggerChange(instance);
- });
-
-
- $('.chkLikes', context).on('change', function () {
-
- query.StartIndex = 0;
- query.IsLiked = this.checked ? true : null;
- triggerChange(instance);
- });
-
- $('.chkDislikes', context).on('change', function () {
-
- query.StartIndex = 0;
- query.IsDisliked = this.checked ? true : null;
- triggerChange(instance);
- });
-
- } else {
- $('.chkStandardFilter', context).on('change', function () {
-
- var filterName = this.getAttribute('data-filter');
- var filters = query.Filters || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Filters = filters;
- triggerChange(instance);
- });
- }
-
- $('.chkVideoTypeFilter', context).on('change', function () {
-
- var filterName = this.getAttribute('data-filter');
- var filters = query.VideoTypes || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.VideoTypes = filters;
-
- triggerChange(instance);
- });
-
- $('.chk3DFilter', context).on('change', function () {
-
- query.StartIndex = 0;
- query.Is3D = this.checked ? true : null;
-
- triggerChange(instance);
- });
-
- $('.chkHDFilter', context).on('change', function () {
-
- query.StartIndex = 0;
- query.IsHD = this.checked ? true : null;
- triggerChange(instance);
- });
-
- $('.chkSDFilter', context).on('change', function () {
-
- query.StartIndex = 0;
- query.IsHD = this.checked ? false : null;
-
- triggerChange(instance);
- });
-
- $('.chkStatus', context).on('change', function () {
-
- var filterName = this.getAttribute('data-filter');
- var filters = query.SeriesStatus || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.SeriesStatus = filters;
- query.StartIndex = 0;
- triggerChange(instance);
- });
-
- $('.chkAirDays', context).on('change', function () {
-
- var filterName = this.getAttribute('data-filter');
- var filters = query.AirDays || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.AirDays = filters;
- query.StartIndex = 0;
- triggerChange(instance);
- });
-
- $('#chkTrailer', context).on('change', function () {
-
- query.StartIndex = 0;
- query.HasTrailer = this.checked ? true : null;
-
- triggerChange(instance);
- });
-
- $('#chkThemeSong', context).on('change', function () {
-
- query.StartIndex = 0;
- query.HasThemeSong = this.checked ? true : null;
-
- triggerChange(instance);
- });
-
- $('#chkSpecialFeature', context).on('change', function () {
-
- query.StartIndex = 0;
- query.HasSpecialFeature = this.checked ? true : null;
-
- triggerChange(instance);
- });
-
- $('#chkThemeVideo', context).on('change', function () {
-
- query.StartIndex = 0;
- query.HasThemeVideo = this.checked ? true : null;
-
- triggerChange(instance);
- });
-
- $('#chkMissingEpisode', context).on('change', function () {
-
- query.StartIndex = 0;
- query.IsMissing = this.checked ? true : false;
-
- triggerChange(instance);
- });
-
- $('#chkSpecialEpisode', context).on('change', function () {
-
- query.StartIndex = 0;
- query.ParentIndexNumber = this.checked ? 0 : null;
-
- triggerChange(instance);
- });
-
- $('#chkFutureEpisode', context).on('change', function () {
-
- query.StartIndex = 0;
-
- if (this.checked) {
- query.IsUnaired = true;
- query.IsVirtualUnaired = null;
- } else {
- query.IsUnaired = null;
- query.IsVirtualUnaired = false;
- }
-
- triggerChange(instance);
- });
-
- $('#chkSubtitle', context).on('change', function () {
-
- query.StartIndex = 0;
- query.HasSubtitles = this.checked ? true : null;
-
- triggerChange(instance);
- });
-
- context.querySelector('.playersRadioGroup').addEventListener('iron-select', function (e) {
-
- query.StartIndex = 0;
- var val = e.target.selected;
- var newValue = val == "all" ? null : val;
- var changed = query.MinPlayers != newValue;
- query.MinPlayers = newValue;
- if (changed) {
- triggerChange(instance);
- }
- });
-
- context.addEventListener('change', function (e) {
-
- var chkGenreFilter = parentWithClass(e.target, 'chkGenreFilter');
- if (chkGenreFilter) {
- var filterName = chkGenreFilter.getAttribute('data-filter');
- var filters = query.Genres || "";
- var delimiter = '|';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkGenreFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Genres = filters;
-
- triggerChange(instance);
- return;
- }
-
- var chkTagFilter = parentWithClass(e.target, 'chkTagFilter');
- if (chkTagFilter) {
- var filterName = chkTagFilter.getAttribute('data-filter');
- var filters = query.Tags || "";
- var delimiter = '|';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkTagFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Tags = filters;
-
- triggerChange(instance);
- return;
- }
-
- var chkYearFilter = parentWithClass(e.target, 'chkYearFilter');
- if (chkYearFilter) {
- var filterName = chkYearFilter.getAttribute('data-filter');
- var filters = query.Years || "";
- var delimiter = ',';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkYearFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Years = filters;
-
- triggerChange(instance);
- return;
- }
-
- var chkOfficialRatingFilter = parentWithClass(e.target, 'chkOfficialRatingFilter');
- if (chkOfficialRatingFilter) {
- var filterName = chkOfficialRatingFilter.getAttribute('data-filter');
- var filters = query.OfficialRatings || "";
- var delimiter = '|';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkOfficialRatingFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.OfficialRatings = filters;
-
- triggerChange(instance);
- return;
- }
- });
- }
-
function setVisibility(context, options) {
if (options.mode == 'livetvchannels' || options.mode == 'albums' || options.mode == 'artists' || options.mode == 'albumartists' || options.mode == 'songs') {
@@ -501,6 +230,314 @@
var self = this;
+ function onFavoriteChange() {
+ var query = options.query;
+ query.StartIndex = 0;
+ query.IsFavorite = this.checked ? true : null;
+ triggerChange(self);
+ }
+
+ function onStandardFilterChange() {
+
+ var query = options.query;
+ var filterName = this.getAttribute('data-filter');
+ var filters = query.Filters || "";
+
+ filters = (',' + filters).replace(',' + filterName, '').substring(1);
+
+ if (this.checked) {
+ filters = filters ? (filters + ',' + filterName) : filterName;
+ }
+
+ query.StartIndex = 0;
+ query.Filters = filters;
+ triggerChange(self);
+ }
+
+ function onVideoTypeFilterChange() {
+
+ var query = options.query;
+ var filterName = this.getAttribute('data-filter');
+ var filters = query.VideoTypes || "";
+
+ filters = (',' + filters).replace(',' + filterName, '').substring(1);
+
+ if (this.checked) {
+ filters = filters ? (filters + ',' + filterName) : filterName;
+ }
+
+ query.StartIndex = 0;
+ query.VideoTypes = filters;
+
+ triggerChange(self);
+ }
+
+ function onStatusChange() {
+ var query = options.query;
+ var filterName = this.getAttribute('data-filter');
+ var filters = query.SeriesStatus || "";
+
+ filters = (',' + filters).replace(',' + filterName, '').substring(1);
+
+ if (this.checked) {
+ filters = filters ? (filters + ',' + filterName) : filterName;
+ }
+
+ query.SeriesStatus = filters;
+ query.StartIndex = 0;
+ triggerChange(self);
+ }
+
+ function onAirDayChange() {
+
+ var query = options.query;
+ var filterName = this.getAttribute('data-filter');
+ var filters = query.AirDays || "";
+
+ filters = (',' + filters).replace(',' + filterName, '').substring(1);
+
+ if (this.checked) {
+ filters = filters ? (filters + ',' + filterName) : filterName;
+ }
+
+ query.AirDays = filters;
+ query.StartIndex = 0;
+ triggerChange(self);
+ }
+
+ function bindEvents(context) {
+
+ var query = options.query;
+ var elems, i, length;
+
+ if (options.mode == 'livetvchannels') {
+
+ elems = context.querySelectorAll('.chkFavorite');
+ for (i = 0, length = elems.length; i < length; i++) {
+
+ elems[i].addEventListener('change', onFavoriteChange);
+ }
+
+
+ context.querySelector('.chkLikes').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.IsLiked = this.checked ? true : null;
+ triggerChange(self);
+ });
+
+ context.querySelector('.chkDislikes').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.IsDisliked = this.checked ? true : null;
+ triggerChange(self);
+ });
+
+ } else {
+ elems = context.querySelectorAll('.chkStandardFilter');
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener('change', onStandardFilterChange);
+ }
+ }
+
+ elems = context.querySelectorAll('.chkVideoTypeFilter');
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener('change', onVideoTypeFilterChange);
+ }
+
+ context.querySelector('.chk3DFilter').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.Is3D = this.checked ? true : null;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('.chkHDFilter').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.IsHD = this.checked ? true : null;
+ triggerChange(self);
+ });
+
+ context.querySelector('.chkSDFilter').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.IsHD = this.checked ? false : null;
+
+ triggerChange(self);
+ });
+
+ elems = context.querySelectorAll('.chkStatus');
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener('change', onStatusChange);
+ }
+
+ elems = context.querySelectorAll('.chkAirDays');
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener('change', onAirDayChange);
+ }
+
+ context.querySelector('#chkTrailer').addEventListener('change', function () {
+ query.StartIndex = 0;
+ query.HasTrailer = this.checked ? true : null;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('#chkThemeSong').addEventListener('change', function () {
+ query.StartIndex = 0;
+ query.HasThemeSong = this.checked ? true : null;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('#chkSpecialFeature').addEventListener('change', function () {
+ query.StartIndex = 0;
+ query.HasSpecialFeature = this.checked ? true : null;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('#chkThemeVideo').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.HasThemeVideo = this.checked ? true : null;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('#chkMissingEpisode').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.IsMissing = this.checked ? true : false;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('#chkSpecialEpisode').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.ParentIndexNumber = this.checked ? 0 : null;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('#chkFutureEpisode').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+
+ if (this.checked) {
+ query.IsUnaired = true;
+ query.IsVirtualUnaired = null;
+ } else {
+ query.IsUnaired = null;
+ query.IsVirtualUnaired = false;
+ }
+
+ triggerChange(self);
+ });
+
+ context.querySelector('#chkSubtitle').addEventListener('change', function () {
+
+ query.StartIndex = 0;
+ query.HasSubtitles = this.checked ? true : null;
+
+ triggerChange(self);
+ });
+
+ context.querySelector('.playersRadioGroup').addEventListener('iron-select', function (e) {
+
+ query.StartIndex = 0;
+ var val = e.target.selected;
+ var newValue = val == "all" ? null : val;
+ var changed = query.MinPlayers != newValue;
+ query.MinPlayers = newValue;
+ if (changed) {
+ triggerChange(self);
+ }
+ });
+
+ context.addEventListener('change', function (e) {
+
+ var chkGenreFilter = parentWithClass(e.target, 'chkGenreFilter');
+ if (chkGenreFilter) {
+ var filterName = chkGenreFilter.getAttribute('data-filter');
+ var filters = query.Genres || "";
+ var delimiter = '|';
+
+ filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
+
+ if (chkGenreFilter.checked) {
+ filters = filters ? (filters + delimiter + filterName) : filterName;
+ }
+
+ query.StartIndex = 0;
+ query.Genres = filters;
+
+ triggerChange(self);
+ return;
+ }
+
+ var chkTagFilter = parentWithClass(e.target, 'chkTagFilter');
+ if (chkTagFilter) {
+ var filterName = chkTagFilter.getAttribute('data-filter');
+ var filters = query.Tags || "";
+ var delimiter = '|';
+
+ filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
+
+ if (chkTagFilter.checked) {
+ filters = filters ? (filters + delimiter + filterName) : filterName;
+ }
+
+ query.StartIndex = 0;
+ query.Tags = filters;
+
+ triggerChange(self);
+ return;
+ }
+
+ var chkYearFilter = parentWithClass(e.target, 'chkYearFilter');
+ if (chkYearFilter) {
+ var filterName = chkYearFilter.getAttribute('data-filter');
+ var filters = query.Years || "";
+ var delimiter = ',';
+
+ filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
+
+ if (chkYearFilter.checked) {
+ filters = filters ? (filters + delimiter + filterName) : filterName;
+ }
+
+ query.StartIndex = 0;
+ query.Years = filters;
+
+ triggerChange(self);
+ return;
+ }
+
+ var chkOfficialRatingFilter = parentWithClass(e.target, 'chkOfficialRatingFilter');
+ if (chkOfficialRatingFilter) {
+ var filterName = chkOfficialRatingFilter.getAttribute('data-filter');
+ var filters = query.OfficialRatings || "";
+ var delimiter = '|';
+
+ filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
+
+ if (chkOfficialRatingFilter.checked) {
+ filters = filters ? (filters + delimiter + filterName) : filterName;
+ }
+
+ query.StartIndex = 0;
+ query.OfficialRatings = filters;
+
+ triggerChange(self);
+ return;
+ }
+ });
+ }
+
self.show = function () {
return new Promise(function (resolve, reject) {
@@ -535,7 +572,7 @@
var onTimeout = function () {
updateFilterControls(dlg, options);
- bindEvents(self, dlg, options);
+ bindEvents(dlg);
if (enableDynamicFilters(options.mode)) {
dlg.classList.add('dynamicFilterDialog');
diff --git a/dashboard-ui/components/filterdialog/filterdialog.template.html b/dashboard-ui/components/filterdialog/filterdialog.template.html
index 66debc780a..ee7bb6ca9f 100644
--- a/dashboard-ui/components/filterdialog/filterdialog.template.html
+++ b/dashboard-ui/components/filterdialog/filterdialog.template.html
@@ -47,11 +47,11 @@
diff --git a/dashboard-ui/itemlist.html b/dashboard-ui/itemlist.html
index eac0ebeeec..424108c85c 100644
--- a/dashboard-ui/itemlist.html
+++ b/dashboard-ui/itemlist.html
@@ -8,6 +8,7 @@
+
diff --git a/dashboard-ui/scripts/itemlistpage.js b/dashboard-ui/scripts/itemlistpage.js
index 665e578333..d0da7cb585 100644
--- a/dashboard-ui/scripts/itemlistpage.js
+++ b/dashboard-ui/scripts/itemlistpage.js
@@ -118,7 +118,7 @@
posterOptions.shape = "backdrop";
html = libraryBrowser.getPosterViewHtml(posterOptions);
} else {
-
+
// Poster
posterOptions.showTitle = context == 'photos' ? 'auto' : true;
posterOptions.overlayText = context == 'photos';
@@ -126,6 +126,15 @@
html = libraryBrowser.getPosterViewHtml(posterOptions);
}
+ if (currentItem.CollectionType == 'boxsets') {
+ view.querySelector('.btnNewCollection').classList.remove('hide');
+ if (!result.Items.length) {
+ html = '' + Globalize.translate('MessageNoCollectionsAvailable') + '
';
+ }
+ } else {
+ view.querySelector('.btnNewCollection').classList.add('hide');
+ }
+
var elem = view.querySelector('#items');
elem.innerHTML = html + pagingHtml;
ImageLoader.lazyChildren(elem);
@@ -310,6 +319,20 @@
});
});
+ // The button is created dynamically
+ view.querySelector('.btnNewCollection').addEventListener('click', function () {
+
+ require(['collectionEditor'], function (collectionEditor) {
+
+ var serverId = ApiClient.serverInfo().Id;
+ new collectionEditor().show({
+ items: [],
+ serverId: serverId
+ });
+
+ });
+ });
+
view.addEventListener('viewbeforeshow', function (e) {
reloadItems(view);
updateFilterControls();
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index 1de9918981..4818ff1b80 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -1033,7 +1033,7 @@
}
if (item.CollectionType == 'boxsets') {
- return 'collections.html?topParentId=' + item.Id;
+ return 'itemlist.html?topParentId=' + item.Id + '&parentId=' + item.Id;
}
if (item.CollectionType == 'tvshows') {
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index 4ffe01a8e3..2091e74ef6 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -2423,12 +2423,6 @@ var AppInfo = {};
roles: 'admin'
});
- defineRoute({
- path: '/collections.html',
- dependencies: [],
- autoFocus: false
- });
-
defineRoute({
path: '/connectlogin.html',
dependencies: ['emby-button', 'emby-input'],