diff --git a/dashboard-ui/bower_components/emby-apiclient/.bower.json b/dashboard-ui/bower_components/emby-apiclient/.bower.json
index a7e3f63d8a..90a4eff73f 100644
--- a/dashboard-ui/bower_components/emby-apiclient/.bower.json
+++ b/dashboard-ui/bower_components/emby-apiclient/.bower.json
@@ -16,12 +16,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.1.94",
- "_release": "1.1.94",
+ "version": "1.1.95",
+ "_release": "1.1.95",
"_resolution": {
"type": "version",
- "tag": "1.1.94",
- "commit": "dfd0b14c1af141e548fe2cee92a1f86967c50e8f"
+ "tag": "1.1.95",
+ "commit": "e8acc2b7fb936b9e8d54a1eda726a16806258639"
},
"_source": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript.git",
"_target": "^1.1.51",
diff --git a/dashboard-ui/bower_components/emby-apiclient/appstorage-localstorage.js b/dashboard-ui/bower_components/emby-apiclient/appstorage-localstorage.js
index bdfd7ad168..ee4bd12bce 100644
--- a/dashboard-ui/bower_components/emby-apiclient/appstorage-localstorage.js
+++ b/dashboard-ui/bower_components/emby-apiclient/appstorage-localstorage.js
@@ -6,7 +6,10 @@
var localData;
function updateCache() {
- cache.put('data', new Response(JSON.stringify(localData)));
+
+ if (cache) {
+ cache.put('data', new Response(JSON.stringify(localData)));
+ }
}
myStore.setItem = function (name, value) {
@@ -38,10 +41,13 @@
try {
- caches.open('embydata').then(function (result) {
- cache = result;
- localData = {};
- });
+ if (self.caches) {
+
+ caches.open('embydata').then(function (result) {
+ cache = result;
+ localData = {};
+ });
+ }
} catch (err) {
console.log('Error opening cache: ' + err);
diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/localsync.js b/dashboard-ui/bower_components/emby-apiclient/sync/localsync.js
new file mode 100644
index 0000000000..8604fcbf53
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-apiclient/sync/localsync.js
@@ -0,0 +1,46 @@
+define(['appSettings', 'connectionManager'], function (appSettings, connectionManager) {
+ 'use strict';
+
+ var syncPromise;
+
+ return {
+
+ sync: function (options) {
+
+ if (syncPromise) {
+ return syncPromise;
+ }
+
+ return new Promise(function (resolve, reject) {
+
+ require(['multiserversync'], function (MultiServerSync) {
+
+ options = options || {};
+
+ options.cameraUploadServers = appSettings.cameraUploadServers();
+
+ syncPromise = new MultiServerSync(connectionManager).sync(options).then(function () {
+
+ syncPromise = null;
+ resolve();
+
+ }, function () {
+
+ syncPromise = null;
+ reject();
+ });
+ });
+
+ });
+ },
+
+ getSyncStatus: function () {
+
+ if (syncPromise != null) {
+ return 'Syncing';
+ }
+ return 'Idle';
+ }
+ };
+
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
index 99b5c336ee..fd203d4fa0 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
@@ -14,12 +14,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.4.360",
- "_release": "1.4.360",
+ "version": "1.4.362",
+ "_release": "1.4.362",
"_resolution": {
"type": "version",
- "tag": "1.4.360",
- "commit": "a6e44673685b3060947662be41de5cb36253320a"
+ "tag": "1.4.362",
+ "commit": "74f60991dce95403508b7eb84ec362226f574bc9"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.1",
diff --git a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/card.css b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/card.css
index 89d66764c7..0532bbddbb 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/card.css
+++ b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/card.css
@@ -53,7 +53,7 @@ button {
position: relative;
}
-.cardPadder-backdrop, .cardPadder-smallBackdrop, .cardPadder-overflowBackdrop {
+.cardPadder-backdrop, .cardPadder-smallBackdrop, .cardPadder-overflowBackdrop, .cardPadder-overflowSmallBackdrop {
padding-bottom: 56.25%;
}
@@ -402,6 +402,10 @@ button {
max-width: 400px;
}
+.overflowSmallBackdropCard-scalable {
+ width: 60%;
+}
+
.overflowSquareCard-scalable {
width: 42%;
max-width: 200px;
@@ -438,6 +442,10 @@ button {
.overflowSquareCard-scalable {
width: 30%;
}
+
+ .overflowSmallBackdropCard-scalable {
+ width: 40%
+ }
}
@media all and (min-width: 640px) {
@@ -449,6 +457,10 @@ button {
.overflowBackdropCard-scalable {
width: 56%;
}
+
+ .overflowSmallBackdropCard-scalable {
+ width: 40%
+ }
}
@media all and (min-width: 700px) {
@@ -461,6 +473,10 @@ button {
.backdropCard-scalable {
width: 33.333333333333333333333333333333%;
}
+
+ .overflowSmallBackdropCard-scalable {
+ width: 30%
+ }
}
@media all and (min-width: 800px) {
@@ -501,6 +517,10 @@ button {
width: 40%;
}
+ .overflowSmallBackdropCard-scalable {
+ width: 24%
+ }
+
.overflowSquareCard-scalable {
width: 22%;
}
@@ -527,6 +547,10 @@ button {
.smallBackdropCard-scalable {
width: 16.666666666666666666666666666667%;
}
+
+ .overflowSmallBackdropCard-scalable {
+ width: 18%
+ }
}
diff --git a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js
index 24374d7c69..0a32c1ef86 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js
@@ -1,5 +1,5 @@
-define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusManager', 'indicators', 'globalize', 'layoutManager', 'apphost', 'dom', 'emby-button', 'css!./card', 'paper-icon-button-light', 'clearButtonStyle'],
- function (datetime, imageLoader, connectionManager, itemHelper, focusManager, indicators, globalize, layoutManager, appHost, dom) {
+define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusManager', 'indicators', 'globalize', 'layoutManager', 'apphost', 'dom', 'browser', 'emby-button', 'css!./card', 'paper-icon-button-light', 'clearButtonStyle'],
+ function (datetime, imageLoader, connectionManager, itemHelper, focusManager, indicators, globalize, layoutManager, appHost, dom, browser) {
'use strict';
var devicePixelRatio = window.devicePixelRatio || 1;
@@ -144,6 +144,20 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
return 100 / 64;
}
return 100 / 72;
+ case 'overflowSmallBackdrop':
+ if (screenWidth >= 1200) {
+ return 100 / 18;
+ }
+ if (screenWidth >= 1000) {
+ return 100 / 24;
+ }
+ if (screenWidth >= 770) {
+ return 100 / 30;
+ }
+ if (screenWidth >= 540) {
+ return 100 / 40;
+ }
+ return 100 / 60;
default:
return 4;
}
@@ -1275,7 +1289,12 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
cardContentClose = '';
}
- if (options.vibrant && imgUrl && !vibrantSwatch) {
+ var vibrantAttributes = options.vibrant && imgUrl && !vibrantSwatch ?
+ (' data-vibrant="' + cardFooterId + '" data-swatch="db"') :
+ '';
+
+ // Don't use the IMG tag with safari because it puts a white border around it
+ if (vibrantAttributes && !browser.safari) {
cardImageContainerOpen = '
';
var imgClass = 'cardImage cardImage-img lazy';
@@ -1286,10 +1305,10 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
imgClass += ' coveredImage-img';
}
}
- cardImageContainerOpen += '

';
+ cardImageContainerOpen += '

';
} else {
- cardImageContainerOpen = imgUrl ? ('
') : ('
');
+ cardImageContainerOpen = imgUrl ? ('
') : ('
');
}
var cardScalableClass = options.cardLayout ? 'cardScalable visualCardBox-cardScalable' : 'cardScalable';
diff --git a/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js b/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js
index 0e70777a47..f684bc41a5 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/images/imagehelper.js
@@ -27,7 +27,7 @@ define(['lazyLoader', 'imageFetcher', 'layoutManager', 'browser', 'appSettings',
function fillImageElement(elem, source, enableEffects) {
imageFetcher.loadImage(elem, source).then(function () {
- var fillingVibrant = elem.tagName !== 'IMG' ? false : fillVibrant(elem, source);
+ var fillingVibrant = fillVibrant(elem, source);
if (enableFade && !layoutManager.tv && enableEffects !== false && !fillingVibrant) {
fadeIn(elem);
@@ -110,14 +110,17 @@ define(['lazyLoader', 'imageFetcher', 'layoutManager', 'browser', 'appSettings',
requestIdleCallback(function () {
//var now = new Date().getTime();
- var swatch = getVibrantInfo(img, url).split('|');
- //console.log('vibrant took ' + (new Date().getTime() - now) + 'ms');
- if (swatch.length) {
+ getVibrantInfoFromElement(img, url).then(function (vibrantInfo) {
+
+ var swatch = vibrantInfo.split('|');
+ //console.log('vibrant took ' + (new Date().getTime() - now) + 'ms');
+ if (swatch.length) {
- var index = 0;
- vibrantElement.style.backgroundColor = swatch[index];
- vibrantElement.style.color = swatch[index + 1];
- }
+ var index = 0;
+ vibrantElement.style.backgroundColor = swatch[index];
+ vibrantElement.style.color = swatch[index + 1];
+ }
+ });
});
/*
* Results into:
@@ -129,6 +132,22 @@ define(['lazyLoader', 'imageFetcher', 'layoutManager', 'browser', 'appSettings',
*/
}
+ function getVibrantInfoFromElement(elem, url) {
+
+ if (elem.tagName === 'IMG') {
+ return Promise.resolve(getVibrantInfo(elem, url));
+ }
+
+ return new Promise(function (resolve, reject) {
+
+ var img = new Image();
+ img.onload = function () {
+ resolve(getVibrantInfo(img, url));
+ };
+ img.src = url;
+ });
+ }
+
function getSettingsKey(url) {
var parts = url.split('://');
diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css
index ab55ff4ca7..f73e6d1cc7 100644
--- a/dashboard-ui/css/librarybrowser.css
+++ b/dashboard-ui/css/librarybrowser.css
@@ -46,7 +46,7 @@
}
.pageWithAbsoluteTabs .pageTabContent {
- padding-top: 2.2em;
+ padding-top: 2.6em;
}
/*.pageWithAbsoluteTabs .pageTabContent {
@@ -103,13 +103,6 @@
margin-bottom: 2em;
}
-@media all and (max-width: 800px) {
-
- .hiddenSectionOnMobile {
- display: none;
- }
-}
-
@media all and (min-width: 800px) {
.hiddenSectionOnNonMobile {
diff --git a/dashboard-ui/devices/ios/ios.css b/dashboard-ui/devices/ios/ios.css
index 1112f34a34..98b5d3b239 100644
--- a/dashboard-ui/devices/ios/ios.css
+++ b/dashboard-ui/devices/ios/ios.css
@@ -66,7 +66,7 @@ h1, h1 a {
}
.cardImageContainer {
- border-radius: 5px;
+ border-radius: 4px;
}
.noSecondaryNavPage .itemBackdrop {
diff --git a/dashboard-ui/scripts/indexpage.js b/dashboard-ui/scripts/indexpage.js
index 0cc2e3e0c8..ae0db7e969 100644
--- a/dashboard-ui/scripts/indexpage.js
+++ b/dashboard-ui/scripts/indexpage.js
@@ -38,16 +38,16 @@
return Sections.loadRecentlyAdded(elem, user);
}
else if (section == 'librarytiles') {
- return Sections.loadLibraryTiles(elem, user, 'backdrop', index, false);
+ return Sections.loadLibraryTiles(elem, user, 'backdrop', index);
}
else if (section == 'smalllibrarytiles') {
- return Sections.loadLibraryTiles(elem, user, 'smallBackdrop', index, false);
+ return Sections.loadLibraryTiles(elem, user, 'smallBackdrop', index);
}
else if (section == 'smalllibrarytiles-automobile') {
- return Sections.loadLibraryTiles(elem, user, 'smallBackdrop', index, true);
+ return Sections.loadLibraryTiles(elem, user, 'smallBackdrop', index);
}
else if (section == 'librarytiles-automobile') {
- return Sections.loadLibraryTiles(elem, user, 'backdrop', index, true);
+ return Sections.loadLibraryTiles(elem, user, 'backdrop', index);
}
else if (section == 'librarybuttons') {
return Sections.loadlibraryButtons(elem, userId, index);
diff --git a/dashboard-ui/scripts/moviestudios.js b/dashboard-ui/scripts/moviestudios.js
index 6c9a469739..7afca27abc 100644
--- a/dashboard-ui/scripts/moviestudios.js
+++ b/dashboard-ui/scripts/moviestudios.js
@@ -48,7 +48,7 @@
itemsContainer: elem,
shape: "backdrop",
preferThumb: true,
- showTitle: false,
+ showTitle: true,
scalable: true,
showItemCounts: true,
centerText: true,
diff --git a/dashboard-ui/scripts/sections.js b/dashboard-ui/scripts/sections.js
index ca866238ab..e589dd546b 100644
--- a/dashboard-ui/scripts/sections.js
+++ b/dashboard-ui/scripts/sections.js
@@ -396,17 +396,13 @@
});
}
- function loadLibraryTiles(elem, user, shape, index, autoHideOnMobile) {
+ function loadLibraryTiles(elem, user, shape) {
return getUserViews(user.Id).then(function (items) {
var html = '';
- if (autoHideOnMobile) {
- html += '
';
- } else {
- html += '
';
- }
+ html += '
';
if (items.length) {
@@ -415,7 +411,7 @@
html += '
';
- var scrollX = enableScrollX() && dom.getWindowSize().innerWidth >= 600;
+ var scrollX = enableScrollX() && dom.getWindowSize().innerWidth >= 500;
if (scrollX) {
html += '
';
@@ -425,7 +421,7 @@
html += cardBuilder.getCardsHtml({
items: items,
- shape: scrollX ? 'overflowBackdrop' : shape,
+ shape: scrollX ? 'overflowSmallBackdrop' : shape,
showTitle: true,
centerText: true,
overlayText: false,
@@ -438,12 +434,6 @@
html += '
';
- if (autoHideOnMobile) {
- html += '
';
- html += getLibraryButtonsHtml(items);
- html += '
';
- }
-
return getAppInfo().then(function (infoHtml) {
elem.innerHTML = html + infoHtml;
@@ -497,7 +487,7 @@
}
var supportsImageAnalysis = appHost.supports('imageanalysis');
- var cardLayout = appHost.preferVisualCards;
+ var cardLayout = supportsImageAnalysis;
html += cardBuilder.getCardsHtml({
items: result.Items,
diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js
index a0c484e083..db60b74ff9 100644
--- a/dashboard-ui/scripts/tvrecommended.js
+++ b/dashboard-ui/scripts/tvrecommended.js
@@ -99,7 +99,7 @@
var container = view.querySelector('#resumableItems');
var supportsImageAnalysis = appHost.supports('imageanalysis');
- var cardLayout = appHost.preferVisualCards;
+ var cardLayout = supportsImageAnalysis;
cardBuilder.buildCards(result.Items, {
itemsContainer: container,
diff --git a/dashboard-ui/scripts/tvstudios.js b/dashboard-ui/scripts/tvstudios.js
index 33b153a537..cd264ea74b 100644
--- a/dashboard-ui/scripts/tvstudios.js
+++ b/dashboard-ui/scripts/tvstudios.js
@@ -49,7 +49,7 @@
itemsContainer: elem,
shape: "backdrop",
preferThumb: true,
- showTitle: false,
+ showTitle: true,
scalable: true,
showItemCounts: true,
centerText: true,