diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
index 38c737a941..cd37d7b8b4 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.43",
- "_release": "1.3.43",
+ "version": "1.3.45",
+ "_release": "1.3.45",
"_resolution": {
"type": "version",
- "tag": "1.3.43",
- "commit": "201076c748374aa6fed4be70ec43198099854aa8"
+ "tag": "1.3.45",
+ "commit": "dbaa46e3aa38a939b82f305c61e875e1a30da2fe"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0",
diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js
index 4a93209647..3a3e8b638d 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js
@@ -217,7 +217,16 @@
var keyframes = [
{ transform: 'scale(0)', offset: 0 },
- { transform: 'scale(1,1)', offset: 1 }];
+ { transform: 'none', offset: 1 }];
+ var timing = elem.animationConfig.entry.timing;
+ return elem.animate(keyframes, timing).onfinish = onFinish;
+ }
+
+ function slideUp(elem, onFinish) {
+
+ var keyframes = [
+ { transform: 'translate3d(0,30%,0)', opacity: 0, offset: 0 },
+ { transform: 'none', opacity: 1, offset: 1 }];
var timing = elem.animationConfig.entry.timing;
return elem.animate(keyframes, timing).onfinish = onFinish;
}
@@ -240,6 +249,15 @@
return elem.animate(keyframes, timing);
}
+ function slideDown(elem, onFinish) {
+
+ var keyframes = [
+ { transform: 'none', opacity: 1, offset: 0 },
+ { transform: 'translate3d(0,30%,0)', opacity: 0, offset: 1 }];
+ var timing = elem.animationConfig.entry.timing;
+ return elem.animate(keyframes, timing);
+ }
+
function closeDialog(dlg) {
if (!dlg.classList.contains('hide')) {
@@ -260,7 +278,18 @@
return;
}
- fadeOut(dlg).onfinish = onAnimationFinish;
+ var animation;
+
+ if (dlg.animationConfig.exit.name == 'fadeout') {
+ animation = fadeOut(dlg);
+ } else if (dlg.animationConfig.exit.name == 'slidedown') {
+ animation = slideDown(dlg);
+ } else {
+ onAnimationFinish();
+ return;
+ }
+
+ animation.onfinish = onAnimationFinish;
}
}
@@ -276,10 +305,12 @@
onAnimationFinish();
return;
}
- if (dlg.animationConfig.entry.name == 'fade-in-animation') {
+ if (dlg.animationConfig.entry.name == 'fadein') {
fadeIn(dlg, onAnimationFinish);
- } else if (dlg.animationConfig.entry.name == 'scale-up-animation') {
+ } else if (dlg.animationConfig.entry.name == 'scaleup') {
scaleUp(dlg, onAnimationFinish);
+ } else if (dlg.animationConfig.entry.name == 'slideup') {
+ slideUp(dlg, onAnimationFinish);
}
}
@@ -355,12 +386,12 @@
dlg.setAttribute('data-autofocus', 'true');
}
- var defaultEntryAnimation = browser.animate ? 'scale-up-animation' : 'fade-in-animation';
+ var defaultEntryAnimation = browser.animate ? 'scaleup' : 'fadein';
dlg.entryAnimation = options.entryAnimation || defaultEntryAnimation;
- dlg.exitAnimation = 'fade-out-animation';
+ dlg.exitAnimation = 'fadeout';
// If it's not fullscreen then lower the default animation speed to make it open really fast
- var entryAnimationDuration = options.entryAnimationDuration || (options.size ? 240 : 300);
+ var entryAnimationDuration = options.entryAnimationDuration || (options.size ? 200 : 300);
dlg.animationConfig = {
// scale up
diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json b/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json
new file mode 100644
index 0000000000..07f43fff45
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json
@@ -0,0 +1,55 @@
+{
+ "ValueSpecialEpisodeName": "Especial - {0}",
+ "Share": "Compartir",
+ "ServerUpdateNeeded": "Este Servidor Emby necesita ser actualizado. Para descargar la ultima versi\u00f3n, por favor visite {0}",
+ "LiveTvGuideRequiresUnlock": "La Guia de TV en Vivo actualmente esta limitada a {0} canales. De clic en el bot\u00f3n Desbloquear para saber como desbloquear la experiencia completa.",
+ "AttributeNew": "Nuevo",
+ "AttributePremiere": "Fecha de Estreno",
+ "AttributeLive": "En Vivo",
+ "TrackCount": "{0} Pistas",
+ "ItemCount": "{0} \u00edtems",
+ "ValueSeriesYearToPresent": "{0}-Presente",
+ "ReleaseYearValue": "A\u00f1o de estreno: {0}",
+ "OriginalAirDateValue": "Fecha de transmisi\u00f3n original: {0}",
+ "EndsAtValue": "Termina a las {0}",
+ "OptionSundayShort": "Dom",
+ "OptionMondayShort": "Lun",
+ "OptionTuesdayShort": "Mar",
+ "OptionWednesdayShort": "Mie",
+ "OptionThursdayShort": "Jue",
+ "OptionFridayShort": "Vie",
+ "OptionSaturdayShort": "Sab",
+ "HeaderSelectDate": "Seleccionar fecha",
+ "ButtonOk": "Ok",
+ "ButtonCancel": "Cancelar",
+ "ButtonGotIt": "Hecho",
+ "RecordingScheduled": "Grabaci\u00f3n programada.",
+ "HeaderNewRecording": "Nueva Grabaci\u00f3n",
+ "Sunday": "Domingo",
+ "Monday": "Lunes",
+ "Tuesday": "Martes",
+ "Wednesday": "Mi\u00e9rcoles",
+ "Thursday": "Jueves",
+ "Friday": "Viernes",
+ "Saturday": "S\u00e1bado",
+ "Days": "D\u00edas",
+ "RecordSeries": "Grabar Series",
+ "LabelPrePaddingMinutes": "Minutos de protecci\u00f3n previos:",
+ "LabelPostPaddingMinutes": "Minutos de protecci\u00f3n posterior:",
+ "RecordOnAllChannels": "Grabar en todos los canales",
+ "RecordAnytime": "Grabar en cualquier momento",
+ "RecordOnlyNewEpisodes": "Grabar s\u00f3lo nuevos episodios",
+ "HeaderBecomeProjectSupporter": "Obtener Emby Premiere",
+ "HeaderEnjoyDayTrial": "Disfrute de una Prueba Gratuita por 14 D\u00edas",
+ "MessageActiveSubscriptionRequiredSeriesRecordings": "Se requiere de una suscripci\u00f3n de Emby Premiere para crear grabaciones automatizadas de series.",
+ "OptionConvertRecordingsToStreamingFormat": "Convertir autom\u00e1ticamente las grabaciones a un formato amigable para transmisi\u00f3n",
+ "OptionConvertRecordingsToStreamingFormatHelp": "Las grabaciones ser\u00e1n convertidas en tiempo real a MP4 para una f\u00e1cil reproducci\u00f3n en sus dispositivos.",
+ "FeatureRequiresEmbyPremiere": "Esta caracter\u00edstica requiere de una suscripci\u00f3n activa de Emby Premiere.",
+ "Record": "Grabar",
+ "Save": "Guardar",
+ "Edit": "Editar",
+ "Download": "Descargar",
+ "Advanced": "Avanzado",
+ "Refresh": "Actualizar",
+ "RefreshQueued": "Actualizaci\u00f3n programada"
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json b/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json
new file mode 100644
index 0000000000..d839d7c00b
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json
@@ -0,0 +1,55 @@
+{
+ "ValueSpecialEpisodeName": "Spesial - {0}",
+ "Share": "Del",
+ "ServerUpdateNeeded": "Denne Emby serveren trenger en oppdatering. For \u00e5 laste ned nyeste versjon, vennligst bes\u00f8k: {0}",
+ "LiveTvGuideRequiresUnlock": "Live TV Guide er p\u00e5 n\u00e5v\u00e6rende tidspunkter begrenset til {0} Kanaler. Trykk p\u00e5 l\u00e5s opp knappen for \u00e5 l\u00e6re hvordan f\u00e5 full opplevelse.",
+ "AttributeNew": "Ny",
+ "AttributePremiere": "Premiere",
+ "AttributeLive": "Direkte",
+ "TrackCount": "{0} spor",
+ "ItemCount": "{0} elementer",
+ "ValueSeriesYearToPresent": "{0}-N\u00e5v\u00e6rende",
+ "ReleaseYearValue": "Utgivelse \u00e5r: {0}",
+ "OriginalAirDateValue": "Original slippdato: {0}",
+ "EndsAtValue": "Ender p\u00e5 {0}",
+ "OptionSundayShort": "S\u00f8n",
+ "OptionMondayShort": "Man",
+ "OptionTuesdayShort": "Tir",
+ "OptionWednesdayShort": "Ons",
+ "OptionThursdayShort": "Tor",
+ "OptionFridayShort": "Fre",
+ "OptionSaturdayShort": "L\u00f8r",
+ "HeaderSelectDate": "Velg dato",
+ "ButtonOk": "Ok",
+ "ButtonCancel": "Avbryt",
+ "ButtonGotIt": "Skj\u00f8nner",
+ "RecordingScheduled": "Planlagte opptak.",
+ "HeaderNewRecording": "Tar opp n\u00e5",
+ "Sunday": "S\u00f8ndag",
+ "Monday": "Mandag",
+ "Tuesday": "Tirsdag",
+ "Wednesday": "Onsdag",
+ "Thursday": "Torsdag",
+ "Friday": "Fredag",
+ "Saturday": "L\u00f8rdag",
+ "Days": "Dager",
+ "RecordSeries": "Ta opp serien",
+ "LabelPrePaddingMinutes": "Pre-padding minutter:",
+ "LabelPostPaddingMinutes": "Post-padding minutter:",
+ "RecordOnAllChannels": "Ta opp fra alle kanaler",
+ "RecordAnytime": "Ta opp n\u00e5r som helst",
+ "RecordOnlyNewEpisodes": "Ta opp kun nye episoder",
+ "HeaderBecomeProjectSupporter": "Skaff Emby Premiere",
+ "HeaderEnjoyDayTrial": "Nyt en 14 dagers gratis pr\u00f8ve versjon",
+ "MessageActiveSubscriptionRequiredSeriesRecordings": "En aktiv Emby Premiere abonnement er n\u00f8dvendig for \u00e5 skape automatiserte serie innspillinger.",
+ "OptionConvertRecordingsToStreamingFormat": "Automatisk konvertere opptak til en str\u00f8mnings vennlig format",
+ "OptionConvertRecordingsToStreamingFormatHelp": "Innspillinger vil automatisk bli konvertert til MP4 for enkel avspilling p\u00e5 dine enheter.",
+ "FeatureRequiresEmbyPremiere": "Denne funksjonen krever et aktivt Emby Premiere abonnement.",
+ "Record": "Ta opp",
+ "Save": "Lagre",
+ "Edit": "Endre",
+ "Download": "Last ned",
+ "Advanced": "Avansert",
+ "Refresh": "Oppdater",
+ "RefreshQueued": "Oppdatering k\u00f8"
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/iron-meta/.bower.json b/dashboard-ui/bower_components/iron-meta/.bower.json
index f4bfef4a7c..e1304d174b 100644
--- a/dashboard-ui/bower_components/iron-meta/.bower.json
+++ b/dashboard-ui/bower_components/iron-meta/.bower.json
@@ -26,14 +26,14 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"main": "iron-meta.html",
- "homepage": "https://github.com/polymerelements/iron-meta",
+ "homepage": "https://github.com/PolymerElements/iron-meta",
"_release": "1.1.1",
"_resolution": {
"type": "version",
"tag": "v1.1.1",
"commit": "e171ee234b482219c9514e6f9551df48ef48bd9f"
},
- "_source": "git://github.com/polymerelements/iron-meta.git",
+ "_source": "git://github.com/PolymerElements/iron-meta.git",
"_target": "^1.0.0",
- "_originalSource": "polymerelements/iron-meta"
+ "_originalSource": "PolymerElements/iron-meta"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/paper-behaviors/.bower.json b/dashboard-ui/bower_components/paper-behaviors/.bower.json
index a6b333d335..2b04bf9f8a 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 2f654d71c6..157225ee71 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 3e8a4009a3..bbad7fe7ba 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.0.0",
+ "_target": "^1.1.0",
"_originalSource": "Polymer/polymer"
}
\ No newline at end of file
diff --git a/dashboard-ui/components/collectioneditor/collectioneditor.js b/dashboard-ui/components/collectioneditor/collectioneditor.js
index e8d1c1403d..d82b2d984e 100644
--- a/dashboard-ui/components/collectioneditor/collectioneditor.js
+++ b/dashboard-ui/components/collectioneditor/collectioneditor.js
@@ -123,7 +123,13 @@
html += '
diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css
index 94a183c822..60ce8cde5e 100644
--- a/dashboard-ui/css/librarybrowser.css
+++ b/dashboard-ui/css/librarybrowser.css
@@ -836,14 +836,14 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
min-height: 60px;
}
- .itemMiscInfo {
+ .mobileDetails .itemMiscInfo {
text-align: center;
justify-content: center;
}
- .itemMiscInfo .endsAt {
- display: none;
- }
+ .itemMiscInfo .endsAt {
+ display: none;
+ }
}
@media all and (min-width: 750px) {
diff --git a/dashboard-ui/css/librarymenu.css b/dashboard-ui/css/librarymenu.css
index 93291fc951..dda04e7675 100644
--- a/dashboard-ui/css/librarymenu.css
+++ b/dashboard-ui/css/librarymenu.css
@@ -242,20 +242,21 @@
color: #fff !important;
}
- .pageTabButtonSelectionBar {
- position: absolute;
- left: 0;
- border: 0;
- bottom: 0;
- height: 2px;
- right: 0;
- border-radius: 0;
- z-index: 1;
- }
+.pageTabButtonSelectionBar {
+ position: absolute;
+ left: 0;
+ border: 0;
+ /* Need this or it will be partially covered by the drop-shadow on android */
+ bottom: 1px;
+ height: 2px;
+ right: 0;
+ border-radius: 0;
+ z-index: 1000;
+}
- .pageTabButton.is-active .pageTabButtonSelectionBar {
- background: #52B54B;
- }
+.pageTabButton.is-active .pageTabButtonSelectionBar {
+ background: #52B54B;
+}
.viewMenuBar, .libraryViewNav {
background-color: #020202;
diff --git a/dashboard-ui/css/polymer/paper-icon-button-light.css b/dashboard-ui/css/polymer/paper-icon-button-light.css
index 0e3900a60e..e3ed5bcdd1 100644
--- a/dashboard-ui/css/polymer/paper-icon-button-light.css
+++ b/dashboard-ui/css/polymer/paper-icon-button-light.css
@@ -3,10 +3,13 @@
height: 40px;
padding: 8px;
}
+ [is=paper-icon-button-light] iron-icon {
+ width: 100%;
+ height: 100%;
+ }
- [is=paper-icon-button-light] iron-icon, [is=paper-icon-button-light] img {
- /* Don't specify both dimensions or it may not get sized properly */
- /*width: 100%;*/
+ [is=paper-icon-button-light] img {
+ width: 100%;
height: 100%;
}
@@ -18,3 +21,9 @@
background-color: currentcolor !important;
opacity: .2 !important;
}
+
+ /* Make sure the img is on top of the ripple */
+ [is=paper-icon-button-light] img {
+ position: relative;
+ z-index: 1;
+ }
diff --git a/dashboard-ui/dashboardhosting.html b/dashboard-ui/dashboardhosting.html
index 8de4ad9d19..6e9af2f7b6 100644
--- a/dashboard-ui/dashboardhosting.html
+++ b/dashboard-ui/dashboardhosting.html
@@ -1,4 +1,4 @@
-
+
@@ -14,10 +14,6 @@
${LabelPublicHttpPortHelp}
-
-
- ${LabelExternalDDNSHelp}
-
${LabelHttpsPortHelp}
@@ -31,6 +27,10 @@
${LabelCustomCertificatePathHelp}
+
+
+ ${LabelExternalDDNSHelp}
+
${LabelEnableHttps}
${LabelEnableHttpsHelp}
diff --git a/dashboard-ui/movies.html b/dashboard-ui/movies.html
index 51fb488300..b69b344b31 100644
--- a/dashboard-ui/movies.html
+++ b/dashboard-ui/movies.html
@@ -61,13 +61,13 @@
+
+
${MessageNoCollectionsAvailable}
-
-
diff --git a/dashboard-ui/scripts/dashboardhosting.js b/dashboard-ui/scripts/dashboardhosting.js
index 0c444e2145..56e3fbe501 100644
--- a/dashboard-ui/scripts/dashboardhosting.js
+++ b/dashboard-ui/scripts/dashboardhosting.js
@@ -1,22 +1,5 @@
define(['jQuery'], function ($) {
- function loadPage(page, config) {
-
- $('#txtPortNumber', page).val(config.HttpServerPortNumber);
- $('#txtPublicPort', page).val(config.PublicPort);
- $('#txtPublicHttpsPort', page).val(config.PublicHttpsPort);
-
- $('#chkEnableHttps', page).checked(config.EnableHttps);
- $('#txtHttpsPort', page).val(config.HttpsPortNumber);
-
- $('#txtDdns', page).val(config.WanDdns || '');
- $('#txtCertificatePath', page).val(config.CertificatePath || '');
-
- $('#chkEnableUpnp', page).checked(config.EnableUPnP);
-
- Dashboard.hideLoadingMsg();
- }
-
function onSubmit() {
Dashboard.showLoadingMsg();
@@ -52,24 +35,43 @@
}];
}
- $(document).on('pageshow', "#dashboardHostingPage", function () {
+ return function (view, params) {
- LibraryMenu.setTabs('adminadvanced', 0, getTabs);
- Dashboard.showLoadingMsg();
+ var self = this;
- var page = this;
+ function loadPage(page, config) {
- ApiClient.getServerConfiguration().then(function (config) {
+ $('#txtPortNumber', page).val(config.HttpServerPortNumber);
+ $('#txtPublicPort', page).val(config.PublicPort);
+ $('#txtPublicHttpsPort', page).val(config.PublicHttpsPort);
- loadPage(page, config);
+ var chkEnableHttps = page.querySelector('#chkEnableHttps');
+ chkEnableHttps.checked = config.EnableHttps;
- });
+ $('#txtHttpsPort', page).val(config.HttpsPortNumber);
- }).on('pageinit', "#dashboardHostingPage", function () {
+ $('#txtDdns', page).val(config.WanDdns || '');
- var page = this;
+ var txtCertificatePath = page.querySelector('#txtCertificatePath');
+ txtCertificatePath.value = config.CertificatePath || '';
- $('#btnSelectCertPath', page).on("click.selectDirectory", function () {
+ $('#chkEnableUpnp', page).checked(config.EnableUPnP);
+
+ onCertPathChange.call(txtCertificatePath);
+
+ Dashboard.hideLoadingMsg();
+ }
+
+ function onCertPathChange() {
+
+ if (this.value) {
+ view.querySelector('#txtDdns').setAttribute('required', 'required');
+ } else {
+ view.querySelector('#txtDdns').removeAttribute('required');
+ }
+ }
+
+ $('#btnSelectCertPath', view).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
@@ -83,7 +85,7 @@
callback: function (path) {
if (path) {
- $('#txtCertificatePath', page).val(path);
+ $('#txtCertificatePath', view).val(path);
}
picker.close();
},
@@ -94,6 +96,18 @@
});
$('.dashboardHostingForm').off('submit', onSubmit).on('submit', onSubmit);
- });
+ view.querySelector('#txtCertificatePath').addEventListener('change', onCertPathChange);
+
+ view.addEventListener('viewshow', function (e) {
+ LibraryMenu.setTabs('adminadvanced', 0, getTabs);
+ Dashboard.showLoadingMsg();
+
+ ApiClient.getServerConfiguration().then(function (config) {
+
+ loadPage(view, config);
+
+ });
+ });
+ };
});
diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js
index f7bdfeb3e1..88e201b3c7 100644
--- a/dashboard-ui/scripts/itemdetailpage.js
+++ b/dashboard-ui/scripts/itemdetailpage.js
@@ -1,4 +1,4 @@
-define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo) {
+define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'backdrop', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo, backdrop) {
var currentItem;
@@ -75,14 +75,13 @@
// For these types, make the backdrop a little smaller so that the items are more quickly accessible
if (item.Type == 'MusicArtist' || item.Type == "MusicAlbum" || item.Type == "Playlist" || item.Type == "BoxSet" || item.MediaType == "Audio" || !layoutManager.mobile) {
$('#itemBackdrop', page).addClass('noBackdrop').css('background-image', 'none');
- require(['backdrop'], function (backdrop) {
- backdrop.setBackdrops([item]);
- });
+ backdrop.setBackdrops([item]);
}
else {
//$('#itemBackdrop', page).addClass('noBackdrop').css('background-image', 'none');
//Backdrops.setBackdrops(page, [item]);
hasBackdrop = LibraryBrowser.renderDetailPageBackdrop(page, item);
+ backdrop.clear();
}
var transparentHeader = hasBackdrop && page.classList.contains('noSecondaryNavPage');
@@ -475,7 +474,7 @@
});
});
- $('.itemGenres', page).each(function() {
+ $('.itemGenres', page).each(function () {
LibraryBrowser.renderGenres(this, item, null, isStatic);
});
LibraryBrowser.renderStudios($('.itemStudios', page), item, isStatic);
@@ -1098,10 +1097,13 @@
html += '
';
+ html += '
';
html += '
';
html += '' + type.name + '';
html += '
';
+ html += '';
+ html += '';
html += '
';
@@ -1131,6 +1133,15 @@
removeFromCollection(page, parentItem, [itemId], user, context);
});
+
+ collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () {
+ require(['alert'], function (alert) {
+ alert({
+ text: Globalize.translate('AddItemToCollectionHelp'),
+ html: Globalize.translate('AddItemToCollectionHelp') + '
' + Globalize.translate('ButtonLearnMore') + ''
+ });
+ });
+ });
}
function removeFromCollection(page, parentItem, itemIds, user, context) {
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index d7e2362d0a..2a5616e31a 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -213,14 +213,11 @@
if (selected == null) {
- var elem = tabs.querySelector('.pageTabButton.is-active');
- if (elem) {
- return parseInt(elem.getAttribute('data-index'));
- }
- return 0;
+ return tabs.selectedTabIndex || 0;
}
var current = LibraryBrowser.selectedTab(tabs);
+ tabs.selectedTabIndex = selected;
if (current == selected) {
tabs.dispatchEvent(new CustomEvent("tabchange", {
detail: {
@@ -268,13 +265,13 @@
LibraryBrowser.configureSwipeTabs(ownerpage, tabs);
}
- var buttons = tabs.querySelectorAll('.pageTabButton');
- for (var i = 0, length = buttons.length; i < length; i++) {
- //buttons[i].classList.add('mdl-button');
- //buttons[i].classList.add('mdl-js-button');
- var div = document.createElement('div');
- div.classList.add('pageTabButtonSelectionBar');
- buttons[i].appendChild(div);
+ if (!browserInfo.safari || !AppInfo.isNativeApp) {
+ var buttons = tabs.querySelectorAll('.pageTabButton');
+ for (var i = 0, length = buttons.length; i < length; i++) {
+ var div = document.createElement('div');
+ div.classList.add('pageTabButtonSelectionBar');
+ buttons[i].appendChild(div);
+ }
}
tabs.classList.add('hiddenScrollX');
@@ -1069,7 +1066,8 @@
}
if (item.CollectionType == 'games') {
- return 'gamesrecommended.html?topParentId=' + item.Id;
+ return id ? "itemlist.html?parentId=" + id : "#";
+ //return 'gamesrecommended.html?topParentId=' + item.Id;
}
if (item.CollectionType == 'playlists') {
return 'playlists.html?topParentId=' + item.Id;
@@ -1787,20 +1785,20 @@
var isSquareAspectRatio = primaryImageAspectRatio && Math.abs(primaryImageAspectRatio - 1) < .33 ||
primaryImageAspectRatio && Math.abs(primaryImageAspectRatio - 1.3333334) < .01;
- if (options.shape == 'auto' || options.shape == 'autohome') {
+ if (options.shape == 'auto' || options.shape == 'autohome' || options.shape == 'autooverflow') {
if (isThumbAspectRatio) {
- options.shape = options.shape == 'auto' ? 'backdrop' : 'backdrop';
+ options.shape = options.shape == 'autooverflow' ? 'overflowBackdrop' : 'backdrop';
} else if (isSquareAspectRatio) {
options.coverImage = true;
- options.shape = 'square';
+ options.shape = options.shape == 'autooverflow' ? 'overflowSquare' : 'square';
} else if (primaryImageAspectRatio && primaryImageAspectRatio > 1.9) {
options.shape = 'banner';
options.coverImage = true;
} else if (primaryImageAspectRatio && Math.abs(primaryImageAspectRatio - 0.6666667) < .2) {
- options.shape = options.shape == 'auto' ? 'portrait' : 'portrait';
+ options.shape = options.shape == 'autooverflow' ? 'overflowPortrait' : 'portrait';
} else {
- options.shape = options.defaultShape || (options.shape == 'auto' ? 'square' : 'square');
+ options.shape = options.defaultShape || (options.shape == 'autooverflow' ? 'overflowSquare' : 'square');
}
}
diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js
index bb83f29223..3fb2ff4bc6 100644
--- a/dashboard-ui/scripts/librarymenu.js
+++ b/dashboard-ui/scripts/librarymenu.js
@@ -743,7 +743,7 @@
var helpUrl = page.getAttribute('data-helpurl');
if (helpUrl) {
- html += '
Help';
+ html += '
' + Globalize.translate('ButtonHelp') + '';
}
}
}
diff --git a/dashboard-ui/scripts/livetvrecordings.js b/dashboard-ui/scripts/livetvrecordings.js
index 9e16f38854..9758bf997e 100644
--- a/dashboard-ui/scripts/livetvrecordings.js
+++ b/dashboard-ui/scripts/livetvrecordings.js
@@ -54,10 +54,6 @@
Dashboard.hideLoadingMsg();
}
- function getSquareShape() {
- return enableScrollX() ? 'overflowSquare' : 'square';
- }
-
function enableScrollX() {
return browserInfo.mobile && AppInfo.enableAppLayouts;
}
@@ -80,14 +76,12 @@
recordingItems.innerHTML = LibraryBrowser.getPosterViewHtml({
items: recordings,
- shape: (enableScrollX() ? getSquareShape() : 'auto'),
+ shape: (enableScrollX() ? 'autooverflow' : 'auto'),
showTitle: true,
showParentTitle: true,
- centerText: true,
coverImage: true,
lazy: true,
- overlayPlayButton: true
-
+ cardLayout: true
});
ImageLoader.lazyChildren(recordingItems);
@@ -113,7 +107,7 @@
ApiClient.getLiveTvRecordings({
userId: Dashboard.getCurrentUserId(),
- limit: 4,
+ limit: enableScrollX() ? 12 : 4,
IsInProgress: false,
Fields: 'CanDelete,PrimaryImageAspectRatio'
diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js
index d0722c1390..ed952e3ba2 100644
--- a/dashboard-ui/scripts/livetvsuggested.js
+++ b/dashboard-ui/scripts/livetvsuggested.js
@@ -8,14 +8,6 @@
return enableScrollX() ? 'overflowPortrait' : 'portrait';
}
- function getThumbShape() {
- return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
- }
-
- function getSquareShape() {
- return enableScrollX() ? 'overflowSquare' : 'square';
- }
-
function getLimit() {
return enableScrollX() ? 12 : 8;
@@ -109,7 +101,7 @@
var html = libraryBrowser.getPosterViewHtml({
items: items,
- shape: shape || (enableScrollX() ? getSquareShape() : 'auto'),
+ shape: shape || (enableScrollX() ? 'autooverflow' : 'auto'),
showTitle: true,
centerText: true,
coverImage: true,
diff --git a/dashboard-ui/scripts/moviesrecommended.js b/dashboard-ui/scripts/moviesrecommended.js
index 2a9a40af5f..6d1ccab082 100644
--- a/dashboard-ui/scripts/moviesrecommended.js
+++ b/dashboard-ui/scripts/moviesrecommended.js
@@ -301,7 +301,7 @@
baseUrl += '?topParentId=' + topParentId;
}
- libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 4, 5]);
+ libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 3, 4, 5]);
var tabControllers = [];
var renderedTabs = [];
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index a674d3dc0d..f3e80e6418 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -2243,7 +2243,7 @@ var AppInfo = {};
var baseUrl = 'bower_components/emby-webcomponents/strings/';
- var languages = ['da', 'en-US', 'kk', 'nl', 'ru'];
+ var languages = ['da', 'en-US', 'es-MX', 'kk', 'nb', 'nl', 'ru'];
var translations = languages.map(function (i) {
return {
@@ -2404,9 +2404,10 @@ var AppInfo = {};
defineRoute({
path: '/dashboardhosting.html',
- dependencies: [],
+ dependencies: ['paper-checkbox', 'paper-input', 'paper-button'],
autoFocus: false,
- roles: 'admin'
+ roles: 'admin',
+ controller: 'scripts/dashboardhosting'
});
defineRoute({
@@ -2698,7 +2699,7 @@ var AppInfo = {};
defineRoute({
path: '/movies.html',
- dependencies: ['paper-checkbox', 'paper-fab', 'scripts/alphapicker', 'paper-button'],
+ dependencies: ['paper-checkbox', 'scripts/alphapicker', 'paper-button'],
autoFocus: false,
controller: 'scripts/moviesrecommended',
transition: 'fade'
diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json
index 4d08016d0f..308f7dbd00 100644
--- a/dashboard-ui/strings/en-US.json
+++ b/dashboard-ui/strings/en-US.json
@@ -561,8 +561,8 @@
"LabelWebSocketPortNumber": "Web socket port number:",
"LabelEnableAutomaticPortMap": "Enable automatic port mapping",
"LabelEnableAutomaticPortMapHelp": "Attempt to automatically map the public port to the local port via UPnP. This may not work with some router models.",
- "LabelExternalDDNS": "External WAN Address:",
- "LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Emby apps will use it when connecting remotely. Leave empty for automatic detection.",
+ "LabelExternalDDNS": "External domain:",
+ "LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Emby apps will use it when connecting remotely. This field is required when used with a custom https certificate.",
"TabResume": "Resume",
"TabWeather": "Weather",
"TitleAppSettings": "App Settings",
@@ -2351,5 +2351,7 @@
"LabelOriginalTitle": "Original title:",
"LabelSortTitle": "Sort title:",
"OptionConvertRecordingPreserveAudio": "Preserve original audio when converting recordings",
- "OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices."
+ "OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices.",
+ "CreateCollectionHelp": "Collections allow you to create personalized groupings of movies and other library content.",
+ "AddItemToCollectionHelp": "Add items to collections by searching for them and using their right-click or tap menus to add them to a collection."
}