From 66b4ed053b6150a2df9fd408261e5141917b3cc5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 14 Sep 2016 12:20:03 -0400 Subject: [PATCH] update recording dialogs --- .../cardbuilder/cardbuilder.js | 35 +---- .../dialoghelper/dialoghelper.css | 2 +- .../emby-webcomponents/formdialog.css | 9 +- .../emby-webcomponents/guide/guide.js | 2 +- .../itemhovermenu/itemhovermenu.js | 2 +- .../emby-webcomponents/mediainfo/mediainfo.js | 20 +-- .../recordingcreator/empty.png | Bin 0 -> 156 bytes .../recordingcreator/recordingcreator.css | 13 +- .../recordingcreator/recordingcreator.js | 122 +++++++----------- .../recordingcreator.template.html | 65 ++-------- .../recordingcreator/recordingeditor.js | 6 +- .../recordingeditor.template.html | 2 +- .../emby-webcomponents/shortcuts.js | 19 +++ dashboard-ui/scripts/itembynamedetailpage.js | 27 +++- dashboard-ui/scripts/itemdetailpage.js | 3 +- dashboard-ui/scripts/livetvcomponents.js | 3 +- dashboard-ui/scripts/livetvrecordings.js | 7 +- dashboard-ui/scripts/livetvsuggested.js | 14 +- dashboard-ui/scripts/sections.js | 2 +- dashboard-ui/strings/en-US.json | 3 +- 20 files changed, 165 insertions(+), 191 deletions(-) create mode 100644 dashboard-ui/bower_components/emby-webcomponents/recordingcreator/empty.png diff --git a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js index 34322c36ce..2bea7eb583 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js +++ b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js @@ -148,7 +148,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'mediaInfo if (options.shape == 'auto' || options.shape == 'autohome' || options.shape == 'autooverflow' || options.shape == 'autoVertical') { - if (options.preferThumb || isThumbAspectRatio) { + if (options.preferThumb === true || isThumbAspectRatio) { options.shape = options.shape == 'autooverflow' ? 'overflowBackdrop' : 'backdrop'; } else if (isSquareAspectRatio) { options.coverImage = true; @@ -163,6 +163,10 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'mediaInfo } } + if (options.preferThumb == 'auto') { + options.preferThumb = options.shape == 'backdrop' || options.shape == 'overflowBackdrop'; + } + options.uiAspect = getDesiredAspect(options.shape); options.primaryImageAspectRatio = primaryImageAspectRatio; @@ -454,34 +458,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'mediaInfo var imgUrl = null; var coverImage = false; - if (options.autoThumb && item.ImageTags && item.ImageTags.Primary && item.PrimaryImageAspectRatio && item.PrimaryImageAspectRatio >= 1.34) { - - height = primaryImageAspectRatio ? Math.round(width / primaryImageAspectRatio) : null; - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Primary", - maxHeight: height, - maxWidth: width, - tag: item.ImageTags.Primary - }); - - if (primaryImageAspectRatio) { - if (uiAspect) { - if (Math.abs(primaryImageAspectRatio - uiAspect) <= .2) { - coverImage = true; - } - } - } - - } else if (options.autoThumb && item.ImageTags && item.ImageTags.Thumb) { - - imgUrl = ApiClient.getScaledImageUrl(item.Id, { - type: "Thumb", - maxWidth: width, - tag: item.ImageTags.Thumb - }); - - } else if (options.preferThumb && item.ImageTags && item.ImageTags.Thumb) { + if (options.preferThumb && item.ImageTags && item.ImageTags.Thumb) { imgUrl = apiClient.getScaledImageUrl(item.Id, { type: "Thumb", diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css index 45f09ec7b8..e8119c0671 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css +++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css @@ -92,5 +92,5 @@ } .dialogBackdropOpened { - opacity: .7; + opacity: .8; } diff --git a/dashboard-ui/bower_components/emby-webcomponents/formdialog.css b/dashboard-ui/bower_components/emby-webcomponents/formdialog.css index fadaeecdae..ca95cd7e6b 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/formdialog.css +++ b/dashboard-ui/bower_components/emby-webcomponents/formdialog.css @@ -27,7 +27,7 @@ } .dialogContentInner { - padding: .5em 1.5em 20em 1.5em; + padding: .5em 1em 20em 1em; } .dialogContentInner-mini { @@ -49,7 +49,7 @@ left: 0; right: 0; display: flex; - padding: 1.5em; + padding: 1.25em; /* Without this emby-checkbox is able to appear on top */ z-index: 1; align-items: center; @@ -70,6 +70,11 @@ .formDialogFooterItem { max-width: 80%; } + + .dialogContentInner { + padding-left: 1.5em; + padding-right: 1.5em; + } } @media all and (min-width: 1280px) { diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js index 90f07e80d7..ff9f25090c 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js @@ -367,7 +367,7 @@ if (program.SeriesTimerId) { timerAttributes += ' data-seriestimerid="' + program.SeriesTimerId + '"'; } - html += ' -

- ${HeaderNewRecording} -

+

@@ -12,7 +10,7 @@
-

+

@@ -21,7 +19,7 @@

-
+
-
-
-
-
-
-

${Days}

-
-
- - - - - - - -
-
-
-
-
- -
-
- -
-
-
-
-

@@ -113,8 +62,10 @@ ${HeaderBecomeProjectSupporter}
- +
diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js index 3e1f46123a..260c7885e8 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js @@ -1,4 +1,4 @@ -define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'scrollStyles', 'emby-button', 'emby-collapse', 'emby-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper) { +define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'imageLoader', 'scrollStyles', 'emby-button', 'emby-collapse', 'emby-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper, imageLoader) { var currentDialog; var recordingUpdated = false; @@ -66,8 +66,10 @@ var imageContainer = context.querySelector('.recordingDialog-imageContainer'); if (imgUrl) { - imageContainer.innerHTML = ''; + imageContainer.innerHTML = ''; imageContainer.classList.remove('hide'); + + imageLoader.lazyChildren(imageContainer); } else { imageContainer.innerHTML = ''; imageContainer.classList.add('hide'); diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html index 866803cd3e..76a06d8f67 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html @@ -16,10 +16,10 @@

-

+

diff --git a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js index 92370dd4b5..80a07a0934 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js +++ b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js @@ -91,6 +91,19 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g embyRouter.showItem(item, options); } + function showProgramDialog(item) { + + if (item.TimerId) { + showItem(item); + return; + } + + require(['recordingCreator'], function (recordingCreator) { + + recordingCreator.show(item.Id, item.ServerId); + }); + } + function getItem(button) { button = dom.parentWithAttribute(button, 'data-id'); @@ -168,6 +181,7 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g return { Type: card.getAttribute('data-type'), Id: card.getAttribute('data-id'), + TimerId: card.getAttribute('data-timerid'), CollectionType: card.getAttribute('data-collectiontype'), ChannelId: card.getAttribute('data-channelid'), SeriesId: card.getAttribute('data-seriesid'), @@ -217,6 +231,11 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g }); } + else if (action == 'programdialog') { + + showProgramDialog(item); + } + else if (action == 'instantmix') { playbackManager.instantMix(id, serverId); } diff --git a/dashboard-ui/scripts/itembynamedetailpage.js b/dashboard-ui/scripts/itembynamedetailpage.js index 69eed11354..1cb7437bdc 100644 --- a/dashboard-ui/scripts/itembynamedetailpage.js +++ b/dashboard-ui/scripts/itembynamedetailpage.js @@ -10,7 +10,13 @@ type: 'MusicArtist' }); } + if (item.ProgramCount) { + sections.push({ + name: Globalize.translate('HeaderUpcomingOnTV'), + type: 'Program' + }); + } if (item.MovieCount) { sections.push({ @@ -108,6 +114,24 @@ switch (type) { + case 'Program': + loadItems(element, item, type, { + MediaTypes: "", + IncludeItemTypes: "Program", + PersonTypes: "", + ArtistIds: "", + Limit: 10 + }, { + shape: "backdrop", + showTitle: true, + centerText: true, + overlayMoreButton: true, + preferThumb: true, + overlayText: false, + showProgramAirInfo: true + }); + break; + case 'Movie': loadItems(element, item, type, { MediaTypes: "", @@ -119,7 +143,8 @@ shape: "portrait", showTitle: true, centerText: true, - overlayMoreButton: true + overlayMoreButton: true, + overlayText: false }); break; diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 06abd20a17..4d754c1b60 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -565,7 +565,8 @@ var itemMiscInfo = page.querySelectorAll('.itemMiscInfo'); for (i = 0, length = itemMiscInfo.length; i < length; i++) { mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, { - interactive: true + interactive: true, + episodeTitle: false }); } var itemGenres = page.querySelectorAll('.itemGenres'); diff --git a/dashboard-ui/scripts/livetvcomponents.js b/dashboard-ui/scripts/livetvcomponents.js index aec875ec20..ce5995067c 100644 --- a/dashboard-ui/scripts/livetvcomponents.js +++ b/dashboard-ui/scripts/livetvcomponents.js @@ -89,7 +89,8 @@ showChannelName: true, lazy: true, cardLayout: true, - action: 'edit' + action: 'edit', + cardFooterAside: 'none' }); html += ''; diff --git a/dashboard-ui/scripts/livetvrecordings.js b/dashboard-ui/scripts/livetvrecordings.js index 2ffd4ebe92..bd8aaa9e24 100644 --- a/dashboard-ui/scripts/livetvrecordings.js +++ b/dashboard-ui/scripts/livetvrecordings.js @@ -84,7 +84,9 @@ coverImage: true, lazy: true, cardLayout: true, - allowBottomPadding: !enableScrollX() + allowBottomPadding: !enableScrollX(), + preferThumb: 'auto' + }, cardOptions || {})); ImageLoader.lazyChildren(recordingItems); @@ -117,7 +119,8 @@ Limit: enableScrollX() ? 12 : 8, IsInProgress: false, Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo', - EnableTotalRecordCount: false + EnableTotalRecordCount: false, + EnableImageTypes: "Primary,Thumb" }).then(function (result) { diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js index 2ff0b149ba..c0536ae60d 100644 --- a/dashboard-ui/scripts/livetvsuggested.js +++ b/dashboard-ui/scripts/livetvsuggested.js @@ -28,7 +28,7 @@ IsAiring: true, limit: limit, ImageTypeLimit: 1, - EnableImageTypes: "Primary", + EnableImageTypes: "Primary,Thumb", Fields: "ChannelInfo" }).then(function (result) { @@ -53,7 +53,8 @@ IsKids: false, IsSeries: true, EnableTotalRecordCount: false, - Fields: "ChannelInfo" + Fields: "ChannelInfo", + EnableImageTypes: "Primary,Thumb" }).then(function (result) { @@ -68,7 +69,8 @@ limit: getLimit(), IsMovie: true, EnableTotalRecordCount: false, - Fields: "ChannelInfo" + Fields: "ChannelInfo", + EnableImageTypes: "Primary,Thumb" }).then(function (result) { @@ -83,7 +85,8 @@ limit: getLimit(), IsSports: true, EnableTotalRecordCount: false, - Fields: "ChannelInfo" + Fields: "ChannelInfo", + EnableImageTypes: "Primary,Thumb" }).then(function (result) { @@ -98,7 +101,8 @@ limit: getLimit(), IsKids: true, EnableTotalRecordCount: false, - Fields: "ChannelInfo" + Fields: "ChannelInfo", + EnableImageTypes: "Primary,Thumb" }).then(function (result) { diff --git a/dashboard-ui/scripts/sections.js b/dashboard-ui/scripts/sections.js index 35ab9e54c3..16a61ca05d 100644 --- a/dashboard-ui/scripts/sections.js +++ b/dashboard-ui/scripts/sections.js @@ -457,8 +457,8 @@ centerText: true, overlayText: false, lazy: true, - autoThumb: true, transition: false, + preferThumb: true, allowBottomPadding: !enableScrollX() }); html += ''; diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index 30f4a40da1..102145b5ef 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -2136,5 +2136,6 @@ "Sports": "Sports", "HeaderForKids": "For Kids", "HeaderRecordingGroups": "Recording Groups", - "LabelConvertRecordingsTo": "Convert recordings to:" + "LabelConvertRecordingsTo": "Convert recordings to:", + "HeaderUpcomingOnTV": "Upcoming On TV" }