';
@@ -121,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;
@@ -131,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);
});
}
@@ -141,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') {
@@ -286,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'));
}
@@ -304,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
};
@@ -319,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');
@@ -332,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 () {
@@ -344,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);
@@ -358,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 9a7b563d0f..9fbd34090d 100644
--- a/src/components/imageeditor/imageeditor.js
+++ b/src/components/imageeditor/imageeditor.js
@@ -1,15 +1,31 @@
-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';
+/* eslint-disable indent */
+
+ const enableFocusTransform = !browser.slow && !browser.edge;
+
loading = loading.default || loading;
- var enableFocusTransform = !browser.slow && !browser.edge;
-
- var currentItem;
- var hasChanges = false;
+ let currentItem;
+ let hasChanges = false;
function getBaseRemoteOptions() {
- var options = {};
+ const options = {};
options.itemId = currentItem.Id;
@@ -19,7 +35,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);
@@ -34,7 +50,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);
}
@@ -45,8 +61,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 {
@@ -89,10 +105,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';
@@ -122,7 +138,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 += '
';
@@ -174,7 +190,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);
@@ -186,8 +202,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'),
@@ -202,27 +218,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);
}
@@ -231,7 +246,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';
});
@@ -239,7 +254,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;
@@ -254,7 +269,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;
@@ -269,7 +284,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);
@@ -278,17 +293,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'),
@@ -345,9 +360,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 {
@@ -356,9 +371,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,
@@ -388,32 +403,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
};
@@ -423,7 +438,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
dialogOptions.size = 'small';
}
- var dlg = dialogHelper.createDialog(dialogOptions);
+ const dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add('formDialog');
@@ -461,13 +476,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 */
diff --git a/src/controllers/livetv/livetvchannels.js b/src/controllers/livetv/livetvchannels.js
index c0061c1f52..f5a0abeb38 100644
--- a/src/controllers/livetv/livetvchannels.js
+++ b/src/controllers/livetv/livetvchannels.js
@@ -2,6 +2,7 @@ define(['cardBuilder', 'imageLoader', 'libraryBrowser', 'loading', 'events', 'us
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData() {
diff --git a/src/controllers/movies/moviecollections.js b/src/controllers/movies/moviecollections.js
index f69b53b77e..9a1a74d4d7 100644
--- a/src/controllers/movies/moviecollections.js
+++ b/src/controllers/movies/moviecollections.js
@@ -2,6 +2,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData(context) {
diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js
index 93370a8ce5..8cbca94475 100644
--- a/src/controllers/movies/moviegenres.js
+++ b/src/controllers/movies/moviegenres.js
@@ -2,6 +2,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData() {
diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js
index 5bc582ad29..ade9dc4b89 100644
--- a/src/controllers/movies/movies.js
+++ b/src/controllers/movies/movies.js
@@ -2,6 +2,7 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser',
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent, options) {
function onViewStyleChange() {
diff --git a/src/controllers/movies/movietrailers.js b/src/controllers/movies/movietrailers.js
index 51ed03ce81..8d9fe8d090 100644
--- a/src/controllers/movies/movietrailers.js
+++ b/src/controllers/movies/movietrailers.js
@@ -2,6 +2,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData(context) {
diff --git a/src/controllers/music/musicalbums.js b/src/controllers/music/musicalbums.js
index 81dc3d8bb0..c95621b431 100644
--- a/src/controllers/music/musicalbums.js
+++ b/src/controllers/music/musicalbums.js
@@ -2,6 +2,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function playAll() {
diff --git a/src/controllers/music/musicartists.js b/src/controllers/music/musicartists.js
index ab73c30db3..150f908170 100644
--- a/src/controllers/music/musicartists.js
+++ b/src/controllers/music/musicartists.js
@@ -2,6 +2,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData(context) {
diff --git a/src/controllers/music/musicgenres.js b/src/controllers/music/musicgenres.js
index 39ca5a44bf..30064b3b64 100644
--- a/src/controllers/music/musicgenres.js
+++ b/src/controllers/music/musicgenres.js
@@ -2,6 +2,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData() {
diff --git a/src/controllers/music/musicplaylists.js b/src/controllers/music/musicplaylists.js
index 464d418229..6f11501daa 100644
--- a/src/controllers/music/musicplaylists.js
+++ b/src/controllers/music/musicplaylists.js
@@ -2,6 +2,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData() {
diff --git a/src/controllers/music/songs.js b/src/controllers/music/songs.js
index e82b81a5c7..0d34987a74 100644
--- a/src/controllers/music/songs.js
+++ b/src/controllers/music/songs.js
@@ -2,6 +2,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS
'use strict';
loading = loading.default || loading;
+ libraryBrowser = libraryBrowser.default || libraryBrowser;
return function (view, params, tabContent) {
function getPageData(context) {
diff --git a/src/scripts/libraryBrowser.js b/src/scripts/libraryBrowser.js
index f9e5e23596..568e73916a 100644
--- a/src/scripts/libraryBrowser.js
+++ b/src/scripts/libraryBrowser.js
@@ -1,199 +1,216 @@
-define(['userSettings', 'globalize'], function (userSettings, globalize) {
- 'use strict';
+import * as userSettings from 'userSettings';
+import globalize from 'globalize';
- var libraryBrowser = {
- getSavedQueryKey: function (modifier) {
- return window.location.href.split('#')[0] + (modifier || '');
- },
- loadSavedQueryValues: function (key, query) {
- var values = userSettings.get(key);
+export function getSavedQueryKey(modifier) {
+ return window.location.href.split('#')[0] + (modifier || '');
+}
- if (values) {
- values = JSON.parse(values);
- return Object.assign(query, values);
- }
+export function loadSavedQueryValues(key, query) {
+ var values = userSettings.get(key);
- return query;
- },
- saveQueryValues: function (key, query) {
- var values = {};
+ if (values) {
+ values = JSON.parse(values);
+ return Object.assign(query, values);
+ }
- if (query.SortBy) {
- values.SortBy = query.SortBy;
- }
+ return query;
+}
- if (query.SortOrder) {
- values.SortOrder = query.SortOrder;
- }
+export function saveQueryValues(key, query) {
+ var values = {};
- userSettings.set(key, JSON.stringify(values));
- },
- saveViewSetting: function (key, value) {
- userSettings.set(key + '-_view', value);
- },
- getSavedView: function (key) {
- return userSettings.get(key + '-_view');
- },
- showLayoutMenu: function (button, currentLayout, views) {
- var dispatchEvent = true;
+ if (query.SortBy) {
+ values.SortBy = query.SortBy;
+ }
- if (!views) {
- dispatchEvent = false;
- views = button.getAttribute('data-layouts');
- views = views ? views.split(',') : ['List', 'Poster', 'PosterCard', 'Thumb', 'ThumbCard'];
- }
+ if (query.SortOrder) {
+ values.SortOrder = query.SortOrder;
+ }
- var menuItems = views.map(function (v) {
- return {
- name: globalize.translate('Option' + v),
- id: v,
- selected: currentLayout == v
- };
- });
+ userSettings.set(key, JSON.stringify(values));
+}
- require(['actionsheet'], function (actionsheet) {
- actionsheet.show({
- items: menuItems,
- positionTo: button,
- callback: function (id) {
- button.dispatchEvent(new CustomEvent('layoutchange', {
- detail: {
- viewStyle: id
- },
- bubbles: true,
- cancelable: false
- }));
+export function saveViewSetting (key, value) {
+ userSettings.set(key + '-_view', value);
+}
- if (!dispatchEvent) {
- if (window.$) {
- $(button).trigger('layoutchange', [id]);
- }
- }
- }
- });
- });
- },
- getQueryPagingHtml: function (options) {
- var startIndex = options.startIndex;
- var limit = options.limit;
- var totalRecordCount = options.totalRecordCount;
- var html = '';
- var recordsEnd = Math.min(startIndex + limit, totalRecordCount);
- var showControls = limit < totalRecordCount;
+export function getSavedView (key) {
+ return userSettings.get(key + '-_view');
+}
- if (html += '
', showControls) {
- html += '
';
- html += globalize.translate('ListPaging', (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount);
- html += '';
- }
+export function showLayoutMenu (button, currentLayout, views) {
+ var dispatchEvent = true;
- if (showControls || options.viewButton || options.filterButton || options.sortButton || options.addLayoutButton) {
- html += '
';
+ if (!views) {
+ dispatchEvent = false;
+ views = button.getAttribute('data-layouts');
+ views = views ? views.split(',') : ['List', 'Poster', 'PosterCard', 'Thumb', 'ThumbCard'];
+ }
- if (showControls) {
- html += '';
- html += '';
- }
+ var menuItems = views.map(function (v) {
+ return {
+ name: globalize.translate('Option' + v),
+ id: v,
+ selected: currentLayout == v
+ };
+ });
- if (options.addLayoutButton) {
- html += '';
- }
+ import('actionsheet').then(({default: actionsheet}) => {
+ actionsheet.show({
+ items: menuItems,
+ positionTo: button,
+ callback: function (id) {
+ button.dispatchEvent(new CustomEvent('layoutchange', {
+ detail: {
+ viewStyle: id
+ },
+ bubbles: true,
+ cancelable: false
+ }));
- if (options.sortButton) {
- html += '';
- }
-
- if (options.filterButton) {
- html += '';
- }
-
- html += '
';
- }
-
- return html += '
';
- },
- showSortMenu: function (options) {
- require(['dialogHelper', 'emby-radio'], function (dialogHelper) {
- function onSortByChange() {
- var newValue = this.value;
-
- if (this.checked) {
- var changed = options.query.SortBy != newValue;
- options.query.SortBy = newValue.replace('_', ',');
- options.query.StartIndex = 0;
-
- if (options.callback && changed) {
- options.callback();
- }
+ if (!dispatchEvent) {
+ if (window.$) {
+ $(button).trigger('layoutchange', [id]);
}
}
+ }
+ });
+ });
+}
- function onSortOrderChange() {
- var newValue = this.value;
+export function getQueryPagingHtml (options) {
+ var startIndex = options.startIndex;
+ var limit = options.limit;
+ var totalRecordCount = options.totalRecordCount;
+ var html = '';
+ var recordsEnd = Math.min(startIndex + limit, totalRecordCount);
+ var showControls = limit < totalRecordCount;
- if (this.checked) {
- var changed = options.query.SortOrder != newValue;
- options.query.SortOrder = newValue;
- options.query.StartIndex = 0;
+ if (html += '
', showControls) {
+ html += '
';
+ html += globalize.translate('ListPaging', (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount);
+ html += '';
+ }
- if (options.callback && changed) {
- options.callback();
- }
- }
- }
+ if (showControls || options.viewButton || options.filterButton || options.sortButton || options.addLayoutButton) {
+ html += '
';
- var dlg = dialogHelper.createDialog({
- removeOnClose: true,
- modal: false,
- entryAnimationDuration: 160,
- exitAnimationDuration: 200
- });
- dlg.classList.add('ui-body-a');
- dlg.classList.add('background-theme-a');
- dlg.classList.add('formDialog');
- var html = '';
- html += '
';
- html += '
';
- html += globalize.translate('HeaderSortBy');
- html += '
';
- var i;
- var length;
- var isChecked;
- html += '
';
- for (i = 0, length = options.items.length; i < length; i++) {
- var option = options.items[i];
- var radioValue = option.id.replace(',', '_');
- isChecked = (options.query.SortBy || '').replace(',', '_') == radioValue ? ' checked' : '';
- html += '';
- }
-
- html += '
';
- html += '
';
- html += globalize.translate('HeaderSortOrder');
- html += '
';
- html += '
';
- isChecked = 'Ascending' == options.query.SortOrder ? ' checked' : '';
- html += '';
- isChecked = 'Descending' == options.query.SortOrder ? ' checked' : '';
- html += '';
- html += '
';
- html += '
';
- dlg.innerHTML = html;
- dialogHelper.open(dlg);
- var sortBys = dlg.querySelectorAll('.menuSortBy');
-
- for (i = 0, length = sortBys.length; i < length; i++) {
- sortBys[i].addEventListener('change', onSortByChange);
- }
-
- var sortOrders = dlg.querySelectorAll('.menuSortOrder');
-
- for (i = 0, length = sortOrders.length; i < length; i++) {
- sortOrders[i].addEventListener('change', onSortOrderChange);
- }
- });
+ if (showControls) {
+ html += '
';
+ html += '
';
}
- };
- window.LibraryBrowser = libraryBrowser;
- return libraryBrowser;
-});
+
+ if (options.addLayoutButton) {
+ html += '
';
+ }
+
+ if (options.sortButton) {
+ html += '
';
+ }
+
+ if (options.filterButton) {
+ html += '
';
+ }
+
+ html += '
';
+ }
+
+ return html += '
';
+}
+
+export function showSortMenu (options) {
+ require(['dialogHelper', 'emby-radio'], function (dialogHelper) {
+ function onSortByChange() {
+ var newValue = this.value;
+
+ if (this.checked) {
+ var changed = options.query.SortBy != newValue;
+ options.query.SortBy = newValue.replace('_', ',');
+ options.query.StartIndex = 0;
+
+ if (options.callback && changed) {
+ options.callback();
+ }
+ }
+ }
+
+ function onSortOrderChange() {
+ var newValue = this.value;
+
+ if (this.checked) {
+ var changed = options.query.SortOrder != newValue;
+ options.query.SortOrder = newValue;
+ options.query.StartIndex = 0;
+
+ if (options.callback && changed) {
+ options.callback();
+ }
+ }
+ }
+
+ var dlg = dialogHelper.createDialog({
+ removeOnClose: true,
+ modal: false,
+ entryAnimationDuration: 160,
+ exitAnimationDuration: 200
+ });
+ dlg.classList.add('ui-body-a');
+ dlg.classList.add('background-theme-a');
+ dlg.classList.add('formDialog');
+ var html = '';
+ html += '
';
+ html += '
';
+ html += globalize.translate('HeaderSortBy');
+ html += '
';
+ var i;
+ var length;
+ var isChecked;
+ html += '
';
+ for (i = 0, length = options.items.length; i < length; i++) {
+ var option = options.items[i];
+ var radioValue = option.id.replace(',', '_');
+ isChecked = (options.query.SortBy || '').replace(',', '_') == radioValue ? ' checked' : '';
+ html += '';
+ }
+
+ html += '
';
+ html += '
';
+ html += globalize.translate('HeaderSortOrder');
+ html += '
';
+ html += '
';
+ isChecked = 'Ascending' == options.query.SortOrder ? ' checked' : '';
+ html += '';
+ isChecked = 'Descending' == options.query.SortOrder ? ' checked' : '';
+ html += '';
+ html += '
';
+ html += '
';
+ dlg.innerHTML = html;
+ dialogHelper.open(dlg);
+ var sortBys = dlg.querySelectorAll('.menuSortBy');
+
+ for (i = 0, length = sortBys.length; i < length; i++) {
+ sortBys[i].addEventListener('change', onSortByChange);
+ }
+
+ var sortOrders = dlg.querySelectorAll('.menuSortOrder');
+
+ for (i = 0, length = sortOrders.length; i < length; i++) {
+ sortOrders[i].addEventListener('change', onSortOrderChange);
+ }
+ });
+}
+
+const libraryBrowser = {
+ getSavedQueryKey,
+ loadSavedQueryValues,
+ saveQueryValues,
+ saveViewSetting,
+ getSavedView,
+ showLayoutMenu,
+ getQueryPagingHtml,
+ showSortMenu
+};
+
+window.LibraryBrowser = libraryBrowser;
+
+export default libraryBrowser;
diff --git a/src/scripts/multiDownload.js b/src/scripts/multiDownload.js
index d11e52de14..b4ad95a975 100644
--- a/src/scripts/multiDownload.js
+++ b/src/scripts/multiDownload.js
@@ -1,66 +1,65 @@
-define(['browser'], function (browser) {
- 'use strict';
+import browser from 'browser';
- function fallback(urls) {
- var i = 0;
+function fallback(urls) {
+ var i = 0;
- (function createIframe() {
- var frame = document.createElement('iframe');
- frame.style.display = 'none';
- frame.src = urls[i++];
- document.documentElement.appendChild(frame);
+ (function createIframe() {
+ var frame = document.createElement('iframe');
+ frame.style.display = 'none';
+ frame.src = urls[i++];
+ document.documentElement.appendChild(frame);
- // the download init has to be sequential otherwise IE only use the first
- var interval = setInterval(function () {
- if (frame.contentWindow.document.readyState === 'complete' || frame.contentWindow.document.readyState === 'interactive') {
- clearInterval(interval);
+ // the download init has to be sequential otherwise IE only use the first
+ var interval = setInterval(function () {
+ if (frame.contentWindow.document.readyState === 'complete' || frame.contentWindow.document.readyState === 'interactive') {
+ clearInterval(interval);
- // Safari needs a timeout
- setTimeout(function () {
- frame.parentNode.removeChild(frame);
- }, 1000);
+ // Safari needs a timeout
+ setTimeout(function () {
+ frame.parentNode.removeChild(frame);
+ }, 1000);
- if (i < urls.length) {
- createIframe();
- }
+ if (i < urls.length) {
+ createIframe();
}
- }, 100);
- })();
- }
-
- function sameDomain(url) {
- var a = document.createElement('a');
- a.href = url;
-
- return location.hostname === a.hostname && location.protocol === a.protocol;
- }
-
- function download(url) {
- var a = document.createElement('a');
- a.download = '';
- a.href = url;
- // firefox doesn't support `a.click()`...
- a.dispatchEvent(new MouseEvent('click'));
- }
-
- return function (urls) {
- if (!urls) {
- throw new Error('`urls` required');
- }
-
- if (typeof document.createElement('a').download === 'undefined') {
- return fallback(urls);
- }
-
- var delay = 0;
-
- urls.forEach(function (url) {
- // the download init has to be sequential for firefox if the urls are not on the same domain
- if (browser.firefox && !sameDomain(url)) {
- return setTimeout(download.bind(null, url), 100 * ++delay);
}
+ }, 100);
+ })();
+}
+
+function sameDomain(url) {
+ var a = document.createElement('a');
+ a.href = url;
+
+ return location.hostname === a.hostname && location.protocol === a.protocol;
+}
+
+function download(url) {
+ var a = document.createElement('a');
+ a.download = '';
+ a.href = url;
+ // firefox doesn't support `a.click()`...
+ a.dispatchEvent(new MouseEvent('click'));
+}
+
+export default function (urls) {
+ if (!urls) {
+ throw new Error('`urls` required');
+ }
+
+ if (typeof document.createElement('a').download === 'undefined') {
+ return fallback(urls);
+ }
+
+ var delay = 0;
+
+ urls.forEach(function (url) {
+ // the download init has to be sequential for firefox if the urls are not on the same domain
+ if (browser.firefox && !sameDomain(url)) {
+ return setTimeout(download.bind(null, url), 100 * ++delay);
+ }
+
+ download(url);
+ });
+}
- download(url);
- });
- };
-});
diff --git a/src/strings/cs.json b/src/strings/cs.json
index d0e8f83a98..4e46cebca3 100644
--- a/src/strings/cs.json
+++ b/src/strings/cs.json
@@ -54,7 +54,7 @@
"ButtonDown": "Zeslabit",
"ButtonDownload": "Stáhnout",
"ButtonEdit": "Upravit",
- "ButtonEditImages": "Editace obrázků",
+ "ButtonEditImages": "Editovat obrázky",
"ButtonEditOtherUserPreferences": "Editace uživatelského profilu, avataru a osobních preferencí.",
"ButtonFilter": "Filtr",
"ButtonForgotPassword": "Zapomenuté heslo",
@@ -170,7 +170,7 @@
"DropShadow": "Stín",
"EasyPasswordHelp": "Váš jednoduchý kód PIN slouží k přístupu v režimu offline v podporovaných klientech Jellyfin a k snadnému přihlášení v místní síti.",
"Edit": "Upravit",
- "EditImages": "Editace obrázků",
+ "EditImages": "Editovat obrázky",
"EditSubtitles": "Editovat titulky",
"EnableBackdrops": "Povolit pozadí",
"EnableBackdropsHelp": "Pokud je povoleno, pozadí je zobrazeno pro některé stránky při procházení vaší knihovny.",
@@ -236,7 +236,7 @@
"HeaderAddScheduledTaskTrigger": "Přidat Spouštěč",
"HeaderAddToCollection": "Přidat do Kolekce",
"HeaderAddToPlaylist": "Přidat do playlistu",
- "HeaderAddUpdateImage": "Přidat/Aktualizovat obrázek",
+ "HeaderAddUpdateImage": "Přidat/aktualizovat obrázek",
"HeaderAddUser": "Přidat uživatele",
"HeaderAdditionalParts": "Další součásti",
"HeaderAdmin": "Administrátor",
@@ -284,7 +284,7 @@
"HeaderDirectPlayProfileHelp": "Přidat profil přímého přehrání pro definici formátů, které přístroj zvládne přehrávat nativně.",
"HeaderDisplay": "Zobrazení",
"HeaderEasyPinCode": "Jednoduchý pin kód",
- "HeaderEditImages": "Editace obrázků",
+ "HeaderEditImages": "Editovat obrázky",
"HeaderEnabledFields": "Povolené pole",
"HeaderEnabledFieldsHelp": "Zrušte zaškrtnutí, abyste zabránily změnám dat.",
"HeaderEpisodes": "Epizody",
@@ -419,7 +419,7 @@
"Hide": "Skrýt",
"HideWatchedContentFromLatestMedia": "Skrýt přehrané položky ze seznamu nejnovějších médií",
"Home": "Domů",
- "Identify": "Identifikuj",
+ "Identify": "Identifikovat",
"Images": "Obrázky",
"ImportFavoriteChannelsHelp": "Pokud je povoleno, jen kanály označené jako oblíbené budou importována na zařízení tuneru.",
"ImportMissingEpisodesHelp": "Informace o chybějících epizodách budou importovány do databáze Jellyfin a zobrazí se u sezón a seriálů. Skenování knihovny se tím může značně prodloužit.",
diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json
index c8690bd742..5eff56b221 100644
--- a/src/strings/pt-br.json
+++ b/src/strings/pt-br.json
@@ -814,7 +814,7 @@
"LabelffmpegPathHelp": "O local para o programa ffmpeg, ou pasta contendo ffmpeg.",
"LanNetworksHelp": "Lista separada por vírgula de endereços IP ou entradas IP/máscara de rede para redes que serão consideradas como redes locais ao forçar restrições de banda. Se definida, todos os outros endereços IP serão considerados como estando em uma rede externa e estarão sujeitos a restrições de banda externa. Se deixada em branco, apenas a sub-rede do servidor é considerada como rede local.",
"Large": "Grande",
- "LatestFromLibrary": "Recentes {0}",
+ "LatestFromLibrary": "{0} recentes",
"LearnHowYouCanContribute": "Saiba como você pode contribuir.",
"LibraryAccessHelp": "Selecione as bibliotecas para compartilhar com este usuário. Administradores poderão editar todas as pastas usando o gerenciador de metadados.",
"Like": "Curti",