diff --git a/dashboard-ui/components/imageeditor/imageeditor.js b/dashboard-ui/components/imageeditor/imageeditor.js index ffe8bb0ea6..a17530bfe3 100644 --- a/dashboard-ui/components/imageeditor/imageeditor.js +++ b/dashboard-ui/components/imageeditor/imageeditor.js @@ -1,7 +1,8 @@ define(['dialogHelper', 'css!css/metadataeditor.css', 'emby-button', 'paper-icon-button-light'], function (dialogHelper) { var currentItem; - var currentDeferred; + var currentResolve; + var currentReject; var hasChanges = false; function getBaseRemoteOptions() { @@ -303,19 +304,25 @@ function onDialogClosed() { Dashboard.hideLoadingMsg(); - currentDeferred.resolveWith(null, [hasChanges]); + + if (hasChanges) { + currentResolve(); + } else { + currentReject(); + } } return { show: function (itemId, options) { - var deferred = jQuery.Deferred(); + return new Promise(function (resolve, reject) { - currentDeferred = deferred; - hasChanges = false; + currentResolve = resolve; + currentReject = reject; + hasChanges = false; - showEditor(itemId, options); - return deferred.promise(); + showEditor(itemId, options); + }); } }; }); \ No newline at end of file diff --git a/dashboard-ui/css/mediaplayer-video.css b/dashboard-ui/css/mediaplayer-video.css index f52fe245bb..6cc9fe16e3 100644 --- a/dashboard-ui/css/mediaplayer-video.css +++ b/dashboard-ui/css/mediaplayer-video.css @@ -107,30 +107,36 @@ vertical-align: middle; } +@media all and (max-width: 600px) { + .videoPositionSliderContainer { + width: 220px; + } +} + @media all and (max-width: 440px) { - .videoPositionSliderContainer { - width: 240px; - } -} - -@media all and (max-width: 400px) { - .videoPositionSliderContainer { - width: 200px; - } -} - -@media all and (max-width: 350px) { .videoPositionSliderContainer { width: 180px; } } -@media all and (max-width: 320px) { +@media all and (max-width: 400px) { + .videoPositionSliderContainer { + width: 150px; + } +} + +@media all and (max-width: 350px) { .videoPositionSliderContainer { width: 120px; } } +@media all and (max-width: 320px) { + .videoPositionSliderContainer { + width: 100px; + } +} + .nowPlayingTabButtons { margin-bottom: 1.25em; } diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 2acd7993a3..8cd249b9d7 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -1,4 +1,4 @@ -define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'backdrop', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo, backdrop) { +define(['layoutManager', 'datetime', 'mediaInfo', 'backdrop', 'scrollStyles'], function (layoutManager, datetime, mediaInfo, backdrop) { var currentItem; @@ -48,6 +48,19 @@ }); } + function hideAll(page, className, show) { + + var i, length; + var elems = page.querySelectorAll('.' + className); + for (i = 0, length = elems.length; i < length; i++) { + if (show) { + elems[i].classList.remove('hide'); + } else { + elems[i].classList.add('hide'); + } + } + } + function reloadFromItem(page, params, item) { currentItem = item; @@ -57,8 +70,8 @@ LibraryMenu.setBackButtonVisible(true); LibraryMenu.setMenuButtonVisible(false); - LibraryBrowser.renderName(item, $('.itemName', page), false, context); - LibraryBrowser.renderParentName(item, $('.parentName', page), context); + LibraryBrowser.renderName(item, page.querySelector('.itemName'), false, context); + LibraryBrowser.renderParentName(item, page.querySelector('.parentName'), context); LibraryMenu.setTitle(item.SeriesName || item.Name); Dashboard.getCurrentUser().then(function (user) { @@ -95,59 +108,64 @@ var now = new Date(); if (now >= datetime.parseISO8601Date(item.StartDate, true) && now < datetime.parseISO8601Date(item.EndDate, true)) { - $('.btnPlay', page).removeClass('hide'); + hideAll(page, 'btnPlay', true); canPlay = true; } else { - $('.btnPlay', page).addClass('hide'); + hideAll(page, 'btnPlay'); } } else if (MediaController.canPlay(item)) { - $('.btnPlay', page).removeClass('hide'); + hideAll(page, 'btnPlay', true); canPlay = true; } else { - $('.btnPlay', page).addClass('hide'); + hideAll(page, 'btnPlay'); } if (item.LocalTrailerCount && item.PlayAccess == 'Full') { - $('.btnPlayTrailer', page).removeClass('hide'); + hideAll(page, 'btnPlayTrailer', true); } else { - $('.btnPlayTrailer', page).addClass('hide'); + hideAll(page, 'btnPlayTrailer'); } if (LibraryBrowser.enableSync(item, user)) { - $('.btnSync', page).removeClass('hide'); + hideAll(page, 'btnSync', true); } else { - $('.btnSync', page).addClass('hide'); + hideAll(page, 'btnSync'); } if (item.Type == 'Program' && item.TimerId) { - $('.btnCancelRecording', page).removeClass('hide'); + hideAll(page, 'btnCancelRecording', true); } else { - $('.btnCancelRecording', page).addClass('hide'); + hideAll(page, 'btnCancelRecording'); } if (item.Type == 'Program' && (!item.TimerId && !item.SeriesTimerId)) { if (canPlay) { - $('.btnRecord', page).removeClass('hide'); - $('.btnFloatingRecord', page).addClass('hide'); + hideAll(page, 'btnRecord', true); + hideAll(page, 'btnFloatingRecord'); } else { - $('.btnRecord', page).addClass('hide'); - $('.btnFloatingRecord', page).removeClass('hide'); + hideAll(page, 'btnRecord'); + hideAll(page, 'btnFloatingRecord', true); } } else { - $('.btnRecord', page).addClass('hide'); - $('.btnFloatingRecord', page).addClass('hide'); + hideAll(page, 'btnRecord'); + hideAll(page, 'btnFloatingRecord'); } - if (!item.LocalTrailerCount && item.RemoteTrailers.length && item.PlayAccess == 'Full') { + var btnPlayExternalTrailer = page.querySelectorAll('.btnPlayExternalTrailer'); + for (var i = 0, length = btnPlayExternalTrailer.length; i < length; i++) { + if (!item.LocalTrailerCount && item.RemoteTrailers.length && item.PlayAccess == 'Full') { - $('.btnPlayExternalTrailer', page).removeClass('hide').attr('href', item.RemoteTrailers[0].Url); + btnPlayExternalTrailer[i].classList.remove('hide'); + btnPlayExternalTrailer[i].href = item.RemoteTrailers[0].Url; - } else { + } else { - $('.btnPlayExternalTrailer', page).addClass('hide').attr('href', '#'); + btnPlayExternalTrailer[i].classList.add('hide'); + btnPlayExternalTrailer[i].href = '#'; + } } var groupedVersions = (item.MediaSources || []).filter(function (g) { @@ -161,9 +179,9 @@ } if (LibraryBrowser.getMoreCommands(item, user).length > 0) { - $('.btnMoreCommands', page).removeClass('hide'); + hideAll(page, 'btnMoreCommands', true); } else { - $('.btnMoreCommands', page).addClass('hide'); + hideAll(page, 'btnMoreCommands'); } if (user.Policy.IsAdministrator) { @@ -442,15 +460,18 @@ LibraryBrowser.renderAwardSummary(page.querySelector('#awardSummary'), item); - $('.itemMiscInfo', page).each(function () { - mediaInfo.fillPrimaryMediaInfo(this, item, { + var i, length; + var itemMiscInfo = page.querySelectorAll('.itemMiscInfo'); + for (i = 0, length = itemMiscInfo.length; i < length; i++) { + mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, { interactive: true }); - }); + } + var itemGenres = page.querySelectorAll('.itemGenres'); + for (i = 0, length = itemMiscInfo.length; i < length; i++) { + LibraryBrowser.renderGenres(itemGenres[i], item, null, isStatic); + } - $('.itemGenres', page).each(function () { - LibraryBrowser.renderGenres(this, item, null, isStatic); - }); LibraryBrowser.renderStudios(page.querySelector('.itemStudios'), item, isStatic); renderUserDataIcons(page, item); LibraryBrowser.renderLinks(page.querySelector('.itemExternalLinks'), item); @@ -478,10 +499,14 @@ playersElement.classList.add('hide'); } - if (item.ArtistItems && item.ArtistItems.length && item.Type != "MusicAlbum") { - $('.artist', page).show().html(getArtistLinksHtml(item.ArtistItems, context)); - } else { - $('.artist', page).hide(); + var artist = page.querySelectorAll('.artist'); + for (i = 0, length = itemMiscInfo.length; i < length; i++) { + if (item.ArtistItems && item.ArtistItems.length && item.Type != "MusicAlbum") { + artist[i].classList.remove('hide'); + artist[i].innerHTML = getArtistLinksHtml(item.ArtistItems, context); + } else { + artist[i].classList.add('hide'); + } } if (item.MediaSources && item.MediaSources.length && item.Path) { @@ -2127,14 +2152,12 @@ elems[i].addEventListener('click', onMoreCommandsClick); } - $('.childrenItemsContainer', view).on('playallfromhere', function (e, index) { - - LibraryBrowser.playAllFromHere(_childrenItemsFunction, index); - - }).on('queueallfromhere', function (e, index) { - - LibraryBrowser.queueAllFromHere(_childrenItemsFunction, index); - + var childrenItemsContainer = view.querySelector('.childrenItemsContainer'); + childrenItemsContainer.addEventListener('playallfromhere', function (e) { + LibraryBrowser.playAllFromHere(_childrenItemsFunction, e.detail.index); + }); + childrenItemsContainer.addEventListener('playallfromhere', function (e) { + LibraryBrowser.playAllFromHere(_childrenItemsFunction, e.detail.index); }); view.addEventListener('click', function (e) { diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index d054c31d7e..1787e6d5f1 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -2706,9 +2706,9 @@ Dashboard.setPageTitle(name); if (linkToElement) { - nameElem.html('' + name + ''); + nameElem.innerHTML = '' + name + ''; } else { - nameElem.html(name); + nameElem.innerHTML = name; } }, @@ -2748,9 +2748,10 @@ } if (html.length) { - parentNameElem.show().html(html.join(' - ')); + parentNameElem.classList.remove('hide'); + parentNameElem.innerHTML = html.join(' - '); } else { - parentNameElem.hide(); + parentNameElem.classList.add('hide'); } }, diff --git a/dashboard-ui/scripts/medialibrarypage.js b/dashboard-ui/scripts/medialibrarypage.js index 709e724e1a..bded8eafba 100644 --- a/dashboard-ui/scripts/medialibrarypage.js +++ b/dashboard-ui/scripts/medialibrarypage.js @@ -227,10 +227,8 @@ ImageEditor.show(virtualFolder.ItemId, { theme: 'a' - }).then(function (hasChanged) { - if (hasChanged) { - reloadLibrary(page); - } + }).then(function () { + reloadLibrary(page); }); }); } diff --git a/dashboard-ui/scripts/mediaplayer-video.js b/dashboard-ui/scripts/mediaplayer-video.js index d56689f1fb..6e88ff866b 100644 --- a/dashboard-ui/scripts/mediaplayer-video.js +++ b/dashboard-ui/scripts/mediaplayer-video.js @@ -8,6 +8,7 @@ var muteButton = null; var unmuteButton = null; var volumeSlider = null; + var volumeSliderContainer = null; var positionSlider; var currentTimeElement; @@ -766,7 +767,7 @@ html += ''; html += ''; - html += '
'; + html += '
'; html += ''; html += '
'; // guide @@ -820,6 +821,7 @@ }; volumeSlider = parent.querySelector('.videoVolumeSlider'); + volumeSliderContainer = parent.querySelector('.volumeSliderContainer'); volumeSlider.addEventListener('change', function () { var vol = this.value; @@ -852,12 +854,14 @@ function updateVolumeButtons(vol) { - if (vol) { - muteButton.classList.remove('hide'); - unmuteButton.classList.add('hide'); - } else { - muteButton.classList.add('hide'); - unmuteButton.classList.remove('hide'); + if (!AppInfo.hasPhysicalVolumeButtons) { + if (vol) { + muteButton.classList.remove('hide'); + unmuteButton.classList.add('hide'); + } else { + muteButton.classList.add('hide'); + unmuteButton.classList.remove('hide'); + } } } @@ -1130,11 +1134,11 @@ } if (AppInfo.hasPhysicalVolumeButtons) { - volumeSlider.classList.add('hide'); + volumeSliderContainer.classList.add('hide'); videoControls.querySelector('.muteButton').classList.add('hide'); videoControls.querySelector('.unmuteButton').classList.add('hide'); } else { - volumeSlider.classList.remove('hide'); + volumeSliderContainer.classList.remove('hide'); videoControls.querySelector('.muteButton').classList.remove('hide'); videoControls.querySelector('.unmuteButton').classList.remove('hide'); } diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 1eefa6b02e..5551fa9852 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1524,6 +1524,7 @@ var AppInfo = {}; AppInfo.supportsFileInput = !(AppInfo.isNativeApp && isAndroid); AppInfo.hasPhysicalVolumeButtons = isCordova || isMobile; + AppInfo.hasPhysicalVolumeButtons = true; AppInfo.enableBackButton = isIOS && (window.navigator.standalone || AppInfo.isNativeApp); AppInfo.supportsSyncPathSetting = isCordova && isAndroid;