diff --git a/.eslintrc.js b/.eslintrc.js
index 4a3fec9448..8b9a7dea13 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -42,7 +42,8 @@ module.exports = {
'one-var': ["error", "never"],
'quotes': ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": false }],
'semi': ["error"],
- 'space-before-blocks': ["error"]
+ 'space-before-blocks': ["error"],
+ "space-infix-ops": "error"
},
overrides: [
{
diff --git a/package.json b/package.json
index a88e5342ce..02d0c804d2 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"@babel/plugin-transform-modules-amd": "^7.9.6",
"@babel/polyfill": "^7.8.7",
"@babel/preset-env": "^7.8.6",
- "autoprefixer": "^9.7.6",
+ "autoprefixer": "^9.8.0",
"babel-loader": "^8.0.6",
"browser-sync": "^2.26.7",
"clean-webpack-plugin": "^3.0.0",
@@ -78,7 +78,7 @@
"screenfull": "^5.0.2",
"shaka-player": "^2.5.11",
"sortablejs": "^1.10.2",
- "swiper": "^5.3.7",
+ "swiper": "^5.4.0",
"webcomponents.js": "^0.7.24",
"whatwg-fetch": "^3.0.0"
},
diff --git a/src/components/images/imageFetcher.js b/src/components/images/imageFetcher.js
deleted file mode 100644
index c6882ddb7c..0000000000
--- a/src/components/images/imageFetcher.js
+++ /dev/null
@@ -1,38 +0,0 @@
-define(['dom'], function (dom) {
- 'use strict';
-
- function loadImage(elem, url) {
-
- if (!elem) {
- return Promise.reject('elem cannot be null');
- }
-
- if (elem.tagName !== 'IMG') {
-
- elem.style.backgroundImage = "url('" + url + "')";
- return Promise.resolve();
-
- //return loadImageIntoImg(document.createElement('img'), url).then(function () {
- // elem.style.backgroundImage = "url('" + url + "')";
- // return Promise.resolve();
- //});
-
- }
- return loadImageIntoImg(elem, url);
- }
-
- function loadImageIntoImg(elem, url) {
- return new Promise(function (resolve, reject) {
-
- dom.addEventListener(elem, 'load', resolve, {
- once: true
- });
- elem.setAttribute('src', url);
- });
- }
-
- return {
- loadImage: loadImage
- };
-
-});
diff --git a/src/components/indicators/indicators.js b/src/components/indicators/indicators.js
index 7bc8ddd4ec..604f480f1d 100644
--- a/src/components/indicators/indicators.js
+++ b/src/components/indicators/indicators.js
@@ -148,7 +148,7 @@ export function getTypeIndicator(item) {
};
const icon = iconT[item.Type];
- return icon ? '
' : '';
+ return icon ? '
' : '';
}
export function getMissingIndicator(item) {
diff --git a/src/components/playback/playersettingsmenu.js b/src/components/playback/playersettingsmenu.js
index b89631f63a..dd67b667e6 100644
--- a/src/components/playback/playersettingsmenu.js
+++ b/src/components/playback/playersettingsmenu.js
@@ -7,11 +7,13 @@ define(['connectionManager', 'actionsheet', 'datetime', 'playbackManager', 'glob
return stream.Type === 'Video';
})[0];
var videoWidth = videoStream ? videoStream.Width : null;
+ var videoHeight = videoStream ? videoStream.Height : null;
var options = qualityoptions.getVideoQualityOptions({
currentMaxBitrate: playbackManager.getMaxStreamingBitrate(player),
isAutomaticBitrateEnabled: playbackManager.enableAutomaticBitrateDetection(player),
videoWidth: videoWidth,
+ videoHeight: videoHeight,
enableAuto: true
});
@@ -91,11 +93,13 @@ define(['connectionManager', 'actionsheet', 'datetime', 'playbackManager', 'glob
})[0];
var videoWidth = videoStream ? videoStream.Width : null;
+ var videoHeight = videoStream ? videoStream.Height : null;
var options = qualityoptions.getVideoQualityOptions({
currentMaxBitrate: playbackManager.getMaxStreamingBitrate(player),
isAutomaticBitrateEnabled: playbackManager.enableAutomaticBitrateDetection(player),
videoWidth: videoWidth,
+ videoHeight: videoHeight,
enableAuto: true
});
diff --git a/src/components/qualityOptions.js b/src/components/qualityOptions.js
index 5ad69cb790..221e13d4ef 100644
--- a/src/components/qualityOptions.js
+++ b/src/components/qualityOptions.js
@@ -5,6 +5,13 @@ define(['globalize'], function (globalize) {
var maxStreamingBitrate = options.currentMaxBitrate;
var videoWidth = options.videoWidth;
+ var videoHeight = options.videoHeight;
+
+ // If the aspect ratio is less than 16/9 (1.77), set the width as if it were pillarboxed.
+ // 4:3 1440x1080 -> 1920x1080
+ if (videoWidth / videoHeight < 16 / 9) {
+ videoWidth = videoHeight * (16 / 9);
+ }
var maxAllowedWidth = videoWidth || 4096;
//var maxAllowedHeight = videoHeight || 2304;
diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js
index a4f25a774c..089915a834 100644
--- a/src/components/remotecontrol/remotecontrol.js
+++ b/src/components/remotecontrol/remotecontrol.js
@@ -140,7 +140,7 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL
}
if (item.SeriesName != null) {
var seriesName = item.SeriesName;
- if (item.SeriesId !=null) {
+ if (item.SeriesId != null) {
context.querySelector('.nowPlayingSerie').innerHTML = '${seriesName}`;
} else {
context.querySelector('.nowPlayingSerie').innerHTML = seriesName;
diff --git a/src/components/scrollManager.js b/src/components/scrollManager.js
index f7bd41ff8b..3b01cf1ad1 100644
--- a/src/components/scrollManager.js
+++ b/src/components/scrollManager.js
@@ -92,7 +92,7 @@ import layoutManager from 'layoutManager';
* @return {number} Eased value in range [0, 1].
*/
function ease(t) {
- return t*(2 - t); // easeOutQuad === ease-out
+ return t * (2 - t); // easeOutQuad === ease-out
}
/**
@@ -402,8 +402,8 @@ import layoutManager from 'layoutManager';
k = ease(k);
- const x = ox + dx*k;
- const y = oy + dy*k;
+ const x = ox + dx * k;
+ const y = oy + dy * k;
builtinScroll(xScroller, x, yScroller, y, false);
diff --git a/src/controllers/dashboard/networking.js b/src/controllers/dashboard/networking.js
index 9cf638ceee..4ddde7f24c 100644
--- a/src/controllers/dashboard/networking.js
+++ b/src/controllers/dashboard/networking.js
@@ -9,7 +9,7 @@ define(['loading', 'libraryMenu', 'globalize', 'emby-checkbox', 'emby-select'],
var validationResult = getValidationAlert(form);
if (validationResult) {
- alertText(validationResult);
+ showAlertText(validationResult);
return;
}
@@ -29,35 +29,10 @@ define(['loading', 'libraryMenu', 'globalize', 'emby-checkbox', 'emby-select'],
config.IsRemoteIPFilterBlacklist = 'blacklist' === form.querySelector('#selectExternalAddressFilterMode').value;
config.PublicPort = form.querySelector('#txtPublicPort').value;
config.PublicHttpsPort = form.querySelector('#txtPublicHttpsPort').value;
- var httpsMode = form.querySelector('#selectHttpsMode').value;
-
- switch (httpsMode) {
- case 'proxy':
- config.EnableHttps = true;
- config.RequireHttps = false;
- config.IsBehindProxy = true;
- break;
-
- case 'required':
- config.EnableHttps = true;
- config.RequireHttps = true;
- config.IsBehindProxy = false;
- break;
-
- case 'enabled':
- config.EnableHttps = true;
- config.RequireHttps = false;
- config.IsBehindProxy = false;
- break;
-
- default:
- config.EnableHttps = false;
- config.RequireHttps = false;
- config.IsBehindProxy = false;
- }
-
- config.HttpsPortNumber = form.querySelector('#txtHttpsPort').value;
config.HttpServerPortNumber = form.querySelector('#txtPortNumber').value;
+ config.HttpsPortNumber = form.querySelector('#txtHttpsPort').value;
+ config.EnableHttps = form.querySelector('#chkEnableHttps').checked;
+ config.RequireHttps = form.querySelector('#chkRequireHttps').checked;
config.EnableUPnP = enableUpnp;
config.BaseUrl = form.querySelector('#txtBaseUrl').value;
config.EnableRemoteAccess = form.querySelector('#chkRemoteAccess').checked;
@@ -90,23 +65,20 @@ define(['loading', 'libraryMenu', 'globalize', 'emby-checkbox', 'emby-select'],
}
function validateHttps(form) {
- var remoteAccess = form.querySelector('#chkRemoteAccess').checked;
var certPath = form.querySelector('#txtCertificatePath').value || null;
- var httpsMode = form.querySelector('#selectHttpsMode').value;
+ var httpsEnabled = form.querySelector('#chkEnableHttps').checked;
- if (!remoteAccess || ('enabled' !== httpsMode && 'required' !== httpsMode || certPath)) {
- return Promise.resolve();
- }
-
- return new Promise(function (resolve, reject) {
- return alertText({
+ if (httpsEnabled && !certPath) {
+ return showAlertText({
title: globalize.translate('TitleHostingSettings'),
text: globalize.translate('HttpsRequiresCert')
- }).then(reject, reject);
- });
+ }).then(Promise.reject);
+ }
+
+ return Promise.resolve();
}
- function alertText(options) {
+ function showAlertText(options) {
return new Promise(function (resolve, reject) {
require(['alert'], function (alert) {
alert(options).then(resolve, reject);
@@ -116,7 +88,7 @@ define(['loading', 'libraryMenu', 'globalize', 'emby-checkbox', 'emby-select'],
function confirmSelections(localAddress, enableUpnp, callback) {
if (localAddress || !enableUpnp) {
- alertText({
+ showAlertText({
title: globalize.translate('TitleHostingSettings'),
text: globalize.translate('SettingsWarning')
}).then(callback);
@@ -135,19 +107,9 @@ define(['loading', 'libraryMenu', 'globalize', 'emby-checkbox', 'emby-select'],
page.querySelector('#txtExternalAddressFilter').value = (config.RemoteIPFilter || []).join(', ');
page.querySelector('#selectExternalAddressFilterMode').value = config.IsRemoteIPFilterBlacklist ? 'blacklist' : 'whitelist';
page.querySelector('#chkRemoteAccess').checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess;
- var selectHttpsMode = page.querySelector('#selectHttpsMode');
-
- if (config.IsBehindProxy) {
- selectHttpsMode.value = 'proxy';
- } else if (config.RequireHttps) {
- selectHttpsMode.value = 'required';
- } else if (config.EnableHttps) {
- selectHttpsMode.value = 'enabled';
- } else {
- selectHttpsMode.value = 'disabled';
- }
-
page.querySelector('#txtHttpsPort').value = config.HttpsPortNumber;
+ page.querySelector('#chkEnableHttps').checked = config.EnableHttps;
+ page.querySelector('#chkRequireHttps').checked = config.RequireHttps;
page.querySelector('#txtBaseUrl').value = config.BaseUrl || '';
var txtCertificatePath = page.querySelector('#txtCertificatePath');
txtCertificatePath.value = config.CertificatePath || '';
@@ -163,18 +125,12 @@ define(['loading', 'libraryMenu', 'globalize', 'emby-checkbox', 'emby-select'],
view.querySelector('.fldExternalAddressFilterMode').classList.remove('hide');
view.querySelector('.fldPublicPort').classList.remove('hide');
view.querySelector('.fldPublicHttpsPort').classList.remove('hide');
- view.querySelector('.fldCertificatePath').classList.remove('hide');
- view.querySelector('.fldCertPassword').classList.remove('hide');
- view.querySelector('.fldHttpsMode').classList.remove('hide');
view.querySelector('.fldEnableUpnp').classList.remove('hide');
} else {
view.querySelector('.fldExternalAddressFilter').classList.add('hide');
view.querySelector('.fldExternalAddressFilterMode').classList.add('hide');
view.querySelector('.fldPublicPort').classList.add('hide');
view.querySelector('.fldPublicHttpsPort').classList.add('hide');
- view.querySelector('.fldCertificatePath').classList.add('hide');
- view.querySelector('.fldCertPassword').classList.add('hide');
- view.querySelector('.fldHttpsMode').classList.add('hide');
view.querySelector('.fldEnableUpnp').classList.add('hide');
}
});
diff --git a/src/controllers/itemDetails.js b/src/controllers/itemDetails.js
index 45342208ea..d9eab0ac4d 100644
--- a/src/controllers/itemDetails.js
+++ b/src/controllers/itemDetails.js
@@ -803,9 +803,9 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
}
if (editable && url === undefined) {
- html += "";
+ html += "";
} else if (!editable && url === undefined) {
- html += "