From fb8a90ac501545070dc60d5b9c0a9274ac459a07 Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 27 Jul 2020 11:05:20 +0100 Subject: [PATCH 01/14] Migration of imageEditor and imageDownloader to ES6 modules --- package.json | 2 + .../imageDownloader/imageDownloader.js | 130 +++++++++------- src/components/imageeditor/imageeditor.js | 146 ++++++++++-------- 3 files changed, 157 insertions(+), 121 deletions(-) diff --git a/package.json b/package.json index da8c87aedd..07f86c2eb4 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 6d5b370bb0..510fc31290 100644 --- a/src/components/imageDownloader/imageDownloader.js +++ b/src/components/imageDownloader/imageDownloader.js @@ -1,24 +1,40 @@ -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; @@ -29,14 +45,14 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image 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; @@ -48,11 +64,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; @@ -65,19 +81,19 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image 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 () { @@ -97,18 +113,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 += ''; @@ -127,7 +143,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; @@ -138,7 +154,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); }); } @@ -148,17 +164,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 = 'backdrop'; if (imageType === 'Backdrop' || imageType === 'Art' || imageType === 'Thumb' || imageType === 'Logo') { shape = 'backdrop'; } else if (imageType === 'Banner') { @@ -302,14 +318,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')); } @@ -321,12 +337,12 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image 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 }; @@ -336,7 +352,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'); @@ -349,7 +365,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 () { @@ -362,7 +378,7 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image } function onDialogClosed() { - var dlg = this; + const dlg = this; if (layoutManager.tv) { scrollHelper.centerFocus.off(dlg, false); @@ -376,18 +392,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 0a873fa4c7..f0c6b45762 100644 --- a/src/components/imageeditor/imageeditor.js +++ b/src/components/imageeditor/imageeditor.js @@ -1,14 +1,30 @@ -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; @@ -19,7 +35,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', loading.show(); - var apiClient; + let apiClient; if (item) { apiClient = connectionManager.getApiClient(item.ServerId); @@ -36,7 +52,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); } @@ -49,8 +65,8 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', 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'); @@ -97,10 +113,10 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', // 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'; @@ -130,7 +146,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 += '
'; @@ -184,7 +200,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; @@ -198,7 +214,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', return; } - require(['confirm'], function (confirm) { + import('confirm').then(({default: confirm}) => { confirm.default({ @@ -218,7 +234,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', reload(context, null, focusContext); }, function () { - require(['alert'], function (alert) { + import('alert').then(({default: alert}) => { alert(globalize.translate('DefaultErrorMessage')); }); }); @@ -226,20 +242,20 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', 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; + const tagName = layoutManager.tv ? 'button' : 'div'; + const enableFooterButtons = !layoutManager.tv; - for (var i = 0, length = images.length; i < length; i++) { + for (let i = 0, length = images.length; i < length; i++) { - var image = images[i]; + const image = images[i]; html += getCardHtml(image, i, length, apiClient, imageProviders, imageSize, tagName, enableFooterButtons); } @@ -250,7 +266,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'; }); @@ -259,7 +275,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) { @@ -276,7 +292,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) { @@ -293,7 +309,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 () { @@ -306,18 +322,18 @@ 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) { + import('actionsheet').then(({default: actionSheet}) => { - var commands = []; + const commands = []; commands.push({ name: globalize.translate('Delete'), @@ -378,9 +394,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 { @@ -389,9 +405,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({ @@ -423,34 +439,34 @@ 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 }; @@ -460,7 +476,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', dialogOptions.size = 'small'; } - var dlg = dialogHelper.createDialog(dialogOptions); + const dlg = dialogHelper.createDialog(dialogOptions); dlg.classList.add('formDialog'); @@ -500,15 +516,15 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager', }); } - return { - show: function (options) { +export function show (options) { + return new Promise(function (resolve, reject) { + hasChanges = false; + showEditor(options, resolve, reject); + }); +} - return new Promise(function (resolve, reject) { +export default { + show +}; - hasChanges = false; - - showEditor(options, resolve, reject); - }); - } - }; -}); +/* eslint-enable indent */ From 04199ae9f6fe3542674ceb0a4ccda3b4066d4bd3 Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 27 Jul 2020 13:57:12 +0100 Subject: [PATCH 02/14] fix lint --- src/components/imageeditor/imageeditor.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/imageeditor/imageeditor.js b/src/components/imageeditor/imageeditor.js index 181ceaac8a..e27316148c 100644 --- a/src/components/imageeditor/imageeditor.js +++ b/src/components/imageeditor/imageeditor.js @@ -59,7 +59,6 @@ import 'css!./imageeditor'; currentItem = item; apiClient.getRemoteImageProviders(getBaseRemoteOptions()).then(function (providers) { - const btnBrowseAllImages = page.querySelectorAll('.btnBrowseAllImages'); for (let i = 0, length = btnBrowseAllImages.length; i < length; i++) { if (providers.length) { From 4c28399c6bd545cbb6aea06a24aa3ea80645f7f3 Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 27 Jul 2020 20:06:11 +0100 Subject: [PATCH 03/14] Migration of library browser to ES6 moduels --- package.json | 2 + src/controllers/livetv/livetvchannels.js | 2 +- src/controllers/movies/moviecollections.js | 16 +- src/controllers/movies/moviegenres.js | 8 +- src/controllers/movies/movies.js | 6 +- src/controllers/movies/movietrailers.js | 12 +- src/controllers/music/musicalbums.js | 16 +- src/controllers/music/musicartists.js | 14 +- src/controllers/music/musicgenres.js | 10 +- src/controllers/music/musicplaylists.js | 8 +- src/controllers/music/songs.js | 10 +- src/scripts/libraryBrowser.js | 367 +++++++++++---------- src/scripts/multiDownload.js | 115 ++++--- 13 files changed, 299 insertions(+), 287 deletions(-) diff --git a/package.json b/package.json index da8c87aedd..c22b0ef301 100644 --- a/package.json +++ b/package.json @@ -248,6 +248,8 @@ "src/scripts/imagehelper.js", "src/scripts/inputManager.js", "src/scripts/keyboardNavigation.js", + "src/scripts/libraryBrowser.js", + "src/scripts/multiDownload.js", "src/scripts/playlists.js", "src/scripts/settings/appSettings.js", "src/scripts/settings/userSettings.js", diff --git a/src/controllers/livetv/livetvchannels.js b/src/controllers/livetv/livetvchannels.js index 62906d9d21..a36dbbc836 100644 --- a/src/controllers/livetv/livetvchannels.js +++ b/src/controllers/livetv/livetvchannels.js @@ -60,7 +60,7 @@ define(['cardBuilder', 'imageLoader', 'libraryBrowser', 'loading', 'events', 'us } var query = getQuery(); - context.querySelector('.paging').innerHTML = libraryBrowser.getQueryPagingHtml({ + context.querySelector('.paging').innerHTML = libraryBrowser.default.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, diff --git a/src/controllers/movies/moviecollections.js b/src/controllers/movies/moviecollections.js index 65abca46e0..21ea3ce159 100644 --- a/src/controllers/movies/moviecollections.js +++ b/src/controllers/movies/moviecollections.js @@ -18,7 +18,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0 }, - view: libraryBrowser.getSavedView(key) || 'Poster' + view: libraryBrowser.default.getSavedView(key) || 'Poster' }; if (userSettings.libraryPageSize() > 0) { @@ -26,7 +26,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB } pageData.query.ParentId = params.topParentId; - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -38,7 +38,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.getSavedQueryKey('moviecollections'); + context.savedQueryKey = libraryBrowser.default.getSavedQueryKey('moviecollections'); } return context.savedQueryKey; @@ -88,7 +88,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB window.scrollTo(0, 0); var html; - var pagingHtml = libraryBrowser.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -182,7 +182,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(page), query); loading.hide(); isLoading = false; @@ -202,7 +202,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB function initPage(tabContent) { tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.showSortMenu({ + libraryBrowser.default.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName' @@ -229,12 +229,12 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB }); var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); + libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; getPageData(tabContent).view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); + libraryBrowser.default.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); getQuery(tabContent).StartIndex = 0; onViewStyleChange(); reloadItems(tabContent); diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index 43f73bfa76..e2281ca657 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -18,7 +18,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader view: 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -29,7 +29,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader } function getSavedQueryKey() { - return libraryBrowser.getSavedQueryKey('moviegenres'); + return libraryBrowser.default.getSavedQueryKey('moviegenres'); } function getPromise() { @@ -174,7 +174,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader elem.innerHTML = html; lazyLoader.lazyChildren(elem, fillItemsContainer); - libraryBrowser.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); loading.hide(); }); } @@ -197,7 +197,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader self.setCurrentViewStyle = function (viewStyle) { getPageData().view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); + libraryBrowser.default.saveViewSetting(getSavedQueryKey(), viewStyle); fullyReload(); }; diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index 82b162e2ad..32775e2c13 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -51,7 +51,7 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', window.scrollTo(0, 0); updateFilterControls(); - var pagingHtml = libraryBrowser.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -189,7 +189,7 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', if (btnSort) { btnSort.addEventListener('click', function (e) { - libraryBrowser.showSortMenu({ + libraryBrowser.default.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName,ProductionYear' @@ -230,7 +230,7 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', } var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); + libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; diff --git a/src/controllers/movies/movietrailers.js b/src/controllers/movies/movietrailers.js index a9db0abf49..e52f3e950c 100644 --- a/src/controllers/movies/movietrailers.js +++ b/src/controllers/movies/movietrailers.js @@ -18,14 +18,14 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0 }, - view: libraryBrowser.getSavedView(key) || 'Poster' + view: libraryBrowser.default.getSavedView(key) || 'Poster' }; if (userSettings.libraryPageSize() > 0) { pageData.query['Limit'] = userSettings.libraryPageSize(); } - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -37,7 +37,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.getSavedQueryKey('trailers'); + context.savedQueryKey = libraryBrowser.default.getSavedQueryKey('trailers'); } return context.savedQueryKey; @@ -72,7 +72,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' window.scrollTo(0, 0); updateFilterControls(tabContent); - var pagingHtml = libraryBrowser.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -169,7 +169,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.saveQueryValues(getSavedQueryKey(tabContent), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(tabContent), query); loading.hide(); isLoading = false; }); @@ -226,7 +226,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' self.showFilterMenu(); }); tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.showSortMenu({ + libraryBrowser.default.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName' diff --git a/src/controllers/music/musicalbums.js b/src/controllers/music/musicalbums.js index 3630e0b9f9..b41af824ee 100644 --- a/src/controllers/music/musicalbums.js +++ b/src/controllers/music/musicalbums.js @@ -32,7 +32,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0 }, - view: libraryBrowser.getSavedView(key) || 'Poster' + view: libraryBrowser.default.getSavedView(key) || 'Poster' }; if (userSettings.libraryPageSize() > 0) { @@ -40,7 +40,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser } pageData.query.ParentId = params.topParentId; - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -52,7 +52,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser function getSavedQueryKey() { if (!savedQueryKey) { - savedQueryKey = libraryBrowser.getSavedQueryKey('musicalbums'); + savedQueryKey = libraryBrowser.default.getSavedQueryKey('musicalbums'); } return savedQueryKey; @@ -103,7 +103,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser window.scrollTo(0, 0); updateFilterControls(page); var html; - var pagingHtml = libraryBrowser.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -165,7 +165,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); loading.hide(); isLoading = false; @@ -228,7 +228,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser self.showFilterMenu(); }); tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.showSortMenu({ + libraryBrowser.default.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName' @@ -261,12 +261,12 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser }); var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); + libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; getPageData().view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); + libraryBrowser.default.saveViewSetting(getSavedQueryKey(), viewStyle); getQuery().StartIndex = 0; onViewStyleChange(); reloadItems(tabContent); diff --git a/src/controllers/music/musicartists.js b/src/controllers/music/musicartists.js index c9a0b06b77..73677c4407 100644 --- a/src/controllers/music/musicartists.js +++ b/src/controllers/music/musicartists.js @@ -23,10 +23,10 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' pageData = data[key] = { query: queryValues, - view: libraryBrowser.getSavedView(key) || 'Poster' + view: libraryBrowser.default.getSavedView(key) || 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -38,7 +38,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.getSavedQueryKey(self.mode); + context.savedQueryKey = libraryBrowser.default.getSavedQueryKey(self.mode); } return context.savedQueryKey; @@ -92,7 +92,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' window.scrollTo(0, 0); updateFilterControls(page); var html; - var pagingHtml = libraryBrowser.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -150,7 +150,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(page), query); loading.hide(); isLoading = false; @@ -213,12 +213,12 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' }); var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); + libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; getPageData(tabContent).view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); + libraryBrowser.default.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); getQuery(tabContent).StartIndex = 0; onViewStyleChange(); reloadItems(tabContent); diff --git a/src/controllers/music/musicgenres.js b/src/controllers/music/musicgenres.js index 82f2eba574..ac4a7349b3 100644 --- a/src/controllers/music/musicgenres.js +++ b/src/controllers/music/musicgenres.js @@ -15,10 +15,10 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f Fields: 'PrimaryImageAspectRatio,ItemCounts', StartIndex: 0 }, - view: libraryBrowser.getSavedView(key) || 'Poster' + view: libraryBrowser.default.getSavedView(key) || 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -29,7 +29,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f } function getSavedQueryKey() { - return libraryBrowser.getSavedQueryKey('genres'); + return libraryBrowser.default.getSavedQueryKey('genres'); } function getPromise() { @@ -85,7 +85,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f var elem = context.querySelector('#items'); elem.innerHTML = html; imageLoader.lazyChildren(elem); - libraryBrowser.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); loading.hide(); require(['autoFocuser'], function (autoFocuser) { @@ -112,7 +112,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f self.setCurrentViewStyle = function (viewStyle) { getPageData().view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); + libraryBrowser.default.saveViewSetting(getSavedQueryKey(), viewStyle); fullyReload(); }; diff --git a/src/controllers/music/musicplaylists.js b/src/controllers/music/musicplaylists.js index f508489216..b34ba294e9 100644 --- a/src/controllers/music/musicplaylists.js +++ b/src/controllers/music/musicplaylists.js @@ -16,10 +16,10 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f Fields: 'PrimaryImageAspectRatio,SortName,CanDelete', StartIndex: 0 }, - view: libraryBrowser.getSavedView(key) || 'Poster' + view: libraryBrowser.default.getSavedView(key) || 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -30,7 +30,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f } function getSavedQueryKey() { - return libraryBrowser.getSavedQueryKey('genres'); + return libraryBrowser.default.getSavedQueryKey('genres'); } function getPromise() { @@ -56,7 +56,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f var elem = context.querySelector('#items'); elem.innerHTML = html; imageLoader.lazyChildren(elem); - libraryBrowser.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); loading.hide(); require(['autoFocuser'], function (autoFocuser) { diff --git a/src/controllers/music/songs.js b/src/controllers/music/songs.js index aa63ec51fe..f90edb410b 100644 --- a/src/controllers/music/songs.js +++ b/src/controllers/music/songs.js @@ -25,7 +25,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS } pageData.query.ParentId = params.topParentId; - libraryBrowser.loadSavedQueryValues(key, pageData.query); + libraryBrowser.default.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -37,7 +37,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.getSavedQueryKey('songs'); + context.savedQueryKey = libraryBrowser.default.getSavedQueryKey('songs'); } return context.savedQueryKey; @@ -73,7 +73,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS window.scrollTo(0, 0); var i; var length; - var pagingHtml = libraryBrowser.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -109,7 +109,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + libraryBrowser.default.saveQueryValues(getSavedQueryKey(page), query); loading.hide(); isLoading = false; @@ -147,7 +147,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS self.showFilterMenu(); }); tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.showSortMenu({ + libraryBrowser.default.showSortMenu({ items: [{ name: globalize.translate('OptionTrackName'), id: 'Name' diff --git a/src/scripts/libraryBrowser.js b/src/scripts/libraryBrowser.js index f9e5e23596..2c6528c5ab 100644 --- a/src/scripts/libraryBrowser.js +++ b/src/scripts/libraryBrowser.js @@ -1,199 +1,210 @@ -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]); } } + } + }); + }); +} +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; - function onSortOrderChange() { - var newValue = this.value; + if (html += '
', showControls) { + html += ''; + html += globalize.translate('ListPaging', (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount); + html += ''; + } - if (this.checked) { - var changed = options.query.SortOrder != newValue; - options.query.SortOrder = newValue; - options.query.StartIndex = 0; + if (showControls || options.viewButton || options.filterButton || options.sortButton || options.addLayoutButton) { + html += '
'; - 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); - } - }); + 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); + } + }); +} + +export default { + getSavedQueryKey, + loadSavedQueryValues, + saveQueryValues, + saveViewSetting, + getSavedView, + showLayoutMenu, + getQueryPagingHtml, + showSortMenu +} 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); - }); - }; -}); From 8691da18ad2ac3ec02868117ad34833e782167dc Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 13:09:05 +0100 Subject: [PATCH 04/14] fix lint --- src/scripts/libraryBrowser.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/scripts/libraryBrowser.js b/src/scripts/libraryBrowser.js index 2c6528c5ab..f5bff3da62 100644 --- a/src/scripts/libraryBrowser.js +++ b/src/scripts/libraryBrowser.js @@ -77,6 +77,7 @@ export function showLayoutMenu (button, currentLayout, views) { }); }); } + export function getQueryPagingHtml (options) { var startIndex = options.startIndex; var limit = options.limit; @@ -116,6 +117,7 @@ export function getQueryPagingHtml (options) { return html += '
'; } + export function showSortMenu (options) { require(['dialogHelper', 'emby-radio'], function (dialogHelper) { function onSortByChange() { @@ -207,4 +209,4 @@ export default { showLayoutMenu, getQueryPagingHtml, showSortMenu -} +}; From c2de8b92f8c500014dd53518d851877d13510be8 Mon Sep 17 00:00:00 2001 From: michael9dk <61046533+michael9dk@users.noreply.github.com> Date: Tue, 28 Jul 2020 16:37:04 +0200 Subject: [PATCH 05/14] Update README.md Added Node.js in dependencies. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f06e461320..ca42965dd9 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Jellyfin Web is the frontend used for most of the clients available for end user ### Dependencies +- [Node.js](https://nodejs.org/en/download/) - [Yarn 1.22.4](https://classic.yarnpkg.com/en/docs/install) - Gulp-cli From 3757e2c9be3de8a7c430c39dc4df969dde4919bf Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 16:45:21 +0100 Subject: [PATCH 06/14] apply suggestions --- src/controllers/livetv/livetvchannels.js | 4 +++- src/controllers/movies/moviecollections.js | 18 ++++++++++-------- src/controllers/movies/moviegenres.js | 10 ++++++---- src/controllers/movies/movies.js | 6 +++--- src/controllers/movies/movietrailers.js | 14 ++++++++------ src/controllers/music/musicalbums.js | 18 ++++++++++-------- src/controllers/music/musicartists.js | 16 +++++++++------- src/controllers/music/musicgenres.js | 12 +++++++----- src/controllers/music/musicplaylists.js | 10 ++++++---- src/controllers/music/songs.js | 12 +++++++----- 10 files changed, 69 insertions(+), 51 deletions(-) diff --git a/src/controllers/livetv/livetvchannels.js b/src/controllers/livetv/livetvchannels.js index a36dbbc836..3ceda7d476 100644 --- a/src/controllers/livetv/livetvchannels.js +++ b/src/controllers/livetv/livetvchannels.js @@ -1,6 +1,8 @@ define(['cardBuilder', 'imageLoader', 'libraryBrowser', 'loading', 'events', 'userSettings', 'emby-itemscontainer'], function (cardBuilder, imageLoader, libraryBrowser, loading, events, userSettings) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData() { if (!pageData) { @@ -60,7 +62,7 @@ define(['cardBuilder', 'imageLoader', 'libraryBrowser', 'loading', 'events', 'us } var query = getQuery(); - context.querySelector('.paging').innerHTML = libraryBrowser.default.getQueryPagingHtml({ + context.querySelector('.paging').innerHTML = libraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, diff --git a/src/controllers/movies/moviecollections.js b/src/controllers/movies/moviecollections.js index 21ea3ce159..44904633fa 100644 --- a/src/controllers/movies/moviecollections.js +++ b/src/controllers/movies/moviecollections.js @@ -1,6 +1,8 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData(context) { var key = getSavedQueryKey(context); @@ -18,7 +20,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0 }, - view: libraryBrowser.default.getSavedView(key) || 'Poster' + view: libraryBrowser.getSavedView(key) || 'Poster' }; if (userSettings.libraryPageSize() > 0) { @@ -26,7 +28,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB } pageData.query.ParentId = params.topParentId; - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -38,7 +40,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.default.getSavedQueryKey('moviecollections'); + context.savedQueryKey = libraryBrowser.getSavedQueryKey('moviecollections'); } return context.savedQueryKey; @@ -88,7 +90,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB window.scrollTo(0, 0); var html; - var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -182,7 +184,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(page), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(page), query); loading.hide(); isLoading = false; @@ -202,7 +204,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB function initPage(tabContent) { tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.default.showSortMenu({ + libraryBrowser.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName' @@ -229,12 +231,12 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB }); var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); + libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; getPageData(tabContent).view = viewStyle; - libraryBrowser.default.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); + libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); getQuery(tabContent).StartIndex = 0; onViewStyleChange(); reloadItems(tabContent); diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index e2281ca657..69450989e8 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -1,6 +1,8 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader', 'apphost', 'globalize', 'appRouter', 'dom', 'emby-button'], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData() { var key = getSavedQueryKey(); @@ -18,7 +20,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader view: 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -29,7 +31,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader } function getSavedQueryKey() { - return libraryBrowser.default.getSavedQueryKey('moviegenres'); + return libraryBrowser.getSavedQueryKey('moviegenres'); } function getPromise() { @@ -174,7 +176,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader elem.innerHTML = html; lazyLoader.lazyChildren(elem, fillItemsContainer); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(), query); loading.hide(); }); } @@ -197,7 +199,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader self.setCurrentViewStyle = function (viewStyle) { getPageData().view = viewStyle; - libraryBrowser.default.saveViewSetting(getSavedQueryKey(), viewStyle); + libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); fullyReload(); }; diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index 32775e2c13..82b162e2ad 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -51,7 +51,7 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', window.scrollTo(0, 0); updateFilterControls(); - var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -189,7 +189,7 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', if (btnSort) { btnSort.addEventListener('click', function (e) { - libraryBrowser.default.showSortMenu({ + libraryBrowser.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName,ProductionYear' @@ -230,7 +230,7 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', } var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); + libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; diff --git a/src/controllers/movies/movietrailers.js b/src/controllers/movies/movietrailers.js index e52f3e950c..84d7c538ee 100644 --- a/src/controllers/movies/movietrailers.js +++ b/src/controllers/movies/movietrailers.js @@ -1,6 +1,8 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, AlphaPicker, listView, cardBuilder, userSettings, globalize) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData(context) { var key = getSavedQueryKey(context); @@ -18,14 +20,14 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0 }, - view: libraryBrowser.default.getSavedView(key) || 'Poster' + view: libraryBrowser.getSavedView(key) || 'Poster' }; if (userSettings.libraryPageSize() > 0) { pageData.query['Limit'] = userSettings.libraryPageSize(); } - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -37,7 +39,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.default.getSavedQueryKey('trailers'); + context.savedQueryKey = libraryBrowser.getSavedQueryKey('trailers'); } return context.savedQueryKey; @@ -72,7 +74,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' window.scrollTo(0, 0); updateFilterControls(tabContent); - var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -169,7 +171,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(tabContent), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(tabContent), query); loading.hide(); isLoading = false; }); @@ -226,7 +228,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' self.showFilterMenu(); }); tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.default.showSortMenu({ + libraryBrowser.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName' diff --git a/src/controllers/music/musicalbums.js b/src/controllers/music/musicalbums.js index b41af824ee..9b4fcde327 100644 --- a/src/controllers/music/musicalbums.js +++ b/src/controllers/music/musicalbums.js @@ -1,6 +1,8 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, AlphaPicker, listView, cardBuilder, userSettings, globalize) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function playAll() { ApiClient.getItem(ApiClient.getCurrentUserId(), params.topParentId).then(function (item) { @@ -32,7 +34,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0 }, - view: libraryBrowser.default.getSavedView(key) || 'Poster' + view: libraryBrowser.getSavedView(key) || 'Poster' }; if (userSettings.libraryPageSize() > 0) { @@ -40,7 +42,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser } pageData.query.ParentId = params.topParentId; - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -52,7 +54,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser function getSavedQueryKey() { if (!savedQueryKey) { - savedQueryKey = libraryBrowser.default.getSavedQueryKey('musicalbums'); + savedQueryKey = libraryBrowser.getSavedQueryKey('musicalbums'); } return savedQueryKey; @@ -103,7 +105,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser window.scrollTo(0, 0); updateFilterControls(page); var html; - var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -165,7 +167,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(), query); loading.hide(); isLoading = false; @@ -228,7 +230,7 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser self.showFilterMenu(); }); tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.default.showSortMenu({ + libraryBrowser.showSortMenu({ items: [{ name: globalize.translate('OptionNameSort'), id: 'SortName' @@ -261,12 +263,12 @@ define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser }); var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); + libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; getPageData().view = viewStyle; - libraryBrowser.default.saveViewSetting(getSavedQueryKey(), viewStyle); + libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); getQuery().StartIndex = 0; onViewStyleChange(); reloadItems(tabContent); diff --git a/src/controllers/music/musicartists.js b/src/controllers/music/musicartists.js index 73677c4407..3e86def538 100644 --- a/src/controllers/music/musicartists.js +++ b/src/controllers/music/musicartists.js @@ -1,6 +1,8 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'apphost', 'userSettings', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, AlphaPicker, listView, cardBuilder, appHost, userSettings) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData(context) { var key = getSavedQueryKey(context); @@ -23,10 +25,10 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' pageData = data[key] = { query: queryValues, - view: libraryBrowser.default.getSavedView(key) || 'Poster' + view: libraryBrowser.getSavedView(key) || 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -38,7 +40,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.default.getSavedQueryKey(self.mode); + context.savedQueryKey = libraryBrowser.getSavedQueryKey(self.mode); } return context.savedQueryKey; @@ -92,7 +94,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' window.scrollTo(0, 0); updateFilterControls(page); var html; - var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -150,7 +152,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(page), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(page), query); loading.hide(); isLoading = false; @@ -213,12 +215,12 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' }); var btnSelectView = tabContent.querySelector('.btnSelectView'); btnSelectView.addEventListener('click', function (e) { - libraryBrowser.default.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); + libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); }); btnSelectView.addEventListener('layoutchange', function (e) { var viewStyle = e.detail.viewStyle; getPageData(tabContent).view = viewStyle; - libraryBrowser.default.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); + libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); getQuery(tabContent).StartIndex = 0; onViewStyleChange(); reloadItems(tabContent); diff --git a/src/controllers/music/musicgenres.js b/src/controllers/music/musicgenres.js index ac4a7349b3..948c4da7dd 100644 --- a/src/controllers/music/musicgenres.js +++ b/src/controllers/music/musicgenres.js @@ -1,6 +1,8 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData() { var key = getSavedQueryKey(); @@ -15,10 +17,10 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f Fields: 'PrimaryImageAspectRatio,ItemCounts', StartIndex: 0 }, - view: libraryBrowser.default.getSavedView(key) || 'Poster' + view: libraryBrowser.getSavedView(key) || 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -29,7 +31,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f } function getSavedQueryKey() { - return libraryBrowser.default.getSavedQueryKey('genres'); + return libraryBrowser.getSavedQueryKey('genres'); } function getPromise() { @@ -85,7 +87,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f var elem = context.querySelector('#items'); elem.innerHTML = html; imageLoader.lazyChildren(elem); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(), query); loading.hide(); require(['autoFocuser'], function (autoFocuser) { @@ -112,7 +114,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f self.setCurrentViewStyle = function (viewStyle) { getPageData().view = viewStyle; - libraryBrowser.default.saveViewSetting(getSavedQueryKey(), viewStyle); + libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); fullyReload(); }; diff --git a/src/controllers/music/musicplaylists.js b/src/controllers/music/musicplaylists.js index b34ba294e9..19c08812f9 100644 --- a/src/controllers/music/musicplaylists.js +++ b/src/controllers/music/musicplaylists.js @@ -1,6 +1,8 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData() { var key = getSavedQueryKey(); @@ -16,10 +18,10 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f Fields: 'PrimaryImageAspectRatio,SortName,CanDelete', StartIndex: 0 }, - view: libraryBrowser.default.getSavedView(key) || 'Poster' + view: libraryBrowser.getSavedView(key) || 'Poster' }; pageData.query.ParentId = params.topParentId; - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -30,7 +32,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f } function getSavedQueryKey() { - return libraryBrowser.default.getSavedQueryKey('genres'); + return libraryBrowser.getSavedQueryKey('genres'); } function getPromise() { @@ -56,7 +58,7 @@ define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], f var elem = context.querySelector('#items'); elem.innerHTML = html; imageLoader.lazyChildren(elem); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(), query); loading.hide(); require(['autoFocuser'], function (autoFocuser) { diff --git a/src/controllers/music/songs.js b/src/controllers/music/songs.js index f90edb410b..74c5106860 100644 --- a/src/controllers/music/songs.js +++ b/src/controllers/music/songs.js @@ -1,6 +1,8 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userSettings', 'globalize', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, listView, loading, userSettings, globalize) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent) { function getPageData(context) { var key = getSavedQueryKey(context); @@ -25,7 +27,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS } pageData.query.ParentId = params.topParentId; - libraryBrowser.default.loadSavedQueryValues(key, pageData.query); + libraryBrowser.loadSavedQueryValues(key, pageData.query); } return pageData; @@ -37,7 +39,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS function getSavedQueryKey(context) { if (!context.savedQueryKey) { - context.savedQueryKey = libraryBrowser.default.getSavedQueryKey('songs'); + context.savedQueryKey = libraryBrowser.getSavedQueryKey('songs'); } return context.savedQueryKey; @@ -73,7 +75,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS window.scrollTo(0, 0); var i; var length; - var pagingHtml = libraryBrowser.default.getQueryPagingHtml({ + var pagingHtml = libraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: result.TotalRecordCount, @@ -109,7 +111,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS var itemsContainer = tabContent.querySelector('.itemsContainer'); itemsContainer.innerHTML = html; imageLoader.lazyChildren(itemsContainer); - libraryBrowser.default.saveQueryValues(getSavedQueryKey(page), query); + libraryBrowser.saveQueryValues(getSavedQueryKey(page), query); loading.hide(); isLoading = false; @@ -147,7 +149,7 @@ define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userS self.showFilterMenu(); }); tabContent.querySelector('.btnSort').addEventListener('click', function (e) { - libraryBrowser.default.showSortMenu({ + libraryBrowser.showSortMenu({ items: [{ name: globalize.translate('OptionTrackName'), id: 'Name' From 562b54192f49e14a0850d5f3fb212fdae04a4316 Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 16:49:31 +0100 Subject: [PATCH 07/14] Update src/scripts/libraryBrowser.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/scripts/libraryBrowser.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/scripts/libraryBrowser.js b/src/scripts/libraryBrowser.js index f5bff3da62..568e73916a 100644 --- a/src/scripts/libraryBrowser.js +++ b/src/scripts/libraryBrowser.js @@ -200,7 +200,7 @@ export function showSortMenu (options) { }); } -export default { +const libraryBrowser = { getSavedQueryKey, loadSavedQueryValues, saveQueryValues, @@ -210,3 +210,7 @@ export default { getQueryPagingHtml, showSortMenu }; + +window.LibraryBrowser = libraryBrowser; + +export default libraryBrowser; From 4d5cf02c1facea22e6d6f61369d3825758543a3f Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 17:18:37 +0100 Subject: [PATCH 08/14] update missing --- src/controllers/movies/movies.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index 82b162e2ad..f4c126c468 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -1,6 +1,8 @@ define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', 'alphaPicker', 'listView', 'cardBuilder', 'globalize', 'emby-itemscontainer'], function (loading, layoutManager, userSettings, events, libraryBrowser, AlphaPicker, listView, cardBuilder, globalize) { 'use strict'; + libraryBrowser = libraryBrowser.default || libraryBrowser; + return function (view, params, tabContent, options) { function onViewStyleChange() { if (self.getCurrentViewStyle() == 'List') { From 5bd4b849d628cb13ecc4570d6bd1ec2c459f8ce0 Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 17:51:53 +0100 Subject: [PATCH 09/14] Update src/components/imageDownloader/imageDownloader.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/components/imageDownloader/imageDownloader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/imageDownloader/imageDownloader.js b/src/components/imageDownloader/imageDownloader.js index 80bc30f8b2..0d2cb9140e 100644 --- a/src/components/imageDownloader/imageDownloader.js +++ b/src/components/imageDownloader/imageDownloader.js @@ -372,7 +372,7 @@ import 'cardStyle'; } } -export function show (itemId, serverId, itemType, imageType) { +export function show(itemId, serverId, itemType, imageType) { return new Promise(function (resolve, reject) { currentResolve = resolve; currentReject = reject; From 6cb8f030055fc7efc912316b00d598e168fe1f61 Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 17:51:59 +0100 Subject: [PATCH 10/14] Update src/components/imageeditor/imageeditor.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/components/imageeditor/imageeditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/imageeditor/imageeditor.js b/src/components/imageeditor/imageeditor.js index e27316148c..78c35bb15f 100644 --- a/src/components/imageeditor/imageeditor.js +++ b/src/components/imageeditor/imageeditor.js @@ -201,7 +201,7 @@ import 'css!./imageeditor'; } import('confirm').then(({default: confirm}) => { - confirm.default({ + confirm({ text: globalize.translate('ConfirmDeleteImage'), confirmText: globalize.translate('Delete'), From 4a3f05a58f8422c02ba8a48e4de6d31456c48b9c Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 21:08:32 +0100 Subject: [PATCH 11/14] Update src/components/imageDownloader/imageDownloader.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/components/imageDownloader/imageDownloader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/imageDownloader/imageDownloader.js b/src/components/imageDownloader/imageDownloader.js index 0d2cb9140e..2be2ef09b2 100644 --- a/src/components/imageDownloader/imageDownloader.js +++ b/src/components/imageDownloader/imageDownloader.js @@ -165,7 +165,7 @@ import 'cardStyle'; let cssClass = 'card scalableCard imageEditorCard'; const cardBoxCssClass = 'cardBox visualCardBox'; - let shape = 'backdrop'; + let shape; if (imageType === 'Backdrop' || imageType === 'Art' || imageType === 'Thumb' || imageType === 'Logo') { shape = 'backdrop'; } else if (imageType === 'Banner') { From 3f7029b73639e9e7bdcf2daf766d85ace52f4e9d Mon Sep 17 00:00:00 2001 From: Vitorvlv Date: Tue, 28 Jul 2020 19:52:19 +0000 Subject: [PATCH 12/14] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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", From 9e9a6ecff18368673ea0867caaf63562d8f1ee8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Wed, 29 Jul 2020 06:59:41 +0000 Subject: [PATCH 13/14] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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.", From 6f1fc1e4a568977eb0e415203a43cb57ceb7226a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Wed, 29 Jul 2020 08:10:13 +0000 Subject: [PATCH 14/14] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 4e46cebca3..faded7df3a 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -232,7 +232,7 @@ "HeaderAccessScheduleHelp": "Vytvořte plán přístupu pro limitování přístupu jen určitém čase.", "HeaderActiveDevices": "Aktivní zařízení", "HeaderActiveRecordings": "Aktivní nahrávání", - "HeaderActivity": "Aktivity", + "HeaderActivity": "Aktivita", "HeaderAddScheduledTaskTrigger": "Přidat Spouštěč", "HeaderAddToCollection": "Přidat do Kolekce", "HeaderAddToPlaylist": "Přidat do playlistu", @@ -1129,7 +1129,7 @@ "TabMusic": "Hudba", "TabMusicVideos": "Hudební videa", "TabMyPlugins": "Moje zásuvné moduly", - "TabNetworks": "Sítě", + "TabNetworks": "Stanice", "TabNfoSettings": "NFO nastavení", "TabNotifications": "Oznámení", "TabOther": "Další", @@ -1152,7 +1152,7 @@ "TabSuggestions": "Návrhy", "TabTrailers": "Upoutávky", "TabTranscoding": "Překódování", - "TabUpcoming": "Nové", + "TabUpcoming": "Nadcházející", "TabUsers": "Uživatelé", "Tags": "Tagy", "TellUsAboutYourself": "Řekněte nám něco o sobě", @@ -1524,7 +1524,7 @@ "LabelAudioBitrate": "Datový tok zvuku:", "LabelAudioBitDepth": "Bitová hloubka zvuku:", "HeaderFavoriteBooks": "Oblíbené knihy", - "FetchingData": "Načtení dalších dat", + "FetchingData": "Načítání dalších dat…", "CopyStreamURLSuccess": "Úspěšně zkopírovaná URL.", "CopyStreamURL": "Kopírovat URL adresu streamu", "ButtonAddImage": "Přidat obrázek", @@ -1565,7 +1565,7 @@ "EveryXMinutes": "Každých {0} minut", "OnWakeFromSleep": "Při probuzení", "DailyAt": "Denně v {0}", - "PersonRole": "jako {0}", + "PersonRole": "{0}", "ListPaging": "{0}-{1} ze {2}", "WriteAccessRequired": "Server Jellyfin vyžaduje oprávnění pro zápis do této složky. Zkontrolujte oprávnění a zkuste to znovu.", "PathNotFound": "Cesta nebyla nalezena. Zkontrolujte, zda je platná a zkuste to znovu.",