From a5f1fa76811d2fff967772a3281ff959c7960e23 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 15 Mar 2014 00:14:07 -0400 Subject: [PATCH 1/9] support grouping behind boxsets --- dashboard-ui/css/site.css | 10 +- dashboard-ui/dashboard.html | 10 +- dashboard-ui/livetvrecording.html | 2 +- dashboard-ui/livetvtimer.html | 2 +- dashboard-ui/scripts/dashboardpage.js | 262 +++++++++--------------- dashboard-ui/scripts/librarymenu.js | 9 + dashboard-ui/scripts/livetvrecording.js | 2 +- dashboard-ui/scripts/livetvtimer.js | 2 +- dashboard-ui/scripts/movies.js | 3 +- 9 files changed, 121 insertions(+), 181 deletions(-) diff --git a/dashboard-ui/css/site.css b/dashboard-ui/css/site.css index f4f842303..6cedf184e 100644 --- a/dashboard-ui/css/site.css +++ b/dashboard-ui/css/site.css @@ -658,7 +658,7 @@ h1 .imageLink { /* Dashboard home */ .tblConnections td { - padding: 1em 0 1em 1.25em; + padding: 1em 0 1em .75em; vertical-align: top; } @@ -666,12 +666,8 @@ h1 .imageLink { padding-left: 0; } -.tblConnections img { - height: 48px; -} - -.nowPlayingText { - padding-left: .5em!important; +.tblConnections img:not(.clientNowPlayingImage) { + height: 28px; } .clientNowPlayingImage { diff --git a/dashboard-ui/dashboard.html b/dashboard-ui/dashboard.html index 0c5ccd6dc..4267697ac 100644 --- a/dashboard-ui/dashboard.html +++ b/dashboard-ui/dashboard.html @@ -60,9 +60,11 @@ -
-

Active Devices

-
+
+

Active Connections

+
+ +
@@ -120,4 +122,4 @@
- + \ No newline at end of file diff --git a/dashboard-ui/livetvrecording.html b/dashboard-ui/livetvrecording.html index a3b5393d7..a1375e3d2 100644 --- a/dashboard-ui/livetvrecording.html +++ b/dashboard-ui/livetvrecording.html @@ -57,7 +57,7 @@
-

+

diff --git a/dashboard-ui/livetvtimer.html b/dashboard-ui/livetvtimer.html index 857919903..64f5753f7 100644 --- a/dashboard-ui/livetvtimer.html +++ b/dashboard-ui/livetvtimer.html @@ -32,7 +32,7 @@

- +

diff --git a/dashboard-ui/scripts/dashboardpage.js b/dashboard-ui/scripts/dashboardpage.js index 3d98d72cb..297f6a4cd 100644 --- a/dashboard-ui/scripts/dashboardpage.js +++ b/dashboard-ui/scripts/dashboardpage.js @@ -135,9 +135,9 @@ var html = ''; - var container = $('.connections', page); + var table = $('.tblConnections', page); - $('.sessionPosterItem', container).addClass('deadSession'); + $('.trSession', table).addClass('deadSession'); var deviceId = ApiClient.deviceId(); @@ -145,181 +145,103 @@ var connection = dashboardInfo.ActiveConnections[i]; - var itemId = 'session' + connection.Id; + var rowId = 'trSession' + connection.Id; - var elem = $('#' + itemId, page); + var elem = $('#' + rowId, page); if (elem.length) { DashboardPage.updateSession(elem, connection); continue; } - html += '
'; + html += ''; + + html += ''; + html += DashboardPage.getClientType(connection); + html += ''; + + html += ''; + + html += '
'; + if (deviceId == connection.DeviceId) { + html += connection.Client; + } else { + html += '' + connection.Client + ''; + } + html += '
'; + + html += '
' + connection.ApplicationVersion + '
'; + html += '
' + connection.DeviceName + '
'; + + html += '
'; + html += DashboardPage.getUsersHtml(connection); + html += '
'; + + html += ''; var nowPlayingItem = connection.NowPlayingItem; - var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem); - var style = ""; - - if (imageUrl) { - style += 'background-image:url(\'' + imageUrl + '\');'; - } - - var onclick = connection.DeviceId == deviceId ? '' : ' onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});"'; - - html += ''; - - var defaultTextStyle = ''; - - if (nowPlayingItem) { - defaultTextStyle = "display:none;"; - } - html += '
Nothing currently playing
'; - - html += '
'; - - var itemNameStyle=''; - - if (!nowPlayingItem) { - itemNameStyle = "display:none;"; - } - html += '
' + (nowPlayingItem ? nowPlayingItem.Name : '') + '
'; - - var progressStyle=''; - - if (!nowPlayingItem) { - progressStyle = "display:none;"; - } - html += "
"; - - html += ''; - html += "
"; - html += "
"; - - html += ''; - - html += ''; - - html += '
' + DashboardPage.getSessionItemText(connection) + '
'; - - //html += ''; - //html += DashboardPage.getClientType(connection); - //html += ''; - - //html += ''; - - //html += '
'; - - //if (deviceId == connection.DeviceId) { - // html += connection.Client; - //} else { - // html += '' + connection.Client + ''; - //} - //html += '
'; - - //html += ''; - - //html += ''; - //html += DashboardPage.getNowPlayingImage(nowPlayingItem); - //html += ''; - - //html += ''; - //html += DashboardPage.getNowPlayingText(connection, nowPlayingItem); - //html += ''; + html += ''; + html += '
'; + html += DashboardPage.getNowPlayingImage(nowPlayingItem); html += '
'; + + html += '
'; + html += DashboardPage.getNowPlayingText(connection, nowPlayingItem); + html += '
'; + + html += ''; + + + html += ''; + } - container.append(html).trigger('create'); + table.append(html).trigger('create'); - $('.deadSession', container).remove(); - }, - - getPlaybackProgress: function (session) { - - if (session.NowPlayingItem) { - if (session.NowPlayingItem.RunTimeTicks) { - - var pct = (session.NowPlayingPositionTicks || 0) / session.NowPlayingItem.RunTimeTicks; - - return pct * 100; - } - } - - return 0; + $('.deadSession', table).remove(); }, getUsersHtml: function (session) { - var html = '
'; + var html = ''; if (session.UserId) { - html += session.UserName; + html += '
' + session.UserName + '
'; } html += session.AdditionalUsers.map(function (currentSession) { - return ', ' + currentSession.UserName; + return '
' + currentSession.UserName + '
'; }); - html += '
'; - return html; }, - updateSession: function (elem, session) { + updateSession: function (row, session) { - elem.removeClass('deadSession'); + row.removeClass('deadSession'); - $('.sessionItemText', elem).html(DashboardPage.getSessionItemText(session)); + $('.username', row).html(DashboardPage.getUsersHtml(session)); var nowPlayingItem = session.NowPlayingItem; - if (nowPlayingItem) { - $('.posterItemDefaultText', elem).hide(); - $('.posterItemProgress', elem).show(); - $('.posterItemName', elem).show().html(nowPlayingItem.Name); + $('.clientNowPlayingText', row).html(DashboardPage.getNowPlayingText(session, nowPlayingItem)).trigger('create'); - $('progress', elem).val(DashboardPage.getPlaybackProgress(session)); - } else { - $('.posterItemDefaultText', elem).show(); - $('.posterItemProgress', elem).hide(); - $('.posterItemName', elem).hide().html(''); - } + var imageRow = $('.nowPlayingImage', row); - var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem); + var image = $('img', imageRow)[0]; - var image = $('.posterItemImage', elem)[0]; + var nowPlayingItemId = nowPlayingItem ? nowPlayingItem.Id : null; + var nowPlayingItemImageTag = nowPlayingItem ? nowPlayingItem.PrimaryImageTag : null; - if (imageUrl && imageUrl != image.getAttribute('data-imageurl')) { - - image.style.backgroundImage = 'url(\'' + imageUrl + '\')'; - image.setAttribute('data-imageurl', imageUrl); - - } else if (!imageUrl && image.getAttribute('data-imageurl')) { - - image.style.backgroundImage = null; - image.setAttribute('data-imageurl', ''); + if (!image || image.getAttribute('data-itemid') != nowPlayingItemId || image.getAttribute('data-tag') != nowPlayingItemImageTag) { + imageRow.html(DashboardPage.getNowPlayingImage(nowPlayingItem)); } }, - getSessionItemText: function (connection) { - - var html = ''; - - html += '
'; - html += DashboardPage.getUsersHtml(connection); - html += '
'; - - //html += '
' + connection.Client + '
'; - //html += '
' + connection.ApplicationVersion + '
'; - - html += '
' + connection.DeviceName + '
'; - - return html; - }, - - getClientImage: function (connection) { + getClientType: function (connection) { var clientLowered = connection.Client.toLowerCase(); @@ -345,81 +267,91 @@ imgUrl = 'css/images/clients/html5.png'; } - return imgUrl; + return "Dashboard"; } if (clientLowered == "mb-classic") { - return "css/images/clients/mbc.png"; + return "Media Browser Classic"; } if (clientLowered == "media browser theater") { - return "css/images/clients/mb.png"; + return "Media Browser Theater"; } if (clientLowered == "android") { - return "css/images/clients/android.png"; + return "Android"; } if (clientLowered == "roku") { - return "css/images/clients/roku.jpg"; + return "Roku"; } if (clientLowered == "ios") { - return "css/images/clients/ios.png"; + return "iOS"; } if (clientLowered == "windows rt") { - return "css/images/clients/windowsrt.png"; + return "Windows RT"; } if (clientLowered == "windows phone") { - return "css/images/clients/windowsphone.png"; + return "Windows Phone"; } if (clientLowered == "dlna") { - return "css/images/clients/dlna.png"; + return "Dlna"; } if (clientLowered == "mbkinect") { - return "css/images/clients/mbkinect.png"; + return "MB Kinect"; } if (clientLowered == "xbmc") { - return "css/images/clients/xbmc.png"; + return "Xbmc"; } - return "css/images/clients/mb.png"; + return connection.Client; }, getNowPlayingImage: function (item) { - if (item && item.ThumbItemId) { - return ApiClient.getImageUrl(item.ThumbItemId, { - type: "Thumb", - height: 300, - tag: item.ThumbImageTag - }); - } - - if (item && item.BackdropItemId) { - return ApiClient.getImageUrl(item.BackdropItemId, { - type: "Backdrop", - height: 300, - tag: item.BackdropImageTag - }); - } - if (item && item.PrimaryImageTag) { - return ApiClient.getImageUrl(item.Id, { + var url = ApiClient.getImageUrl(item.Id, { type: "Primary", - height: 300, + height: 100, tag: item.PrimaryImageTag }); + + url += "&xxx=" + new Date().getTime(); + + return "" + item.Name + ""; } return ""; }, + getNowPlayingText: function (connection, item) { + + var html = ""; + + if (item) { + + html += "
" + item.Name + "
"; + + html += "
"; + + if (item.RunTimeTicks) { + html += Dashboard.getDisplayTime(connection.NowPlayingPositionTicks || 0) + " / "; + + html += Dashboard.getDisplayTime(item.RunTimeTicks); + } + + html += "
"; + } + + return html; + }, + renderRunningTasks: function (dashboardInfo) { var page = $.mobile.activePage; diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index a640682a1..29f00e880 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -202,6 +202,15 @@ }); }); } + }).on('pageshow', ".libraryPage", function () { + + var page = this; + + var elem = $('.libraryViewNavInner .ui-btn-active:visible', page); + + if (elem.length) { + elem[0].scrollIntoView(); + } }); })(window, document, jQuery); \ No newline at end of file diff --git a/dashboard-ui/scripts/livetvrecording.js b/dashboard-ui/scripts/livetvrecording.js index ab58ae78d..af5875d4c 100644 --- a/dashboard-ui/scripts/livetvrecording.js +++ b/dashboard-ui/scripts/livetvrecording.js @@ -64,7 +64,7 @@ ApiClient.sendWebSocketMessage("Context", vals.join('|')); } - $('.status', page).html('Status:   ' + item.Status); + $('.recordingStatus', page).html('Status:   ' + item.Status); Dashboard.getCurrentUser().done(function (user) { diff --git a/dashboard-ui/scripts/livetvtimer.js b/dashboard-ui/scripts/livetvtimer.js index d442ca647..fffd749b7 100644 --- a/dashboard-ui/scripts/livetvtimer.js +++ b/dashboard-ui/scripts/livetvtimer.js @@ -62,7 +62,7 @@ $('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh'); $('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh'); - $('.status', page).html('Status:   ' + item.Status); + $('.timerStatus', page).html('Status:   ' + item.Status); Dashboard.hideLoadingMsg(); } diff --git a/dashboard-ui/scripts/movies.js b/dashboard-ui/scripts/movies.js index 4cb13540e..ce03f7cdb 100644 --- a/dashboard-ui/scripts/movies.js +++ b/dashboard-ui/scripts/movies.js @@ -10,7 +10,8 @@ IncludeItemTypes: "Movie", Recursive: true, Fields: "PrimaryImageAspectRatio", - StartIndex: 0 + StartIndex: 0, + CollapseBoxSetItems: true }; function reloadItems(page) { From e3e1ab2db399f5c9422a99e06e8af228037f15b4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 15 Mar 2014 16:08:06 -0400 Subject: [PATCH 2/9] add dlna pause fix --- dashboard-ui/css/contextmenu.css | 105 ++++++++++++++++++++++ dashboard-ui/css/librarybrowser.css | 2 +- dashboard-ui/css/metadataeditor.css | 12 +-- dashboard-ui/scripts/contextmenu.js | 116 +++++++++++++++++++++++++ dashboard-ui/scripts/librarybrowser.js | 54 +++++++++++- dashboard-ui/scripts/site.js | 2 +- 6 files changed, 280 insertions(+), 11 deletions(-) create mode 100644 dashboard-ui/css/contextmenu.css create mode 100644 dashboard-ui/scripts/contextmenu.js diff --git a/dashboard-ui/css/contextmenu.css b/dashboard-ui/css/contextmenu.css new file mode 100644 index 000000000..34a4a9f23 --- /dev/null +++ b/dashboard-ui/css/contextmenu.css @@ -0,0 +1,105 @@ +.itemContextMenu { + position: absolute; + background: #fff; + border: 1px solid #ddd; + color: #000; + font-size: 14px; + z-index: 10000; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + text-align: left; +} + +.contextMenuInner { + padding: .5em 0; + width: 160px; +} + +.contextMenuOption { + display: block; + color: #000; + text-decoration: none; + font-weight: normal; + padding: .35em 1em; +} + + .contextMenuOption:hover { + color: #ffffff; + text-decoration: none; + background-color: #0088cc; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + } + +.contextMenuHeader { + font-weight: bold; + margin: .5em 0; + padding: 0 1em; + color: #999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.contextMenuDivider { + margin: .75em 0; + height: 1px; + background: #e5e5e5; +} + +.itemContextMenu:before, .dropdown-context-up:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} +.dropdown-context:after, .dropdown-context-up:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} +.dropdown-context-up:before, .dropdown-context-up:after { + top: auto; + bottom: -7px; + z-index: 9999; +} +.dropdown-context-up:before { + border-right: 7px solid transparent; + border-top: 7px solid #ccc; + border-bottom: none; + border-left: 7px solid transparent; +} +.dropdown-context-up:after { + border-right: 6px solid transparent; + border-top: 6px solid #ffffff; + border-left: 6px solid transparent; + border-bottom: none; +} \ No newline at end of file diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index d0823ceef..e8135f718 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -1049,7 +1049,7 @@ a.itemTag:hover { .alphabetPicker { position: fixed; right: 2px; - bottom: 30px; + bottom: 10px; width: 27px; z-index: 1000; text-align: center; diff --git a/dashboard-ui/css/metadataeditor.css b/dashboard-ui/css/metadataeditor.css index f941fcb16..97bd17fcd 100644 --- a/dashboard-ui/css/metadataeditor.css +++ b/dashboard-ui/css/metadataeditor.css @@ -171,12 +171,12 @@ margin: 5px; padding: 8px; border: 1px solid #444; - background-image: -webkit-gradient(linear,left top,left bottom,from(#444),to(#2d2d2d)); - background-image: -webkit-linear-gradient(#444,#2d2d2d); - background-image: -moz-linear-gradient(#444,#2d2d2d); - background-image: -ms-linear-gradient(#444,#2d2d2d); - background-image: -o-linear-gradient(#444,#2d2d2d); - background-image: linear-gradient(#444,#2d2d2d); + background-image: -webkit-gradient(linear,left top,left bottom,from(#333),to(#2d2d2d)); + background-image: -webkit-linear-gradient(#333,#2d2d2d); + background-image: -moz-linear-gradient(#333,#2d2d2d); + background-image: -ms-linear-gradient(#333,#2d2d2d); + background-image: -o-linear-gradient(#333,#2d2d2d); + background-image: linear-gradient(#333,#2d2d2d); } .imageEditorTile { diff --git a/dashboard-ui/scripts/contextmenu.js b/dashboard-ui/scripts/contextmenu.js new file mode 100644 index 000000000..0abaaddbb --- /dev/null +++ b/dashboard-ui/scripts/contextmenu.js @@ -0,0 +1,116 @@ +(function () { + + function onDocumentMouseDown(e) { + + var $e = $(e.target); + + var isContextMenuOption = $e.is('.contextMenuOption'); + + if (!isContextMenuOption || $e.is('.contextMenuCommandOption')) { + if ($e.is('.itemContextMenu') || $e.parents('.itemContextMenu').length) { + return; + } + } + + if (isContextMenuOption) { + + setTimeout(closeContextMenus, 150); + + } else { + closeContextMenus(); + } + } + + function closeContextMenus() { + $('.itemContextMenu').hide().remove(); + $('.hasContextMenu').removeClass('hasContextMenu'); + } + + function getMenuOptionHtml(item) { + + var html = ''; + + if (item.type == 'divider') { + + html += '

'; + } + + if (item.type == 'header') { + + html += '

' + item.text + '

'; + } + + if (item.type == 'link') { + + html += '' + item.text + ''; + } + + if (item.type == 'command') { + + html += '' + item.text + ''; + } + + return html; + } + + function getMenu(items) { + + var html = ''; + + html += '
'; + html += '
' + items.map(getMenuOptionHtml).join('') + '
'; + html += '
'; + + return $(html).appendTo(document.body); + } + + $.fn.createContextMenu = function (options) { + + return this.on('contextmenu', options.selector, function (e) { + + var elem = this; + var items = options.getOptions(elem); + + if (!items.length) { + return; + } + + var menu = getMenu(items); + + var autoH = menu.height() + 12; + + if ((e.pageY + autoH) > $('html').height()) { + + menu.addClass('dropdown-context-up').css({ + top: e.pageY - 20 - autoH, + left: e.pageX - 13 + + }).fadeIn(); + + } else { + + menu.css({ + top: e.pageY + 10, + left: e.pageX - 13 + + }).fadeIn(); + } + + $(this).addClass('hasContextMenu'); + $(document).off('mousedown.closecontextmenu').on('mousedown.closecontextmenu', onDocumentMouseDown); + + menu.on('click', '.contextMenuCommandOption', function() { + + closeContextMenus(); + + options.command(this.getAttribute('data-command'), elem); + + return false; + }); + + return false; + }); + }; + +})(); + diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 471f9900b..76eda9e4a 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -662,7 +662,7 @@ cssClass += ' ' + options.shape + 'PosterItem'; - html += ''; + html += ''; // Ribbon if (item.MediaType == "Video" && item.Video3DFormat) { @@ -680,7 +680,7 @@ format = "3D"; ribbonColor = "ribbon-3d"; } - + html += '
'; html += '
'; html += format; @@ -2100,10 +2100,42 @@ return false; } + function onMenuCommand(command, elem) { + + var id = elem.getAttribute('data-itemid'); + } + + function getMenuOptions(elem) { + + var items = []; + + var id = elem.getAttribute('data-itemid'); + var mediatype = elem.getAttribute('data-mediatype'); + + items.push({ type: 'header', text: 'Edit' }); + + items.push({ type: 'link', text: 'Details', url: 'edititemmetadata.html?id=' + id }); + + items.push({ type: 'link', text: 'Images', url: 'edititemimages.html?id=' + id }); + + if (mediatype == 'Video' && elem.getAttribute('data-locationtype') == 'FileSystem') { + + items.push({ type: 'divider' }); + items.push({ type: 'header', text: 'Manage' }); + items.push({ type: 'command', text: 'Alternate Editions', name: 'AlternateEditions' }); + } + + return items; + } + $.fn.createPosterItemHoverMenu = function () { function onShowTimerExpired(elem) { + if ($(elem).hasClass('hasContextMenu')) { + return; + } + var innerElem = $('.posterItemOverlayTarget', elem); var id = elem.getAttribute('data-itemid'); @@ -2152,7 +2184,23 @@ return this; } - return this.on('mouseenter', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverIn).on('mouseleave', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverOut); + var sequence = this; + + Dashboard.getCurrentUser().done(function (user) { + + if (user.Configuration.IsAdministrator) { + + sequence.createContextMenu({ + getOptions: getMenuOptions, + command: onMenuCommand, + selector: '.posterItem' + }); + } + + }); + + return this.on('mouseenter', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverIn) + .on('mouseleave', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverOut); }; })(jQuery, document, window); \ No newline at end of file diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index e4a3ea391..03818daba 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -96,7 +96,7 @@ var Dashboard = { var userId; if (autoLoginUserId && autoLoginUserId != storedUserId) { - + localStorage.setItem("userId", autoLoginUserId); ApiClient.currentUserId(autoLoginUserId); } From 7e2ffe8202977cd169dacebbf008b35b2a6e0ac9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 15 Mar 2014 18:52:43 -0400 Subject: [PATCH 3/9] #712 - Support grouping multiple versions of a movie --- dashboard-ui/itemdetails.html | 6 ++++ dashboard-ui/scripts/itemdetailpage.js | 44 ++++++++++++++++++++++++-- dashboard-ui/scripts/librarybrowser.js | 20 ++++++------ 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/dashboard-ui/itemdetails.html b/dashboard-ui/itemdetails.html index b5c03b0dd..c73c25b97 100644 --- a/dashboard-ui/itemdetails.html +++ b/dashboard-ui/itemdetails.html @@ -175,6 +175,12 @@
+
+
+ Alternate Versions +
+
+
Additional Parts diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 3aa1ec43a..4dd64c5fc 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -227,6 +227,13 @@ renderAdditionalParts(page, item, user); } + if (!item.HasAlternateVersions) { + $('#alternateVersionsCollapsible', page).addClass('hide'); + } else { + $('#alternateVersionsCollapsible', page).removeClass('hide'); + renderAlternateVersions(page, item, user); + } + $('#themeSongsCollapsible', page).hide(); $('#themeVideosCollapsible', page).hide(); @@ -665,7 +672,7 @@ var otherTypeItems = items.filter(function (curr) { - return !types.filter(function(t) { + return !types.filter(function (t) { return t.type == curr.Type; @@ -676,9 +683,9 @@ if (otherTypeItems.length) { renderCollectionItemType(page, otherType, otherTypeItems, user); } - + if (!items.length) { - renderCollectionItemType(page, {name: 'Titles'}, items, user); + renderCollectionItemType(page, { name: 'Titles' }, items, user); } $('.collectionItems', page).trigger('create').createPosterItemHoverMenu(); @@ -886,6 +893,37 @@ }); } + function renderAlternateVersions(page, item, user) { + + var url = ApiClient.getUrl("Videos/" + item.Id + "/AlternateVersions", { + userId: user.Id + }); + + $.getJSON(url).done(function (result) { + + if (result.Items.length) { + + $('#alternateVersionsCollapsible', page).show(); + + $('#additionalPartsCollapsible', page).show(); + + var html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + context: 'movies', + useAverageAspectRatio: true, + showTitle: true, + centerText: true, + formatIndicators: true + }); + + $('#alternateVersionsContent', page).html(html).trigger('create').createPosterItemHoverMenu(); + } else { + $('#alternateVersionsCollapsible', page).hide(); + } + }); + } + function renderScenes(page, item, user, limit) { var html = ''; diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 76eda9e4a..90227fcd2 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -665,7 +665,7 @@ html += ''; // Ribbon - if (item.MediaType == "Video" && item.Video3DFormat) { + if (item.MediaType == "Video" && options.formatIndicators) { // This would be much better if specified in the json payload // Another nice thing to have in the payload would be 720 vs 1080 // Then, rather than "HD" it could display the specific HD format @@ -2186,18 +2186,18 @@ var sequence = this; - Dashboard.getCurrentUser().done(function (user) { + //Dashboard.getCurrentUser().done(function (user) { - if (user.Configuration.IsAdministrator) { + // if (user.Configuration.IsAdministrator) { - sequence.createContextMenu({ - getOptions: getMenuOptions, - command: onMenuCommand, - selector: '.posterItem' - }); - } + // sequence.createContextMenu({ + // getOptions: getMenuOptions, + // command: onMenuCommand, + // selector: '.posterItem' + // }); + // } - }); + //}); return this.on('mouseenter', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverIn) .on('mouseleave', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverOut); From 6429e4e379e2913b92057ee744a6b5f5d665a57d Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 16 Mar 2014 00:23:58 -0400 Subject: [PATCH 4/9] #712 - Support grouping multiple versions of a movie --- dashboard-ui/css/librarybrowser.css | 16 ++++++++ dashboard-ui/editcollectionitems.html | 2 +- dashboard-ui/scripts/episodes.js | 2 +- dashboard-ui/scripts/gamespage.js | 2 +- dashboard-ui/scripts/itembynamedetailpage.js | 2 +- dashboard-ui/scripts/itemdetailpage.js | 12 +++--- dashboard-ui/scripts/librarybrowser.js | 39 ++++++++++++-------- dashboard-ui/scripts/livetvrecordinglist.js | 2 +- dashboard-ui/scripts/livetvrecordings.js | 2 +- dashboard-ui/scripts/livetvseriestimer.js | 2 +- dashboard-ui/scripts/livetvsuggested.js | 4 +- dashboard-ui/scripts/moviecollections.js | 2 +- dashboard-ui/scripts/movies.js | 2 +- dashboard-ui/scripts/movieslatest.js | 4 +- dashboard-ui/scripts/moviesrecommended.js | 4 +- dashboard-ui/scripts/movietrailers.js | 2 +- dashboard-ui/scripts/musicalbumartists.js | 2 +- dashboard-ui/scripts/musicalbums.js | 2 +- dashboard-ui/scripts/musicartists.js | 2 +- dashboard-ui/scripts/musicrecommended.js | 8 ++-- dashboard-ui/scripts/tvlatest.js | 2 +- dashboard-ui/scripts/tvrecommended.js | 4 +- dashboard-ui/scripts/tvshows.js | 2 +- dashboard-ui/scripts/tvupcoming.js | 2 +- 24 files changed, 72 insertions(+), 51 deletions(-) diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index e8135f718..bf78665b7 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -912,6 +912,22 @@ a.itemTag:hover { background-color: transparent !important; } +.alternateVersionIndicator { + display: block; + position: absolute; + top: 5px; + left: 5px; + text-align: center; + vertical-align: middle; + width: 22px; + height: 19px; + padding-top: 3px; + border-radius: 50%; + color: #fff; + background: rgb(51, 136, 204); + background: rgba(51, 136, 204, .9); +} + .unidentifiedIndicator { display: block; position: absolute; diff --git a/dashboard-ui/editcollectionitems.html b/dashboard-ui/editcollectionitems.html index 7d7c1d1a0..a1989d4f4 100644 --- a/dashboard-ui/editcollectionitems.html +++ b/dashboard-ui/editcollectionitems.html @@ -59,7 +59,7 @@
-
+
diff --git a/dashboard-ui/livetvstatus.html b/dashboard-ui/livetvstatus.html index 305ad0300..d8370ef02 100644 --- a/dashboard-ui/livetvstatus.html +++ b/dashboard-ui/livetvstatus.html @@ -23,6 +23,14 @@

Status:

Version:

+
+ +
+ + +
Last Result:
+
+

Tuners

diff --git a/dashboard-ui/scripts/dashboardpage.js b/dashboard-ui/scripts/dashboardpage.js index 297f6a4cd..8d652db36 100644 --- a/dashboard-ui/scripts/dashboardpage.js +++ b/dashboard-ui/scripts/dashboardpage.js @@ -372,16 +372,21 @@ html += '

'; - html += task.Name; + html += task.Name+"
"; if (task.State == "Running") { var progress = (task.CurrentProgressPercentage || 0).toFixed(1); - html += ' - ' + progress + '%'; + + html += ''; + html += '' + progress + '%'; + html += ''; + + html += "" + progress + "%"; html += ''; } else if (task.State == "Cancelling") { - html += ' - Stopping'; + html += 'Stopping'; } html += '

'; diff --git a/dashboard-ui/scripts/livetvstatus.js b/dashboard-ui/scripts/livetvstatus.js index e68ca9e66..434efc966 100644 --- a/dashboard-ui/scripts/livetvstatus.js +++ b/dashboard-ui/scripts/livetvstatus.js @@ -157,12 +157,102 @@ }); } - $(document).on('pageshow', "#liveTvStatusPage", function () { + function pollTasks(page) { + + ApiClient.getScheduledTasks().done(function (tasks) { + + updateTasks(page, tasks); + }); + + } + + function updateTasks(page, tasks) { + + $('.refreshGuidePanel', page).removeClass('hide'); + + var task = tasks.filter(function (t) { + + return t.Name == 'Refresh Guide'; + + })[0]; + + $('.btnRefreshGuide', page).buttonEnabled(task.State == 'Idle').attr('data-taskid', task.Id); + + var progress = (task.CurrentProgressPercentage || 0).toFixed(1); + $('.refreshGuideProgress', page).val(progress); + var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; + + if (lastResult == "Failed") { + $('.lastRefreshGuideResult', page).html('(failed)'); + } + else if (lastResult == "Cancelled") { + $('.lastRefreshGuideResult', page).html('(cancelled)'); + } + else if (lastResult == "Aborted") { + $('.lastRefreshGuideResult', page).html('(Aborted by server shutdown)'); + } else { + $('.lastRefreshGuideResult', page).html(lastResult); + } + } + + function onWebSocketMessage(e, msg) { + + if (msg.MessageType == "ScheduledTasksInfo") { + + var tasks = msg.Data; + + var page = $.mobile.activePage; + + updateTasks(page, tasks); + } + } + + $(document).on('pageinit', "#liveTvStatusPage", function () { var page = this; + $('.btnRefreshGuide', page).on('click', function () { + + var button = this; + var id = button.getAttribute('data-taskid'); + + ApiClient.startScheduledTask(id).done(function () { + + pollTasks(page); + }); + + }); + + }).on('pageshow', "#liveTvStatusPage", function () { + + var page = this; + + $('.refreshGuidePanel', page).addClass('hide'); + reload(page); + pollTasks(page); + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500"); + } + + $(ApiClient).on("websocketmessage", onWebSocketMessage).on('websocketopen', function () { + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500"); + } + }); + + }).on('pagehide', "#liveTvStatusPage", function () { + + var page = this; + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop"); + } + + $(ApiClient).off("websocketmessage", onWebSocketMessage); }); })(jQuery, document, window); diff --git a/dashboard-ui/scripts/medialibrarypage.js b/dashboard-ui/scripts/medialibrarypage.js index 0ebff6a68..0a13a900b 100644 --- a/dashboard-ui/scripts/medialibrarypage.js +++ b/dashboard-ui/scripts/medialibrarypage.js @@ -326,4 +326,104 @@ } }; -$(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow); \ No newline at end of file +$(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow); + +(function ($, document, window) { + + function pollTasks(page) { + + ApiClient.getScheduledTasks().done(function (tasks) { + + updateTasks(page, tasks); + }); + + } + + function updateTasks(page, tasks) { + + $('.refreshLibraryPanel', page).removeClass('hide'); + + var task = tasks.filter(function (t) { + + return t.Name == 'Scan media library'; + + })[0]; + + $('.btnRefresh', page).buttonEnabled(task.State == 'Idle').attr('data-taskid', task.Id); + + var progress = (task.CurrentProgressPercentage || 0).toFixed(1); + $('.refreshProgress', page).val(progress); + var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; + + if (lastResult == "Failed") { + $('.lastRefreshResult', page).html('(failed)'); + } + else if (lastResult == "Cancelled") { + $('.lastRefreshResult', page).html('(cancelled)'); + } + else if (lastResult == "Aborted") { + $('.lastRefreshResult', page).html('(Aborted by server shutdown)'); + } else { + $('.lastRefreshResult', page).html(lastResult); + } + } + + function onWebSocketMessage(e, msg) { + + if (msg.MessageType == "ScheduledTasksInfo") { + + var tasks = msg.Data; + + var page = $.mobile.activePage; + + updateTasks(page, tasks); + } + } + + $(document).on('pageinit', "#mediaLibraryPage", function () { + + var page = this; + + $('.btnRefresh', page).on('click', function () { + + var button = this; + var id = button.getAttribute('data-taskid'); + + ApiClient.startScheduledTask(id).done(function () { + + pollTasks(page); + }); + + }); + + }).on('pageshow', "#mediaLibraryPage", function () { + + var page = this; + + $('.refreshLibraryPanel', page).addClass('hide'); + + pollTasks(page); + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500"); + } + + $(ApiClient).on("websocketmessage", onWebSocketMessage).on('websocketopen', function () { + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500"); + } + }); + + }).on('pagehide', "#mediaLibraryPage", function () { + + var page = this; + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop"); + } + + $(ApiClient).off("websocketmessage", onWebSocketMessage); + }); + +})(jQuery, document, window); From 122f1949f1792c4297ca63a7fa809e7e637f3248 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 16 Mar 2014 18:08:23 -0400 Subject: [PATCH 7/9] fix file name casing --- dashboard-ui/scripts/livetvstatus.js | 9 ++++++++- dashboard-ui/scripts/medialibrarypage.js | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dashboard-ui/scripts/livetvstatus.js b/dashboard-ui/scripts/livetvstatus.js index 434efc966..a805107f7 100644 --- a/dashboard-ui/scripts/livetvstatus.js +++ b/dashboard-ui/scripts/livetvstatus.js @@ -179,7 +179,14 @@ $('.btnRefreshGuide', page).buttonEnabled(task.State == 'Idle').attr('data-taskid', task.Id); var progress = (task.CurrentProgressPercentage || 0).toFixed(1); - $('.refreshGuideProgress', page).val(progress); + var progressElem = $('.refreshGuideProgress', page).val(progress); + + if (task.State == 'Running') { + progressElem.show(); + } else { + progressElem.hide(); + } + var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; if (lastResult == "Failed") { diff --git a/dashboard-ui/scripts/medialibrarypage.js b/dashboard-ui/scripts/medialibrarypage.js index 0a13a900b..ba1b9b15e 100644 --- a/dashboard-ui/scripts/medialibrarypage.js +++ b/dashboard-ui/scripts/medialibrarypage.js @@ -352,7 +352,14 @@ $(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow); $('.btnRefresh', page).buttonEnabled(task.State == 'Idle').attr('data-taskid', task.Id); var progress = (task.CurrentProgressPercentage || 0).toFixed(1); - $('.refreshProgress', page).val(progress); + var progressElem = $('.refreshProgress', page).val(progress); + + if (task.State == 'Running') { + progressElem.show(); + } else { + progressElem.hide(); + } + var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; if (lastResult == "Failed") { From 1e76f3cfe42a4fb2178318f9c29c5e7952a8be28 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 17 Mar 2014 01:23:13 -0400 Subject: [PATCH 8/9] change user flyout to panel --- dashboard-ui/scripts/site.js | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 03818daba..d0d81f627 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -463,40 +463,35 @@ var Dashboard = { Dashboard.getCurrentUser().done(function (user) { - var html = '
'; + var html = '
'; - html += 'Close'; + html += '

'; - html += '
'; - html += '

' + user.Name + '

'; - html += '
'; + if (user.PrimaryImageTag) { + var imageUrl = ApiClient.getUserImageUrl(user.Id, { - html += '
'; + width: 60, + tag: user.PrimaryImageTag, + type: "Primary" - html += '

'; + }); - var imageUrl = user.PrimaryImageTag ? ApiClient.getUserImageUrl(user.Id, { + html += ''; + } - height: 400, - tag: user.PrimaryImageTag, - type: "Primary" + html += user.Name; + html += '

'; - }) : "css/images/userflyoutdefault.png"; - - html += ''; - html += '

'; - - html += '

View Profile'; + html += '

Preferences'; html += '

'; - html += '
'; html += '
'; $(document.body).append(html); - $('#userFlyout').popup({ positionTo: context }).trigger('create').popup("open").on("popupafterclose", function () { + $('#userFlyout').panel({}).trigger('create').panel("open").on("panelafterclose", function () { - $(this).off("popupafterclose").remove(); + $(this).off("panelafterclose").remove(); }); }); }, From 7dcf71e25613b724f72309fa1cc274e14720d625 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 17 Mar 2014 10:48:16 -0400 Subject: [PATCH 9/9] expand device identification --- dashboard-ui/collections.html | 4 +- dashboard-ui/css/librarybrowser.css | 4 + dashboard-ui/css/posteritem.css | 23 +- dashboard-ui/episodes.html | 4 +- dashboard-ui/gamegenres.html | 4 +- dashboard-ui/games.html | 4 +- dashboard-ui/gamestudios.html | 4 +- dashboard-ui/itemlist.html | 4 +- dashboard-ui/moviegenres.html | 4 +- dashboard-ui/moviepeople.html | 4 +- dashboard-ui/movies.html | 4 +- dashboard-ui/moviestudios.html | 4 +- dashboard-ui/movietrailers.html | 4 +- dashboard-ui/musicalbumartists.html | 4 +- dashboard-ui/musicalbums.html | 4 +- dashboard-ui/musicartists.html | 4 +- dashboard-ui/musicgenres.html | 4 +- dashboard-ui/musicvideos.html | 4 +- dashboard-ui/scripts/librarybrowser.js | 276 +--------------------- dashboard-ui/scripts/librarylist.js | 273 +++++++++++++++++++++ dashboard-ui/scripts/libraryreport.js | 20 +- dashboard-ui/scripts/mediaplayer-video.js | 14 +- dashboard-ui/scripts/moviepeople.js | 21 +- dashboard-ui/scripts/site.js | 2 +- dashboard-ui/scripts/tvpeople.js | 21 +- dashboard-ui/songs.html | 4 +- dashboard-ui/tvgenres.html | 4 +- dashboard-ui/tvpeople.html | 4 +- dashboard-ui/tvshows.html | 4 +- dashboard-ui/tvstudios.html | 4 +- 30 files changed, 344 insertions(+), 394 deletions(-) create mode 100644 dashboard-ui/scripts/librarylist.js diff --git a/dashboard-ui/collections.html b/dashboard-ui/collections.html index f4c99aaac..2c0cc6e8a 100644 --- a/dashboard-ui/collections.html +++ b/dashboard-ui/collections.html @@ -10,12 +10,12 @@
-
-
+
+
diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index bf78665b7..b7e38de8a 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -212,6 +212,10 @@ margin: .5em 0 .25em; } +.viewControls + .listTopPaging { + margin-left: .5em!important; +} + .labelPageSize { margin-left: 1em!important; display: inline !important; diff --git a/dashboard-ui/css/posteritem.css b/dashboard-ui/css/posteritem.css index 8f4d8e0a1..9b31979f6 100644 --- a/dashboard-ui/css/posteritem.css +++ b/dashboard-ui/css/posteritem.css @@ -304,14 +304,6 @@ @media all and (min-width: 1440px) { - .squarePosterItem { - width: 180px; - } - - .squarePosterItem .posterItemImage { - height: 180px; - } - .backdropPosterItem { width: 298px; } @@ -320,17 +312,6 @@ height: 167.625px; } } - -@media all and (min-width: 1920px) { - - .squarePosterItem { - width: 190px; - } - - .squarePosterItem .posterItemImage { - height: 190px; - } -} /********************/ .ribbon-wrapper { width: 50px; @@ -341,6 +322,7 @@ left: 0px; z-index: 999; } + .ribbon { font: bold 11px Sans-Serif; color: #333; @@ -360,6 +342,7 @@ -moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); } + .ribbon-3d { background-color: #3344ff; background-image: -webkit-gradient(linear, left top, left bottom, from(#BFDC7A), to(#ff0033)); @@ -368,6 +351,7 @@ background-image: -ms-linear-gradient(top, #3344ff, #ff0033); background-image: -o-linear-gradient(top, #3344ff, #ff0033); } + .ribbon-blue { background-color: #1199ff; background-image: -webkit-gradient(linear, left top, left bottom, from(#1199ff), to(#3333ff)); @@ -376,6 +360,7 @@ background-image: -ms-linear-gradient(top, #1199ff, #3333ff); background-image: -o-linear-gradient(top, #1199ff, #3333ff); } + .ribbon-red { background-color: #ff3333; background-image: -webkit-gradient(linear, left top, left bottom, from(#ff3333), to(#992233)); diff --git a/dashboard-ui/episodes.html b/dashboard-ui/episodes.html index 4a83dd96a..b0045117c 100644 --- a/dashboard-ui/episodes.html +++ b/dashboard-ui/episodes.html @@ -21,12 +21,12 @@
-
-
+
+
diff --git a/dashboard-ui/gamegenres.html b/dashboard-ui/gamegenres.html index 81453abd1..3371685cc 100644 --- a/dashboard-ui/gamegenres.html +++ b/dashboard-ui/gamegenres.html @@ -14,11 +14,11 @@
-
-
+
+
diff --git a/dashboard-ui/games.html b/dashboard-ui/games.html index ae60fd386..c41ae75bc 100644 --- a/dashboard-ui/games.html +++ b/dashboard-ui/games.html @@ -16,12 +16,12 @@
-
-
+
+
diff --git a/dashboard-ui/gamestudios.html b/dashboard-ui/gamestudios.html index 51fe231e9..89c7bef51 100644 --- a/dashboard-ui/gamestudios.html +++ b/dashboard-ui/gamestudios.html @@ -14,11 +14,11 @@
-
-
+
+
diff --git a/dashboard-ui/itemlist.html b/dashboard-ui/itemlist.html index ac31e62e5..815b5c599 100644 --- a/dashboard-ui/itemlist.html +++ b/dashboard-ui/itemlist.html @@ -23,12 +23,12 @@ -
-
+
+
diff --git a/dashboard-ui/moviegenres.html b/dashboard-ui/moviegenres.html index b36bcc042..811741075 100644 --- a/dashboard-ui/moviegenres.html +++ b/dashboard-ui/moviegenres.html @@ -18,11 +18,11 @@
-
-
+
+
diff --git a/dashboard-ui/moviepeople.html b/dashboard-ui/moviepeople.html index c1c1e14a9..063c7bc48 100644 --- a/dashboard-ui/moviepeople.html +++ b/dashboard-ui/moviepeople.html @@ -20,11 +20,11 @@
-
-
+
+
diff --git a/dashboard-ui/movies.html b/dashboard-ui/movies.html index 90fb8d9ca..26f4e616e 100644 --- a/dashboard-ui/movies.html +++ b/dashboard-ui/movies.html @@ -29,12 +29,12 @@ -
-
+
+
diff --git a/dashboard-ui/moviestudios.html b/dashboard-ui/moviestudios.html index ebc832066..0015df047 100644 --- a/dashboard-ui/moviestudios.html +++ b/dashboard-ui/moviestudios.html @@ -18,11 +18,11 @@
-
-
+
+
diff --git a/dashboard-ui/movietrailers.html b/dashboard-ui/movietrailers.html index 85820c401..308248a9c 100644 --- a/dashboard-ui/movietrailers.html +++ b/dashboard-ui/movietrailers.html @@ -20,12 +20,12 @@
-
-
+
+
diff --git a/dashboard-ui/musicalbumartists.html b/dashboard-ui/musicalbumartists.html index e9f8b2616..3bde05330 100644 --- a/dashboard-ui/musicalbumartists.html +++ b/dashboard-ui/musicalbumartists.html @@ -19,11 +19,11 @@
-
-
+
+
diff --git a/dashboard-ui/musicalbums.html b/dashboard-ui/musicalbums.html index fe1888364..ff56ef41a 100644 --- a/dashboard-ui/musicalbums.html +++ b/dashboard-ui/musicalbums.html @@ -26,12 +26,12 @@ -
-
+
+
diff --git a/dashboard-ui/musicartists.html b/dashboard-ui/musicartists.html index 86acb81e0..9152311dc 100644 --- a/dashboard-ui/musicartists.html +++ b/dashboard-ui/musicartists.html @@ -19,11 +19,11 @@
-
-
+
+
diff --git a/dashboard-ui/musicgenres.html b/dashboard-ui/musicgenres.html index 7a1f04dcb..e2b99c480 100644 --- a/dashboard-ui/musicgenres.html +++ b/dashboard-ui/musicgenres.html @@ -16,11 +16,11 @@
-
-
+
+
diff --git a/dashboard-ui/musicvideos.html b/dashboard-ui/musicvideos.html index 9dfd9c4ba..f8fdf1855 100644 --- a/dashboard-ui/musicvideos.html +++ b/dashboard-ui/musicvideos.html @@ -20,12 +20,12 @@
-
-
+
+
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 534e20898..5a463d30e 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -1936,278 +1936,4 @@ }; -})(window, document, jQuery, screen, localStorage); - -(function ($, document, window) { - - var showOverlayTimeout; - - function onHoverOut() { - - if (showOverlayTimeout) { - clearTimeout(showOverlayTimeout); - showOverlayTimeout = null; - } - - $('.posterItemOverlayTarget:visible', this).each(function () { - - var elem = this; - - $(this).animate({ "height": "0" }, "fast", function () { - - $(elem).hide(); - - }); - - }); - - $('.posterItemOverlayTarget:visible', this).stop().animate({ "height": "0" }, function () { - - $(this).hide(); - - }); - } - - function getOverlayHtml(item, currentUser, posterItem) { - - var html = ''; - - html += '
'; - - var isSmallItem = $(posterItem).hasClass('smallBackdropPosterItem'); - var isPortrait = $(posterItem).hasClass('portraitPosterItem'); - var isSquare = $(posterItem).hasClass('squarePosterItem'); - - var parentName = isSmallItem || isPortrait ? null : item.SeriesName; - var name = LibraryBrowser.getPosterViewDisplayName(item, true); - - html += '
'; - var logoHeight = isSmallItem ? 20 : 26; - var maxLogoWidth = isPortrait ? 100 : 200; - var imgUrl; - - if (parentName && item.ParentLogoItemId) { - - imgUrl = ApiClient.getImageUrl(item.ParentLogoItemId, { - height: logoHeight * 2, - type: 'logo', - tag: item.ParentLogoImageTag - }); - - html += ''; - - } - else if (item.ImageTags.Logo) { - - imgUrl = LibraryBrowser.getImageUrl(item, 'Logo', 0, { - height: logoHeight * 2, - }); - - html += ''; - } - else { - html += parentName || name; - } - html += '
'; - - if (parentName) { - html += '

'; - html += name; - html += '

'; - } else if (!isSmallItem) { - html += '

'; - html += LibraryBrowser.getMiscInfoHtml(item); - html += '

'; - } - - html += '
'; - html += ''; - html += LibraryBrowser.getRatingHtml(item, false); - html += ''; - - if (isPortrait) { - html += ''; - html += LibraryBrowser.getUserDataIconsHtml(item); - html += ''; - } else { - html += ''; - html += LibraryBrowser.getUserDataIconsHtml(item); - html += ''; - } - html += '
'; - - html += '
'; - - var buttonMargin = isPortrait || isSquare ? "margin:0 4px 0 0;" : "margin:0 10px 0 0;"; - - var buttonCount = 0; - - if (MediaPlayer.canPlay(item, currentUser)) { - - var resumePosition = (item.UserData || {}).PlaybackPositionTicks || 0; - var onPlayClick = 'LibraryBrowser.showPlayMenu(this, \'' + item.Id + '\', \'' + item.Type + '\', \'' + item.MediaType + '\', ' + resumePosition + ');return false;'; - - html += ''; - buttonCount++; - - if (item.MediaType == "Audio" || item.Type == "MusicAlbum") { - html += ''; - buttonCount++; - } - } - - if (item.LocalTrailerCount && item.PlayAccess == 'Full') { - html += ''; - buttonCount++; - } - - if (currentUser.Configuration.IsAdministrator && item.Type != "Recording" && item.Type != "Program") { - html += ''; - buttonCount++; - } - - if (!isPortrait || buttonCount < 3) { - html += ''; - } - - html += '
'; - - html += '
'; - - return html; - } - - function onTrailerButtonClick() { - - var id = this.getAttribute('data-itemid'); - - ApiClient.getLocalTrailers(Dashboard.getCurrentUserId(), id).done(function (trailers) { - MediaPlayer.play(trailers); - }); - - return false; - } - - function onRemoteControlButtonClick() { - - var id = this.getAttribute('data-itemid'); - - ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) { - - RemoteControl.showMenuForItem({ - item: item - }); - - }); - - return false; - } - - function onMenuCommand(command, elem) { - - var id = elem.getAttribute('data-itemid'); - } - - function getMenuOptions(elem) { - - var items = []; - - var id = elem.getAttribute('data-itemid'); - var mediatype = elem.getAttribute('data-mediatype'); - - items.push({ type: 'header', text: 'Edit' }); - - items.push({ type: 'link', text: 'Details', url: 'edititemmetadata.html?id=' + id }); - - items.push({ type: 'link', text: 'Images', url: 'edititemimages.html?id=' + id }); - - //if (mediatype == 'Video' && elem.getAttribute('data-locationtype') == 'FileSystem' && !elem.getAttribute('data-primaryversionid')) { - - // items.push({ type: 'divider' }); - // items.push({ type: 'header', text: 'Manage' }); - // items.push({ type: 'command', text: 'Alternate Versions', name: 'AlternateVersions' }); - //} - - return items; - } - - $.fn.createPosterItemMenus = function (options) { - - options = options || {}; - - function onShowTimerExpired(elem) { - - if ($(elem).hasClass('hasContextMenu')) { - return; - } - - var innerElem = $('.posterItemOverlayTarget', elem); - var id = elem.getAttribute('data-itemid'); - - var promise1 = ApiClient.getItem(Dashboard.getCurrentUserId(), id); - var promise2 = Dashboard.getCurrentUser(); - - $.when(promise1, promise2).done(function (response1, response2) { - - var item = response1[0]; - var user = response2[0]; - - innerElem.html(getOverlayHtml(item, user, elem)).trigger('create'); - - $('.btnPlayTrailer', innerElem).on('click', onTrailerButtonClick); - $('.btnRemoteControl', innerElem).on('click', onRemoteControlButtonClick); - }); - - innerElem.show().each(function () { - - this.style.height = 0; - - }).animate({ "height": "100%" }, "fast"); - } - - function onHoverIn() { - - if (showOverlayTimeout) { - clearTimeout(showOverlayTimeout); - showOverlayTimeout = null; - } - - var elem = this; - - showOverlayTimeout = setTimeout(function () { - - onShowTimerExpired(elem); - - }, 1000); - } - - // https://hacks.mozilla.org/2013/04/detecting-touch-its-the-why-not-the-how/ - - if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) { - /* browser with either Touch Events of Pointer Events - running on touch-capable device */ - return this; - } - - var sequence = this; - - if (options.contextMenu !== false) { - Dashboard.getCurrentUser().done(function (user) { - - if (user.Configuration.IsAdministrator) { - - sequence.createContextMenu({ - getOptions: getMenuOptions, - command: onMenuCommand, - selector: '.posterItem' - }); - } - - }); - } - - return this.on('mouseenter', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverIn) - .on('mouseleave', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverOut); - }; - -})(jQuery, document, window); \ No newline at end of file +})(window, document, jQuery, screen, localStorage); \ No newline at end of file diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js new file mode 100644 index 000000000..be58d3d42 --- /dev/null +++ b/dashboard-ui/scripts/librarylist.js @@ -0,0 +1,273 @@ +(function ($, document, window) { + + var showOverlayTimeout; + + function onHoverOut() { + + if (showOverlayTimeout) { + clearTimeout(showOverlayTimeout); + showOverlayTimeout = null; + } + + $('.posterItemOverlayTarget:visible', this).each(function () { + + var elem = this; + + $(this).animate({ "height": "0" }, "fast", function () { + + $(elem).hide(); + + }); + + }); + + $('.posterItemOverlayTarget:visible', this).stop().animate({ "height": "0" }, function () { + + $(this).hide(); + + }); + } + + function getOverlayHtml(item, currentUser, posterItem) { + + var html = ''; + + html += '
'; + + var isSmallItem = $(posterItem).hasClass('smallBackdropPosterItem'); + var isPortrait = $(posterItem).hasClass('portraitPosterItem'); + var isSquare = $(posterItem).hasClass('squarePosterItem'); + + var parentName = isSmallItem || isPortrait ? null : item.SeriesName; + var name = LibraryBrowser.getPosterViewDisplayName(item, true); + + html += '
'; + var logoHeight = isSmallItem ? 20 : 26; + var maxLogoWidth = isPortrait ? 100 : 200; + var imgUrl; + + if (parentName && item.ParentLogoItemId) { + + imgUrl = ApiClient.getImageUrl(item.ParentLogoItemId, { + height: logoHeight * 2, + type: 'logo', + tag: item.ParentLogoImageTag + }); + + html += ''; + + } + else if (item.ImageTags.Logo) { + + imgUrl = LibraryBrowser.getImageUrl(item, 'Logo', 0, { + height: logoHeight * 2, + }); + + html += ''; + } + else { + html += parentName || name; + } + html += '
'; + + if (parentName) { + html += '

'; + html += name; + html += '

'; + } else if (!isSmallItem) { + html += '

'; + html += LibraryBrowser.getMiscInfoHtml(item); + html += '

'; + } + + html += '
'; + html += ''; + html += LibraryBrowser.getRatingHtml(item, false); + html += ''; + + if (isPortrait) { + html += ''; + html += LibraryBrowser.getUserDataIconsHtml(item); + html += ''; + } else { + html += ''; + html += LibraryBrowser.getUserDataIconsHtml(item); + html += ''; + } + html += '
'; + + html += '
'; + + var buttonMargin = isPortrait || isSquare ? "margin:0 4px 0 0;" : "margin:0 10px 0 0;"; + + var buttonCount = 0; + + if (MediaPlayer.canPlay(item, currentUser)) { + + var resumePosition = (item.UserData || {}).PlaybackPositionTicks || 0; + var onPlayClick = 'LibraryBrowser.showPlayMenu(this, \'' + item.Id + '\', \'' + item.Type + '\', \'' + item.MediaType + '\', ' + resumePosition + ');return false;'; + + html += ''; + buttonCount++; + + if (item.MediaType == "Audio" || item.Type == "MusicAlbum") { + html += ''; + buttonCount++; + } + } + + if (item.LocalTrailerCount && item.PlayAccess == 'Full') { + html += ''; + buttonCount++; + } + + if (currentUser.Configuration.IsAdministrator && item.Type != "Recording" && item.Type != "Program") { + html += ''; + buttonCount++; + } + + if (!isPortrait || buttonCount < 3) { + html += ''; + } + + html += '
'; + + html += '
'; + + return html; + } + + function onTrailerButtonClick() { + + var id = this.getAttribute('data-itemid'); + + ApiClient.getLocalTrailers(Dashboard.getCurrentUserId(), id).done(function (trailers) { + MediaPlayer.play(trailers); + }); + + return false; + } + + function onRemoteControlButtonClick() { + + var id = this.getAttribute('data-itemid'); + + ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) { + + RemoteControl.showMenuForItem({ + item: item + }); + + }); + + return false; + } + + function onMenuCommand(command, elem) { + + var id = elem.getAttribute('data-itemid'); + } + + function getMenuOptions(elem) { + + var items = []; + + var id = elem.getAttribute('data-itemid'); + var mediatype = elem.getAttribute('data-mediatype'); + + items.push({ type: 'header', text: 'Edit' }); + + items.push({ type: 'link', text: 'Details', url: 'edititemmetadata.html?id=' + id }); + + items.push({ type: 'link', text: 'Images', url: 'edititemimages.html?id=' + id }); + + //if (mediatype == 'Video' && elem.getAttribute('data-locationtype') == 'FileSystem' && !elem.getAttribute('data-primaryversionid')) { + + // items.push({ type: 'divider' }); + // items.push({ type: 'header', text: 'Manage' }); + // items.push({ type: 'command', text: 'Alternate Versions', name: 'AlternateVersions' }); + //} + + return items; + } + + $.fn.createPosterItemMenus = function (options) { + + options = options || {}; + + function onShowTimerExpired(elem) { + + if ($(elem).hasClass('hasContextMenu')) { + return; + } + + var innerElem = $('.posterItemOverlayTarget', elem); + var id = elem.getAttribute('data-itemid'); + + var promise1 = ApiClient.getItem(Dashboard.getCurrentUserId(), id); + var promise2 = Dashboard.getCurrentUser(); + + $.when(promise1, promise2).done(function (response1, response2) { + + var item = response1[0]; + var user = response2[0]; + + innerElem.html(getOverlayHtml(item, user, elem)).trigger('create'); + + $('.btnPlayTrailer', innerElem).on('click', onTrailerButtonClick); + $('.btnRemoteControl', innerElem).on('click', onRemoteControlButtonClick); + }); + + innerElem.show().each(function () { + + this.style.height = 0; + + }).animate({ "height": "100%" }, "fast"); + } + + function onHoverIn() { + + if (showOverlayTimeout) { + clearTimeout(showOverlayTimeout); + showOverlayTimeout = null; + } + + var elem = this; + + showOverlayTimeout = setTimeout(function () { + + onShowTimerExpired(elem); + + }, 1000); + } + + // https://hacks.mozilla.org/2013/04/detecting-touch-its-the-why-not-the-how/ + + if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) { + /* browser with either Touch Events of Pointer Events + running on touch-capable device */ + return this; + } + + var sequence = this; + + if (options.contextMenu !== false) { + Dashboard.getCurrentUser().done(function (user) { + + if (user.Configuration.IsAdministrator) { + + sequence.createContextMenu({ + getOptions: getMenuOptions, + command: onMenuCommand, + selector: '.posterItem' + }); + } + + }); + } + + return this.on('mouseenter', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverIn) + .on('mouseleave', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverOut); + }; + +})(jQuery, document, window); \ No newline at end of file diff --git a/dashboard-ui/scripts/libraryreport.js b/dashboard-ui/scripts/libraryreport.js index afa0e6761..b170258a9 100644 --- a/dashboard-ui/scripts/libraryreport.js +++ b/dashboard-ui/scripts/libraryreport.js @@ -12,7 +12,8 @@ StartIndex: 0, IncludeItemTypes: "Movie", IsMissing: false, - IsVirtualUnaired: false + IsVirtualUnaired: false, + Limit: 300 }; function getHeaderCells(reportType) { @@ -529,11 +530,11 @@ // Scroll back up so they can see the results from the beginning $(document).scrollTop(0); - $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create'); + $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create'); updateFilterControls(page); - $('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount)).trigger('create'); + $('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create'); $('.reportContainer', page).html(getReportHtml(result.Items, reportType, query.SortBy, query.SortOrder)).trigger('create'); @@ -547,12 +548,6 @@ reloadItems(page); }); - $('.selectPageSize', page).on('change', function () { - query.Limit = parseInt(this.value); - query.StartIndex = 0; - reloadItems(page); - }); - $('.lnkColumnSort', page).on('click', function () { var order = this.getAttribute('data-sortfield'); @@ -841,13 +836,6 @@ }).on('pagebeforeshow', "#libraryReportPage", function () { var page = this; - var limit = LibraryBrowser.getDefaultPageSize(); - - // If the default page size has changed, the start index will have to be reset - if (limit != query.Limit) { - query.Limit = limit; - query.StartIndex = 0; - } query.SortBy = getDefaultSortOrder($('#selectView', page).val()); query.SortOrder = "Ascending"; diff --git a/dashboard-ui/scripts/mediaplayer-video.js b/dashboard-ui/scripts/mediaplayer-video.js index e5282eed1..a95c2d2b9 100644 --- a/dashboard-ui/scripts/mediaplayer-video.js +++ b/dashboard-ui/scripts/mediaplayer-video.js @@ -24,7 +24,7 @@ self.initVideoPlayer = function () { video = playVideo(item, startPosition, user); enhancePlayer(); - return video + return video; }; self.toggleFullscreen = function () { @@ -50,7 +50,7 @@ videoBackdrop.remove(); }; - self.exitFullScreen = function () { + self.exitFullScreen = function() { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.mozExitFullScreen) { @@ -62,11 +62,11 @@ $('#videoPlayer').removeClass('fullscreenVideo'); fullscreenExited = true; - } + }; - self.isFullScreen = function () { + self.isFullScreen = function() { return document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement ? true : false; - } + }; self.showSubtitleMenu = function () { @@ -349,7 +349,7 @@ function enterFullScreen() { - var player = $("#videoPlayer") + var player = $("#videoPlayer"); player.addClass("fullscreenVideo"); @@ -357,7 +357,7 @@ function exitFullScreenToWindow() { - var player = $("#videoPlayer") + var player = $("#videoPlayer"); player.removeClass("fullscreenVideo"); diff --git a/dashboard-ui/scripts/moviepeople.js b/dashboard-ui/scripts/moviepeople.js index 01e3df186..d7c41d4a8 100644 --- a/dashboard-ui/scripts/moviepeople.js +++ b/dashboard-ui/scripts/moviepeople.js @@ -9,7 +9,8 @@ Recursive: true, Fields: "DateCreated", PersonTypes: "", - StartIndex: 0 + StartIndex: 0, + Limit: 100 }; function reloadItems(page) { @@ -23,7 +24,7 @@ var html = ''; - $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create'); + $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create'); updateFilterControls(page); @@ -37,7 +38,7 @@ coverImage: true }); - html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); + html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false); $('#items', page).html(html).trigger('create'); @@ -51,12 +52,6 @@ reloadItems(page); }); - $('.selectPageSize', page).on('change', function () { - query.Limit = parseInt(this.value); - query.StartIndex = 0; - reloadItems(page); - }); - LibraryBrowser.saveQueryValues('moviepeople', query); Dashboard.hideLoadingMsg(); @@ -131,14 +126,6 @@ }).on('pagebeforeshow', "#moviePeoplePage", function () { - var limit = LibraryBrowser.getDefaultPageSize(); - - // If the default page size has changed, the start index will have to be reset - if (limit != query.Limit) { - query.Limit = limit; - query.StartIndex = 0; - } - LibraryBrowser.loadSavedQueryValues('moviepeople', query); reloadItems(this); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index d0d81f627..45e272cf3 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -463,7 +463,7 @@ var Dashboard = { Dashboard.getCurrentUser().done(function (user) { - var html = '
'; + var html = '
'; html += '

'; diff --git a/dashboard-ui/scripts/tvpeople.js b/dashboard-ui/scripts/tvpeople.js index 4294dc143..e38857d63 100644 --- a/dashboard-ui/scripts/tvpeople.js +++ b/dashboard-ui/scripts/tvpeople.js @@ -9,7 +9,8 @@ Recursive: true, Fields: "DateCreated", PersonTypes: "", - StartIndex: 0 + StartIndex: 0, + Limit: 100 }; function reloadItems(page) { @@ -23,7 +24,7 @@ var html = ''; - $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create'); + $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create'); updateFilterControls(page); @@ -37,7 +38,7 @@ coverImage: true }); - html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); + html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false); $('#items', page).html(html).trigger('create'); @@ -51,12 +52,6 @@ reloadItems(page); }); - $('.selectPageSize', page).on('change', function () { - query.Limit = parseInt(this.value); - query.StartIndex = 0; - reloadItems(page); - }); - LibraryBrowser.saveQueryValues('tvpeople', query); Dashboard.hideLoadingMsg(); @@ -140,14 +135,6 @@ }).on('pagebeforeshow', "#tvPeoplePage", function () { - var limit = LibraryBrowser.getDefaultPageSize(); - - // If the default page size has changed, the start index will have to be reset - if (limit != query.Limit) { - query.Limit = limit; - query.StartIndex = 0; - } - LibraryBrowser.loadSavedQueryValues('tvpeople', query); reloadItems(this); diff --git a/dashboard-ui/songs.html b/dashboard-ui/songs.html index 03c2ada95..7a81b6ea9 100644 --- a/dashboard-ui/songs.html +++ b/dashboard-ui/songs.html @@ -16,12 +16,12 @@

-
-
+
+
diff --git a/dashboard-ui/tvgenres.html b/dashboard-ui/tvgenres.html index 4634a5a26..5d4978800 100644 --- a/dashboard-ui/tvgenres.html +++ b/dashboard-ui/tvgenres.html @@ -17,11 +17,11 @@
-
-
+
+
diff --git a/dashboard-ui/tvpeople.html b/dashboard-ui/tvpeople.html index e433fe926..5b70ac2bb 100644 --- a/dashboard-ui/tvpeople.html +++ b/dashboard-ui/tvpeople.html @@ -20,11 +20,11 @@
-
-
+
+
diff --git a/dashboard-ui/tvshows.html b/dashboard-ui/tvshows.html index 96496b7e5..9443ed824 100644 --- a/dashboard-ui/tvshows.html +++ b/dashboard-ui/tvshows.html @@ -28,12 +28,12 @@
-
-
+
+
diff --git a/dashboard-ui/tvstudios.html b/dashboard-ui/tvstudios.html index a5b2e8643..8c0ceaed3 100644 --- a/dashboard-ui/tvstudios.html +++ b/dashboard-ui/tvstudios.html @@ -17,11 +17,11 @@
-
-
+
+