diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index cd37d7b8b4..f24a52ad1b 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.3.45", - "_release": "1.3.45", + "version": "1.3.49", + "_release": "1.3.49", "_resolution": { "type": "version", - "tag": "1.3.45", - "commit": "dbaa46e3aa38a939b82f305c61e875e1a30da2fe" + "tag": "1.3.49", + "commit": "9838b499815bcaf95d4d50c4476c3b95173ffc30" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js b/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js index d357d5d36b..1fa0235aab 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js @@ -1,4 +1,4 @@ -define(['visibleinviewport', 'imageFetcher', 'layoutManager', 'events'], function (visibleinviewport, imageFetcher, layoutManager, events) { +define(['visibleinviewport', 'imageFetcher', 'layoutManager', 'events', 'browser'], function (visibleinviewport, imageFetcher, layoutManager, events, browser) { var thresholdX; var thresholdY; @@ -88,12 +88,64 @@ define(['visibleinviewport', 'imageFetcher', 'layoutManager', 'events'], functio target.addEventListener(type, handler, optionsOrCapture); } + function unveilWithIntersection(images) { + + var filledCount = 0; + + var observer = new IntersectionObserver(function (entries) { + for (var j = 0, length2 = entries.length; j < length2; j++) { + var entry = entries[j]; + var intersectionRatio = entry.intersectionRatio; + if (intersectionRatio) { + + var target = entry.target; + observer.unobserve(target); + fillImage(target); + filledCount++; + } + } + + if (filledCount >= images.length) { + //observer.disconnect(); + } + }, + { + /* Using default options. Details below */ + } + ); + // Start observing an element + for (var i = 0, length = images.length; i < length; i++) { + observer.observe(images[i]); + } + } + + var supportsIntersectionObserver = function () { + + if (window.IntersectionObserver) { + + // The api exists in chrome 50 but doesn't work + if (browser.chrome) { + + var version = parseInt(browser.version.split('.')[0]); + return version >= 51; + } + return true; + } + + return false; + }(); + function unveilElements(images) { if (!images.length) { return; } + if (supportsIntersectionObserver) { + unveilWithIntersection(images); + return; + } + var filledImages = []; var cancellationTokens = []; diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js index 305fb12543..ead7a4a4ae 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js @@ -11,7 +11,14 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali var commands = []; - if (item.CanDownload && user.Policy.EnableContentDownloading && appHost.supports('filedownload')) { + if (item.CanDelete) { + commands.push({ + name: globalize.translate('sharedcomponents#Delete'), + id: 'delete' + }); + } + + if (item.CanDownload && appHost.supports('filedownload')) { commands.push({ name: globalize.translate('sharedcomponents#Download'), id: 'download' @@ -69,6 +76,14 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali case 'refresh': { refresh(apiClient, itemId); + reject(); + break; + } + case 'delete': + { + deleteItem(apiClient, itemId).then(function () { + resolve(true); + }); break; } case 'share': @@ -83,11 +98,33 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali break; } default: + reject(); break; } }); } + function deleteItem(apiClient, itemId) { + + return new Promise(function (resolve, reject) { + + var msg = globalize.translate('sharedcomponents#ConfirmDeleteItem'); + var title = globalize.translate('sharedcomponents#HeaderDeleteItem'); + + require(['confirm'], function (confirm) { + + confirm(msg, title).then(function () { + + apiClient.deleteItem(itemId).then(function () { + resolve(true); + }); + + }, reject); + + }); + }); + } + function refresh(apiClient, itemId) { apiClient.refreshItem(itemId, { @@ -97,7 +134,6 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali MetadataRefreshMode: 'FullRefresh', ReplaceAllImages: false, ReplaceAllMetadata: true - }); require(['toast'], function (toast) { diff --git a/dashboard-ui/bower_components/emby-webcomponents/router.js b/dashboard-ui/bower_components/emby-webcomponents/router.js index ffad2468bf..52c784be2f 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/router.js +++ b/dashboard-ui/bower_components/emby-webcomponents/router.js @@ -203,10 +203,10 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b if (!isBackNav) { // Don't force a new view for home due to the back menu - if (route.type != 'home') { + //if (route.type != 'home') { onNewViewNeeded(); return; - } + //} } viewManager.tryRestoreView(currentRequest).then(function () { diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json index 3b2082f16a..a4cbd770d8 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json @@ -50,6 +50,9 @@ "Edit": "Edit", "Download": "Download", "Advanced": "Advanced", + "Delete": "Delete", + "HeaderDeleteItem": "Delete Item", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "Refresh": "Refresh", "RefreshQueued": "Refresh queued." } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js index a967c1ad58..cc1647d053 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js +++ b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js @@ -112,76 +112,74 @@ define(['browser'], function (browser) { function slide(newAnimatedPage, oldAnimatedPage, transition, isBack) { - var timings = { - duration: 450, - iterations: 1, - easing: 'ease-out', - fill: 'both' - } + return new Promise(function (resolve, reject) { + var timings = { + duration: 450, + iterations: 1, + easing: 'ease-out' + } - var animations = []; + var animations = []; - if (oldAnimatedPage) { - var destination = isBack ? '100%' : '-100%'; + if (oldAnimatedPage) { + var destination = isBack ? '100%' : '-100%'; - animations.push(oldAnimatedPage.animate([ + animations.push(oldAnimatedPage.animate([ - { transform: 'none', offset: 0 }, - { transform: 'translate3d(' + destination + ', 0, 0)', offset: 1 } + { transform: 'none', offset: 0 }, + { transform: 'translate3d(' + destination + ', 0, 0)', offset: 1 } + + ], timings)); + } + + newAnimatedPage.classList.remove('hide'); + + var start = isBack ? '-100%' : '100%'; + + animations.push(newAnimatedPage.animate([ + + { transform: 'translate3d(' + start + ', 0, 0)', offset: 0 }, + { transform: 'none', offset: 1 } ], timings)); - } - newAnimatedPage.classList.remove('hide'); + currentAnimations = animations; - var start = isBack ? '-100%' : '100%'; - - animations.push(newAnimatedPage.animate([ - - { transform: 'translate3d(' + start + ', 0, 0)', offset: 0 }, - { transform: 'none', offset: 1 } - - ], timings)); - - currentAnimations = animations; - - return new Promise(function (resolve, reject) { animations[animations.length - 1].onfinish = resolve; }); } function fade(newAnimatedPage, oldAnimatedPage, transition, isBack) { - var timings = { - duration: 200, - iterations: 1, - easing: 'ease-out', - fill: 'both' - } + return new Promise(function (resolve, reject) { + var timings = { + duration: 200, + iterations: 1, + easing: 'ease-out' + } - var animations = []; + var animations = []; - if (oldAnimatedPage) { - animations.push(oldAnimatedPage.animate([ + if (oldAnimatedPage) { + animations.push(oldAnimatedPage.animate([ - { opacity: 1, offset: 0 }, - { opacity: 0, offset: 1 } + { opacity: 1, offset: 0 }, + { opacity: 0, offset: 1 } + + ], timings)); + } + + newAnimatedPage.classList.remove('hide'); + + animations.push(newAnimatedPage.animate([ + + { opacity: 0, offset: 0 }, + { opacity: 1, offset: 1 } ], timings)); - } - newAnimatedPage.classList.remove('hide'); + currentAnimations = animations; - animations.push(newAnimatedPage.animate([ - - { opacity: 0, offset: 0 }, - { opacity: 1, offset: 1 } - - ], timings)); - - currentAnimations = animations; - - return new Promise(function (resolve, reject) { animations[animations.length - 1].onfinish = resolve; }); } diff --git a/dashboard-ui/bower_components/paper-behaviors/.bower.json b/dashboard-ui/bower_components/paper-behaviors/.bower.json index 2b04bf9f8a..a6b333d335 100644 --- a/dashboard-ui/bower_components/paper-behaviors/.bower.json +++ b/dashboard-ui/bower_components/paper-behaviors/.bower.json @@ -45,7 +45,7 @@ "tag": "v1.0.11", "commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5" }, - "_source": "git://github.com/PolymerElements/paper-behaviors.git", + "_source": "git://github.com/polymerelements/paper-behaviors.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/paper-behaviors" + "_originalSource": "polymerelements/paper-behaviors" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-ripple/.bower.json b/dashboard-ui/bower_components/paper-ripple/.bower.json index 157225ee71..2f654d71c6 100644 --- a/dashboard-ui/bower_components/paper-ripple/.bower.json +++ b/dashboard-ui/bower_components/paper-ripple/.bower.json @@ -32,14 +32,14 @@ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0" }, "ignore": [], - "homepage": "https://github.com/PolymerElements/paper-ripple", + "homepage": "https://github.com/polymerelements/paper-ripple", "_release": "1.0.5", "_resolution": { "type": "version", "tag": "v1.0.5", "commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5" }, - "_source": "git://github.com/PolymerElements/paper-ripple.git", + "_source": "git://github.com/polymerelements/paper-ripple.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/paper-ripple" + "_originalSource": "polymerelements/paper-ripple" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/polymer/.bower.json b/dashboard-ui/bower_components/polymer/.bower.json index bbad7fe7ba..3e8a4009a3 100644 --- a/dashboard-ui/bower_components/polymer/.bower.json +++ b/dashboard-ui/bower_components/polymer/.bower.json @@ -34,6 +34,6 @@ "commit": "11c987b2eb3c73b388a79fc8aaea8ca01624f514" }, "_source": "git://github.com/Polymer/polymer.git", - "_target": "^1.1.0", + "_target": "^1.0.0", "_originalSource": "Polymer/polymer" } \ No newline at end of file diff --git a/dashboard-ui/components/remotecontrol.js b/dashboard-ui/components/remotecontrol.js index e077b0a60c..ef9b830f00 100644 --- a/dashboard-ui/components/remotecontrol.js +++ b/dashboard-ui/components/remotecontrol.js @@ -413,24 +413,17 @@ // $(".playlist", page).html(html).lazyChildren(); //}); - var playlistOpen = isPlaylistOpen(context); + html += libraryBrowser.getListViewHtml({ + items: MediaController.playlist(), + smallIcon: true + }); - if (playlistOpen) { - - html += libraryBrowser.getListViewHtml({ - items: MediaController.playlist(), - smallIcon: true - }); - - playlistNeedsRefresh = false; - } + playlistNeedsRefresh = false; var deps = []; - if (playlistOpen) { - deps.push('paper-icon-item'); - deps.push('paper-item-body'); - } + deps.push('paper-icon-item'); + deps.push('paper-item-body'); require(deps, function () { @@ -438,19 +431,16 @@ itemsContainer.innerHTML = html; - if (playlistOpen) { + var index = MediaController.currentPlaylistIndex(); - var index = MediaController.currentPlaylistIndex(); + if (index != -1) { - if (index != -1) { + var item = itemsContainer.querySelectorAll('.listItem')[index]; + if (item) { + var img = item.querySelector('.listviewImage'); - var item = itemsContainer.querySelectorAll('.listItem')[index]; - if (item) { - var img = item.querySelector('.listviewImage'); - - img.classList.remove('lazy'); - img.classList.add('playlistIndexIndicatorImage'); - } + img.classList.remove('lazy'); + img.classList.add('playlistIndexIndicatorImage'); } } @@ -458,10 +448,6 @@ }); } - function isPlaylistOpen(context) { - return libraryBrowser.selectedTab(context.querySelector('.libraryViewNav')) == 2; - } - function onStateChanged(e, state) { if (e.type == 'positionchange') { @@ -485,11 +471,7 @@ onStateChanged.call(player, e, state); - if (isPlaylistOpen(dlg)) { - loadPlaylist(dlg); - } else { - playlistNeedsRefresh = true; - } + loadPlaylist(dlg); } function onPlaybackStopped(e, state) { @@ -500,11 +482,7 @@ onStateChanged.call(player, e, {}); - if (isPlaylistOpen(dlg)) { - loadPlaylist(dlg); - } else { - playlistNeedsRefresh = true; - } + loadPlaylist(dlg); } function releaseCurrentPlayer() { @@ -824,6 +802,7 @@ libraryBrowser.configurePaperLibraryTabs(ownerView, mdlTabs, ownerView.querySelectorAll('.pageTabContent')); mdlTabs.addEventListener('tabchange', function (e) { + if (e.detail.selectedTabIndex == 2 && playlistNeedsRefresh) { loadPlaylist(context); } diff --git a/dashboard-ui/itemdetails.html b/dashboard-ui/itemdetails.html index b019513c0c..7ed1d65a17 100644 --- a/dashboard-ui/itemdetails.html +++ b/dashboard-ui/itemdetails.html @@ -1,4 +1,4 @@ -