diff --git a/package.json b/package.json
index 74c8ae27ce..5db40a0efe 100644
--- a/package.json
+++ b/package.json
@@ -114,6 +114,8 @@
"src/components/htmlMediaHelper.js",
"src/components/imageOptionsEditor/imageOptionsEditor.js",
"src/components/images/imageLoader.js",
+ "src/components/imageDownloader/imageDownloader.js",
+ "src/components/imageeditor/imageeditor.js",
"src/components/imageUploader/imageUploader.js",
"src/components/indicators/indicators.js",
"src/components/itemContextMenu.js",
diff --git a/src/components/imageDownloader/imageDownloader.js b/src/components/imageDownloader/imageDownloader.js
index 8c278a62b6..2be2ef09b2 100644
--- a/src/components/imageDownloader/imageDownloader.js
+++ b/src/components/imageDownloader/imageDownloader.js
@@ -1,23 +1,39 @@
-define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader', 'browser', 'layoutManager', 'scrollHelper', 'globalize', 'require', 'emby-checkbox', 'paper-icon-button-light', 'emby-button', 'formDialogStyle', 'cardStyle'], function (dom, loading, appHost, dialogHelper, connectionManager, imageLoader, browser, layoutManager, scrollHelper, globalize, require) {
- 'use strict';
+import dom from 'dom';
+import loading from 'loading';
+import appHost from 'apphost';
+import dialogHelper from 'dialogHelper';
+import connectionManager from 'connectionManager';
+import imageLoader from 'imageLoader';
+import browser from 'browser';
+import layoutManager from 'layoutManager';
+import scrollHelper from 'scrollHelper';
+import globalize from 'globalize';
+import require from 'require';
+import 'emby-checkbox';
+import 'paper-icon-button-light';
+import 'emby-button';
+import 'formDialogStyle';
+import 'cardStyle';
- var enableFocusTransform = !browser.slow && !browser.edge;
+/* eslint-disable indent */
- var currentItemId;
- var currentItemType;
- var currentResolve;
- var currentReject;
- var hasChanges = false;
+ const enableFocusTransform = !browser.slow && !browser.edge;
+
+ let currentItemId;
+ let currentItemType;
+ let currentResolve;
+ let currentReject;
+ let hasChanges = false;
// These images can be large and we're seeing memory problems in safari
- var browsableImagePageSize = browser.slow ? 6 : 30;
+ const browsableImagePageSize = browser.slow ? 6 : 30;
- var browsableImageStartIndex = 0;
- var browsableImageType = 'Primary';
- var selectedProvider;
+ let browsableImageStartIndex = 0;
+ let browsableImageType = 'Primary';
+ let selectedProvider;
function getBaseRemoteOptions() {
- var options = {};
+ const options = {};
options.itemId = currentItemId;
@@ -27,14 +43,14 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
function reloadBrowsableImages(page, apiClient) {
loading.show();
- var options = getBaseRemoteOptions();
+ const options = getBaseRemoteOptions();
options.type = browsableImageType;
options.startIndex = browsableImageStartIndex;
options.limit = browsableImagePageSize;
options.IncludeAllLanguages = page.querySelector('#chkAllLanguages').checked;
- var provider = selectedProvider || '';
+ const provider = selectedProvider || '';
if (provider) {
options.ProviderName = provider;
@@ -45,11 +61,11 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
page.querySelector('#selectBrowsableImageType').value = browsableImageType;
- var providersHtml = result.Providers.map(function (p) {
+ const providersHtml = result.Providers.map(function (p) {
return '';
});
- var selectImageProvider = page.querySelector('#selectImageProvider');
+ const selectImageProvider = page.querySelector('#selectImageProvider');
selectImageProvider.innerHTML = '' + providersHtml;
selectImageProvider.value = provider;
@@ -60,18 +76,18 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
function renderRemoteImages(page, apiClient, imagesResult, imageType, startIndex, limit) {
page.querySelector('.availableImagesPaging').innerHTML = getPagingHtml(startIndex, limit, imagesResult.TotalRecordCount);
- var html = '';
+ let html = '';
- for (var i = 0, length = imagesResult.Images.length; i < length; i++) {
+ for (let i = 0, length = imagesResult.Images.length; i < length; i++) {
html += getRemoteImageHtml(imagesResult.Images[i], imageType, apiClient);
}
- var availableImagesList = page.querySelector('.availableImagesList');
+ const availableImagesList = page.querySelector('.availableImagesList');
availableImagesList.innerHTML = html;
imageLoader.lazyChildren(availableImagesList);
- var btnNextPage = page.querySelector('.btnNextPage');
- var btnPreviousPage = page.querySelector('.btnPreviousPage');
+ const btnNextPage = page.querySelector('.btnNextPage');
+ const btnPreviousPage = page.querySelector('.btnPreviousPage');
if (btnNextPage) {
btnNextPage.addEventListener('click', function () {
@@ -89,18 +105,18 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
}
function getPagingHtml(startIndex, limit, totalRecordCount) {
- var html = '';
+ let html = '';
- var recordsEnd = Math.min(startIndex + limit, totalRecordCount);
+ const recordsEnd = Math.min(startIndex + limit, totalRecordCount);
// 20 is the minimum page size
- var showControls = totalRecordCount > limit;
+ const showControls = totalRecordCount > limit;
html += '
';
html += '
';
- var startAtDisplay = totalRecordCount ? startIndex + 1 : 0;
+ const startAtDisplay = totalRecordCount ? startIndex + 1 : 0;
html += globalize.translate('ListPaging', startAtDisplay, recordsEnd, totalRecordCount);
html += '';
@@ -119,7 +135,7 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
}
function downloadRemoteImage(page, apiClient, url, type, provider) {
- var options = getBaseRemoteOptions();
+ const options = getBaseRemoteOptions();
options.Type = type;
options.ImageUrl = url;
@@ -129,7 +145,7 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
apiClient.downloadRemoteImage(options).then(function () {
hasChanges = true;
- var dlg = dom.parentWithClass(page, 'dialog');
+ const dlg = dom.parentWithClass(page, 'dialog');
dialogHelper.close(dlg);
});
}
@@ -139,17 +155,17 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
}
function getRemoteImageHtml(image, imageType, apiClient) {
- var tagName = layoutManager.tv ? 'button' : 'div';
- var enableFooterButtons = !layoutManager.tv;
+ const tagName = layoutManager.tv ? 'button' : 'div';
+ const enableFooterButtons = !layoutManager.tv;
// TODO move card creation code to Card component
- var html = '';
+ let html = '';
- var cssClass = 'card scalableCard imageEditorCard';
- var cardBoxCssClass = 'cardBox visualCardBox';
+ let cssClass = 'card scalableCard imageEditorCard';
+ const cardBoxCssClass = 'cardBox visualCardBox';
- var shape = 'backdrop';
+ let shape;
if (imageType === 'Backdrop' || imageType === 'Art' || imageType === 'Thumb' || imageType === 'Logo') {
shape = 'backdrop';
} else if (imageType === 'Banner') {
@@ -284,14 +300,14 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
});
page.addEventListener('click', function (e) {
- var btnDownloadRemoteImage = dom.parentWithClass(e.target, 'btnDownloadRemoteImage');
+ const btnDownloadRemoteImage = dom.parentWithClass(e.target, 'btnDownloadRemoteImage');
if (btnDownloadRemoteImage) {
- var card = dom.parentWithClass(btnDownloadRemoteImage, 'card');
+ const card = dom.parentWithClass(btnDownloadRemoteImage, 'card');
downloadRemoteImage(page, apiClient, card.getAttribute('data-imageurl'), card.getAttribute('data-imagetype'), card.getAttribute('data-imageprovider'));
return;
}
- var btnImageCard = dom.parentWithClass(e.target, 'btnImageCard');
+ const btnImageCard = dom.parentWithClass(e.target, 'btnImageCard');
if (btnImageCard) {
downloadRemoteImage(page, apiClient, btnImageCard.getAttribute('data-imageurl'), btnImageCard.getAttribute('data-imagetype'), btnImageCard.getAttribute('data-imageprovider'));
}
@@ -302,12 +318,12 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
loading.show();
require(['text!./imageDownloader.template.html'], function (template) {
- var apiClient = connectionManager.getApiClient(serverId);
+ const apiClient = connectionManager.getApiClient(serverId);
currentItemId = itemId;
currentItemType = itemType;
- var dialogOptions = {
+ const dialogOptions = {
removeOnClose: true
};
@@ -317,7 +333,7 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
dialogOptions.size = 'small';
}
- var dlg = dialogHelper.createDialog(dialogOptions);
+ const dlg = dialogHelper.createDialog(dialogOptions);
dlg.innerHTML = globalize.translateHtml(template, 'core');
@@ -330,7 +346,7 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
dialogHelper.open(dlg);
- var editorContent = dlg.querySelector('.formDialogContent');
+ const editorContent = dlg.querySelector('.formDialogContent');
initEditor(editorContent, apiClient);
dlg.querySelector('.btnCancel').addEventListener('click', function () {
@@ -342,7 +358,7 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
}
function onDialogClosed() {
- var dlg = this;
+ const dlg = this;
if (layoutManager.tv) {
scrollHelper.centerFocus.off(dlg, false);
@@ -356,18 +372,20 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
}
}
- return {
- show: function (itemId, serverId, itemType, imageType) {
- return new Promise(function (resolve, reject) {
- currentResolve = resolve;
- currentReject = reject;
- hasChanges = false;
- browsableImageStartIndex = 0;
- browsableImageType = imageType || 'Primary';
- selectedProvider = null;
+export function show(itemId, serverId, itemType, imageType) {
+ return new Promise(function (resolve, reject) {
+ currentResolve = resolve;
+ currentReject = reject;
+ hasChanges = false;
+ browsableImageStartIndex = 0;
+ browsableImageType = imageType || 'Primary';
+ selectedProvider = null;
+ showEditor(itemId, serverId, itemType);
+ });
+}
- showEditor(itemId, serverId, itemType);
- });
- }
- };
-});
+export default {
+ show: show
+};
+
+/* eslint-enable indent */
diff --git a/src/components/imageeditor/imageeditor.js b/src/components/imageeditor/imageeditor.js
index 125a2dc062..78c35bb15f 100644
--- a/src/components/imageeditor/imageeditor.js
+++ b/src/components/imageeditor/imageeditor.js
@@ -1,13 +1,29 @@
-define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', 'focusManager', 'globalize', 'scrollHelper', 'imageLoader', 'require', 'browser', 'apphost', 'cardStyle', 'formDialogStyle', 'emby-button', 'paper-icon-button-light', 'css!./imageeditor'], function (dialogHelper, connectionManager, loading, dom, layoutManager, focusManager, globalize, scrollHelper, imageLoader, require, browser, appHost) {
- 'use strict';
+import dialogHelper from 'dialogHelper';
+import connectionManager from 'connectionManager';
+import loading from 'loading';
+import dom from 'dom';
+import layoutManager from 'layoutManager';
+import focusManager from 'focusManager';
+import globalize from 'globalize';
+import scrollHelper from 'scrollHelper';
+import imageLoader from 'imageLoader';
+import browser from 'browser';
+import appHost from 'apphost';
+import 'cardStyle';
+import 'formDialogStyle';
+import 'emby-button';
+import 'paper-icon-button-light';
+import 'css!./imageeditor';
- var enableFocusTransform = !browser.slow && !browser.edge;
+/* eslint-disable indent */
- var currentItem;
- var hasChanges = false;
+ const enableFocusTransform = !browser.slow && !browser.edge;
+
+ let currentItem;
+ let hasChanges = false;
function getBaseRemoteOptions() {
- var options = {};
+ const options = {};
options.itemId = currentItem.Id;
@@ -17,7 +33,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
function reload(page, item, focusContext) {
loading.show();
- var apiClient;
+ let apiClient;
if (item) {
apiClient = connectionManager.getApiClient(item.ServerId);
@@ -32,7 +48,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
function addListeners(container, className, eventName, fn) {
container.addEventListener(eventName, function (e) {
- var elem = dom.parentWithClass(e.target, className);
+ const elem = dom.parentWithClass(e.target, className);
if (elem) {
fn.call(elem, e);
}
@@ -43,8 +59,8 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
currentItem = item;
apiClient.getRemoteImageProviders(getBaseRemoteOptions()).then(function (providers) {
- var btnBrowseAllImages = page.querySelectorAll('.btnBrowseAllImages');
- for (var i = 0, length = btnBrowseAllImages.length; i < length; i++) {
+ const btnBrowseAllImages = page.querySelectorAll('.btnBrowseAllImages');
+ for (let i = 0, length = btnBrowseAllImages.length; i < length; i++) {
if (providers.length) {
btnBrowseAllImages[i].classList.remove('hide');
} else {
@@ -87,10 +103,10 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
function getCardHtml(image, index, numImages, apiClient, imageProviders, imageSize, tagName, enableFooterButtons) {
// TODO move card creation code to Card component
- var html = '';
+ let html = '';
- var cssClass = 'card scalableCard imageEditorCard';
- var cardBoxCssClass = 'cardBox visualCardBox';
+ let cssClass = 'card scalableCard imageEditorCard';
+ const cardBoxCssClass = 'cardBox visualCardBox';
cssClass += ' backdropCard backdropCard-scalable';
@@ -120,7 +136,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
html += '
';
- var imageUrl = getImageUrl(currentItem, apiClient, image.ImageType, image.ImageIndex, { maxWidth: imageSize });
+ const imageUrl = getImageUrl(currentItem, apiClient, image.ImageType, image.ImageIndex, { maxWidth: imageSize });
html += '
';
@@ -172,7 +188,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
function deleteImage(context, itemId, type, index, apiClient, enableConfirmation) {
- var afterConfirm = function () {
+ const afterConfirm = function () {
apiClient.deleteItemImage(itemId, type, index).then(function () {
hasChanges = true;
reload(context);
@@ -184,8 +200,8 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
return;
}
- require(['confirm'], function (confirm) {
- confirm.default({
+ import('confirm').then(({default: confirm}) => {
+ confirm({
text: globalize.translate('ConfirmDeleteImage'),
confirmText: globalize.translate('Delete'),
@@ -200,27 +216,26 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
hasChanges = true;
reload(context, null, focusContext);
}, function () {
- require(['alert'], function (alert) {
+ import('alert').then(({default: alert}) => {
alert(globalize.translate('DefaultErrorMessage'));
});
});
}
function renderImages(page, item, apiClient, images, imageProviders, elem) {
- var html = '';
+ let html = '';
- var imageSize = 300;
- var windowSize = dom.getWindowSize();
+ let imageSize = 300;
+ const windowSize = dom.getWindowSize();
if (windowSize.innerWidth >= 1280) {
imageSize = Math.round(windowSize.innerWidth / 4);
}
- var tagName = layoutManager.tv ? 'button' : 'div';
- var enableFooterButtons = !layoutManager.tv;
-
- for (var i = 0, length = images.length; i < length; i++) {
- var image = images[i];
+ const tagName = layoutManager.tv ? 'button' : 'div';
+ const enableFooterButtons = !layoutManager.tv;
+ for (let i = 0, length = images.length; i < length; i++) {
+ const image = images[i];
html += getCardHtml(image, i, length, apiClient, imageProviders, imageSize, tagName, enableFooterButtons);
}
@@ -229,7 +244,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
function renderStandardImages(page, apiClient, item, imageInfos, imageProviders) {
- var images = imageInfos.filter(function (i) {
+ const images = imageInfos.filter(function (i) {
return i.ImageType !== 'Screenshot' && i.ImageType !== 'Backdrop' && i.ImageType !== 'Chapter';
});
@@ -237,7 +252,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
function renderBackdrops(page, apiClient, item, imageInfos, imageProviders) {
- var images = imageInfos.filter(function (i) {
+ const images = imageInfos.filter(function (i) {
return i.ImageType === 'Backdrop';
}).sort(function (a, b) {
return a.ImageIndex - b.ImageIndex;
@@ -252,7 +267,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
function renderScreenshots(page, apiClient, item, imageInfos, imageProviders) {
- var images = imageInfos.filter(function (i) {
+ const images = imageInfos.filter(function (i) {
return i.ImageType === 'Screenshot';
}).sort(function (a, b) {
return a.ImageIndex - b.ImageIndex;
@@ -267,7 +282,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
function showImageDownloader(page, imageType) {
- require(['imageDownloader'], function (ImageDownloader) {
+ import('imageDownloader').then(({default: ImageDownloader}) => {
ImageDownloader.show(currentItem.Id, currentItem.ServerId, currentItem.Type, imageType).then(function () {
hasChanges = true;
reload(page);
@@ -276,17 +291,17 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
function showActionSheet(context, imageCard) {
- var itemId = imageCard.getAttribute('data-id');
- var serverId = imageCard.getAttribute('data-serverid');
- var apiClient = connectionManager.getApiClient(serverId);
+ const itemId = imageCard.getAttribute('data-id');
+ const serverId = imageCard.getAttribute('data-serverid');
+ const apiClient = connectionManager.getApiClient(serverId);
- var type = imageCard.getAttribute('data-imagetype');
- var index = parseInt(imageCard.getAttribute('data-index'));
- var providerCount = parseInt(imageCard.getAttribute('data-providers'));
- var numImages = parseInt(imageCard.getAttribute('data-numimages'));
+ const type = imageCard.getAttribute('data-imagetype');
+ const index = parseInt(imageCard.getAttribute('data-index'));
+ const providerCount = parseInt(imageCard.getAttribute('data-providers'));
+ const numImages = parseInt(imageCard.getAttribute('data-numimages'));
- require(['actionsheet'], function (actionSheet) {
- var commands = [];
+ import('actionsheet').then(({default: actionSheet}) => {
+ const commands = [];
commands.push({
name: globalize.translate('Delete'),
@@ -343,9 +358,9 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
function initEditor(context, options) {
- var uploadButtons = context.querySelectorAll('.btnOpenUploadMenu');
- var isFileInputSupported = appHost.supports('fileinput');
- for (var i = 0, length = uploadButtons.length; i < length; i++) {
+ const uploadButtons = context.querySelectorAll('.btnOpenUploadMenu');
+ const isFileInputSupported = appHost.supports('fileinput');
+ for (let i = 0, length = uploadButtons.length; i < length; i++) {
if (isFileInputSupported) {
uploadButtons[i].classList.remove('hide');
} else {
@@ -354,9 +369,9 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
}
addListeners(context, 'btnOpenUploadMenu', 'click', function () {
- var imageType = this.getAttribute('data-imagetype');
+ const imageType = this.getAttribute('data-imagetype');
- require(['imageUploader'], function (imageUploader) {
+ import('imageUploader').then(({default: imageUploader}) => {
imageUploader.show({
theme: options.theme,
@@ -386,32 +401,32 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
});
addListeners(context, 'btnDeleteImage', 'click', function () {
- var type = this.getAttribute('data-imagetype');
- var index = this.getAttribute('data-index');
+ const type = this.getAttribute('data-imagetype');
+ let index = this.getAttribute('data-index');
index = index === 'null' ? null : parseInt(index);
- var apiClient = connectionManager.getApiClient(currentItem.ServerId);
+ const apiClient = connectionManager.getApiClient(currentItem.ServerId);
deleteImage(context, currentItem.Id, type, index, apiClient, true);
});
addListeners(context, 'btnMoveImage', 'click', function () {
- var type = this.getAttribute('data-imagetype');
- var index = this.getAttribute('data-index');
- var newIndex = this.getAttribute('data-newindex');
- var apiClient = connectionManager.getApiClient(currentItem.ServerId);
+ const type = this.getAttribute('data-imagetype');
+ const index = this.getAttribute('data-index');
+ const newIndex = this.getAttribute('data-newindex');
+ const apiClient = connectionManager.getApiClient(currentItem.ServerId);
moveImage(context, apiClient, currentItem.Id, type, index, newIndex, dom.parentWithClass(this, 'itemsContainer'));
});
}
function showEditor(options, resolve, reject) {
- var itemId = options.itemId;
- var serverId = options.serverId;
+ const itemId = options.itemId;
+ const serverId = options.serverId;
loading.show();
- require(['text!./imageeditor.template.html'], function (template) {
- var apiClient = connectionManager.getApiClient(serverId);
+ import('text!./imageeditor.template.html').then(({default: template}) => {
+ const apiClient = connectionManager.getApiClient(serverId);
apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) {
- var dialogOptions = {
+ const dialogOptions = {
removeOnClose: true
};
@@ -421,7 +436,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
dialogOptions.size = 'small';
}
- var dlg = dialogHelper.createDialog(dialogOptions);
+ const dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add('formDialog');
@@ -459,13 +474,15 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
});
}
- return {
- show: function (options) {
- return new Promise(function (resolve, reject) {
- hasChanges = false;
+export function show (options) {
+ return new Promise(function (resolve, reject) {
+ hasChanges = false;
+ showEditor(options, resolve, reject);
+ });
+}
- showEditor(options, resolve, reject);
- });
- }
- };
-});
+export default {
+ show
+};
+
+/* eslint-enable indent */