From b2e7da744e43ee66fac448499a5fa8360bd485b6 Mon Sep 17 00:00:00 2001 From: Ulrich Wagner Date: Mon, 17 Feb 2020 14:56:43 +0100 Subject: [PATCH 01/86] #2407: Prefer MP4-Metadata for episodes --- .../libraryoptionseditor/libraryoptionseditor.js | 8 ++++++++ .../libraryoptionseditor.template.html | 7 +++++++ src/strings/de.json | 2 ++ src/strings/en-gb.json | 2 ++ src/strings/en-us.json | 2 ++ 5 files changed, 21 insertions(+) diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.js b/src/components/libraryoptionseditor/libraryoptionseditor.js index 261d20745b..e168d9213d 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.js +++ b/src/components/libraryoptionseditor/libraryoptionseditor.js @@ -391,6 +391,12 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct parent.querySelector(".chkEnableEmbeddedTitlesContainer").classList.remove("hide"); } + if (contentType === "tvshows") { + parent.querySelector(".chkEnableEmbeddedEpisodeInfosContainer").classList.remove("hide"); + } else { + parent.querySelector(".chkEnableEmbeddedEpisodeInfosContainer").classList.add("hide"); + } + return populateMetadataSettings(parent, contentType); } @@ -488,6 +494,7 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct SeasonZeroDisplayName: parent.querySelector("#txtSeasonZeroName").value, AutomaticRefreshIntervalDays: parseInt(parent.querySelector("#selectAutoRefreshInterval").value), EnableEmbeddedTitles: parent.querySelector("#chkEnableEmbeddedTitles").checked, + EnableEmbeddedEpisodeInfos: parent.querySelector("#chkEnableEmbeddedEpisodeInfos").checked, SkipSubtitlesIfEmbeddedSubtitlesPresent: parent.querySelector("#chkSkipIfGraphicalSubsPresent").checked, SkipSubtitlesIfAudioTrackMatches: parent.querySelector("#chkSkipIfAudioTrackPresent").checked, SaveSubtitlesWithMedia: parent.querySelector("#chkSaveSubtitlesLocally").checked, @@ -540,6 +547,7 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct parent.querySelector("#chkImportMissingEpisodes").checked = options.ImportMissingEpisodes; parent.querySelector(".chkAutomaticallyGroupSeries").checked = options.EnableAutomaticSeriesGrouping; parent.querySelector("#chkEnableEmbeddedTitles").checked = options.EnableEmbeddedTitles; + parent.querySelector("#chkEnableEmbeddedEpisodeInfos").checked = options.EnableEmbeddedEpisodeInfos; parent.querySelector("#chkSkipIfGraphicalSubsPresent").checked = options.SkipSubtitlesIfEmbeddedSubtitlesPresent; parent.querySelector("#chkSaveSubtitlesLocally").checked = options.SaveSubtitlesWithMedia; parent.querySelector("#chkSkipIfAudioTrackPresent").checked = options.SkipSubtitlesIfAudioTrackMatches; diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.template.html b/src/components/libraryoptionseditor/libraryoptionseditor.template.html index ebfdacaa19..bfa090b0d9 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.template.html +++ b/src/components/libraryoptionseditor/libraryoptionseditor.template.html @@ -28,6 +28,13 @@
${PreferEmbeddedTitlesOverFileNamesHelp}
+
+ +
${PreferEmbeddedEpisodeInfosOverFileNamesHelp}
+
+ + +
+ +
+
${ClientSettings}
+
+
+

${HeaderAdmin}

diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 62e8fa3f8f..f08de6b462 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -147,6 +147,7 @@ "ChannelNumber": "Channel number", "Channels": "Channels", "CinemaModeConfigurationHelp": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", + "ClientSettings": "Client Settings", "Collections": "Collections", "ColorPrimaries": "Color primaries", "ColorSpace": "Color space", From 69a3c7cd538d5b35fef35b914f453e34e84ff20c Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 19 Mar 2020 14:37:48 -0400 Subject: [PATCH 15/86] Add FIXME to revisit show/hide button logic for tv providers --- src/components/tvproviders/schedulesdirect.js | 18 ++++++++++-------- src/components/tvproviders/xmltv.js | 16 ++++++++++------ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/components/tvproviders/schedulesdirect.js b/src/components/tvproviders/schedulesdirect.js index 5283cd2313..4a6f3d297f 100644 --- a/src/components/tvproviders/schedulesdirect.js +++ b/src/components/tvproviders/schedulesdirect.js @@ -264,18 +264,20 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em self.init = function () { options = options || {}; - // Show cancel button by default - if (options.showCancelButton !== false) { - page.querySelector(".btnCancel").classList.remove("hide"); - } else { + // Only hide the button if explicitly set to false; default to showing if undefined or null + // FIXME: rename this option to clarify logic + if (options.showCancelButton === false) { page.querySelector(".btnCancel").classList.add("hide"); + } else { + page.querySelector(".btnCancel").classList.remove("hide"); } - // Show submit button by default - if (options.showSubmitButton !== false) { - page.querySelector(".btnSubmitListings").classList.remove("hide"); - } else { + // Only hide the button if explicitly set to false; default to showing if undefined or null + // FIXME: rename this option to clarify logic + if (options.showSubmitButton === false) { page.querySelector(".btnSubmitListings").classList.add("hide"); + } else { + page.querySelector(".btnSubmitListings").classList.remove("hide"); } $(".formLogin", page).on("submit", function () { diff --git a/src/components/tvproviders/xmltv.js b/src/components/tvproviders/xmltv.js index a86a1e1099..0ba164fe25 100644 --- a/src/components/tvproviders/xmltv.js +++ b/src/components/tvproviders/xmltv.js @@ -163,16 +163,20 @@ define(["jQuery", "loading", "emby-checkbox", "emby-input", "listViewStyle", "pa self.init = function () { options = options || {}; - if (false !== options.showCancelButton) { - page.querySelector(".btnCancel").classList.remove("hide"); - } else { + // Only hide the button if explicitly set to false; default to showing if undefined or null + // FIXME: rename this option to clarify logic + if (options.showCancelButton === false) { page.querySelector(".btnCancel").classList.add("hide"); + } else { + page.querySelector(".btnCancel").classList.remove("hide"); } - if (false !== options.showSubmitButton) { - page.querySelector(".btnSubmitListings").classList.remove("hide"); - } else { + // Only hide the button if explicitly set to false; default to showing if undefined or null + // FIXME: rename this option to clarify logic + if (options.showSubmitButton === false) { page.querySelector(".btnSubmitListings").classList.add("hide"); + } else { + page.querySelector(".btnSubmitListings").classList.remove("hide"); } $("form", page).on("submit", function () { From c5bb25809bd29ce4f4baf74b379c810906987d39 Mon Sep 17 00:00:00 2001 From: pakkosauna Date: Thu, 19 Mar 2020 19:52:07 +0000 Subject: [PATCH 16/86] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 91e32afe63..11d497fd19 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -305,5 +305,10 @@ "EnableDisplayMirroring": "Näytön peilaus", "EnableColorCodedBackgrounds": "Väri-koodatut taustat", "EnableCinemaMode": "Teatteri-tila", - "EnableBackdropsHelp": "Näytä taustat tietyillä sivuilla selatessasi kirjastoa." + "EnableBackdropsHelp": "Näytä taustat tietyillä sivuilla selatessasi kirjastoa.", + "EnableExternalVideoPlayersHelp": "Videota soitettaessa näytetään erillinen valikko.", + "Depressed": "Painettu", + "CopyStreamURLError": "Verkko-osoitteen kopioinnissa tapahtui virhe.", + "ButtonSplit": "jaa", + "AskAdminToCreateLibrary": "Pyydä järjestelmän ylläpitäjää luomaan kirjasto." } From e8bc839d0babd2c1a63e3eb4ff253ce43c948a9c Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 20 Mar 2020 17:49:32 +0900 Subject: [PATCH 17/86] update methods for native shell --- src/components/shell.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/components/shell.js b/src/components/shell.js index f82f5eea3c..4f1aa0c8de 100644 --- a/src/components/shell.js +++ b/src/components/shell.js @@ -10,12 +10,6 @@ define([], function () { } }, - canExec: false, - exec: function (options) { - // options.path - // options.arguments - return Promise.reject(); - }, enableFullscreen: function () { if (window.NativeShell) { window.NativeShell.enableFullscreen(); From 10a49012262a9bcee2b400acce264f1f7c805e99 Mon Sep 17 00:00:00 2001 From: Medzhnun Date: Fri, 20 Mar 2020 11:28:28 +0000 Subject: [PATCH 18/86] Translated using Weblate (Bulgarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bg/ --- src/strings/bg-bg.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/bg-bg.json b/src/strings/bg-bg.json index d1f6b11b96..c2b0bb6922 100644 --- a/src/strings/bg-bg.json +++ b/src/strings/bg-bg.json @@ -832,5 +832,9 @@ "ButtonNetwork": "Мрежа", "ButtonFullscreen": "На цял екран", "ButtonDown": "Надолу", - "ButtonConnect": "Свързване" + "ButtonConnect": "Свързване", + "AllowOnTheFlySubtitleExtraction": "Позволява моментално извличане на поднадписи", + "AllowHWTranscodingHelp": "Позволява на тунера да прекодира моментално. Това може да помогне за редуциране на прекодирането от сървъра.", + "AddItemToCollectionHelp": "Добавяне към колекция чрез търсенето им и използване на дясно-щракване с мишката или контекстното меню.", + "Absolute": "Aбсолютен" } From 58af4a65989ed19bbe50470e4d423e4a5457a615 Mon Sep 17 00:00:00 2001 From: nfgb Date: Fri, 20 Mar 2020 22:32:09 +0000 Subject: [PATCH 19/86] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index da6d26d947..ecd6ccb079 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1213,5 +1213,10 @@ "CopyStreamURLError": "Ocorreu um erro ao copiar o URL.", "ButtonSplit": "Dividir", "AskAdminToCreateLibrary": "Peça a um administrador para criar a biblioteca.", - "AllowFfmpegThrottling": "Transcodificação com falhas" + "AllowFfmpegThrottling": "Transcodificação com falhas", + "DashboardOperatingSystem": "Sistema Operativo", + "LabelUserLoginAttemptsBeforeLockout": "Número de tentativas de login falhadas antes do bloqueio do utilizador:", + "LabelTrackNumber": "Número da faixa:", + "LabelSportsCategories": "Categorias de Desportos:", + "Yesterday": "Ontem" } From cb97baa61ab9a6c797a995e6010ffa12974f3b96 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sat, 21 Mar 2020 18:14:08 +0100 Subject: [PATCH 20/86] Move prompt, confirm and sendcastapi to one module each --- src/components/castSenderApi.js | 34 +++++++++ src/components/confirm/confirm.js | 93 ++++++++++++++++--------- src/components/confirm/nativeconfirm.js | 27 ------- src/components/prompt/nativeprompt.js | 28 -------- src/components/prompt/prompt.js | 50 +++++++++---- src/scripts/site.js | 51 +------------- 6 files changed, 131 insertions(+), 152 deletions(-) create mode 100644 src/components/castSenderApi.js delete mode 100644 src/components/confirm/nativeconfirm.js delete mode 100644 src/components/prompt/nativeprompt.js diff --git a/src/components/castSenderApi.js b/src/components/castSenderApi.js new file mode 100644 index 0000000000..a1e7bd8755 --- /dev/null +++ b/src/components/castSenderApi.js @@ -0,0 +1,34 @@ +define([], function() { + 'use strict'; + + if (window.appMode === "cordova" || window.appMode === "android") { + return { + load: function () { + window.chrome = window.chrome || {}; + return Promise.resolve(); + } + }; + } else { + var ccLoaded = false; + return { + load: function () { + if (ccLoaded) { + return Promise.resolve(); + } + + return new Promise(function (resolve, reject) { + var fileref = document.createElement("script"); + fileref.setAttribute("type", "text/javascript"); + + fileref.onload = function () { + ccLoaded = true; + resolve(); + }; + + fileref.setAttribute("src", "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"); + document.querySelector("head").appendChild(fileref); + }); + } + }; + } +}); diff --git a/src/components/confirm/confirm.js b/src/components/confirm/confirm.js index f104350c87..fa9a156679 100644 --- a/src/components/confirm/confirm.js +++ b/src/components/confirm/confirm.js @@ -1,40 +1,65 @@ -define(['dialog', 'globalize'], function (dialog, globalize) { +define(["browser", "dialog", "globalize"], function(browser, dialog, globalize) { 'use strict'; - return function (text, title) { + function replaceAll(str, find, replace) { + return str.split(find).join(replace); + } - var options; - if (typeof text === 'string') { - options = { - title: title, - text: text - }; - } else { - options = text; - } - - var items = []; - - items.push({ - name: options.cancelText || globalize.translate('ButtonCancel'), - id: 'cancel', - type: 'cancel' - }); - - items.push({ - name: options.confirmText || globalize.translate('ButtonOk'), - id: 'ok', - type: options.primary === 'delete' ? 'delete' : 'submit' - }); - - options.buttons = items; - - return dialog(options).then(function (result) { - if (result === 'ok') { - return Promise.resolve(); + if (browser.tv && window.confirm) { + // Use the native confirm dialog + return function (options) { + if (typeof options === 'string') { + options = { + title: '', + text: options + }; } - return Promise.reject(); - }); - }; + var text = replaceAll(options.text || '', '
', '\n'); + var result = confirm(text); + + if (result) { + return Promise.resolve(); + } else { + return Promise.reject(); + } + }; + } else { + // Use our own dialog + return function (text, title) { + var options; + if (typeof text === 'string') { + options = { + title: title, + text: text + }; + } else { + options = text; + } + + var items = []; + + items.push({ + name: options.cancelText || globalize.translate('ButtonCancel'), + id: 'cancel', + type: 'cancel' + }); + + items.push({ + name: options.confirmText || globalize.translate('ButtonOk'), + id: 'ok', + type: options.primary === 'delete' ? 'delete' : 'submit' + }); + + options.buttons = items; + + return dialog(options).then(function (result) { + if (result === 'ok') { + return Promise.resolve(); + } + + return Promise.reject(); + }); + }; + } }); diff --git a/src/components/confirm/nativeconfirm.js b/src/components/confirm/nativeconfirm.js deleted file mode 100644 index 7d72bc5eaf..0000000000 --- a/src/components/confirm/nativeconfirm.js +++ /dev/null @@ -1,27 +0,0 @@ -define([], function () { - 'use strict'; - - function replaceAll(str, find, replace) { - - return str.split(find).join(replace); - } - - return function (options) { - - if (typeof options === 'string') { - options = { - title: '', - text: options - }; - } - - var text = replaceAll(options.text || '', '
', '\n'); - var result = confirm(text); - - if (result) { - return Promise.resolve(); - } else { - return Promise.reject(); - } - }; -}); diff --git a/src/components/prompt/nativeprompt.js b/src/components/prompt/nativeprompt.js deleted file mode 100644 index ba7f1a9a49..0000000000 --- a/src/components/prompt/nativeprompt.js +++ /dev/null @@ -1,28 +0,0 @@ -define([], function () { - 'use strict'; - - function replaceAll(str, find, replace) { - - return str.split(find).join(replace); - } - - return function (options) { - - if (typeof options === 'string') { - options = { - label: '', - text: options - }; - } - - var label = replaceAll(options.label || '', '
', '\n'); - - var result = prompt(label, options.text || ''); - - if (result) { - return Promise.resolve(result); - } else { - return Promise.reject(result); - } - }; -}); diff --git a/src/components/prompt/prompt.js b/src/components/prompt/prompt.js index 8f4f839eaa..32fadb811c 100644 --- a/src/components/prompt/prompt.js +++ b/src/components/prompt/prompt.js @@ -1,6 +1,10 @@ -define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'formDialogStyle'], function (dialogHelper, layoutManager, scrollHelper, globalize, dom, require) { +define(["browser", 'dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'formDialogStyle'], function(browser, dialogHelper, layoutManager, scrollHelper, globalize, dom, require) { 'use strict'; + function replaceAll(str, find, replace) { + return str.split(find).join(replace); + } + function setInputProperties(dlg, options) { var txtInput = dlg.querySelector('#txtInput'); @@ -13,7 +17,6 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 're } function showDialog(options, template) { - var dialogOptions = { removeOnClose: true, scrollY: false @@ -71,7 +74,6 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 're dlg.style.minWidth = (Math.min(400, dom.getWindowSize().innerWidth - 50)) + 'px'; return dialogHelper.open(dlg).then(function () { - if (layoutManager.tv) { scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); } @@ -86,19 +88,37 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 're }); } - return function (options) { + if ((browser.tv || browser.xboxOne) && window.confirm) { + return function (options) { + if (typeof options === 'string') { + options = { + label: '', + text: options + }; + } - return new Promise(function (resolve, reject) { - require(['text!./prompt.template.html'], function (template) { + var label = replaceAll(options.label || '', '
', '\n'); + var result = prompt(label, options.text || ''); - if (typeof options === 'string') { - options = { - title: '', - text: options - }; - } - showDialog(options, template).then(resolve, reject); + if (result) { + return Promise.resolve(result); + } else { + return Promise.reject(result); + } + }; + } else { + return function (options) { + return new Promise(function (resolve, reject) { + require(['text!./prompt.template.html'], function (template) { + if (typeof options === 'string') { + options = { + title: '', + text: options + }; + } + showDialog(options, template).then(resolve, reject); + }); }); - }); - }; + }; + } }); diff --git a/src/scripts/site.js b/src/scripts/site.js index 0ab8e9a1f0..6739e3cd59 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -355,39 +355,6 @@ var AppInfo = {}; return headroom; } - function getCastSenderApiLoader() { - var ccLoaded = false; - return { - load: function () { - if (ccLoaded) { - return Promise.resolve(); - } - - return new Promise(function (resolve, reject) { - var fileref = document.createElement("script"); - fileref.setAttribute("type", "text/javascript"); - - fileref.onload = function () { - ccLoaded = true; - resolve(); - }; - - fileref.setAttribute("src", "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"); - document.querySelector("head").appendChild(fileref); - }); - } - }; - } - - function getDummyCastSenderApiLoader() { - return { - load: function () { - window.chrome = window.chrome || {}; - return Promise.resolve(); - } - }; - } - function createSharedAppFooter(appFooter) { return new appFooter({}); } @@ -439,28 +406,16 @@ var AppInfo = {}; defineResizeObserver(); define("dialog", [componentsPath + "/dialog/dialog"], returnFirstDependency); - if (preferNativeAlerts && window.confirm) { - define("confirm", [componentsPath + "/confirm/nativeconfirm"], returnFirstDependency); - } else { - define("confirm", [componentsPath + "/confirm/confirm"], returnFirstDependency); - } + define("confirm", [componentsPath + "/confirm/confirm"], returnFirstDependency); - if ((preferNativeAlerts || browser.xboxOne) && window.confirm) { - define("prompt", [componentsPath + "/prompt/nativeprompt"], returnFirstDependency); - } else { - define("prompt", [componentsPath + "/prompt/prompt"], returnFirstDependency); - } + define("prompt", [componentsPath + "/prompt/prompt"], returnFirstDependency); define("loading", [componentsPath + "/loading/loading"], returnFirstDependency); define("multi-download", [componentsPath + "/multidownload"], returnFirstDependency); define("fileDownloader", [componentsPath + "/filedownloader"], returnFirstDependency); define("localassetmanager", [bowerPath + "/apiclient/localassetmanager"], returnFirstDependency); - if ("cordova" === self.appMode || "android" === self.appMode) { - define("castSenderApiLoader", [], getDummyCastSenderApiLoader); - } else { - define("castSenderApiLoader", [], getCastSenderApiLoader); - } + define("castSenderApiLoader", [componentsPath + "castSenderApi"], returnFirstDependency); define("transfermanager", [bowerPath + "/apiclient/sync/transfermanager"], returnFirstDependency); define("filerepository", [bowerPath + "/apiclient/sync/filerepository"], returnFirstDependency); From de88967dbd036868dc97cbacf9311b3b9837d576 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sat, 21 Mar 2020 18:27:30 +0100 Subject: [PATCH 21/86] Remove superfluous variable --- src/components/prompt/prompt.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/prompt/prompt.js b/src/components/prompt/prompt.js index 32fadb811c..41d40c4a48 100644 --- a/src/components/prompt/prompt.js +++ b/src/components/prompt/prompt.js @@ -78,10 +78,8 @@ define(["browser", 'dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); } - var value = submitValue; - - if (value) { - return value; + if (submitValue) { + return submitValue; } else { return Promise.reject(); } From 705c3fbcf0d4b83a8f82115957e45d81761ac0d6 Mon Sep 17 00:00:00 2001 From: amirmasoud Date: Sat, 21 Mar 2020 18:47:01 +0000 Subject: [PATCH 22/86] Translated using Weblate (Persian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fa/ --- src/strings/fa.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/fa.json b/src/strings/fa.json index 7b7393c6b9..d4b60fe7c6 100644 --- a/src/strings/fa.json +++ b/src/strings/fa.json @@ -139,5 +139,8 @@ "AllLanguages": "تمام زبان ها", "AllLibraries": "تمام کتابخانه ها", "AllowHWTranscodingHelp": "اگر فعال شود, اجازه میدهید تبدیل ( کم و زیاد کردن کیفیت ) درلحظه و توسط کارت دریافت سیگنال صورت گیرد. این کمک میکند به اینکه سرور جلیفین کمتر عمل تبدیل را انجام دهد.", - "AllowOnTheFlySubtitleExtraction": "اجازه میدهد در لحظه زیرنویس بازشود" + "AllowOnTheFlySubtitleExtraction": "اجازه میدهد در لحظه زیرنویس بازشود", + "Add": "افزودن", + "Actor": "بازیگر", + "AccessRestrictedTryAgainLater": "دسترسی در حال حاضر محدود شده است. لطفا دوباره تلاش کنید." } From 856069f25d232cb421c9d69b1b817c2946bc8e69 Mon Sep 17 00:00:00 2001 From: Vogete Date: Sat, 21 Mar 2020 11:26:46 +0000 Subject: [PATCH 23/86] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index a6c2a14da2..7ade41afff 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1213,7 +1213,7 @@ "Screenshots": "Képernyőképek", "SearchForCollectionInternetMetadata": "Keresés az interneten artwork és metaadat után", "Series": "Sorozatok", - "SeriesCancelled": "A sorozat törölt.", + "SeriesCancelled": "Sorozat törölve.", "SeriesRecordingScheduled": "A sorozatfelvétel ütemezett.", "SeriesSettings": "Sorozat beállítások", "ServerRestartNeededAfterPluginInstall": "A bővítmény telepítése után újra kell indítani a Jellyfin Szerver-t.", From b65bd915ee51864cfc6bcd53a2f82a9168f78b7f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 22 Mar 2020 01:07:04 -0400 Subject: [PATCH 24/86] Simplify show/hide button logic for tv providers --- src/components/tvproviders/schedulesdirect.js | 18 +++++------------- src/components/tvproviders/xmltv.js | 18 +++++------------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/components/tvproviders/schedulesdirect.js b/src/components/tvproviders/schedulesdirect.js index 4a6f3d297f..cf11e5736d 100644 --- a/src/components/tvproviders/schedulesdirect.js +++ b/src/components/tvproviders/schedulesdirect.js @@ -264,21 +264,13 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em self.init = function () { options = options || {}; - // Only hide the button if explicitly set to false; default to showing if undefined or null + // Only hide the buttons if explicitly set to false; default to showing if undefined or null // FIXME: rename this option to clarify logic - if (options.showCancelButton === false) { - page.querySelector(".btnCancel").classList.add("hide"); - } else { - page.querySelector(".btnCancel").classList.remove("hide"); - } + var hideCancelButton = options.showCancelButton === false; + page.querySelector(".btnCancel").classList.toggle("hide", hideCancelButton); - // Only hide the button if explicitly set to false; default to showing if undefined or null - // FIXME: rename this option to clarify logic - if (options.showSubmitButton === false) { - page.querySelector(".btnSubmitListings").classList.add("hide"); - } else { - page.querySelector(".btnSubmitListings").classList.remove("hide"); - } + var hideSubmitButton = options.showSubmitButton === false; + page.querySelector(".btnSubmitListings").classList.toggle("hide", hideSubmitButton); $(".formLogin", page).on("submit", function () { submitLoginForm(); diff --git a/src/components/tvproviders/xmltv.js b/src/components/tvproviders/xmltv.js index 0ba164fe25..7e7d381f09 100644 --- a/src/components/tvproviders/xmltv.js +++ b/src/components/tvproviders/xmltv.js @@ -163,21 +163,13 @@ define(["jQuery", "loading", "emby-checkbox", "emby-input", "listViewStyle", "pa self.init = function () { options = options || {}; - // Only hide the button if explicitly set to false; default to showing if undefined or null + // Only hide the buttons if explicitly set to false; default to showing if undefined or null // FIXME: rename this option to clarify logic - if (options.showCancelButton === false) { - page.querySelector(".btnCancel").classList.add("hide"); - } else { - page.querySelector(".btnCancel").classList.remove("hide"); - } + var hideCancelButton = options.showCancelButton === false; + page.querySelector(".btnCancel").classList.toggle("hide", hideCancelButton); - // Only hide the button if explicitly set to false; default to showing if undefined or null - // FIXME: rename this option to clarify logic - if (options.showSubmitButton === false) { - page.querySelector(".btnSubmitListings").classList.add("hide"); - } else { - page.querySelector(".btnSubmitListings").classList.remove("hide"); - } + var hideSubmitButton = options.showSubmitButton === false; + page.querySelector(".btnSubmitListings").classList.toggle("hide", hideSubmitButton); $("form", page).on("submit", function () { submitListingsForm(); From a704f41515fb5d11b96d63a6f873899ac911b874 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sun, 22 Mar 2020 04:09:34 +0000 Subject: [PATCH 25/86] Translated using Weblate (Chinese (Simplified)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 547f55dc3a..b0c9a59694 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -537,8 +537,8 @@ "LabelDisplayName": "显示名称:", "LabelDisplayOrder": "显示顺序:", "LabelDisplaySpecialsWithinSeasons": "显示季中所播出的特集", - "LabelDownMixAudioScale": "缩混音频增强:", - "LabelDownMixAudioScaleHelp": "缩混音频增强。值为A将保留原来的音量。", + "LabelDownMixAudioScale": "降混音频增强:", + "LabelDownMixAudioScaleHelp": "降混音时增强音频。值为 1 时将保留原始音量。", "LabelDownloadLanguages": "下载语言:", "LabelDropImageHere": "拖拽或点击选择图像于此处。", "LabelDroppedFrames": "丢弃的帧:", From 99d7138a083ed92993eb07af3ab27d5bfb486fb6 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sun, 22 Mar 2020 14:00:04 +0300 Subject: [PATCH 26/86] Fix XviD playback on Tizen --- src/scripts/browserdeviceprofile.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/scripts/browserdeviceprofile.js b/src/scripts/browserdeviceprofile.js index b45bdc59bf..85d3e1500b 100644 --- a/src/scripts/browserdeviceprofile.js +++ b/src/scripts/browserdeviceprofile.js @@ -214,6 +214,14 @@ define(['browser'], function (browser) { break; case 'avi': supported = browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp; + // New Samsung TV don't support XviD/DivX + if (browser.tizen) { + videoCodecs.push('h264'); + if (canPlayH265(videoTestElement, options)) { + videoCodecs.push('h265'); + videoCodecs.push('hevc'); + } + } break; case 'mpg': case 'mpeg': From 603472cfb69516cb83270c4dfece64aa455edb92 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sun, 22 Mar 2020 15:04:51 +0300 Subject: [PATCH 27/86] Add comment --- src/scripts/browserdeviceprofile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/scripts/browserdeviceprofile.js b/src/scripts/browserdeviceprofile.js index 85d3e1500b..7acad63c14 100644 --- a/src/scripts/browserdeviceprofile.js +++ b/src/scripts/browserdeviceprofile.js @@ -215,6 +215,7 @@ define(['browser'], function (browser) { case 'avi': supported = browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp; // New Samsung TV don't support XviD/DivX + // Explicitly add supported codecs to make other codecs be transcoded if (browser.tizen) { videoCodecs.push('h264'); if (canPlayH265(videoTestElement, options)) { From 58dd6eb4918847783218b162ab3df285c68f373d Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sun, 22 Mar 2020 19:30:02 +0300 Subject: [PATCH 28/86] Add test for current item --- src/controllers/playback/videoosd.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/controllers/playback/videoosd.js b/src/controllers/playback/videoosd.js index 24d779f245..b6af14dd6a 100644 --- a/src/controllers/playback/videoosd.js +++ b/src/controllers/playback/videoosd.js @@ -665,7 +665,8 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med } function onTimeUpdate(e) { - if (isEnabled) { + // Test for 'currentItem' is required for Firefox since its player spams 'timeupdate' events even being at breakpoint + if (isEnabled && currentItem) { var now = new Date().getTime(); if (!(now - lastUpdateTime < 700)) { From c49e60e2d9d181ae3e51cfd3e0c8221ab6a89dc0 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 22 Mar 2020 17:42:32 +0100 Subject: [PATCH 29/86] Hide some header buttons on mobile --- src/scripts/librarymenu.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js index 001c75787d..5e6562ee42 100644 --- a/src/scripts/librarymenu.js +++ b/src/scripts/librarymenu.js @@ -73,7 +73,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " } if (user && user.localUser) { - if (headerHomeButton) { + if (headerHomeButton && !layoutManager.mobile) { headerHomeButton.classList.remove("hide"); } @@ -788,7 +788,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " var headerCastButton; var headerSearchButton; var headerAudioPlayerButton; - var enableLibraryNavDrawer = !layoutManager.tv; + var enableLibraryNavDrawer = layoutManager.desktop; var skinHeader = document.querySelector(".skinHeader"); var requiresUserRefresh = true; var lastOpenTime = new Date().getTime(); @@ -863,6 +863,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " pageClassOn("pageshow", "page", function (e) { var page = this; var isDashboardPage = page.classList.contains("type-interior"); + var isHomePage = page.classList.contains("homePage"); var isLibraryPage = !isDashboardPage && page.classList.contains("libraryPage"); var apiClient = getCurrentApiClient(); @@ -874,7 +875,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " refreshDashboardInfoInDrawer(apiClient); } else { if (mainDrawerButton) { - if (enableLibraryNavDrawer) { + if (enableLibraryNavDrawer || isHomePage) { mainDrawerButton.classList.remove("hide"); } else { mainDrawerButton.classList.add("hide"); From 1c0728ada6e24f29b96b8399d3c61fbabf5961be Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 22 Mar 2020 17:56:03 +0100 Subject: [PATCH 30/86] Use small logo on mobile --- src/assets/css/librarybrowser.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 4c2cf95817..0bf65d83a7 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -128,6 +128,10 @@ margin-top: 0; } +.layout-mobile .pageTitleWithDefaultLogo { + background-image: url(../img/icon-transparent.png); +} + .headerLeft, .skinHeader { display: -webkit-box; From d6ab058661b70258a2a1629cbe91a96542b3519f Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sun, 22 Mar 2020 20:18:27 +0300 Subject: [PATCH 31/86] Add Tizen version check --- src/scripts/browser.js | 3 +++ src/scripts/browserdeviceprofile.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/scripts/browser.js b/src/scripts/browser.js index 791ac7411b..f9e1942320 100644 --- a/src/scripts/browser.js +++ b/src/scripts/browser.js @@ -271,6 +271,9 @@ define([], function () { if (!browser.tizen) { browser.orsay = userAgent.toLowerCase().indexOf('smarthub') !== -1; + } else { + var v = (navigator.appVersion).match(/Tizen (\d+).(\d+)/); + browser.tizenVersion = parseInt(v[1]); } if (browser.edgeUwp) { diff --git a/src/scripts/browserdeviceprofile.js b/src/scripts/browserdeviceprofile.js index 7acad63c14..337463987c 100644 --- a/src/scripts/browserdeviceprofile.js +++ b/src/scripts/browserdeviceprofile.js @@ -216,7 +216,7 @@ define(['browser'], function (browser) { supported = browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp; // New Samsung TV don't support XviD/DivX // Explicitly add supported codecs to make other codecs be transcoded - if (browser.tizen) { + if (browser.tizenVersion >= 4) { videoCodecs.push('h264'); if (canPlayH265(videoTestElement, options)) { videoCodecs.push('h265'); From 0cb54feb539ef4e7e7192b1fc92fdb5de24b4815 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 20 Jan 2020 20:47:54 +0100 Subject: [PATCH 32/86] Remove libjass --- src/bundle.js | 7 --- src/components/htmlvideoplayer/plugin.js | 80 +----------------------- src/scripts/site.js | 1 - 3 files changed, 1 insertion(+), 87 deletions(-) diff --git a/src/bundle.js b/src/bundle.js index c5c5e1bcaf..ba5f74b163 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -84,13 +84,6 @@ _define("webcomponents", function() { return webcomponents; }); -// libjass -var libjass = require("libjass"); -require("libjass/libjass.css"); -_define("libjass", function() { - return libjass; -}); - // libass-wasm var libass_wasm = require("libass-wasm"); _define("JavascriptSubtitlesOctopus", function() { diff --git a/src/components/htmlvideoplayer/plugin.js b/src/components/htmlvideoplayer/plugin.js index d19187c9ed..995df6607b 100644 --- a/src/components/htmlvideoplayer/plugin.js +++ b/src/components/htmlvideoplayer/plugin.js @@ -80,7 +80,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa if (track) { var format = (track.Codec || '').toLowerCase(); if (format === 'ssa' || format === 'ass') { - // libjass is needed here return false; } } @@ -1047,7 +1046,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa lastCustomTrackMs = 0; } - function renderWithSubtitlesOctopus(videoElement, track, item) { + function renderSsaAss(videoElement, track, item) { var attachments = self._currentPlayOptions.mediaSource.MediaAttachments || []; var options = { video: videoElement, @@ -1066,82 +1065,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa }); } - function renderWithLibjass(videoElement, track, item) { - - var rendererSettings = {}; - - if (browser.ps4) { - // Text outlines are not rendering very well - rendererSettings.enableSvg = false; - } else if (browser.edge || browser.msie) { - // svg not rendering at all - rendererSettings.enableSvg = false; - } - - // probably safer to just disable everywhere - rendererSettings.enableSvg = false; - - require(['libjass', 'ResizeObserver'], function (libjass, ResizeObserver) { - - libjass.ASS.fromUrl(getTextTrackUrl(track, item)).then(function (ass) { - - var clock = new libjass.renderers.ManualClock(); - currentClock = clock; - - // Create a DefaultRenderer using the video element and the ASS object - var renderer = new libjass.renderers.WebRenderer(ass, clock, videoElement.parentNode, rendererSettings); - - currentAssRenderer = renderer; - - renderer.addEventListener("ready", function () { - try { - renderer.resize(videoElement.offsetWidth, videoElement.offsetHeight, 0, 0); - - if (!self._resizeObserver) { - self._resizeObserver = new ResizeObserver(onVideoResize, {}); - self._resizeObserver.observe(videoElement); - } - //clock.pause(); - } catch (ex) { - //alert(ex); - } - }); - }, function () { - htmlMediaHelper.onErrorInternal(self, 'mediadecodeerror'); - }); - }); - } - - function renderSsaAss(videoElement, track, item) { - if (supportsCanvas() && supportsWebWorkers()) { - console.debug('rendering subtitles with SubtitlesOctopus'); - renderWithSubtitlesOctopus(videoElement, track, item); - } else { - console.debug('rendering subtitles with libjass'); - renderWithLibjass(videoElement, track, item); - } - } - - function onVideoResize() { - if (browser.iOS) { - // the new sizes will be delayed for about 500ms with wkwebview - setTimeout(resetVideoRendererSize, 500); - } else { - resetVideoRendererSize(); - } - } - - function resetVideoRendererSize() { - var renderer = currentAssRenderer; - if (renderer) { - var videoElement = self._mediaElement; - var width = videoElement.offsetWidth; - var height = videoElement.offsetHeight; - console.debug('videoElement resized: ' + width + 'x' + height); - renderer.resize(width, height, 0, 0); - } - } - function requiresCustomSubtitlesElement() { // after a system update, ps4 isn't showing anything when creating a track element dynamically @@ -1231,7 +1154,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa if (!itemHelper.isLocalItem(item) || track.IsExternal) { var format = (track.Codec || '').toLowerCase(); if (format === 'ssa' || format === 'ass') { - // libjass is needed here renderSsaAss(videoElement, track, item); return; } diff --git a/src/scripts/site.js b/src/scripts/site.js index 6739e3cd59..dc5f973198 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -690,7 +690,6 @@ var AppInfo = {}; "swiper", "queryString", "sortable", - "libjass", "webcomponents", "material-icons", "jellyfin-noto", From 087d44567e0b28a65131a6cd6a602d91c84e20cc Mon Sep 17 00:00:00 2001 From: adrian gustavo martinez Date: Sun, 22 Mar 2020 11:27:02 +0000 Subject: [PATCH 33/86] Translated using Weblate (Spanish (Argentina)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/ --- src/strings/es-ar.json | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/strings/es-ar.json b/src/strings/es-ar.json index 2b99b91242..64f7a0fd7e 100644 --- a/src/strings/es-ar.json +++ b/src/strings/es-ar.json @@ -68,7 +68,7 @@ "AllowMediaConversion": "Permitir conversión de medios", "AllowMediaConversionHelp": "Permitir o denegar acceso a la opción de convertir medios.", "AllowOnTheFlySubtitleExtraction": "Permitir extracción de subtítulos al vuelo", - "AllowOnTheFlySubtitleExtractionHelp": "Los subtítulos incrustados pueden ser extraídos de videos y entregados a apps de Jellyfin en texto plano para ayudar a prevenir la transcodificación de video. En algunos sistemas esto puede llevar un largo tiempo y causar demoras en la reproducción durante el proceso de extracción. Desactivar esta opción para quemar los subtítulos incrustados en la transcodificación de video cuando no son soportados nativamente por el dispositivo cliente.", + "AllowOnTheFlySubtitleExtractionHelp": "Los subtítulos incrustados pueden extraerse de los videos y entregarse a los reproductores en texto plano para ayudar a evitar la transcodificación de video. En algunos sistemas, esto puede tardar mucho tiempo y provocar que la reproducción de video se detenga durante el proceso de extracción. Deshabilite esta opción para que los subtítulos incrustados se graben con transcodificación de video cuando no estén soportados de forma nativa por el dispositivo cliente.", "AllowRemoteAccess": "Permitir conexiones remotas a este Servidor Jellyfin.", "AllowRemoteAccessHelp": "Si no está tildado, todas las conexiones remotas serán bloqueadas.", "AlwaysPlaySubtitles": "Siempre reproducir subtítulos", @@ -81,7 +81,7 @@ "AutoBasedOnLanguageSetting": "Auto (basado en configuración de idioma)", "AutomaticallyConvertNewContent": "Convertir contenido nuevo automáticamente", "Backdrop": "Fondo", - "AllowHWTranscodingHelp": "Si se activa, se permitirá al sintonizador transcodificar streams al vuelo. Esto podría ayudar a reducir la transcodificación requerida por el servidor Jellyfin.", + "AllowHWTranscodingHelp": "Permite que el sintonizador transcodifique las transmisiones sobre la marcha. Esto puede ayudar a reducir la transcodificación requerida por el servidor.", "AllowedRemoteAddressesHelp": "Lista separada por comas de direcciones IP o IP/máscara-de-red para redes a las que se les permitirá conectarse de forma remota. Si se deja vacía, todas las direcciones remotas serán permitidas.", "AlwaysPlaySubtitlesHelp": "Los subtítulos que concuerden con la preferencia de idioma se cargarán independientemente del idioma del audio.", "AndroidUnlockRestoreHelp": "Para recuperar tu compra anterior, por favor asegurate que iniciaste sesión en el dispositivo con la misma cuenta de Google (o Amazon) que hizo la compra originalmente. Asegurate de que la tienda de aplicaciones esté habilitada y no posea control parental alguno, y que tiene una conexión a Internet activa. Solo tendrás que hacer esto una sola vez para recuperar tu compra anterior.", @@ -102,12 +102,12 @@ "BirthPlaceValue": "Lugar de nacimiento: {0}", "Blacklist": "Lista negra", "BobAndWeaveWithHelp": "Bob and weave (mayor calidad, pero más lento)", - "BookLibraryHelp": "Libros de audio y de texto son soportados. Revise la {0}guía de nombrado de libros de Jellyfin{1}.", + "BookLibraryHelp": "Los libros de texto y audio libros son soportados. Revise la {0}Guía para Nomenclatura de Libros{1}.", "Box": "Caja", "BoxRear": "Caja (lado opuesto)", "Browse": "Explorar", "BrowsePluginCatalogMessage": "Explore nuestro catálogo de complementos para ver los complementos disponibles.", - "BurnSubtitlesHelp": "Determine si el servidor debería incrustar los subtítulos cuando convierte los videos dependiendo del formato de subtítulo. Evitar incrustar subtitulos mejorará el rendimiento del servidor. Seleccione Auto para incrustar formatos basados en imagen (por ejemplo, VOBSUB, PGS, SUB/IDX, etc.), como así también ciertos subtítulos ASS/SSA", + "BurnSubtitlesHelp": "Determina si el servidor debe grabar subtítulos al convertir videos dependiendo del formato de los subtítulos. Evitar la grabación de subtítulos mejorará el rendimiento del servidor. Seleccione Auto para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX, etc.) y ciertos subtítulos ASS/SSA.", "ButtonAccept": "Aceptar", "ButtonAdd": "Agregar", "ButtonAddMediaLibrary": "Agregar biblioteca de medios", @@ -308,7 +308,7 @@ "DeviceLastUsedByUserName": "Usado ultima vez por {0}", "DirectPlayError": "Error en la reproducción directa", "DirectPlaying": "Reproducción directa", - "DirectStreamHelp1": "El medio es compatible con el dispositivo respecto a la resolución y el tipo de medio (H.264, AC3, etc.), pero esta en un contenedor incompatible (.mkv, .avi, .wmv, etc.). El video va a ser re-empaquetado en el momento que sea transmitido al dispositivo.", + "DirectStreamHelp1": "El medio es compatible con el dispositivo en cuanto a la resolución y tipo de medio (H.264, AC3, etc.), pero está en un contenedor de archivo incompatible (mkv, avi, wmv, etc.). El video sera reempaquetado en el acto antes de transmitirlo al dispositivo.", "DirectStreamHelp2": "Transmitir directamente un archivo usa muy poco procesamiento, esto sin perdida en la calidad de video.", "DirectStreaming": "Transmisión en directo", "Director": "Director", @@ -321,7 +321,7 @@ "DisplayInMyMedia": "Mostrar en pantalla principal", "DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla principal, como últimos medios y continuar viendo", "DisplayMissingEpisodesWithinSeasons": "Mostrar episodios faltantes entre temporadas", - "DisplayMissingEpisodesWithinSeasonsHelp": "Esto debe ser habilitado en las bibilotecas de TV, en la configuracion del servidor de Jellyfin.", + "DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe estar habilitado para las bibliotecas de TV en la configuración del servidor.", "DisplayModeHelp": "Selecciona el tipo de pantalla en el cual estas usando Jellyfin.", "DoNotRecord": "No grabar", "Down": "Abajo", @@ -345,7 +345,7 @@ "EnableBackdropsHelp": "Si esta habilitado, los fondos van a ser mostrados en segundo plano de algunas paginas mientras estas en la biblioteca.", "EnableCinemaMode": "Habilitar modo Cine", "EnableColorCodedBackgrounds": "Habilitar colores en el fondo del codigo", - "AuthProviderHelp": "Selecciona un Proveedor de Autenticación para autenticar la contraseña de este usuario", + "AuthProviderHelp": "Seleccione un proveedor de autenticación que se utilizará para autenticar la contraseña de este usuario.", "CriticRating": "Calificación de la crítica", "DefaultSubtitlesHelp": "Los subtítulos se cargan en base a los indicadores por defecto y los indicadores forzados en los metadatos embebidos. Las preferencias de idioma son consideradas cuando existe más de una opción.", "Dislike": "No me gusta", @@ -411,5 +411,13 @@ "HeaderFavoriteEpisodes": "Episodios favoritos", "HeaderFavoriteArtists": "Artistas favoritos", "HeaderFavoriteAlbums": "Álbumes favoritos", - "Shows": "Series" + "Shows": "Series", + "CopyStreamURLError": "Hubo un error copiando la URL.", + "CopyStreamURLSuccess": "URL copiada con éxito.", + "CopyStreamURL": "Copiar la URL de la transmisión", + "ButtonSplit": "Dividir", + "ButtonAddImage": "Agregar imagen", + "AskAdminToCreateLibrary": "Pregunte al administrador para crear una biblioteca.", + "AllowFfmpegThrottlingHelp": "Cuando una transcodificación o conversión avanza demasiado con respecto a la posición actual de la reproducción, se pausara el proceso para consumir menos recursos. esto es mas útil cuando no se hacen búsquedas de tiempo a menudo. Desactive esta opción si experimenta problemas en la reproducción.", + "AllowFfmpegThrottling": "Transcodificación Throttle" } From 7aae3fd95c25823822c571cbcfd9f6061407e94b Mon Sep 17 00:00:00 2001 From: adrian gustavo martinez Date: Sun, 22 Mar 2020 11:55:42 +0000 Subject: [PATCH 34/86] Translated using Weblate (Spanish (Mexico)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_MX/ --- src/strings/es-mx.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/es-mx.json b/src/strings/es-mx.json index 57a1c9aa25..2968bbcdd4 100644 --- a/src/strings/es-mx.json +++ b/src/strings/es-mx.json @@ -195,7 +195,7 @@ "Download": "Descargar", "DownloadsValue": "{0} descargas", "DrmChannelsNotImported": "Los canales con DRM no serán importados.", - "DropShadow": "Mostrar sombra", + "DropShadow": "Sombra Paralela", "EasyPasswordHelp": "Su código PIN fácil se utiliza para el acceso sin conexión en los clientes compatibles y también puede utilizarse para acceder fácilmente cuando se está en la misma red.", "Edit": "Editar", "EditImages": "Editar imágenes", From 94a2a8749bdfe5b9fa2ba9c82b25218309648e4f Mon Sep 17 00:00:00 2001 From: Louis Hermier Date: Sun, 22 Mar 2020 12:00:27 +0000 Subject: [PATCH 35/86] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 4a52756ec4..4c726c8245 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1100,7 +1100,7 @@ "PlayAllFromHere": "Tout lire à partir d'ici", "PlayCount": "Nombre de lectures", "PlayFromBeginning": "Lire depuis le début", - "PlayNext": "Lire le suivant", + "PlayNext": "Lire ensuite", "PlayNextEpisodeAutomatically": "Lancer l'épisode suivant automatiquement", "Played": "Lu", "Playlists": "Listes de lecture", From c96db195761cee16e602d0afc94f994da1a517eb Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 23 Mar 2020 10:56:23 +0100 Subject: [PATCH 36/86] Remove libjass from yarn dependencies --- package.json | 1 - yarn.lock | 161 +++++++++------------------------------------------ 2 files changed, 27 insertions(+), 135 deletions(-) diff --git a/package.json b/package.json index 6d07f9a6fa..9d26a02319 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "jquery": "^3.4.1", "jstree": "^3.3.7", "libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus", - "libjass": "^0.11.0", "material-design-icons-iconfont": "^5.0.1", "native-promise-only": "^0.8.0-a", "page": "^1.11.5", diff --git a/yarn.lock b/yarn.lock index 8dee672565..02766a1edc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3072,7 +3072,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@3.X, debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@3.X, debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -3183,11 +3183,6 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3302,11 +3297,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@2.X: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -4551,13 +4541,6 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -5532,7 +5515,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5556,13 +5539,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -5744,7 +5720,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -6530,11 +6506,6 @@ levn@^0.3.0, levn@~0.3.0: version "3.0.2" resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#7f331237026db75af2441717a4132d2398e96735" -libjass@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/libjass/-/libjass-0.11.0.tgz#bff1f464a2428c3bddfb68e4503b2d52afe3d6e6" - integrity sha1-v/H0ZKJCjDvd+2jkUDstUq/j1uY= - liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -7257,21 +7228,6 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -7406,15 +7362,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.3.3" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117" - integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -7499,22 +7446,6 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.50: version "1.1.52" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" @@ -7552,14 +7483,6 @@ node-sass@^4.13.1, node-sass@^4.8.3: dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -7613,13 +7536,6 @@ now-and-later@^2.0.0: dependencies: once "^1.3.2" -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - npm-conf@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" @@ -7628,20 +7544,6 @@ npm-conf@^1.1.0: config-chain "^1.1.11" pify "^3.0.0" -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7649,7 +7551,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -7916,7 +7818,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.4: +osenv@0: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -9304,6 +9206,15 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^6.11.1: + version "6.11.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.1.tgz#ab021f275d463ce1b61e88f0ce6988b3e8fe7c2c" + integrity sha512-1ZvJOUl8ifkkBxu2ByVM/8GijMIPx+cef7u3yroO3Ogm4DOdZcF5dcrWTIlSHe3Pg/mtlt6/eFjObDfJureZZA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -9369,16 +9280,6 @@ raw-body@^2.3.2: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-file-stdin@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61" @@ -9853,7 +9754,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9952,7 +9853,7 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sax@^1.2.4, sax@~1.2.4: +sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -10485,6 +10386,11 @@ specificity@^0.4.1: resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -10640,6 +10546,11 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -10801,11 +10712,6 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strip-outer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" @@ -11115,19 +11021,6 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -12275,7 +12168,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From f6cb372610b7b201b36982fb922d0dd7521b611c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20F=C3=A4th?= Date: Mon, 23 Mar 2020 16:49:00 +0100 Subject: [PATCH 37/86] Fix cast sender api path --- src/scripts/site.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 6739e3cd59..b9be7351aa 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -415,7 +415,7 @@ var AppInfo = {}; define("fileDownloader", [componentsPath + "/filedownloader"], returnFirstDependency); define("localassetmanager", [bowerPath + "/apiclient/localassetmanager"], returnFirstDependency); - define("castSenderApiLoader", [componentsPath + "castSenderApi"], returnFirstDependency); + define("castSenderApiLoader", [componentsPath + "/castSenderApi"], returnFirstDependency); define("transfermanager", [bowerPath + "/apiclient/sync/transfermanager"], returnFirstDependency); define("filerepository", [bowerPath + "/apiclient/sync/filerepository"], returnFirstDependency); From 7f10a81a1621e1bb28f32b4846fbc669bbb36cf6 Mon Sep 17 00:00:00 2001 From: Louis Hermier Date: Mon, 23 Mar 2020 16:53:31 +0000 Subject: [PATCH 38/86] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 4c726c8245..fd85828c17 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1470,5 +1470,7 @@ "AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment loin de la position de lecture, le processus se mettra en pause afin d’économiser des ressources. Plus utile lors d’une lecture continue. À désactiver en cas de problèmes de lecture.", "AllowFfmpegThrottling": "Adapter la Vitesse du Transcodage", "NoCreatedLibraries": "Il semblerait que vous n'ayez créé aucune librairie. {0}Voulez-vous en créer une maintenant ?{1}", - "PlaybackErrorNoCompatibleStream": "Problème de profil client, le serveur n’a pas pu envoyer un format média compatible." + "PlaybackErrorNoCompatibleStream": "Problème de profil client, le serveur n’a pas pu envoyer un format média compatible.", + "PreferEmbeddedEpisodeInfosOverFileNames": "Préférer les informations intégrées aux noms de fichiers", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utilise les informations des métadonnées intégrées, si disponible." } From bb475fd24ad69821d55a359d21bd76c66d7d00ee Mon Sep 17 00:00:00 2001 From: Adam Bokor Date: Mon, 23 Mar 2020 17:52:01 +0000 Subject: [PATCH 39/86] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 7ade41afff..0f0b0aee68 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1474,5 +1474,7 @@ "DeviceAccessHelp": "Ez csak azokra az eszközökre alkalmazható, amelyek egyedileg vannak azonosítva és nem gátolják meg a böngészőből való elérést. A felhasználói eszközök kiszűrése meg fogja akadályozni az új eszközök használatát addig, amíg itt nem engedélyezed őket.", "PlaybackErrorNoCompatibleStream": "Hiba történt a kliens felmérése közben és a szerver nem küld kompatibilis formátumot az eszközre.", "AllowFfmpegThrottlingHelp": "Ha az átkódolás vagy remux eléggé előtöltődött a jelenlegi lejátszási pozícióhoz képest, ez megállítja a folyamatot, hogy kevesebb erőforrást vegyen igénybe. Ez akkor hasznos, ha ritkán ugrálsz előre a lejátszott videókban. Kapcsold ki, ha lejátszási problémákba ütközöl.", - "AllowFfmpegThrottling": "Átkódolás visszafogása" + "AllowFfmpegThrottling": "Átkódolás visszafogása", + "PreferEmbeddedEpisodeInfosOverFileNames": "Inkább a beágyazott epizódokra vonatkozó információkat részesítse előnyben a fájlnevekkel szemben", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Ez a beágyazott metaadatok epizódinformációit használja, ha rendelkezésre állnak." } From 2bda5f0277be6a1df2ed69cd315231ad8d5281f9 Mon Sep 17 00:00:00 2001 From: Riccardo Zanotto Date: Mon, 23 Mar 2020 18:53:57 +0000 Subject: [PATCH 40/86] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 5b213e1bce..4dd7b3d190 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -581,7 +581,7 @@ "LabelForgotPasswordUsernameHelp": "Inserisci il tuo nome utente, se te lo ricordi.", "LabelFormat": "Formato:", "LabelFriendlyName": "Nome Condiviso:", - "LabelServerNameHelp": "Questo nome è usato per identificare il server e verrà usato di default come nome del pc.", + "LabelServerNameHelp": "Questo nome è usato per identificare il server e avrà come default il nome del pc.", "LabelGroupMoviesIntoCollections": "Raggruppa i film nelle collezioni", "LabelGroupMoviesIntoCollectionsHelp": "Quando si visualizzano le liste di film, quelli appartenenti ad una collezione saranno visualizzati come un elemento raggruppato.", "LabelH264Crf": "CRF di codifica H264:", From c882c264a30bc83a04bdf0761db09831d55bf2b8 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Tue, 24 Mar 2020 10:03:51 +0300 Subject: [PATCH 41/86] Fix view restoring --- src/components/appRouter.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/appRouter.js b/src/components/appRouter.js index efb58a089f..62bfb3cf40 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -511,9 +511,16 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM return baseRoute; } + var popstateOccurred = false; + window.addEventListener('popstate', function () { + popstateOccurred = true; + }); + function getHandler(route) { return function (ctx, next) { + ctx.isBack = popstateOccurred; handleRoute(ctx, next, route); + popstateOccurred = false; }; } From 34a5578679ddaa717e4185a27de48bb3b74bfe43 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Fri, 28 Feb 2020 14:36:42 +0100 Subject: [PATCH 42/86] Run postcss for webpack bundle --- postcss.config.js | 2 +- src/scripts/site.js | 1 - yarn.lock | 23 +++++++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/postcss.config.js b/postcss.config.js index 23159fd295..bd6e644892 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,4 +1,4 @@ -const postcssPresetEnv = require('postcss-preset-env'); +const postcssPresetEnv = require('postcss-preset-env') const cssnano = require('cssnano'); const config = () => ({ diff --git a/src/scripts/site.js b/src/scripts/site.js index 4e208dbe0f..155e28b94e 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -677,7 +677,6 @@ var AppInfo = {}; }, bundles: { bundle: [ - "document-register-element", "fetch", "flvjs", "jstree", diff --git a/yarn.lock b/yarn.lock index 02766a1edc..d260ee6e3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -730,6 +730,11 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + "@gulp-sourcemaps/identity-map@1.X": version "1.0.2" resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9" @@ -8952,6 +8957,15 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" @@ -9020,6 +9034,15 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss@^5.0.0, postcss@^5.0.18: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" From 0a0fe15b263707817cd092d9c8369587992e4275 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 1 Mar 2020 08:40:57 +0100 Subject: [PATCH 43/86] Enable ES6 support for all tools --- .eslintrc.yml | 6 ++++++ gulpfile.js | 2 +- package.json | 9 ++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 4bc22fc1d4..377716d53c 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -3,6 +3,12 @@ env: browser: true amd: true +parserOptions: + ecmaVersion: 6 + sourceType: module + ecmaFeatures: + impliedStrict: true + globals: # New browser globals DataView: readonly diff --git a/gulpfile.js b/gulpfile.js index ca6cf36dd2..a0337db1c9 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -18,7 +18,7 @@ const stream = require('webpack-stream'); const inject = require('gulp-inject'); const postcss = require('gulp-postcss'); const sass = require('gulp-sass'); - + sass.compiler = require('node-sass') diff --git a/package.json b/package.json index 9d26a02319..2de78b821c 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "devDependencies": { "@babel/core": "^7.8.6", "@babel/polyfill": "^7.8.7", + "@babel/plugin-transform-modules-amd": "^7.8.3", "@babel/preset-env": "^7.8.6", "autoprefixer": "^9.7.4", "babel-loader": "^8.0.6", @@ -69,9 +70,11 @@ "whatwg-fetch": "^3.0.0" }, "babel": { - "presets": [ - "@babel/preset-env" - ] + "presets": ["@babel/preset-env"], + "overrides": [{ + "test": ["src/components/cardbuilder/cardBuilder.js"], + "plugins": ["@babel/plugin-transform-modules-amd"] + }] }, "browserslist": [ "last 2 Firefox versions", From 8891be539e1a36ac6230abdf8ccdc3f8b964d277 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 19 Mar 2020 21:15:38 +0100 Subject: [PATCH 44/86] Convert CardBuilder to ES6 --- src/components/cardbuilder/cardBuilder.js | 47 ++++++++++++----------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 7f562f1fd0..8f626ab211 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1,10 +1,23 @@ -define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusManager', 'indicators', 'globalize', 'layoutManager', 'apphost', 'dom', 'browser', 'playbackManager', 'itemShortcuts', 'scripts/imagehelper', 'css!./card', 'paper-icon-button-light', 'programStyles'], - function (datetime, imageLoader, connectionManager, itemHelper, focusManager, indicators, globalize, layoutManager, appHost, dom, browser, playbackManager, itemShortcuts, imageHelper) { - 'use strict'; +import datetime from 'datetime'; +import imageLoader from 'imageLoader'; +import connectionManager from 'connectionManager'; +import itemHelper from 'itemHelper'; +import focusManager from 'focusManager'; +import indicators from 'indicators'; +import globalize from 'globalize'; +import layoutManager from 'layoutManager'; +import dom from 'dom'; +import browser from 'browser'; +import playbackManager from 'playbackManager'; +import itemShortcuts from 'itemShortcuts'; +import imageHelper from 'scripts/imagehelper'; +import 'css!./card'; +import 'paper-icon-button-light'; +import 'programStyles'; var enableFocusTransform = !browser.slow && !browser.edge; - function getCardsHtml(items, options) { + export function getCardsHtml(items, options) { if (arguments.length === 1) { options = arguments[0]; items = options.items; @@ -1171,7 +1184,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana } } - function getDefaultBackgroundClass(str) { + export function getDefaultBackgroundClass(str) { return 'defaultCardBackground defaultCardBackground' + getDefaultColorIndex(str); } @@ -1504,7 +1517,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana return html; } - function getDefaultText(item, options) { + export function getDefaultText(item, options) { if (item.CollectionType) { return '' } @@ -1533,7 +1546,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana return '
' + defaultName + '
'; } - function buildCards(items, options) { + export function buildCards(items, options) { // Abort if the container has been disposed if (!document.body.contains(options.itemsContainer)) { @@ -1678,7 +1691,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana } } - function onUserDataChanged(userData, scope) { + export function onUserDataChanged(userData, scope) { var cards = (scope || document.body).querySelectorAll('.card-withuserdata[data-id="' + userData.ItemId + '"]'); @@ -1687,7 +1700,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana } } - function onTimerCreated(programId, newTimerId, itemsContainer) { + export function onTimerCreated(programId, newTimerId, itemsContainer) { var cells = itemsContainer.querySelectorAll('.card[data-id="' + programId + '"]'); @@ -1702,7 +1715,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana } } - function onTimerCancelled(id, itemsContainer) { + export function onTimerCancelled(id, itemsContainer) { var cells = itemsContainer.querySelectorAll('.card[data-timerid="' + id + '"]'); @@ -1716,7 +1729,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana } } - function onSeriesTimerCancelled(id, itemsContainer) { + export function onSeriesTimerCancelled(id, itemsContainer) { var cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + id + '"]'); @@ -1729,15 +1742,3 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana cell.removeAttribute('data-seriestimerid'); } } - - return { - getCardsHtml: getCardsHtml, - getDefaultBackgroundClass: getDefaultBackgroundClass, - getDefaultText: getDefaultText, - buildCards: buildCards, - onUserDataChanged: onUserDataChanged, - onTimerCreated: onTimerCreated, - onTimerCancelled: onTimerCancelled, - onSeriesTimerCancelled: onSeriesTimerCancelled - }; - }); From bbbef042bf227ebd48159304b0c07c55b3238bca Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 19 Mar 2020 21:16:40 +0100 Subject: [PATCH 45/86] Add JSDoc comments --- postcss.config.js | 2 +- src/components/cardbuilder/cardBuilder.js | 252 +++++++++++++++++----- src/scripts/site.js | 1 + 3 files changed, 195 insertions(+), 60 deletions(-) diff --git a/postcss.config.js b/postcss.config.js index bd6e644892..23159fd295 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,4 +1,4 @@ -const postcssPresetEnv = require('postcss-preset-env') +const postcssPresetEnv = require('postcss-preset-env'); const cssnano = require('cssnano'); const config = () => ({ diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 8f626ab211..edf3d0d606 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1,3 +1,7 @@ +/** + * Card builder module. + * @module cardBuilder + */ import datetime from 'datetime'; import imageLoader from 'imageLoader'; import connectionManager from 'connectionManager'; @@ -17,6 +21,12 @@ import 'programStyles'; var enableFocusTransform = !browser.slow && !browser.edge; + /** + * Generate the HTML markup for cards of a set of items. + * @param items - The items to generate cards for. + * @param options - The options of the cards. + * @returns {string} The HTML markup for cards. + */ export function getCardsHtml(items, options) { if (arguments.length === 1) { options = arguments[0]; @@ -26,6 +36,13 @@ import 'programStyles'; return buildCardsHtmlInternal(items, options); } + /** + * Computes the number of posters per row. + * @param {string} shape - Shape of the cards. + * @param {number} screenWidth - Width of the screen. + * @param {boolean} isOrientationLandscape - Flag for the orientation of the screen. + * @returns {number} Number of cards per row of an itemsContainer. + */ function getPostersPerRow(shape, screenWidth, isOrientationLandscape) { switch (shape) { case 'portrait': @@ -230,6 +247,11 @@ import 'programStyles'; } } + /** + * Checks if the window is resizable. + * @param {number} windowWidth - Width of the client's screen. + * @returns {boolean} - Result of the check. + */ function isResizable(windowWidth) { var screen = window.screen; if (screen) { @@ -243,15 +265,24 @@ import 'programStyles'; return false; } + /** + * Gets the width of a card's image according to the shape and amount of cards per row. + * @param {string} shape - Shape of the card. + * @param {number} screenWidth - Width of the screen. + * @param {boolean} isOrientationLandscape - Flag for the orientation of the screen. + * @returns {number} Width of the image for a card. + */ function getImageWidth(shape, screenWidth, isOrientationLandscape) { var imagesPerRow = getPostersPerRow(shape, screenWidth, isOrientationLandscape); - var shapeWidth = Math.round(screenWidth / imagesPerRow) * 2; - - return shapeWidth; + return Math.round(screenWidth / imagesPerRow) * 2; } + /** + * Normalizes the options of a card. + * @param {Object} items - A set of items. + * @param {Object} options - Options for handling the items. + */ function setCardData(items, options) { - options.shape = options.shape || "auto"; var primaryImageAspectRatio = imageLoader.getPrimaryImageAspectRatio(items); @@ -308,8 +339,13 @@ import 'programStyles'; } } + /** + * Generates the internal HTML markup for cards. + * @param {Object} items - Items for which to generate the markup. + * @param {Object} options - Options for generating the markup. + * @returns {string} The internal HTML markup of the cards. + */ function buildCardsHtmlInternal(items, options) { - var isVertical; if (options.shape === 'autoVertical') { @@ -438,8 +474,12 @@ import 'programStyles'; return html; } + /** + * Computes the Aspect Ratio for a card given its shape. + * @param {string} shape - Shape for which to get the aspect ratio. + * @returns {null|number} Ratio of the shape. + */ function getDesiredAspect(shape) { - if (shape) { shape = shape.toLowerCase(); if (shape.indexOf('portrait') !== -1) { @@ -458,8 +498,21 @@ import 'programStyles'; return null; } - function getCardImageUrl(item, apiClient, options, shape) { + /** + * @typedef {Object} CardImageUrl + * @property {string} imgUrl - URL of the image. + * @property {boolean} forceName - Force the name to be visible. + * @property {boolean} coverImage - Acts as a cover image. + */ + /** Get the URL of the Card's image. + * @param {Object} item - Item for which to generate a card. + * @param {Object} apiClient - API Client object. + * @param {Object} options - Options of the card to generate. + * @param {string} shape - Shape of the desired image. + * @returns {CardImageUrl} Object representing the URL of the card's image. + */ + function getCardImageUrl(item, apiClient, options, shape) { var imageItem = item.ProgramInfo || item; item = imageItem; @@ -676,12 +729,23 @@ import 'programStyles'; }; } + /** + * Generates a random integer in a range. + * @param {number} min - Minimum of the range. + * @param {number} max - Maximum of the range. + * @returns {number} Randomly generated number. + */ function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } - var numRandomColors = 5; + /** + * Generates an index used to select the default color of a Card based on a string. + * @param {string} str - String to use for generating the index. + * @returns {number} Index of the color. + */ function getDefaultColorIndex(str) { + var numRandomColors = 5; if (str) { var charIndex = Math.floor(str.length / 2); @@ -698,8 +762,18 @@ import 'programStyles'; } } + /** + * Generates the HTML markup for a card's text. + * @param {Array} lines - Array containing the text lines. + * @param {string} cssClass - Base CSS class to use for the lines. + * @param {boolean} forceLines - Flag to force the rendering of all lines. + * @param {boolean} isOuterFooter - Flag to mark the text lines as outer footer. + * @param {string} cardLayout - DEPRECATED + * @param {boolean} addRightMargin - Flag to add a right margin to the text. + * @param {number} maxLines - Maximum number of lines to render. + * @returns {string} HTML markup fo the card's text. + */ function getCardTextLines(lines, cssClass, forceLines, isOuterFooter, cardLayout, addRightMargin, maxLines) { - var html = ''; var valid = 0; @@ -746,12 +820,23 @@ import 'programStyles'; return html; } + /** + * Determines if the item is Live TV. + * @param {Object} item - Item to use. + * @returns {boolean} Flag showing if the item is Live TV. + */ function isUsingLiveTvNaming(item) { return item.Type === 'Program' || item.Type === 'Timer' || item.Type === 'Recording'; } + /** + * Returns the air time text for the item based on the given times. + * @param {object} item - Item used to generate the air time text. + * @param {string} showAirDateTime - ISO8601 date for the start of the show. + * @param {string} showAirEndTime - ISO8601 date for the end of the show. + * @returns {string} The air time text for the item base on the given dates. + */ function getAirTimeText(item, showAirDateTime, showAirEndTime) { - var airTimeText = ''; if (item.StartDate) { @@ -776,8 +861,22 @@ import 'programStyles'; return airTimeText; } + /** + * Generates the HTML markup for the card's footer text. + * @param {Object} item - Item used to generate the footer text. + * @param {Object} apiClient - API Client instance. + * @param {Object} options - Options used to generate the footer text. + * @param {string} showTitle - Title of the show. + * @param {boolean} forceName - Flag to force showing the name of the item. + * @param {boolean} overlayText - Flag to show overlay text. + * @param {CardImageUrl} imgUrl - Object representing the card's image URL. + * @param {string} footerClass - CSS class of the footer. + * @param {string} progressHtml - HTML markup of the progress bar. + * @param {string} logoUrl - URL of the logo for the item. + * @param {boolean} isOuterFooter - Flag to mark the text as outer footer. + * @returns {string} HTML markup of the card's footer text. + */ function getCardFooterText(item, apiClient, options, showTitle, forceName, overlayText, imgUrl, footerClass, progressHtml, logoUrl, isOuterFooter) { - var html = ''; if (logoUrl) { @@ -1040,8 +1139,14 @@ import 'programStyles'; return html; } + /** + * Generates the HTML markup for the action button. + * @param {Object} item - Item used to generate the action button. + * @param {string} text - Text of the action button. + * @param {string} serverId - ID of the server. + * @returns {string} HTML markup of the action button. + */ function getTextActionButton(item, text, serverId) { - if (!text) { text = itemHelper.getDisplayName(item); } @@ -1057,10 +1162,14 @@ import 'programStyles'; return html; } + /** + * Generates HTML markup for the item count indicator. + * @param {Object} options - Options used to generate the item count. + * @param {Object} item - Item used to generate the item count. + * @returns {string} HTML markup for the item count indicator. + */ function getItemCountsHtml(options, item) { - var counts = []; - var childText; if (item.Type === 'Playlist') { @@ -1148,48 +1257,36 @@ import 'programStyles'; return counts.join(', '); } - function getProgramIndicators(item) { - - item = item.ProgramInfo || item; - - var html = ''; - - if (item.IsLive) { - html += '
' + globalize.translate('Live') + '
'; - } - - if (item.IsPremiere) { - html += '
' + globalize.translate('Premiere') + '
'; - } else if (item.IsSeries && !item.IsRepeat) { - html += '
' + globalize.translate('AttributeNew') + '
'; - } - //else if (item.IsRepeat) { - // html += '
' + globalize.translate('Repeat') + '
'; - //} - - if (html) { - html = '
' + html; - html += '
'; - } - - return html; - } - var refreshIndicatorLoaded; - function requireRefreshIndicator() { + /** + * Imports the refresh indicator element. + */ + function requireRefreshIndicator() { if (!refreshIndicatorLoaded) { refreshIndicatorLoaded = true; require(['emby-itemrefreshindicator']); } } + /** + * Returns the default background class for a card based on a string. + * @param {string} str - Text used to generate the background class. + * @returns {string} CSS classes for default card backgrounds. + */ export function getDefaultBackgroundClass(str) { return 'defaultCardBackground defaultCardBackground' + getDefaultColorIndex(str); } + /** + * Builds the HTML markup for an individual card. + * @param {number} index - Index of the card + * @param {object} item - Item used to generate the card. + * @param {object} apiClient - API Client instance. + * @param {object} options - Options used to generate the card. + * @returns {string} HTML markup for the generated card. + */ function buildCard(index, item, apiClient, options) { - var action = options.action || 'link'; if (action === 'play' && item.IsFolder) { @@ -1424,10 +1521,6 @@ import 'programStyles'; cardImageContainerOpen += '
' + indicatorsHtml + '
'; } - //if (item.Type === 'Program' || item.Type === 'Timer') { - // cardImageContainerOpen += getProgramIndicators(item); - //} - if (!imgUrl) { cardImageContainerOpen += getDefaultText(item, options); } @@ -1480,8 +1573,13 @@ import 'programStyles'; return '<' + tagName + ' data-index="' + index + '"' + timerAttributes + actionAttribute + ' data-isfolder="' + (item.IsFolder || false) + '" data-serverid="' + (item.ServerId || options.serverId) + '" data-id="' + (item.Id || item.ItemId) + '" data-type="' + item.Type + '"' + mediaTypeData + collectionTypeData + channelIdData + positionTicksData + collectionIdData + playlistIdData + contextData + parentIdData + ' data-prefix="' + prefix + '" class="' + className + '">' + cardImageContainerOpen + innerCardFooter + cardImageContainerClose + overlayButtons + additionalCardContent + cardScalableClose + outerCardFooter + cardBoxClose + ''; } + /** + * Generates HTML markup for the card overlay. + * @param {object} item - Item used to generate the card overlay. + * @param {string} action - Action assigned to the overlay. + * @returns {string} HTML markup of the card overlay. + */ function getHoverMenuHtml(item, action) { - var html = ''; html += '
'; @@ -1517,6 +1615,12 @@ import 'programStyles'; return html; } + /** + * Generates the text or icon used on default card backgrounds. + * @param {object} item - Item used to generate the card overlay. + * @param {object} options - Options used to generate the card overlay. + * @returns {string} HTML markup of the card overlay. + */ export function getDefaultText(item, options) { if (item.CollectionType) { return '' @@ -1546,8 +1650,12 @@ import 'programStyles'; return '
' + defaultName + '
'; } + /** + * Builds a set of cards and inserts it into the page;. + * @param {Array} items - Array of items used to build cards. + * @param {options} options - Options of the cards to build. + */ export function buildCards(items, options) { - // Abort if the container has been disposed if (!document.body.contains(options.itemsContainer)) { return; @@ -1588,8 +1696,13 @@ import 'programStyles'; } } + /** + * Ensures the indicators for a card exist and creates them if they don't. + * @param {string} card - HTML Markup of the card. + * @param {string} indicatorsElem - HTML markup of the indicators. + * @returns {string} - HTML markup of the indicators. + */ function ensureIndicators(card, indicatorsElem) { - if (indicatorsElem) { return indicatorsElem; } @@ -1607,8 +1720,12 @@ import 'programStyles'; return indicatorsElem; } + /** + * Adds user data to the card such as progress indicators, played status, etc. + * @param {string} card - HTML markup of the card. + * @param {Object} userData - User data to apply to the card. + */ function updateUserData(card, userData) { - var type = card.getAttribute('data-type'); var enableCountIndicator = type === 'Series' || type === 'BoxSet' || type === 'Season'; var indicatorsElem = null; @@ -1691,8 +1808,12 @@ import 'programStyles'; } } + /** + * Handles when user data has changed. + * @param {Object} userData - User data to apply to the card. + * @param {HTMLElement} scope - DOM Element to use as a scope when selecting cards. + */ export function onUserDataChanged(userData, scope) { - var cards = (scope || document.body).querySelectorAll('.card-withuserdata[data-id="' + userData.ItemId + '"]'); for (var i = 0, length = cards.length; i < length; i++) { @@ -1700,8 +1821,13 @@ import 'programStyles'; } } + /** + * Handles when a timer was created. + * @param {string} programId - ID of the program. + * @param {string} newTimerId - ID of the new timer. + * @param {HTMLElement} itemsContainer - DOM Element of the items container. + */ export function onTimerCreated(programId, newTimerId, itemsContainer) { - var cells = itemsContainer.querySelectorAll('.card[data-id="' + programId + '"]'); for (var i = 0, length = cells.length; i < length; i++) { @@ -1715,9 +1841,13 @@ import 'programStyles'; } } - export function onTimerCancelled(id, itemsContainer) { - - var cells = itemsContainer.querySelectorAll('.card[data-timerid="' + id + '"]'); + /** + * Handles when a timer is cancelled. + * @param {string} timerId - ID of the cancelled timer. + * @param {HTMLElement} itemsContainer - DOM Element of the items container. + */ + export function onTimerCancelled(timerId, itemsContainer) { + var cells = itemsContainer.querySelectorAll('.card[data-timerid="' + timerId + '"]'); for (var i = 0, length = cells.length; i < length; i++) { var cell = cells[i]; @@ -1729,9 +1859,13 @@ import 'programStyles'; } } - export function onSeriesTimerCancelled(id, itemsContainer) { - - var cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + id + '"]'); + /** + * Handles when a series timer is cancelled. + * @param {string} canceledTimerId - ID of the cancelled timer. + * @param {HTMLElement} itemsContainer - DOM Element of the items container. + */ + export function onSeriesTimerCancelled(canceledTimerId, itemsContainer) { + var cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + canceledTimerId + '"]'); for (var i = 0, length = cells.length; i < length; i++) { var cell = cells[i]; diff --git a/src/scripts/site.js b/src/scripts/site.js index 155e28b94e..4e208dbe0f 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -677,6 +677,7 @@ var AppInfo = {}; }, bundles: { bundle: [ + "document-register-element", "fetch", "flvjs", "jstree", From 55d1657b50b63560dc49ed48b38ef4d60620bd79 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 19 Mar 2020 22:33:41 +0100 Subject: [PATCH 46/86] Migrate var in CardBuilder to let and const --- src/components/cardbuilder/cardBuilder.js | 318 +++++++++++----------- 1 file changed, 155 insertions(+), 163 deletions(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index edf3d0d606..24e4035050 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1,3 +1,4 @@ +/* eslint-disable indent */ /** * Card builder module. * @module cardBuilder @@ -19,7 +20,7 @@ import 'css!./card'; import 'paper-icon-button-light'; import 'programStyles'; - var enableFocusTransform = !browser.slow && !browser.edge; + const enableFocusTransform = !browser.slow && !browser.edge; /** * Generate the HTML markup for cards of a set of items. @@ -253,9 +254,9 @@ import 'programStyles'; * @returns {boolean} - Result of the check. */ function isResizable(windowWidth) { - var screen = window.screen; + const screen = window.screen; if (screen) { - var screenWidth = screen.availWidth; + const screenWidth = screen.availWidth; if ((screenWidth - windowWidth) > 20) { return true; @@ -273,7 +274,7 @@ import 'programStyles'; * @returns {number} Width of the image for a card. */ function getImageWidth(shape, screenWidth, isOrientationLandscape) { - var imagesPerRow = getPostersPerRow(shape, screenWidth, isOrientationLandscape); + const imagesPerRow = getPostersPerRow(shape, screenWidth, isOrientationLandscape); return Math.round(screenWidth / imagesPerRow) * 2; } @@ -285,11 +286,11 @@ import 'programStyles'; function setCardData(items, options) { options.shape = options.shape || "auto"; - var primaryImageAspectRatio = imageLoader.getPrimaryImageAspectRatio(items); + const primaryImageAspectRatio = imageLoader.getPrimaryImageAspectRatio(items); - if (options.shape === 'auto' || options.shape === 'autohome' || options.shape === 'autooverflow' || options.shape === 'autoVertical') { + if (['auto', 'autohome', 'autooverflow', 'autoVertical'].includes(options.shape)) { - var requestedShape = options.shape; + const requestedShape = options.shape; options.shape = null; if (primaryImageAspectRatio) { @@ -327,11 +328,11 @@ import 'programStyles'; } if (!options.width) { - var screenWidth = dom.getWindowSize().innerWidth; - var screenHeight = dom.getWindowSize().innerHeight; + let screenWidth = dom.getWindowSize().innerWidth; + const screenHeight = dom.getWindowSize().innerHeight; if (isResizable(screenWidth)) { - var roundScreenTo = 100; + const roundScreenTo = 100; screenWidth = Math.floor(screenWidth / roundScreenTo) * roundScreenTo; } @@ -346,7 +347,7 @@ import 'programStyles'; * @returns {string} The internal HTML markup of the cards. */ function buildCardsHtmlInternal(items, options) { - var isVertical; + let isVertical = false; if (options.shape === 'autoVertical') { isVertical = true; @@ -354,24 +355,21 @@ import 'programStyles'; setCardData(items, options); - var html = ''; - var itemsInRow = 0; + let html = ''; + let itemsInRow = 0; - var currentIndexValue; - var hasOpenRow; - var hasOpenSection; + let currentIndexValue; + let hasOpenRow; + let hasOpenSection; - var sectionTitleTagName = options.sectionTitleTagName || 'div'; - var apiClient; - var lastServerId; + let sectionTitleTagName = options.sectionTitleTagName || 'div'; + let apiClient; + let lastServerId; - var i; - var length; + for (let i = 0; i < items.length; i++) { - for (i = 0, length = items.length; i < length; i++) { - - var item = items[i]; - var serverId = item.ServerId || options.serverId; + let item = items[i]; + let serverId = item.ServerId || options.serverId; if (serverId !== lastServerId) { lastServerId = serverId; @@ -379,14 +377,14 @@ import 'programStyles'; } if (options.indexBy) { - var newIndexValue = ''; + let newIndexValue = ''; if (options.indexBy === 'PremiereDate') { if (item.PremiereDate) { try { newIndexValue = datetime.toLocaleDateString(datetime.parseISO8601Date(item.PremiereDate), { weekday: 'long', month: 'long', day: 'numeric' }); - } catch (err) { - console.error('error parsing timestamp for premiere date'); + } catch (error) { + console.error('error parsing timestamp for premiere date', error); } } } else if (options.indexBy === 'ProductionYear') { @@ -461,15 +459,15 @@ import 'programStyles'; } } - var cardFooterHtml = ''; - for (i = 0, length = (options.lines || 0); i < length; i++) { + /*let cardFooterHtml = ''; + for (let i = 0; i < (options.lines || 0); i++) { if (i === 0) { cardFooterHtml += '
 
'; } else { cardFooterHtml += '
 
'; } - } + }*/ return html; } @@ -513,16 +511,15 @@ import 'programStyles'; * @returns {CardImageUrl} Object representing the URL of the card's image. */ function getCardImageUrl(item, apiClient, options, shape) { - var imageItem = item.ProgramInfo || item; - item = imageItem; + item = item.ProgramInfo || item; - var width = options.width; - var height = null; - var primaryImageAspectRatio = item.PrimaryImageAspectRatio; - var forceName = false; - var imgUrl = null; - var coverImage = false; - var uiAspect = null; + const width = options.width; + let height = null; + const primaryImageAspectRatio = item.PrimaryImageAspectRatio; + let forceName = false; + let imgUrl = null; + let coverImage = false; + let uiAspect = null; if (options.preferThumb && item.ImageTags && item.ImageTags.Thumb) { @@ -745,16 +742,16 @@ import 'programStyles'; * @returns {number} Index of the color. */ function getDefaultColorIndex(str) { - var numRandomColors = 5; + const numRandomColors = 5; if (str) { - var charIndex = Math.floor(str.length / 2); - var character = String(str.substr(charIndex, 1).charCodeAt()); - var sum = 0; - for (var i = 0; i < character.length; i++) { + const charIndex = Math.floor(str.length / 2); + const character = String(str.substr(charIndex, 1).charCodeAt()); + let sum = 0; + for (let i = 0; i < character.length; i++) { sum += parseInt(character.charAt(i)); } - var index = String(sum).substr(-1); + let index = String(sum).substr(-1); return (index % numRandomColors) + 1; } else { @@ -774,16 +771,14 @@ import 'programStyles'; * @returns {string} HTML markup fo the card's text. */ function getCardTextLines(lines, cssClass, forceLines, isOuterFooter, cardLayout, addRightMargin, maxLines) { - var html = ''; + let html = ''; - var valid = 0; - var i; - var length; + let valid = 0; - for (i = 0, length = lines.length; i < length; i++) { + for (let i = 0; i < lines.length; i++) { - var currentCssClass = cssClass; - var text = lines[i]; + let currentCssClass = cssClass; + let text = lines[i]; if (valid > 0 && isOuterFooter) { currentCssClass += ' cardText-secondary'; @@ -809,9 +804,9 @@ import 'programStyles'; if (forceLines) { - length = maxLines || Math.min(lines.length, maxLines || lines.length); + let linesLength = maxLines || Math.min(lines.length, maxLines || lines.length); - while (valid < length) { + while (valid < linesLength) { html += "
 
"; valid++; } @@ -837,11 +832,12 @@ import 'programStyles'; * @returns {string} The air time text for the item base on the given dates. */ function getAirTimeText(item, showAirDateTime, showAirEndTime) { - var airTimeText = ''; + let airTimeText = ''; + if (item.StartDate) { try { - var date = datetime.parseISO8601Date(item.StartDate); + let date = datetime.parseISO8601Date(item.StartDate); if (showAirDateTime) { airTimeText += datetime.toLocaleDateString(date, { weekday: 'short', month: 'short', day: 'numeric' }) + ' '; @@ -877,13 +873,13 @@ import 'programStyles'; * @returns {string} HTML markup of the card's footer text. */ function getCardFooterText(item, apiClient, options, showTitle, forceName, overlayText, imgUrl, footerClass, progressHtml, logoUrl, isOuterFooter) { - var html = ''; + let html = ''; if (logoUrl) { html += ''; } - var showOtherText = isOuterFooter ? !overlayText : overlayText; + const showOtherText = isOuterFooter ? !overlayText : overlayText; if (isOuterFooter && options.cardLayout && layoutManager.mobile) { @@ -892,12 +888,12 @@ import 'programStyles'; } } - var cssClass = options.centerText ? "cardText cardTextCentered" : "cardText"; - var serverId = item.ServerId || options.serverId; + const cssClass = options.centerText ? "cardText cardTextCentered" : "cardText"; + const serverId = item.ServerId || options.serverId; - var lines = []; - var parentTitleUnderneath = item.Type === 'MusicAlbum' || item.Type === 'Audio' || item.Type === 'MusicVideo'; - var titleAdded; + let lines = []; + const parentTitleUnderneath = item.Type === 'MusicAlbum' || item.Type === 'Audio' || item.Type === 'MusicVideo'; + let titleAdded; if (showOtherText) { if ((options.showParentTitle || options.showParentTitleOrTitle) && !parentTitleUnderneath) { @@ -926,7 +922,7 @@ import 'programStyles'; } } else { - var parentTitle = item.SeriesName || item.Series || item.Album || item.AlbumArtist || ""; + const parentTitle = item.SeriesName || item.Series || item.Album || item.AlbumArtist || ""; if (parentTitle || showTitle) { lines.push(parentTitle); @@ -936,14 +932,14 @@ import 'programStyles'; } } - var showMediaTitle = (showTitle && !titleAdded) || (options.showParentTitleOrTitle && !lines.length); + let showMediaTitle = (showTitle && !titleAdded) || (options.showParentTitleOrTitle && !lines.length); if (!showMediaTitle && !titleAdded && (showTitle || forceName)) { showMediaTitle = true; } if (showMediaTitle) { - var name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item, { + const name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item, { includeParentInfo: options.includeParentInfoInTitle }); @@ -970,22 +966,18 @@ import 'programStyles'; } if (options.showItemCounts) { - - var itemCountHtml = getItemCountsHtml(options, item); - - lines.push(itemCountHtml); + lines.push(getItemCountsHtml(options, item)); } if (options.textLines) { - var additionalLines = options.textLines(item); - for (var i = 0, length = additionalLines.length; i < length; i++) { + const additionalLines = options.textLines(item); + for (let i = 0; i < additionalLines.length; i++) { lines.push(additionalLines[i]); } } if (options.showSongCount) { - - var songLine = ''; + let songLine = ''; if (item.SongCount) { songLine = item.SongCount === 1 ? @@ -1023,7 +1015,7 @@ import 'programStyles'; } else { if (item.EndDate && item.ProductionYear) { - var endYear = datetime.parseISO8601Date(item.EndDate).getFullYear(); + const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear(); lines.push(item.ProductionYear + ((endYear === item.ProductionYear) ? '' : (' - ' + endYear))); } else { lines.push(item.ProductionYear || ''); @@ -1118,7 +1110,7 @@ import 'programStyles'; lines = []; } - var addRightTextMargin = isOuterFooter && options.cardLayout && !options.centerText && options.cardFooterAside !== 'none' && layoutManager.mobile; + const addRightTextMargin = isOuterFooter && options.cardLayout && !options.centerText && options.cardFooterAside !== 'none' && layoutManager.mobile; html += getCardTextLines(lines, cssClass, !options.overlayText, isOuterFooter, options.cardLayout, addRightTextMargin, options.lines); @@ -1155,7 +1147,7 @@ import 'programStyles'; return text; } - var html = ''; @@ -1169,8 +1161,8 @@ import 'programStyles'; * @returns {string} HTML markup for the item count indicator. */ function getItemCountsHtml(options, item) { - var counts = []; - var childText; + let counts = []; + let childText; if (item.Type === 'Playlist') { @@ -1178,7 +1170,7 @@ import 'programStyles'; if (item.RunTimeTicks) { - var minutes = item.RunTimeTicks / 600000000; + let minutes = item.RunTimeTicks / 600000000; minutes = minutes || 1; @@ -1257,7 +1249,7 @@ import 'programStyles'; return counts.join(', '); } - var refreshIndicatorLoaded; + let refreshIndicatorLoaded; /** * Imports the refresh indicator element. @@ -1287,7 +1279,7 @@ import 'programStyles'; * @returns {string} HTML markup for the generated card. */ function buildCard(index, item, apiClient, options) { - var action = options.action || 'link'; + let action = options.action || 'link'; if (action === 'play' && item.IsFolder) { // If this hard-coding is ever removed make sure to test nested photo albums @@ -1296,13 +1288,13 @@ import 'programStyles'; action = 'play'; } - var shape = options.shape; + let shape = options.shape; if (shape === 'mixed') { shape = null; - var primaryImageAspectRatio = item.PrimaryImageAspectRatio; + const primaryImageAspectRatio = item.PrimaryImageAspectRatio; if (primaryImageAspectRatio) { @@ -1320,7 +1312,7 @@ import 'programStyles'; // TODO move card creation code to Card component - var className = 'card'; + let className = 'card'; if (shape) { className += ' ' + shape + 'Card'; @@ -1346,16 +1338,16 @@ import 'programStyles'; } } - var imgInfo = getCardImageUrl(item, apiClient, options, shape); - var imgUrl = imgInfo.imgUrl; + const imgInfo = getCardImageUrl(item, apiClient, options, shape); + const imgUrl = imgInfo.imgUrl; - var forceName = imgInfo.forceName; + const forceName = imgInfo.forceName; - var showTitle = options.showTitle === 'auto' ? true : (options.showTitle || item.Type === 'PhotoAlbum' || item.Type === 'Folder'); - var overlayText = options.overlayText; + const showTitle = options.showTitle === 'auto' ? true : (options.showTitle || item.Type === 'PhotoAlbum' || item.Type === 'Folder'); + const overlayText = options.overlayText; - var cardImageContainerClass = 'cardImageContainer'; - var coveredImage = options.coverImage || imgInfo.coverImage; + let cardImageContainerClass = 'cardImageContainer'; + const coveredImage = options.coverImage || imgInfo.coverImage; if (coveredImage) { cardImageContainerClass += ' coveredImage'; @@ -1369,17 +1361,17 @@ import 'programStyles'; cardImageContainerClass += ' ' + getDefaultBackgroundClass(item.Name); } - var cardBoxClass = options.cardLayout ? 'cardBox visualCardBox' : 'cardBox'; + let cardBoxClass = options.cardLayout ? 'cardBox visualCardBox' : 'cardBox'; - var footerCssClass; - var progressHtml = indicators.getProgressBarHtml(item); + let footerCssClass; + let progressHtml = indicators.getProgressBarHtml(item); - var innerCardFooter = ''; + let innerCardFooter = ''; - var footerOverlayed = false; + let footerOverlayed = false; - var logoUrl; - var logoHeight = 40; + let logoUrl; + const logoHeight = 40; if (options.showChannelLogo && item.ChannelPrimaryImageTag) { logoUrl = apiClient.getScaledImageUrl(item.ChannelId, { @@ -1410,12 +1402,12 @@ import 'programStyles'; progressHtml = ''; } - var mediaSourceCount = item.MediaSourceCount || 1; + const mediaSourceCount = item.MediaSourceCount || 1; if (mediaSourceCount > 1) { innerCardFooter += '
' + mediaSourceCount + '
'; } - var outerCardFooter = ''; + let outerCardFooter = ''; if (!overlayText && !footerOverlayed) { footerCssClass = options.cardLayout ? 'cardFooter' : 'cardFooter cardFooter-transparent'; @@ -1434,15 +1426,15 @@ import 'programStyles'; cardBoxClass += ' cardBox-bottompadded'; } - var overlayButtons = ''; + let overlayButtons = ''; if (layoutManager.mobile) { - var overlayPlayButton = options.overlayPlayButton; + let overlayPlayButton = options.overlayPlayButton; if (overlayPlayButton == null && !options.overlayMoreButton && !options.overlayInfoButton && !options.cardLayout) { overlayPlayButton = item.MediaType === 'Video'; } - var btnCssClass = 'cardOverlayButton cardOverlayButton-br itemAction'; + const btnCssClass = 'cardOverlayButton cardOverlayButton-br itemAction'; if (options.centerPlayButton) { overlayButtons += ''; @@ -1462,12 +1454,12 @@ import 'programStyles'; } // cardBox can be it's own separate element if an outer footer is ever needed - var cardImageContainerOpen; - var cardImageContainerClose = ''; - var cardBoxClose = ''; - var cardScalableClose = ''; + let cardImageContainerOpen; + let cardImageContainerClose = ''; + let cardBoxClose = ''; + let cardScalableClose = ''; - var cardContentClass = 'cardContent'; + let cardContentClass = 'cardContent'; if (!options.cardLayout) { cardContentClass += ' cardContent-shadow'; } @@ -1485,13 +1477,13 @@ import 'programStyles'; cardImageContainerClose = ''; } - var cardScalableClass = 'cardScalable'; + let cardScalableClass = 'cardScalable'; cardImageContainerOpen = '
' + cardImageContainerOpen; cardBoxClose = '
'; cardScalableClose = '
'; - var indicatorsHtml = ''; + let indicatorsHtml = ''; if (options.missingIndicator !== false) { indicatorsHtml += indicators.getMissingIndicator(item); @@ -1512,7 +1504,7 @@ import 'programStyles'; } if (item.Type === 'CollectionFolder' || item.CollectionType) { - var refreshClass = item.RefreshProgress ? '' : ' class="hide"'; + const refreshClass = item.RefreshProgress ? '' : ' class="hide"'; indicatorsHtml += '
'; requireRefreshIndicator(); } @@ -1525,16 +1517,16 @@ import 'programStyles'; cardImageContainerOpen += getDefaultText(item, options); } - var tagName = (layoutManager.tv) && !overlayButtons ? 'button' : 'div'; + const tagName = (layoutManager.tv) && !overlayButtons ? 'button' : 'div'; - var nameWithPrefix = (item.SortName || item.Name || ''); - var prefix = nameWithPrefix.substring(0, Math.min(3, nameWithPrefix.length)); + const nameWithPrefix = (item.SortName || item.Name || ''); + let prefix = nameWithPrefix.substring(0, Math.min(3, nameWithPrefix.length)); if (prefix) { prefix = prefix.toUpperCase(); } - var timerAttributes = ''; + let timerAttributes = ''; if (item.TimerId) { timerAttributes += ' data-timerid="' + item.TimerId + '"'; } @@ -1542,7 +1534,7 @@ import 'programStyles'; timerAttributes += ' data-seriestimerid="' + item.SeriesTimerId + '"'; } - var actionAttribute; + let actionAttribute; if (tagName === 'button') { className += " itemAction"; @@ -1555,16 +1547,16 @@ import 'programStyles'; className += ' card-withuserdata'; } - var positionTicksData = item.UserData && item.UserData.PlaybackPositionTicks ? (' data-positionticks="' + item.UserData.PlaybackPositionTicks + '"') : ''; - var collectionIdData = options.collectionId ? (' data-collectionid="' + options.collectionId + '"') : ''; - var playlistIdData = options.playlistId ? (' data-playlistid="' + options.playlistId + '"') : ''; - var mediaTypeData = item.MediaType ? (' data-mediatype="' + item.MediaType + '"') : ''; - var collectionTypeData = item.CollectionType ? (' data-collectiontype="' + item.CollectionType + '"') : ''; - var channelIdData = item.ChannelId ? (' data-channelid="' + item.ChannelId + '"') : ''; - var contextData = options.context ? (' data-context="' + options.context + '"') : ''; - var parentIdData = options.parentId ? (' data-parentid="' + options.parentId + '"') : ''; + const positionTicksData = item.UserData && item.UserData.PlaybackPositionTicks ? (' data-positionticks="' + item.UserData.PlaybackPositionTicks + '"') : ''; + const collectionIdData = options.collectionId ? (' data-collectionid="' + options.collectionId + '"') : ''; + const playlistIdData = options.playlistId ? (' data-playlistid="' + options.playlistId + '"') : ''; + const mediaTypeData = item.MediaType ? (' data-mediatype="' + item.MediaType + '"') : ''; + const collectionTypeData = item.CollectionType ? (' data-collectiontype="' + item.CollectionType + '"') : ''; + const channelIdData = item.ChannelId ? (' data-channelid="' + item.ChannelId + '"') : ''; + const contextData = options.context ? (' data-context="' + options.context + '"') : ''; + const parentIdData = options.parentId ? (' data-parentid="' + options.parentId + '"') : ''; - var additionalCardContent = ''; + let additionalCardContent = ''; if (layoutManager.desktop) { additionalCardContent += getHoverMenuHtml(item, action); @@ -1580,11 +1572,11 @@ import 'programStyles'; * @returns {string} HTML markup of the card overlay. */ function getHoverMenuHtml(item, action) { - var html = ''; + let html = ''; html += '
'; - var btnCssClass = 'cardOverlayButton cardOverlayButton-hover itemAction paper-icon-button-light'; + const btnCssClass = 'cardOverlayButton cardOverlayButton-hover itemAction paper-icon-button-light'; if (playbackManager.canPlay(item)) { html += ''; @@ -1592,7 +1584,7 @@ import 'programStyles'; html += '
'; - var userData = item.UserData || {}; + const userData = item.UserData || {}; if (itemHelper.canMarkPlayed(item)) { require(['emby-playstatebutton']); @@ -1601,7 +1593,7 @@ import 'programStyles'; if (itemHelper.canRate(item)) { - var likes = userData.Likes == null ? '' : userData.Likes; + const likes = userData.Likes == null ? '' : userData.Likes; require(['emby-ratingbutton']); html += ''; @@ -1623,7 +1615,7 @@ import 'programStyles'; */ export function getDefaultText(item, options) { if (item.CollectionType) { - return '' + return ''; } switch (item.Type) { @@ -1646,7 +1638,7 @@ import 'programStyles'; return '' + options.defaultCardImageIcon + ''; } - var defaultName = isUsingLiveTvNaming(item) ? item.Name : itemHelper.getDisplayName(item); + const defaultName = isUsingLiveTvNaming(item) ? item.Name : itemHelper.getDisplayName(item); return '
' + defaultName + '
'; } @@ -1670,7 +1662,7 @@ import 'programStyles'; } } - var html = buildCardsHtmlInternal(items, options); + const html = buildCardsHtmlInternal(items, options); if (html) { @@ -1698,9 +1690,9 @@ import 'programStyles'; /** * Ensures the indicators for a card exist and creates them if they don't. - * @param {string} card - HTML Markup of the card. - * @param {string} indicatorsElem - HTML markup of the indicators. - * @returns {string} - HTML markup of the indicators. + * @param {HTMLDivElement} card - HTML Markup of the card. + * @param {HTMLDivElement} indicatorsElem - HTML markup of the indicators. + * @returns {HTMLDivElement} - HTML markup of the indicators. */ function ensureIndicators(card, indicatorsElem) { if (indicatorsElem) { @@ -1711,7 +1703,7 @@ import 'programStyles'; if (!indicatorsElem) { - var cardImageContainer = card.querySelector('.cardImageContainer'); + const cardImageContainer = card.querySelector('.cardImageContainer'); indicatorsElem = document.createElement('div'); indicatorsElem.classList.add('cardIndicators'); cardImageContainer.appendChild(indicatorsElem); @@ -1722,16 +1714,16 @@ import 'programStyles'; /** * Adds user data to the card such as progress indicators, played status, etc. - * @param {string} card - HTML markup of the card. + * @param {HTMLDivElement} card - HTML markup of the card. * @param {Object} userData - User data to apply to the card. */ function updateUserData(card, userData) { - var type = card.getAttribute('data-type'); - var enableCountIndicator = type === 'Series' || type === 'BoxSet' || type === 'Season'; - var indicatorsElem = null; - var playedIndicator = null; - var countIndicator = null; - var itemProgressBar = null; + const type = card.getAttribute('data-type'); + const enableCountIndicator = type === 'Series' || type === 'BoxSet' || type === 'Season'; + let indicatorsElem = null; + let playedIndicator = null; + let countIndicator = null; + let itemProgressBar = null; if (userData.Played) { @@ -1774,7 +1766,7 @@ import 'programStyles'; } } - var progressHtml = indicators.getProgressBarHtml({ + const progressHtml = indicators.getProgressBarHtml({ Type: type, UserData: userData, MediaType: 'Video' @@ -1788,11 +1780,11 @@ import 'programStyles'; itemProgressBar = document.createElement('div'); itemProgressBar.classList.add('itemProgressBar'); - var innerCardFooter = card.querySelector('.innerCardFooter'); + let innerCardFooter = card.querySelector('.innerCardFooter'); if (!innerCardFooter) { innerCardFooter = document.createElement('div'); innerCardFooter.classList.add('innerCardFooter'); - var cardImageContainer = card.querySelector('.cardImageContainer'); + const cardImageContainer = card.querySelector('.cardImageContainer'); cardImageContainer.appendChild(innerCardFooter); } innerCardFooter.appendChild(itemProgressBar); @@ -1814,9 +1806,9 @@ import 'programStyles'; * @param {HTMLElement} scope - DOM Element to use as a scope when selecting cards. */ export function onUserDataChanged(userData, scope) { - var cards = (scope || document.body).querySelectorAll('.card-withuserdata[data-id="' + userData.ItemId + '"]'); + const cards = (scope || document.body).querySelectorAll('.card-withuserdata[data-id="' + userData.ItemId + '"]'); - for (var i = 0, length = cards.length; i < length; i++) { + for (let i = 0, length = cards.length; i < length; i++) { updateUserData(cards[i], userData); } } @@ -1828,13 +1820,13 @@ import 'programStyles'; * @param {HTMLElement} itemsContainer - DOM Element of the items container. */ export function onTimerCreated(programId, newTimerId, itemsContainer) { - var cells = itemsContainer.querySelectorAll('.card[data-id="' + programId + '"]'); + const cells = itemsContainer.querySelectorAll('.card[data-id="' + programId + '"]'); - for (var i = 0, length = cells.length; i < length; i++) { - var cell = cells[i]; - var icon = cell.querySelector('.timerIndicator'); + for (let i = 0, length = cells.length; i < length; i++) { + let cell = cells[i]; + const icon = cell.querySelector('.timerIndicator'); if (!icon) { - var indicatorsElem = ensureIndicators(cell); + const indicatorsElem = ensureIndicators(cell); indicatorsElem.insertAdjacentHTML('beforeend', ''); } cell.setAttribute('data-timerid', newTimerId); @@ -1847,11 +1839,11 @@ import 'programStyles'; * @param {HTMLElement} itemsContainer - DOM Element of the items container. */ export function onTimerCancelled(timerId, itemsContainer) { - var cells = itemsContainer.querySelectorAll('.card[data-timerid="' + timerId + '"]'); + const cells = itemsContainer.querySelectorAll('.card[data-timerid="' + timerId + '"]'); - for (var i = 0, length = cells.length; i < length; i++) { - var cell = cells[i]; - var icon = cell.querySelector('.timerIndicator'); + for (let i = 0; i < cells.length; i++) { + let cell = cells[i]; + let icon = cell.querySelector('.timerIndicator'); if (icon) { icon.parentNode.removeChild(icon); } @@ -1865,11 +1857,11 @@ import 'programStyles'; * @param {HTMLElement} itemsContainer - DOM Element of the items container. */ export function onSeriesTimerCancelled(canceledTimerId, itemsContainer) { - var cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + canceledTimerId + '"]'); + const cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + canceledTimerId + '"]'); - for (var i = 0, length = cells.length; i < length; i++) { - var cell = cells[i]; - var icon = cell.querySelector('.timerIndicator'); + for (let i = 0; i < cells.length; i++) { + let cell = cells[i]; + let icon = cell.querySelector('.timerIndicator'); if (icon) { icon.parentNode.removeChild(icon); } From fb63fc4cce4e4ebcda857bfd7f0a07549210d9da Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 19 Mar 2020 22:38:55 +0100 Subject: [PATCH 47/86] Update yarn.lock --- yarn.lock | 150 +++++++++++++++++++++++++++--------------------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/yarn.lock b/yarn.lock index d260ee6e3f..0ec0ea3155 100644 --- a/yarn.lock +++ b/yarn.lock @@ -730,11 +730,6 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== - "@gulp-sourcemaps/identity-map@1.X": version "1.0.2" resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9" @@ -828,9 +823,9 @@ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= "@types/node@*": - version "13.9.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.1.tgz#96f606f8cd67fb018847d9b61e93997dabdefc72" - integrity sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ== + version "13.9.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349" + integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1924,13 +1919,14 @@ browserslist@^1.1.3: electron-to-chromium "^1.2.7" browserslist@^4.0.0, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.9.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.9.1.tgz#01ffb9ca31a1aef7678128fc6a2253316aa7287c" - integrity sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw== + version "4.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" + integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== dependencies: - caniuse-lite "^1.0.30001030" - electron-to-chromium "^1.3.363" - node-releases "^1.1.50" + caniuse-lite "^1.0.30001035" + electron-to-chromium "^1.3.378" + node-releases "^1.1.52" + pkg-up "^3.1.0" bs-recipes@1.3.4: version "1.3.4" @@ -2169,7 +2165,7 @@ caniuse-db@^1.0.30000639: resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001035.tgz#3a182cab9d556a4a02d945f1f739e81c18e73bfa" integrity sha512-kLUON4XN3tq5Nwl7ZICDw+7/vMynSpRMVYDRkzLL31lgnpa6M2YXYdjst3h+xbzjMgdcveRTnRGE1h/1IcKK6A== -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001030: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001035: version "1.0.30001035" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz#2bb53b8aa4716b2ed08e088d4dc816a5fe089a1e" integrity sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ== @@ -3541,10 +3537,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.363: - version "1.3.376" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz#7cb7b5205564a06c8f8ecfbe832cbd47a1224bb1" - integrity sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw== +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.378: + version "1.3.379" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz#81dc5e82a3e72bbb830d93e15bc35eda2bbc910e" + integrity sha512-NK9DBBYEBb5f9D7zXI0hiE941gq3wkBeQmXs1ingigA/jnTg5mhwY2Z5egwA+ZI8OLGKCx0h1Cl8/xeuIBuLlg== elliptic@^6.0.0: version "6.5.2" @@ -4570,9 +4566,9 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.11" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" - integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== + version "1.2.12" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" + integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== dependencies: bindings "^1.5.0" nan "^2.12.1" @@ -5666,9 +5662,9 @@ imurmurhash@^0.1.4: integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= + version "2.0.1" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" + integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== indent-string@^2.1.0: version "2.1.0" @@ -6360,11 +6356,11 @@ json5@^1.0.1: minimist "^1.2.0" json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" + integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== dependencies: - minimist "^1.2.0" + minimist "^1.2.5" jsonfile@^3.0.0: version "3.0.1" @@ -6509,7 +6505,7 @@ levn@^0.3.0, levn@~0.3.0: "libass-wasm@https://github.com/jellyfin/JavascriptSubtitlesOctopus": version "3.0.2" - resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#7f331237026db75af2441717a4132d2398e96735" + resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#99626d3ee5eb6bd695d7c908c5e6f910213b0e71" liftoff@^3.1.0: version "3.1.0" @@ -7077,9 +7073,9 @@ meow@^5.0.0: yargs-parser "^10.0.0" meow@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-6.0.1.tgz#f9b3f912c9aa039142cebcf74315129f4cd1ce1c" - integrity sha512-kxGTFgT/b7/oSRSQsJ0qsT5IMU+bgZ1eAdSA3kIV7onkW0QWo/hL5RbGlMfvBjHJKPE1LaPX0kdecYFiqYWjUw== + version "6.1.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.0.tgz#4ff4641818d3502afcddc631f94cb6971a581cb3" + integrity sha512-iIAoeI01v6pmSfObAAWFoITAA4GgiT45m4SmJgoxtZfvI0fyZwhV4d0lTwiUXvAKIPlma05Feb2Xngl52Mj5Cg== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.1.1" @@ -7091,7 +7087,7 @@ meow@^6.0.1: redent "^3.0.0" trim-newlines "^3.0.0" type-fest "^0.8.1" - yargs-parser "^16.1.0" + yargs-parser "^18.1.1" merge-descriptors@1.0.1: version "1.0.1" @@ -7218,17 +7214,12 @@ minimist-options@^4.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - minimist@1.1.x: version "1.1.3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -7263,11 +7254,11 @@ mixin-deep@^1.2.0: is-extendable "^1.0.1" "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== dependencies: - minimist "0.0.8" + minimist "^1.2.5" move-concurrently@^1.0.1: version "1.0.1" @@ -7451,7 +7442,27 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +<<<<<<< HEAD node-releases@^1.1.50: +======= +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + +node-releases@^1.1.52: +>>>>>>> Update yarn.lock version "1.1.52" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" integrity sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ== @@ -8249,6 +8260,13 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + plugin-error@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" @@ -8647,9 +8665,9 @@ postcss-modules-local-by-default@^3.0.2: postcss-value-parser "^4.0.0" postcss-modules-scope@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" - integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" @@ -8957,15 +8975,6 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" @@ -9034,15 +9043,6 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss@^5.0.0, postcss@^5.0.18: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -9453,9 +9453,9 @@ regenerator-runtime@^0.13.4: integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== regenerator-transform@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.3.tgz#54aebff2ef58c0ae61e695ad1b9a9d65995fff78" - integrity sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw== + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== dependencies: "@babel/runtime" "^7.8.4" private "^0.1.8" @@ -11073,9 +11073,9 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser@^4.0.0, terser@^4.1.2: - version "4.6.6" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.6.tgz#da2382e6cafbdf86205e82fb9a115bd664d54863" - integrity sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g== + version "4.6.7" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" + integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -12226,10 +12226,10 @@ yargs-parser@^13.1.0: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" - integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== +yargs-parser@^18.1.1: + version "18.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.1.tgz#bf7407b915427fc760fcbbccc6c82b4f0ffcbd37" + integrity sha512-KRHEsOM16IX7XuLnMOqImcPNbLVXMNHYAoFc3BKR8Ortl5gzDbtXvvEoGx9imk5E+X1VeNKNlcHr8B8vi+7ipA== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" From 1cfd2538be53e4134050b04fbcef9d3e28928b94 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 19 Mar 2020 23:01:21 +0100 Subject: [PATCH 48/86] Remove dead code from CardBuilder --- src/components/cardbuilder/cardBuilder.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 24e4035050..3bcc83ce62 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -459,16 +459,6 @@ import 'programStyles'; } } - /*let cardFooterHtml = ''; - for (let i = 0; i < (options.lines || 0); i++) { - - if (i === 0) { - cardFooterHtml += '
 
'; - } else { - cardFooterHtml += '
 
'; - } - }*/ - return html; } From 759b3fc106d7f332530452f14c7e771901c347ae Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 21 Mar 2020 03:30:21 +0900 Subject: [PATCH 49/86] minor string changes --- src/components/cardbuilder/cardBuilder.js | 66 ++++++++++++----------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 3bcc83ce62..3eac8a8b8a 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1,8 +1,10 @@ /* eslint-disable indent */ + /** * Card builder module. * @module cardBuilder */ + import datetime from 'datetime'; import imageLoader from 'imageLoader'; import connectionManager from 'connectionManager'; @@ -23,10 +25,10 @@ import 'programStyles'; const enableFocusTransform = !browser.slow && !browser.edge; /** - * Generate the HTML markup for cards of a set of items. - * @param items - The items to generate cards for. + * Generate the HTML markup for cards for a set of items. + * @param items - The items used to generate cards. * @param options - The options of the cards. - * @returns {string} The HTML markup for cards. + * @returns {string} The HTML markup for the cards. */ export function getCardsHtml(items, options) { if (arguments.length === 1) { @@ -42,7 +44,7 @@ import 'programStyles'; * @param {string} shape - Shape of the cards. * @param {number} screenWidth - Width of the screen. * @param {boolean} isOrientationLandscape - Flag for the orientation of the screen. - * @returns {number} Number of cards per row of an itemsContainer. + * @returns {number} Number of cards per row for an itemsContainer. */ function getPostersPerRow(shape, screenWidth, isOrientationLandscape) { switch (shape) { @@ -250,7 +252,7 @@ import 'programStyles'; /** * Checks if the window is resizable. - * @param {number} windowWidth - Width of the client's screen. + * @param {number} windowWidth - Width of the device's screen. * @returns {boolean} - Result of the check. */ function isResizable(windowWidth) { @@ -279,7 +281,7 @@ import 'programStyles'; } /** - * Normalizes the options of a card. + * Normalizes the options for a card. * @param {Object} items - A set of items. * @param {Object} options - Options for handling the items. */ @@ -463,7 +465,7 @@ import 'programStyles'; } /** - * Computes the Aspect Ratio for a card given its shape. + * Computes the aspect ratio for a card given its shape. * @param {string} shape - Shape for which to get the aspect ratio. * @returns {null|number} Ratio of the shape. */ @@ -489,14 +491,14 @@ import 'programStyles'; /** * @typedef {Object} CardImageUrl * @property {string} imgUrl - URL of the image. - * @property {boolean} forceName - Force the name to be visible. + * @property {boolean} forceName - Flag to force the name to be visible. * @property {boolean} coverImage - Acts as a cover image. */ - /** Get the URL of the Card's image. + /** Get the URL of the card's image. * @param {Object} item - Item for which to generate a card. - * @param {Object} apiClient - API Client object. - * @param {Object} options - Options of the card to generate. + * @param {Object} apiClient - API client object. + * @param {Object} options - Options of the card. * @param {string} shape - Shape of the desired image. * @returns {CardImageUrl} Object representing the URL of the card's image. */ @@ -717,7 +719,7 @@ import 'programStyles'; } /** - * Generates a random integer in a range. + * Generates a random integer in a given range. * @param {number} min - Minimum of the range. * @param {number} max - Maximum of the range. * @returns {number} Randomly generated number. @@ -727,7 +729,7 @@ import 'programStyles'; } /** - * Generates an index used to select the default color of a Card based on a string. + * Generates an index used to select the default color of a card based on a string. * @param {string} str - String to use for generating the index. * @returns {number} Index of the color. */ @@ -758,7 +760,7 @@ import 'programStyles'; * @param {string} cardLayout - DEPRECATED * @param {boolean} addRightMargin - Flag to add a right margin to the text. * @param {number} maxLines - Maximum number of lines to render. - * @returns {string} HTML markup fo the card's text. + * @returns {string} HTML markup for the card's text. */ function getCardTextLines(lines, cssClass, forceLines, isOuterFooter, cardLayout, addRightMargin, maxLines) { let html = ''; @@ -806,9 +808,9 @@ import 'programStyles'; } /** - * Determines if the item is Live TV. - * @param {Object} item - Item to use. - * @returns {boolean} Flag showing if the item is Live TV. + * Determines if the item is live TV. + * @param {Object} item - Item to use for the check. + * @returns {boolean} Flag showing if the item is live TV. */ function isUsingLiveTvNaming(item) { return item.Type === 'Program' || item.Type === 'Timer' || item.Type === 'Recording'; @@ -819,7 +821,7 @@ import 'programStyles'; * @param {object} item - Item used to generate the air time text. * @param {string} showAirDateTime - ISO8601 date for the start of the show. * @param {string} showAirEndTime - ISO8601 date for the end of the show. - * @returns {string} The air time text for the item base on the given dates. + * @returns {string} The air time text for the item based on the given dates. */ function getAirTimeText(item, showAirDateTime, showAirEndTime) { let airTimeText = ''; @@ -850,7 +852,7 @@ import 'programStyles'; /** * Generates the HTML markup for the card's footer text. * @param {Object} item - Item used to generate the footer text. - * @param {Object} apiClient - API Client instance. + * @param {Object} apiClient - API client instance. * @param {Object} options - Options used to generate the footer text. * @param {string} showTitle - Title of the show. * @param {boolean} forceName - Flag to force showing the name of the item. @@ -1264,7 +1266,7 @@ import 'programStyles'; * Builds the HTML markup for an individual card. * @param {number} index - Index of the card * @param {object} item - Item used to generate the card. - * @param {object} apiClient - API Client instance. + * @param {object} apiClient - API client instance. * @param {object} options - Options used to generate the card. * @returns {string} HTML markup for the generated card. */ @@ -1598,7 +1600,7 @@ import 'programStyles'; } /** - * Generates the text or icon used on default card backgrounds. + * Generates the text or icon used for default card backgrounds. * @param {object} item - Item used to generate the card overlay. * @param {object} options - Options used to generate the card overlay. * @returns {string} HTML markup of the card overlay. @@ -1633,7 +1635,7 @@ import 'programStyles'; } /** - * Builds a set of cards and inserts it into the page;. + * Builds a set of cards and inserts it into the page. * @param {Array} items - Array of items used to build cards. * @param {options} options - Options of the cards to build. */ @@ -1679,8 +1681,8 @@ import 'programStyles'; } /** - * Ensures the indicators for a card exist and creates them if they don't. - * @param {HTMLDivElement} card - HTML Markup of the card. + * Ensures the indicators for a card exist and creates them if they don't exist. + * @param {HTMLDivElement} card - HTML markup of the card. * @param {HTMLDivElement} indicatorsElem - HTML markup of the indicators. * @returns {HTMLDivElement} - HTML markup of the indicators. */ @@ -1703,7 +1705,7 @@ import 'programStyles'; } /** - * Adds user data to the card such as progress indicators, played status, etc. + * Adds user data to the card such as progress indicators and played status. * @param {HTMLDivElement} card - HTML markup of the card. * @param {Object} userData - User data to apply to the card. */ @@ -1793,7 +1795,7 @@ import 'programStyles'; /** * Handles when user data has changed. * @param {Object} userData - User data to apply to the card. - * @param {HTMLElement} scope - DOM Element to use as a scope when selecting cards. + * @param {HTMLElement} scope - DOM element to use as a scope when selecting cards. */ export function onUserDataChanged(userData, scope) { const cards = (scope || document.body).querySelectorAll('.card-withuserdata[data-id="' + userData.ItemId + '"]'); @@ -1804,10 +1806,10 @@ import 'programStyles'; } /** - * Handles when a timer was created. + * Handles when a timer has been created. * @param {string} programId - ID of the program. * @param {string} newTimerId - ID of the new timer. - * @param {HTMLElement} itemsContainer - DOM Element of the items container. + * @param {HTMLElement} itemsContainer - DOM element of the itemsContainer. */ export function onTimerCreated(programId, newTimerId, itemsContainer) { const cells = itemsContainer.querySelectorAll('.card[data-id="' + programId + '"]'); @@ -1824,9 +1826,9 @@ import 'programStyles'; } /** - * Handles when a timer is cancelled. + * Handles when a timer has been cancelled. * @param {string} timerId - ID of the cancelled timer. - * @param {HTMLElement} itemsContainer - DOM Element of the items container. + * @param {HTMLElement} itemsContainer - DOM element of the items container. */ export function onTimerCancelled(timerId, itemsContainer) { const cells = itemsContainer.querySelectorAll('.card[data-timerid="' + timerId + '"]'); @@ -1842,9 +1844,9 @@ import 'programStyles'; } /** - * Handles when a series timer is cancelled. + * Handles when a series timer has been cancelled. * @param {string} canceledTimerId - ID of the cancelled timer. - * @param {HTMLElement} itemsContainer - DOM Element of the items container. + * @param {HTMLElement} itemsContainer - DOM element of the items container. */ export function onSeriesTimerCancelled(canceledTimerId, itemsContainer) { const cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + canceledTimerId + '"]'); From feeacf12a2ed7197e5d1f17f70e56dfe64f15305 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 22 Mar 2020 17:12:34 +0100 Subject: [PATCH 50/86] Implement suggestions --- src/components/cardbuilder/cardBuilder.js | 47 ++++++++++------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 3eac8a8b8a..1f87a341c0 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1,8 +1,8 @@ /* eslint-disable indent */ /** - * Card builder module. - * @module cardBuilder + * Module for building cards from item data. + * @module components/cardBuilder/cardBuilder */ import datetime from 'datetime'; @@ -488,19 +488,12 @@ import 'programStyles'; return null; } - /** - * @typedef {Object} CardImageUrl - * @property {string} imgUrl - URL of the image. - * @property {boolean} forceName - Flag to force the name to be visible. - * @property {boolean} coverImage - Acts as a cover image. - */ - - /** Get the URL of the card's image. + /** Get the URL of the Card's image. * @param {Object} item - Item for which to generate a card. * @param {Object} apiClient - API client object. * @param {Object} options - Options of the card. * @param {string} shape - Shape of the desired image. - * @returns {CardImageUrl} Object representing the URL of the card's image. + * @returns {Object} Object representing the URL of the card's image. */ function getCardImageUrl(item, apiClient, options, shape) { item = item.ProgramInfo || item; @@ -854,15 +847,15 @@ import 'programStyles'; * @param {Object} item - Item used to generate the footer text. * @param {Object} apiClient - API client instance. * @param {Object} options - Options used to generate the footer text. - * @param {string} showTitle - Title of the show. + * @param {string} showTitle - Flag to show the title in the footer. * @param {boolean} forceName - Flag to force showing the name of the item. * @param {boolean} overlayText - Flag to show overlay text. - * @param {CardImageUrl} imgUrl - Object representing the card's image URL. - * @param {string} footerClass - CSS class of the footer. - * @param {string} progressHtml - HTML markup of the progress bar. + * @param {Object} imgUrl - Object representing the card's image URL. + * @param {string} footerClass - CSS classes of the footer element. + * @param {string} progressHtml - HTML markup of the progress bar element. * @param {string} logoUrl - URL of the logo for the item. * @param {boolean} isOuterFooter - Flag to mark the text as outer footer. - * @returns {string} HTML markup of the card's footer text. + * @returns {string} HTML markup of the card's footer text element. */ function getCardFooterText(item, apiClient, options, showTitle, forceName, overlayText, imgUrl, footerClass, progressHtml, logoUrl, isOuterFooter) { let html = ''; @@ -1635,8 +1628,8 @@ import 'programStyles'; } /** - * Builds a set of cards and inserts it into the page. - * @param {Array} items - Array of items used to build cards. + * Builds a set of cards and inserts them into the page;. + * @param {Array} items - Array of items used to build the cards. * @param {options} options - Options of the cards to build. */ export function buildCards(items, options) { @@ -1682,9 +1675,9 @@ import 'programStyles'; /** * Ensures the indicators for a card exist and creates them if they don't exist. - * @param {HTMLDivElement} card - HTML markup of the card. - * @param {HTMLDivElement} indicatorsElem - HTML markup of the indicators. - * @returns {HTMLDivElement} - HTML markup of the indicators. + * @param {HTMLDivElement} card - DOM element of the card. + * @param {HTMLDivElement} indicatorsElem - DOM element of the indicators. + * @returns {HTMLDivElement} - DOM element of the indicators. */ function ensureIndicators(card, indicatorsElem) { if (indicatorsElem) { @@ -1706,7 +1699,7 @@ import 'programStyles'; /** * Adds user data to the card such as progress indicators and played status. - * @param {HTMLDivElement} card - HTML markup of the card. + * @param {HTMLDivElement} card - DOM element of the card. * @param {Object} userData - User data to apply to the card. */ function updateUserData(card, userData) { @@ -1828,7 +1821,7 @@ import 'programStyles'; /** * Handles when a timer has been cancelled. * @param {string} timerId - ID of the cancelled timer. - * @param {HTMLElement} itemsContainer - DOM element of the items container. + * @param {HTMLElement} itemsContainer - DOM element of the itemsContainer. */ export function onTimerCancelled(timerId, itemsContainer) { const cells = itemsContainer.querySelectorAll('.card[data-timerid="' + timerId + '"]'); @@ -1845,11 +1838,11 @@ import 'programStyles'; /** * Handles when a series timer has been cancelled. - * @param {string} canceledTimerId - ID of the cancelled timer. - * @param {HTMLElement} itemsContainer - DOM element of the items container. + * @param {string} cancelledTimerId - ID of the cancelled timer. + * @param {HTMLElement} itemsContainer - DOM element of the itemsContainer. */ - export function onSeriesTimerCancelled(canceledTimerId, itemsContainer) { - const cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + canceledTimerId + '"]'); + export function onSeriesTimerCancelled(cancelledTimerId, itemsContainer) { + const cells = itemsContainer.querySelectorAll('.card[data-seriestimerid="' + cancelledTimerId + '"]'); for (let i = 0; i < cells.length; i++) { let cell = cells[i]; From 7bb7270b6137acb009c636c2c93c975e29312ffb Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 22 Mar 2020 18:00:03 +0100 Subject: [PATCH 51/86] Fix rebase issues --- src/components/cardbuilder/cardBuilder.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 1f87a341c0..9d86bc9d7c 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -488,7 +488,7 @@ import 'programStyles'; return null; } - /** Get the URL of the Card's image. + /** Get the URL of the card's image. * @param {Object} item - Item for which to generate a card. * @param {Object} apiClient - API client object. * @param {Object} options - Options of the card. @@ -1628,7 +1628,7 @@ import 'programStyles'; } /** - * Builds a set of cards and inserts them into the page;. + * Builds a set of cards and inserts them into the page. * @param {Array} items - Array of items used to build the cards. * @param {options} options - Options of the cards to build. */ From 032cc9aa85d347f4b8f06b65c5fbd14c6803327e Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 23 Mar 2020 17:11:35 +0100 Subject: [PATCH 52/86] Update yarn.lock --- webpack.common.js | 12 +- yarn.lock | 667 +++++++++++++++++++++++----------------------- 2 files changed, 342 insertions(+), 337 deletions(-) diff --git a/webpack.common.js b/webpack.common.js index 6b357102c0..c87ccdbc0d 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -6,12 +6,12 @@ const CopyPlugin = require("copy-webpack-plugin"); const Assets = [ "alameda/alameda.js", "native-promise-only/npo.js", - "libass-wasm/dist/subtitles-octopus-worker.js", - "libass-wasm/dist/subtitles-octopus-worker.data", - "libass-wasm/dist/subtitles-octopus-worker.wasm", - "libass-wasm/dist/subtitles-octopus-worker-legacy.js", - "libass-wasm/dist/subtitles-octopus-worker-legacy.data", - "libass-wasm/dist/subtitles-octopus-worker-legacy.js.mem" + "libass-wasm/dist/js/subtitles-octopus-worker.js", + "libass-wasm/dist/js/subtitles-octopus-worker.data", + "libass-wasm/dist/js/subtitles-octopus-worker.wasm", + "libass-wasm/dist/js/subtitles-octopus-worker-legacy.js", + "libass-wasm/dist/js/subtitles-octopus-worker-legacy.data", + "libass-wasm/dist/js/subtitles-octopus-worker-legacy.js.mem" ]; module.exports = { diff --git a/yarn.lock b/yarn.lock index 0ec0ea3155..8b7697cef4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,42 +9,43 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.6.tgz#7eeaa0dfa17e50c7d9c0832515eee09b56f04e35" - integrity sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q== +"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c" + integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== dependencies: - browserslist "^4.8.5" + browserslist "^4.9.1" invariant "^2.2.4" semver "^5.5.0" "@babel/core@>=7.2.2", "@babel/core@^7.8.6": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" - integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.7" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.7" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" "@babel/template" "^7.8.6" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.7" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" - json5 "^2.1.0" + json5 "^2.1.2" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.8.6", "@babel/generator@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e" - integrity sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg== +"@babel/generator@^7.9.0": + version "7.9.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.3.tgz#7c8b2956c6f68b3ab732bd16305916fbba521d94" + integrity sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ== dependencies: - "@babel/types" "^7.8.7" + "@babel/types" "^7.9.0" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -64,15 +65,6 @@ "@babel/helper-explode-assignable-expression" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-call-delegate@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz#28a279c2e6c622a6233da548127f980751324cab" - integrity sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ== - dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.7" - "@babel/helper-compilation-targets@^7.8.7": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" @@ -147,17 +139,17 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.8.3": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz#6a13b5eecadc35692047073a64e42977b97654a4" - integrity sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg== +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== dependencies: "@babel/helper-module-imports" "^7.8.3" "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-simple-access" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" "@babel/template" "^7.8.6" - "@babel/types" "^7.8.6" + "@babel/types" "^7.9.0" lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.8.3": @@ -167,7 +159,7 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== @@ -215,6 +207,11 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-validator-identifier@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== + "@babel/helper-wrap-function@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" @@ -225,28 +222,28 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== +"@babel/helpers@^7.9.0": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" + integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== dependencies: "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" "@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: + "@babel/helper-validator-identifier" "^7.9.0" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.8.6", "@babel/parser@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4" - integrity sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA== +"@babel/parser@^7.8.6", "@babel/parser@^7.9.0": + version "7.9.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.3.tgz#043a5fc2ad8b7ea9facddc4e802a1f0f25da7255" + integrity sha512-E6SpIDJZ0cZAKoCNk+qSDd0ChfTnpiJN9FfNf3RZ20dzwA2vL2oq5IX1XTVT+4vDmRlta2nGk5HGMMskJAR+4A== "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" @@ -281,10 +278,18 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.8.3": +"@babel/plugin-proposal-numeric-separator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" + integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + +"@babel/plugin-proposal-object-rest-spread@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" + integrity sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" @@ -297,15 +302,15 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== +"@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" + integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.8.3": +"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== @@ -341,6 +346,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" @@ -400,10 +412,10 @@ "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz#77534447a477cbe5995ae4aee3e39fbc8090c46d" - integrity sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg== +"@babel/plugin-transform-classes@^7.9.0": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d" + integrity sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-define-map" "^7.8.3" @@ -428,7 +440,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-dotall-regex@^7.8.3": +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== @@ -451,10 +463,10 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-for-of@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz#a051bd1b402c61af97a27ff51b468321c7c2a085" - integrity sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw== +"@babel/plugin-transform-for-of@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" + integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -480,41 +492,41 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" - integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== +"@babel/plugin-transform-modules-amd@^7.8.3", "@babel/plugin-transform-modules-amd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" + integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" - integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== +"@babel/plugin-transform-modules-commonjs@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" + integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-simple-access" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" - integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== +"@babel/plugin-transform-modules-systemjs@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" + integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== dependencies: "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" - integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" + integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": @@ -540,11 +552,10 @@ "@babel/helper-replace-supers" "^7.8.3" "@babel/plugin-transform-parameters@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz#0381de466c85d5404565243660c4496459525daf" - integrity sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA== + version "7.9.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a" + integrity sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg== dependencies: - "@babel/helper-call-delegate" "^7.8.7" "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -623,11 +634,11 @@ regenerator-runtime "^0.13.4" "@babel/preset-env@^7.8.6": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.7.tgz#1fc7d89c7f75d2d70c2b6768de6c2e049b3cb9db" - integrity sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw== + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" + integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== dependencies: - "@babel/compat-data" "^7.8.6" + "@babel/compat-data" "^7.9.0" "@babel/helper-compilation-targets" "^7.8.7" "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -635,14 +646,16 @@ "@babel/plugin-proposal-dynamic-import" "^7.8.3" "@babel/plugin-proposal-json-strings" "^7.8.3" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.0" "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" @@ -651,20 +664,20 @@ "@babel/plugin-transform-async-to-generator" "^7.8.3" "@babel/plugin-transform-block-scoped-functions" "^7.8.3" "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.6" + "@babel/plugin-transform-classes" "^7.9.0" "@babel/plugin-transform-computed-properties" "^7.8.3" "@babel/plugin-transform-destructuring" "^7.8.3" "@babel/plugin-transform-dotall-regex" "^7.8.3" "@babel/plugin-transform-duplicate-keys" "^7.8.3" "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.6" + "@babel/plugin-transform-for-of" "^7.9.0" "@babel/plugin-transform-function-name" "^7.8.3" "@babel/plugin-transform-literals" "^7.8.3" "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.0" + "@babel/plugin-transform-modules-commonjs" "^7.9.0" + "@babel/plugin-transform-modules-systemjs" "^7.9.0" + "@babel/plugin-transform-modules-umd" "^7.9.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" "@babel/plugin-transform-new-target" "^7.8.3" "@babel/plugin-transform-object-super" "^7.8.3" @@ -678,17 +691,29 @@ "@babel/plugin-transform-template-literals" "^7.8.3" "@babel/plugin-transform-typeof-symbol" "^7.8.4" "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.7" - browserslist "^4.8.5" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.0" + browserslist "^4.9.1" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" semver "^5.5.0" +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" - integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" + integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== dependencies: regenerator-runtime "^0.13.4" @@ -701,27 +726,27 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" - integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== +"@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" + integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.6" + "@babel/generator" "^7.9.0" "@babel/helper-function-name" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" + "@babel/parser" "^7.9.0" + "@babel/types" "^7.9.0" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" - integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== +"@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" + integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== dependencies: - esutils "^2.0.2" + "@babel/helper-validator-identifier" "^7.9.0" lodash "^4.17.13" to-fast-properties "^2.0.0" @@ -823,9 +848,9 @@ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= "@types/node@*": - version "13.9.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349" - integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg== + version "13.9.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.3.tgz#6356df2647de9eac569f9a52eda3480fa9e70b4d" + integrity sha512-01s+ac4qerwd6RHD+mVbOEsraDHSgUaefQlEdBbUolnQFjKwCr7luvAlEwW1RFojh67u0z4OUTjPn9LEl4zIkA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -881,18 +906,18 @@ "@types/vfile-message" "*" "@types/webpack-sources@*": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.6.tgz#3d21dfc2ec0ad0c77758e79362426a9ba7d7cbcb" - integrity sha512-FtAWR7wR5ocJ9+nP137DV81tveD/ZgB1sadnJ/axUGM3BUVfRPx8oQNMtv3JNfTeHx3VP7cXiyfR/jmtEsVHsQ== + version "0.1.7" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" + integrity sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.6.1" "@types/webpack@^4.4.31": - version "4.41.7" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.7.tgz#22be27dbd4362b01c3954ca9b021dbc9328d9511" - integrity sha512-OQG9viYwO0V1NaNV7d0n79V+n6mjOV30CwgFPIfTzwmk8DHbt+C4f2aBGdCYbo3yFyYD6sjXfqqOjwkl1j+ulA== + version "4.41.8" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.8.tgz#d2244f5f612ee30230a5c8c4ae678bce90d27277" + integrity sha512-mh4litLHTlDG84TGCFv1pZldndI34vkrW9Mks++Zx4KET7DRMoCXUvLbTISiuF4++fMgNnhV9cc1nCXJQyBYbQ== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -901,150 +926,149 @@ "@types/webpack-sources" "*" source-map "^0.6.0" -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" + "@webassemblyjs/ast" "1.9.0" -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -1495,17 +1519,17 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.0.0, autoprefixer@^9.6.1, autoprefixer@^9.7.4: - version "9.7.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" - integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== + version "9.7.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376" + integrity sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg== dependencies: - browserslist "^4.8.3" - caniuse-lite "^1.0.30001020" + browserslist "^4.11.0" + caniuse-lite "^1.0.30001036" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.26" - postcss-value-parser "^4.0.2" + postcss "^7.0.27" + postcss-value-parser "^4.0.3" aws-sign2@~0.7.0: version "0.7.0" @@ -1526,14 +1550,15 @@ axios@0.19.0: is-buffer "^2.0.2" babel-loader@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" pify "^4.0.1" + schema-utils "^2.6.5" babel-plugin-dynamic-import-node@^2.3.0: version "2.3.0" @@ -1918,13 +1943,13 @@ browserslist@^1.1.3: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^4.0.0, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.10.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" - integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== +browserslist@^4.0.0, browserslist@^4.11.0, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.9.1: + version "4.11.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.0.tgz#aef4357b10a8abda00f97aac7cd587b2082ba1ad" + integrity sha512-WqEC7Yr5wUH5sg6ruR++v2SGOQYpyUdYYd4tZoAq1F7y+QXoLoYGXVbxhtaIqWmAJjtNTRjVD3HuJc1OXTel2A== dependencies: caniuse-lite "^1.0.30001035" - electron-to-chromium "^1.3.378" + electron-to-chromium "^1.3.380" node-releases "^1.1.52" pkg-up "^3.1.0" @@ -2014,9 +2039,9 @@ bytes@3.1.0: integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cacache@^12.0.2, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -2161,14 +2186,14 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000639: - version "1.0.30001035" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001035.tgz#3a182cab9d556a4a02d945f1f739e81c18e73bfa" - integrity sha512-kLUON4XN3tq5Nwl7ZICDw+7/vMynSpRMVYDRkzLL31lgnpa6M2YXYdjst3h+xbzjMgdcveRTnRGE1h/1IcKK6A== + version "1.0.30001036" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001036.tgz#8761fb6cd423ef2d3f8d96a21d898932252dc477" + integrity sha512-plRkihXQyiDaFUXC7x/jAIXXTKiiaWvfAagsruh/vmstnRQ+a2a95HyENxiTr5WrkPSvmFUIvsRUalVFyeh2/w== -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001035: - version "1.0.30001035" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz#2bb53b8aa4716b2ed08e088d4dc816a5fe089a1e" - integrity sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001036: + version "1.0.30001036" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001036.tgz#930ea5272010d8bf190d859159d757c0b398caf0" + integrity sha512-jU8CIFIj2oR7r4W+5AKcsvWNVIb6Q6OZE3UsrXrZBHFtreT4YgTeOJtTucp+zSedEpTi3L5wASSP0LYIE3if6w== caseless@~0.12.0: version "0.12.0" @@ -3537,10 +3562,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.378: - version "1.3.379" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz#81dc5e82a3e72bbb830d93e15bc35eda2bbc910e" - integrity sha512-NK9DBBYEBb5f9D7zXI0hiE941gq3wkBeQmXs1ingigA/jnTg5mhwY2Z5egwA+ZI8OLGKCx0h1Cl8/xeuIBuLlg== +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.380: + version "1.3.382" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.382.tgz#cad02da655c33f7a3d6ca7525bd35c17e90f3a8f" + integrity sha512-gJfxOcgnBlXhfnUUObsq3n3ReU8CT6S8je97HndYRkKsNZMJJ38zO/pI5aqO7L3Myfq+E3pqPyKK/ynyLEQfBA== elliptic@^6.0.0: version "6.5.2" @@ -3703,9 +3728,9 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: - version "1.17.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" @@ -3870,11 +3895,11 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" - integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" + integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== dependencies: - estraverse "^4.0.0" + estraverse "^5.0.0" esrecurse@^4.1.0: version "4.2.1" @@ -3883,11 +3908,16 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" + integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4346,7 +4376,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -4714,9 +4744,9 @@ glob-parent@^3.1.0: path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" @@ -6355,7 +6385,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0: +json5@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== @@ -6504,8 +6534,8 @@ levn@^0.3.0, levn@~0.3.0: type-check "~0.3.2" "libass-wasm@https://github.com/jellyfin/JavascriptSubtitlesOctopus": - version "3.0.2" - resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#99626d3ee5eb6bd695d7c908c5e6f910213b0e71" + version "4.0.0" + resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#1d12af0b04fb2337570b57d706dd97db2f904b9d" liftoff@^3.1.0: version "3.1.0" @@ -6581,7 +6611,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -6907,11 +6937,6 @@ make-iterator@^1.0.0: dependencies: kind-of "^6.0.2" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -7253,10 +7278,10 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" - integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: + version "0.5.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== dependencies: minimist "^1.2.5" @@ -7442,27 +7467,7 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -<<<<<<< HEAD -node-releases@^1.1.50: -======= -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.52: ->>>>>>> Update yarn.lock version "1.1.52" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" integrity sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ== @@ -8222,9 +8227,9 @@ performance-now@^2.1.0: integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" - integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" @@ -9898,7 +9903,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.4: +schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.4, schema-utils@^2.6.5: version "2.6.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a" integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== @@ -12001,14 +12006,14 @@ webpack-stream@^5.2.1: webpack "^4.26.1" webpack@^4.26.1, webpack@^4.41.5: - version "4.42.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" - integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== + version "4.42.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef" + integrity sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" acorn "^6.2.1" ajv "^6.10.2" ajv-keywords "^3.4.1" @@ -12020,7 +12025,7 @@ webpack@^4.26.1, webpack@^4.41.5: loader-utils "^1.2.3" memory-fs "^0.4.1" micromatch "^3.1.10" - mkdirp "^0.5.1" + mkdirp "^0.5.3" neo-async "^2.6.1" node-libs-browser "^2.2.1" schema-utils "^1.0.0" @@ -12197,9 +12202,9 @@ yallist@^3.0.2: integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^1.7.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.2.tgz#a29c03f578faafd57dcb27055f9a5d569cb0c3d9" - integrity sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg== + version "1.8.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.3.tgz#2f420fca58b68ce3a332d0ca64be1d191dd3f87a" + integrity sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw== dependencies: "@babel/runtime" "^7.8.7" From 82aa8a3f28383ce7286d9fa66b7d2293e1835cc4 Mon Sep 17 00:00:00 2001 From: lldsolitude Date: Tue, 24 Mar 2020 08:42:04 +0000 Subject: [PATCH 53/86] Translated using Weblate (Chinese (Simplified)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index b0c9a59694..ec6591fe25 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1474,5 +1474,8 @@ "AskAdminToCreateLibrary": "请联系管理员以创建一个新的资料库。", "PlaybackErrorNoCompatibleStream": "客户端配置文件存在问题,服务器未发送兼容的媒体格式。", "AllowFfmpegThrottlingHelp": "当转码或再封装的进度大幅超过当前播放位置时,暂停该进程,以使其消耗更少的资源。在观看时不经常调整播放进度的情况下,这将非常有用。如果遇到播放问题,请关闭此功能。", - "AllowFfmpegThrottling": "限制转码速度" + "AllowFfmpegThrottling": "限制转码速度", + "PreferEmbeddedEpisodeInfosOverFileNames": "优先使用内置的剧集信息而不是文件名", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "这将在内置元数据含剧集信息时使用内置信息。", + "ClientSettings": "客户端设置" } From dba5fd9ac92798ab389d7fd7a6ad6400f3e24616 Mon Sep 17 00:00:00 2001 From: Casper Talvio Date: Tue, 24 Mar 2020 12:56:20 +0000 Subject: [PATCH 54/86] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 11d497fd19..b3515ae4a8 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -257,7 +257,7 @@ "DownloadsValue": "{0} latausta", "DrmChannelsNotImported": "Kanavia joissa on tekijänoikeusesto-ohjelmia, ei ladata.", "DropShadow": "Tiputa varjo", - "EasyPasswordHelp": "Sinun helppoa PIN-koodia käytetään offline-käytössä tuetuissa Jellyfin-sovelluksissa, ja voidaan myös nopeuttaa verkkoon kirjautumista.", + "EasyPasswordHelp": "Sinun helppoa PIN-koodia käytetään offline-käytössä tuetuissa Jellyfin-sovelluksissa, ja voi myös nopeuttaa lan yhteyden kautta kirjautumista.", "Edit": "Muokkaa", "EditImages": "Muokkaa kuvia", "EditMetadata": "Muokkaa metadataa", @@ -310,5 +310,10 @@ "Depressed": "Painettu", "CopyStreamURLError": "Verkko-osoitteen kopioinnissa tapahtui virhe.", "ButtonSplit": "jaa", - "AskAdminToCreateLibrary": "Pyydä järjestelmän ylläpitäjää luomaan kirjasto." + "AskAdminToCreateLibrary": "Pyydä järjestelmän ylläpitäjää luomaan kirjasto.", + "EnableStreamLooping": "Auto-toista suoralähetykset", + "EnableNextVideoInfoOverlayHelp": "Videon lopussa, näytä soittolistassa seuraavaksi toistettavan videon tiedot.", + "ClientSettings": "Pääte-asetukset", + "AllowFfmpegThrottlingHelp": "Kun uudelleenkoodaus tai remux ehtii tarpeeksi toiston edelle, keskeytä laskenta jotta laskentaresursseja kuluu vähemmän. Tämä on hyödyllistä jos katselet hyppimättä eri kohtiin. Älä käytä jos toiston kanssa ilmenee ongelmia.", + "AllowFfmpegThrottling": "Rajoita uudelleenkoodaus" } From 02ce5f6d6c581fe95526c29b848e1785d2c6e27f Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Tue, 24 Mar 2020 15:00:17 +0000 Subject: [PATCH 55/86] Translated using Weblate (Chinese (Simplified)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index ec6591fe25..f752606b33 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1348,7 +1348,7 @@ "HeaderFavoriteArtists": "最爱的艺术家", "HeaderKeepRecording": "继续录制", "HeaderKeepSeries": "保持系列", - "HeaderMusicQuality": "音质", + "HeaderMusicQuality": "音频质量", "HeaderNextEpisodePlayingInValue": "下一集在 {0} 后播放", "HeaderNextVideoPlayingInValue": "下一部影片在 {0} 后播放", "HeaderPlayOn": "播放在", From 9115a4e1fa626407dc0fbb5a10574e7f6cd0af8c Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 22 Mar 2020 19:33:10 +0100 Subject: [PATCH 56/86] Clean up the settings menu on mobile --- src/assets/css/librarybrowser.css | 6 +++++- src/controllers/user/menu.js | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 0bf65d83a7..13265e40d1 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -21,7 +21,7 @@ } .libraryPage { - padding-top: 7em !important; + padding-top: 7em; } .itemDetailPage { @@ -1119,3 +1119,7 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { .itemsViewSettingsContainer > .button-flat { margin: 0; } + +.layout-mobile #myPreferencesMenuPage { + padding-top: 3.75em; +} diff --git a/src/controllers/user/menu.js b/src/controllers/user/menu.js index b1e2b7b519..e7d816fb6f 100644 --- a/src/controllers/user/menu.js +++ b/src/controllers/user/menu.js @@ -1,4 +1,4 @@ -define(["apphost", "connectionManager", "listViewStyle", "emby-button"], function(appHost, connectionManager) { +define(["apphost", "connectionManager", "layoutManager", "listViewStyle", "emby-button"], function(appHost, connectionManager, layoutManager) { "use strict"; return function(view, params) { @@ -43,6 +43,12 @@ define(["apphost", "connectionManager", "listViewStyle", "emby-button"], functio page.querySelector(".adminSection").classList.add("hide"); } + if (layoutManager.mobile) { + page.querySelector(".headerUsername").classList.add("hide"); + page.querySelector(".adminSection").classList.add("hide"); + page.querySelector(".userSection").classList.add("hide"); + } + ApiClient.getUser(userId).then(function(user) { page.querySelector(".headerUsername").innerHTML = user.Name; if (!user.Policy.IsAdministrator) { From 3b9ca3c1a398e5a0dffc8c6763e4c27b817cc13d Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 22 Mar 2020 21:09:10 +0100 Subject: [PATCH 57/86] Add Settings entry to the navigation drawer --- src/scripts/librarymenu.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js index 5e6562ee42..11c89b01da 100644 --- a/src/scripts/librarymenu.js +++ b/src/scripts/librarymenu.js @@ -243,15 +243,20 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " html += 'wifi' + globalize.translate("ButtonSelectServer") + ""; } + html += '' + globalize.translate("ButtonSettings") + ""; html += '' + globalize.translate("ButtonSignOut") + ""; html += "
"; } // add buttons to navigation drawer navDrawerScrollContainer.innerHTML = html; - // bind logout button click to method - var btnLogout = navDrawerScrollContainer.querySelector(".btnLogout"); + var btnSettings = navDrawerScrollContainer.querySelector(".btnSettings"); + if (btnSettings) { + btnSettings.addEventListener("click", onSettingsClick); + } + + var btnLogout = navDrawerScrollContainer.querySelector(".btnLogout"); if (btnLogout) { btnLogout.addEventListener("click", onLogoutClick); } @@ -598,6 +603,10 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " } } + function onSettingsClick() { + Dashboard.navigate("mypreferencesmenu.html"); + } + function onLogoutClick() { Dashboard.logout(); } From cccbf24f099464dfc654a0f323f57b7cbec54274 Mon Sep 17 00:00:00 2001 From: Mathis Date: Tue, 24 Mar 2020 21:48:49 +0000 Subject: [PATCH 58/86] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 60fd625ea3..5a449d8e55 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1,5 +1,5 @@ { - "Absolute": "Gesamt", + "Absolute": "Absolut", "AccessRestrictedTryAgainLater": "Der Zugriff ist derzeit eingeschränkt. Bitte versuche es später erneut.", "Actor": "Darsteller(in)", "Add": "Hinzufügen", @@ -1493,5 +1493,6 @@ "NoCreatedLibraries": "Sieht so aus als hättest du bis jetzt keine Bibliothek erstellt. {0}Möchtest du jetzt eine Bibliothek erstellen?{1}", "AllowFfmpegThrottling": "Transkodierung drosseln", "PlaybackErrorNoCompatibleStream": "Es gab ein Problem bei der Erkennung des Wiedergabeprofils des Clients und der Server sendet kein kompatibles Format.", - "AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden." + "AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden.", + "ClientSettings": "Client Einstellungen" } From 2fec0e40823bdbf6c4d064b359baa7dcd0bd7795 Mon Sep 17 00:00:00 2001 From: Mathis Date: Tue, 24 Mar 2020 21:49:55 +0000 Subject: [PATCH 59/86] Translated using Weblate (German (Swiss)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gsw/ --- src/strings/gsw.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/gsw.json b/src/strings/gsw.json index 7d0162e852..a154e4fc8e 100644 --- a/src/strings/gsw.json +++ b/src/strings/gsw.json @@ -164,5 +164,8 @@ "Songs": "Lieder", "Sync": "Synchronisation", "ValueSpecialEpisodeName": "Extra - {0}", - "VersionNumber": "Version {0}" + "VersionNumber": "Version {0}", + "Absolute": "Absolut", + "Actor": "Schauspiler", + "AccessRestrictedTryAgainLater": "Zuegriff isch momentan beschränkt. Probier bitte später nomau. " } From 580bf9fd23a136de3038ac509c35f3772764e8cf Mon Sep 17 00:00:00 2001 From: Ken Ying-Kai Liao Date: Wed, 25 Mar 2020 06:37:34 +0000 Subject: [PATCH 60/86] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 756a759068..626583fa0b 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -328,7 +328,7 @@ "Art": "圖像", "Artists": "演出者", "AsManyAsPossible": "越多越好", - "Ascending": "由少到多", + "Ascending": "遞增", "AspectRatio": "長寬比", "AttributeNew": "新增", "Audio": "音訊", @@ -552,7 +552,7 @@ "EncoderPresetHelp": "速度越慢則會得到更好的壓縮編碼效率。", "HDPrograms": "HD節目", "HandledByProxy": "由反向代理處理", - "HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和影片驅動程式是最新的。如果你在開啟此項後播放影片產生困難,那麼你需要將此選項設回”自動“。", + "HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和影片驅動程式是最新的。如果你在開啟此項後播放影片產生困難,那麼你需要將此選項設回”無“。", "HeaderAccessSchedule": "存取時程", "HeaderAccessScheduleHelp": "建立一個存取時程以限制可存取的時段。", "HeaderActiveDevices": "運行中裝置", @@ -1493,7 +1493,7 @@ "RecordingPathChangeMessage": "更改錄製資料夾不會將現有錄製從舊位置遷移到新的,您需要手動移動它們。", "RestartPleaseWaitMessage": "Jellyfin 伺服器將重新啟動,這將花費幾分鐘時間。", "LabelEmbedAlbumArtDidl": "於 Didl 中嵌入專輯封面", - "LabelEnableAutomaticPortMapHelp": "自動嘗試映射公共連接埠到 UPnP 本地連接埠。這可能無法用於某些路由器。", + "LabelEnableAutomaticPortMapHelp": "自動嘗試映射公共連接埠到 UPnP 本地連接埠。這可能無法用於某些路由器。需重新啓動伺服器。", "LabelEmbedAlbumArtDidlHelp": "有些裝置使用這個方式來取得專輯封面,啟用這個選項可能導致其他設備播放失敗。", "SettingsWarning": "更改這些值可能會導致不穩定或連線故障。如果您遇到任何問題,建議將它們重新更改為預設值。", "LabelEnableSingleImageInDidlLimitHelp": "若在 Didl 中嵌入多個圖片,某些裝置可能無法正常顯示。", @@ -1641,5 +1641,10 @@ "LabelPlayerDimensions": "播放器尺寸:", "LabelDroppedFrames": "丟棄的幀:", "LabelCorruptedFrames": "損壞的幀:", - "ButtonSplit": "拆分" + "ButtonSplit": "分割", + "AskAdminToCreateLibrary": "如要建立資料庫,請求管理員", + "NoCreatedLibraries": "看來您還未創任何媒體庫。{0}立刻創一個新的嗎?{1}", + "ClientSettings": "用戶設定", + "AllowFfmpegThrottlingHelp": "當轉檔或重組進度大量超前目前播放進度時,將暫停轉檔節省消耗的資源。在不常跳播的時候最有效。如果遇到播放問題,請關閉此功能。", + "AllowFfmpegThrottling": "限制轉檔" } From 3ed9be897e727d983d82c9b89976c90dcf99bd54 Mon Sep 17 00:00:00 2001 From: Ken Ying-Kai Liao Date: Wed, 25 Mar 2020 06:53:03 +0000 Subject: [PATCH 61/86] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 626583fa0b..d527b5a5bf 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -1637,7 +1637,7 @@ "LabelVideoResolution": "視頻解析度:", "LabelStreamType": "串流類型:", "EnableFastImageFadeInHelp": "為已加載的圖片啓用更快的淡入動畫", - "EnableFastImageFadeIn": "快速圖片淡入", + "EnableFastImageFadeIn": "圖片快速淡入效果", "LabelPlayerDimensions": "播放器尺寸:", "LabelDroppedFrames": "丟棄的幀:", "LabelCorruptedFrames": "損壞的幀:", From ca0914819a74d64c39d01dea8208b44a1ee270b6 Mon Sep 17 00:00:00 2001 From: The Iiseppi Date: Wed, 25 Mar 2020 08:32:09 +0000 Subject: [PATCH 62/86] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index b3515ae4a8..b61724e2fe 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -315,5 +315,10 @@ "EnableNextVideoInfoOverlayHelp": "Videon lopussa, näytä soittolistassa seuraavaksi toistettavan videon tiedot.", "ClientSettings": "Pääte-asetukset", "AllowFfmpegThrottlingHelp": "Kun uudelleenkoodaus tai remux ehtii tarpeeksi toiston edelle, keskeytä laskenta jotta laskentaresursseja kuluu vähemmän. Tämä on hyödyllistä jos katselet hyppimättä eri kohtiin. Älä käytä jos toiston kanssa ilmenee ongelmia.", - "AllowFfmpegThrottling": "Rajoita uudelleenkoodaus" + "AllowFfmpegThrottling": "Rajoita uudelleenkoodaus", + "ErrorDeletingItem": "Tiedostoa poistaessa Jellyfin Palvelimelta ilmeni virhe. Varmista, että Jellyfin Palvelimella on kirjoitusoikeudet mediakansioon ja kokeile uudestaan.", + "ErrorAddingXmlTvFile": "XMLTV-tiedostoa käyttäessä tapahtui virhe. Varmista, että tiedosto on olemassa ja kokeile uudestaan.", + "ErrorAddingTunerDevice": "Viritintä lisätessä ilmeni ongelma. Varmista, että se on kytketty oikein ja kokeile uudestaan.", + "EnableThemeVideosHelp": "Soita tunnusvideoita taustalla, selatessasi kirjastoa.", + "EnableThemeVideos": "Teeman videot" } From 308000bc97913d53ba6e7ef87d8d25f2c0200b46 Mon Sep 17 00:00:00 2001 From: Ric Li Date: Wed, 25 Mar 2020 08:28:53 +0000 Subject: [PATCH 63/86] Translated using Weblate (Chinese (Simplified)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index f752606b33..a37f839039 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -705,7 +705,7 @@ "LabelPublicHttpPortHelp": "映射到本地 HTTP 端口的公开端口号。", "LabelPublicHttpsPort": "公开 HTTPS 端口号:", "LabelPublicHttpsPortHelp": "映射到本地 HTTPS 端口的公开端口号。", - "LabelReadHowYouCanContribute": "学习如何构建。", + "LabelReadHowYouCanContribute": "了解如何做出贡献。", "LabelReasonForTranscoding": "转码原因:", "LabelRecord": "录制:", "LabelRecordingPath": "默认录制路径:", From 1c54bdee51d52ba3f358e66e5ff82522d2765c7a Mon Sep 17 00:00:00 2001 From: Ken Ying-Kai Liao Date: Wed, 25 Mar 2020 06:53:18 +0000 Subject: [PATCH 64/86] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index d527b5a5bf..ffc0228af2 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -1636,15 +1636,18 @@ "LaunchWebAppOnStartupHelp": "伺服器啓動時在默認游覽器中打開網頁端。使用重啓伺服器功能時此項不生效。", "LabelVideoResolution": "視頻解析度:", "LabelStreamType": "串流類型:", - "EnableFastImageFadeInHelp": "為已加載的圖片啓用更快的淡入動畫", + "EnableFastImageFadeInHelp": "對已載入的圖片啟用更快的淡入動畫", "EnableFastImageFadeIn": "圖片快速淡入效果", "LabelPlayerDimensions": "播放器尺寸:", "LabelDroppedFrames": "丟棄的幀:", "LabelCorruptedFrames": "損壞的幀:", "ButtonSplit": "分割", - "AskAdminToCreateLibrary": "如要建立資料庫,請求管理員", + "AskAdminToCreateLibrary": "如要建立資料庫,請求管理員。", "NoCreatedLibraries": "看來您還未創任何媒體庫。{0}立刻創一個新的嗎?{1}", "ClientSettings": "用戶設定", "AllowFfmpegThrottlingHelp": "當轉檔或重組進度大量超前目前播放進度時,將暫停轉檔節省消耗的資源。在不常跳播的時候最有效。如果遇到播放問題,請關閉此功能。", - "AllowFfmpegThrottling": "限制轉檔" + "AllowFfmpegThrottling": "限制轉檔", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "這將會使用內建劇集資料。", + "PlaybackErrorNoCompatibleStream": "用戶端偵測出了問題,伺服器也未傳送相容的媒體格式。", + "PreferEmbeddedEpisodeInfosOverFileNames": "優先使用內建劇集資訊而不是檔案名稱" } From d7c32dcde924d9a3afb3790103f401be3b25ad73 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 12 Mar 2020 12:34:50 +0300 Subject: [PATCH 65/86] Fix radiobutton focus marker --- src/elements/emby-radio/emby-radio.css | 105 ++++++++++++++----------- src/elements/emby-radio/emby-radio.js | 20 ++++- src/themes/purplehaze/theme.css | 9 +++ 3 files changed, 87 insertions(+), 47 deletions(-) diff --git a/src/elements/emby-radio/emby-radio.css b/src/elements/emby-radio/emby-radio.css index 6db3c39e4d..34af657b9c 100644 --- a/src/elements/emby-radio/emby-radio.css +++ b/src/elements/emby-radio/emby-radio.css @@ -4,7 +4,6 @@ display: inline-block; box-sizing: border-box; margin: 0; - padding-left: 24px; } .radio-label-block { @@ -31,67 +30,81 @@ border: none; } -.mdl-radio__outer-circle { - position: absolute; - top: 4px; - left: 0; - display: inline-block; - box-sizing: border-box; - width: 16px; - height: 16px; - margin: 0; - cursor: pointer; - border: 2px solid currentcolor; +.mdl-radio__circles { + position: relative; + margin-right: 0.54em; + width: 1.08em; + height: 1.08em; border-radius: 50%; - z-index: 2; + cursor: pointer; } -.mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle { - border: 2px solid #00a4dc; +.mdl-radio__circles svg { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 1; } -.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle { - border: 2px solid rgba(0, 0, 0, 0.26); +.mdl-radio__button:disabled + .mdl-radio__circles { cursor: auto; } +.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__outer-circle { + color: #00a4dc; +} + +.mdl-radio__button:disabled + .mdl-radio__circles .mdl-radio__outer-circle { + color: rgba(0, 0, 0, 0.26); +} + .mdl-radio__inner-circle { - position: absolute; - z-index: 1; - margin: 0; - top: 8px; - left: 4px; - box-sizing: border-box; - width: 8px; - height: 8px; - cursor: pointer; - transition-duration: 0.28s; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 0.2s; transition-property: -webkit-transform; transition-property: transform; transition-property: transform, -webkit-transform; - -webkit-transform: scale3d(0, 0, 0); - transform: scale3d(0, 0, 0); + -webkit-transform: scale(0); + transform: scale(0); + transform-origin: 50% 50%; +} + +.mdl-radio__button:checked + .mdl-radio__circles .mdl-radio__inner-circle { + -webkit-transform: scale(1); + transform: scale(1); +} + +.mdl-radio__button:disabled + .mdl-radio__circles .mdl-radio__inner-circle { + color: rgba(0, 0, 0, 0.26); +} + +.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__inner-circle { + color: #00a4dc; +} + +.mdl-radio__focus-circle { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 100%; + height: 100%; + margin: 0; border-radius: 50%; background: #00a4dc; + opacity: 0.26; + transition-duration: 0.2s; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + -webkit-transform: scale(0); + transform: scale(0); } -.mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); -} - -.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { - background: rgba(0, 0, 0, 0.26); - cursor: auto; -} - -.mdl-radio__button:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { - box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.76); -} - -.mdl-radio__button:checked:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { - box-shadow: 0 0 0 10px rgba(0, 164, 220, 0.26); +.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle { + -webkit-transform: scale(1.75); + transform: scale(1.75); } .mdl-radio__label { diff --git a/src/elements/emby-radio/emby-radio.js b/src/elements/emby-radio/emby-radio.js index 000c656822..86c08678e1 100644 --- a/src/elements/emby-radio/emby-radio.js +++ b/src/elements/emby-radio/emby-radio.js @@ -43,7 +43,25 @@ define(['css!./emby-radio', 'registerElement'], function () { labelTextElement.classList.add('radioButtonLabel'); labelTextElement.classList.add('mdl-radio__label'); - labelElement.insertAdjacentHTML('beforeend', ''); + var html = ''; + + html += '
'; + + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + + html += '
'; + + html += '
'; + + this.insertAdjacentHTML('afterend', html); this.addEventListener('keydown', onKeyDown); }; diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index 9c13841422..a31b5a924f 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -438,6 +438,15 @@ a[data-role=button] { color: #f8f8fe; } +.mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__outer-circle, +.mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__inner-circle { + color: #ff77f1; +} + +.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle { + background: #00a4dc; +} + .emby-tab-button { color: #999; } From a41bd6de56a09baaa27fec396ed5b3a546af11af Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 12 Mar 2020 12:35:13 +0300 Subject: [PATCH 66/86] Fix checkbox border on TV --- src/elements/emby-checkbox/emby-checkbox.css | 2 +- src/themes/purplehaze/theme.css | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/elements/emby-checkbox/emby-checkbox.css b/src/elements/emby-checkbox/emby-checkbox.css index 42a9207560..b33a216140 100644 --- a/src/elements/emby-checkbox/emby-checkbox.css +++ b/src/elements/emby-checkbox/emby-checkbox.css @@ -55,7 +55,7 @@ height: 1.83em; margin: 0; overflow: hidden; - border: 2px solid currentcolor; + border: 0.14em solid currentcolor; border-radius: 0.14em; z-index: 2; display: flex; diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index a31b5a924f..d65071afa4 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -382,7 +382,7 @@ a[data-role=button] { .emby-checkbox:checked + span + .checkboxOutline { background-color: #030322; - border: 2px solid rgb(72, 195, 200); + border: 0.14em solid rgb(72, 195, 200); } .emby-checkbox:checked + span + .checkboxOutline > .checkboxIcon-checked { @@ -394,7 +394,7 @@ a[data-role=button] { } .emby-checkbox:focus:not(:checked) + span + .checkboxOutline { - border: 2px solid #ff77f1; + border: 0.14em solid #ff77f1; } .itemProgressBarForeground { From 17d1dc355940ae0069782cba5d9cc539119ed38c Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 12 Mar 2020 18:49:38 +0300 Subject: [PATCH 67/86] Fix tiny cropping in Firefox --- src/elements/emby-radio/emby-radio.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/elements/emby-radio/emby-radio.css b/src/elements/emby-radio/emby-radio.css index 34af657b9c..0b17a82ed4 100644 --- a/src/elements/emby-radio/emby-radio.css +++ b/src/elements/emby-radio/emby-radio.css @@ -46,6 +46,7 @@ top: 0; left: 0; z-index: 1; + overflow: visible; } .mdl-radio__button:disabled + .mdl-radio__circles { From a2ccaa29c3b6b4115d573fe086551ca9587cf7fc Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 12 Mar 2020 20:45:27 +0300 Subject: [PATCH 68/86] Turn off radiobutton focus on Mobile --- src/elements/emby-radio/emby-radio.css | 6 +++--- src/elements/emby-radio/emby-radio.js | 10 ++++++++-- src/themes/purplehaze/theme.css | 6 +++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/elements/emby-radio/emby-radio.css b/src/elements/emby-radio/emby-radio.css index 0b17a82ed4..f8671ce265 100644 --- a/src/elements/emby-radio/emby-radio.css +++ b/src/elements/emby-radio/emby-radio.css @@ -53,7 +53,7 @@ cursor: auto; } -.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__outer-circle { +.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__outer-circle { color: #00a4dc; } @@ -80,7 +80,7 @@ color: rgba(0, 0, 0, 0.26); } -.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__inner-circle { +.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__inner-circle { color: #00a4dc; } @@ -103,7 +103,7 @@ transform: scale(0); } -.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle { +.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle { -webkit-transform: scale(1.75); transform: scale(1.75); } diff --git a/src/elements/emby-radio/emby-radio.js b/src/elements/emby-radio/emby-radio.js index 86c08678e1..46a3e3826c 100644 --- a/src/elements/emby-radio/emby-radio.js +++ b/src/elements/emby-radio/emby-radio.js @@ -1,4 +1,4 @@ -define(['css!./emby-radio', 'registerElement'], function () { +define(['layoutManager', 'css!./emby-radio', 'registerElement'], function (layoutManager) { 'use strict'; var EmbyRadioPrototype = Object.create(HTMLInputElement.prototype); @@ -23,6 +23,7 @@ define(['css!./emby-radio', 'registerElement'], function () { } EmbyRadioPrototype.attachedCallback = function () { + var showFocus = !layoutManager.mobile; if (this.getAttribute('data-radio') === 'true') { return; @@ -37,6 +38,9 @@ define(['css!./emby-radio', 'registerElement'], function () { labelElement.classList.add('mdl-radio'); labelElement.classList.add('mdl-js-radio'); labelElement.classList.add('mdl-js-ripple-effect'); + if (showFocus) { + labelElement.classList.add('show-focus'); + } var labelTextElement = labelElement.querySelector('span'); @@ -57,7 +61,9 @@ define(['css!./emby-radio', 'registerElement'], function () { html += ''; html += ''; - html += '
'; + if (showFocus) { + html += '
'; + } html += '
'; diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index d65071afa4..45f43abc2f 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -438,12 +438,12 @@ a[data-role=button] { color: #f8f8fe; } -.mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__outer-circle, -.mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__inner-circle { +.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__outer-circle, +.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__inner-circle { color: #ff77f1; } -.mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle { +.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle { background: #00a4dc; } From 9bf5cda44afc5ba2f31b62bd620074a341f556b3 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 12 Mar 2020 20:53:49 +0300 Subject: [PATCH 69/86] Fix lint error --- src/elements/emby-radio/emby-radio.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/elements/emby-radio/emby-radio.css b/src/elements/emby-radio/emby-radio.css index f8671ce265..2d7f584171 100644 --- a/src/elements/emby-radio/emby-radio.css +++ b/src/elements/emby-radio/emby-radio.css @@ -53,14 +53,14 @@ cursor: auto; } -.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__outer-circle { - color: #00a4dc; -} - .mdl-radio__button:disabled + .mdl-radio__circles .mdl-radio__outer-circle { color: rgba(0, 0, 0, 0.26); } +.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__outer-circle { + color: #00a4dc; +} + .mdl-radio__inner-circle { transition-duration: 0.2s; transition-property: -webkit-transform; From 8f1434fa40bb4fa6a0abc392b0911700081e9d8e Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Wed, 25 Mar 2020 21:40:22 +0100 Subject: [PATCH 70/86] Fix Browsersync JavaScript reload error --- gulpfile.js | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index ca6cf36dd2..33a34889fb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -18,14 +18,14 @@ const stream = require('webpack-stream'); const inject = require('gulp-inject'); const postcss = require('gulp-postcss'); const sass = require('gulp-sass'); - -sass.compiler = require('node-sass') +sass.compiler = require('node-sass'); +var config; if (mode.production()) { - var config = require('./webpack.prod.js'); + config = require('./webpack.prod.js'); } else { - var config = require('./webpack.dev.js'); + config = require('./webpack.dev.js'); } function serve() { @@ -36,20 +36,20 @@ function serve() { port: 8080 }); - watch(['src/**/*.js', '!src/bundle.js'], javascript); + watch(['src/**/*.js', '!src/bundle.js'], series(javascript, standalone)); watch('src/bundle.js', webpack); watch('src/**/*.css', css); watch(['src/**/*.html', '!src/index.html'], html); watch(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], images); watch(['src/**/*.json', 'src/**/*.ico'], copy); watch('src/index.html', injectBundle); - watch(['src/standalone.js', 'src/scripts/apploader.js'], standalone); } function standalone() { return src(['src/standalone.js', 'src/scripts/apploader.js'], { base: './src/' }) .pipe(concat('scripts/apploader.js')) - .pipe(dest('dist/')); + .pipe(dest('dist/')) + .pipe(browserSync.stream()); } function clean() { @@ -70,7 +70,6 @@ function javascript() { })) .pipe(mode.development(sourcemaps.write('.'))) .pipe(dest('dist/')) - .pipe(browserSync.stream()); } function webpack() { @@ -118,6 +117,6 @@ function injectBundle() { .pipe(browserSync.stream()); } -exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle) -exports.standalone = series(exports.default, standalone) -exports.serve = series(exports.standalone, serve) +exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle); +exports.standalone = series(exports.default, standalone); +exports.serve = series(exports.standalone, serve); From 2a7f7ba7fee1c9d12af9b43084c65b1df5ed236d Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Wed, 25 Mar 2020 22:26:28 +0100 Subject: [PATCH 71/86] Use let instead of var in gulpfile --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 33a34889fb..f42376e24a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -21,7 +21,7 @@ const sass = require('gulp-sass'); sass.compiler = require('node-sass'); -var config; +let config; if (mode.production()) { config = require('./webpack.prod.js'); } else { From cd1732677db7ab75b9228e030c017f73581ef78c Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 26 Mar 2020 11:15:44 +0300 Subject: [PATCH 72/86] Add browser lazy-sync --- gulpfile.js | 143 +++++++++++++++++++++++++++++++++++++++------------ package.json | 2 + yarn.lock | 72 ++++++++++++++++++++++++-- 3 files changed, 182 insertions(+), 35 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index f42376e24a..0eb5593541 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -18,6 +18,8 @@ const stream = require('webpack-stream'); const inject = require('gulp-inject'); const postcss = require('gulp-postcss'); const sass = require('gulp-sass'); +const gulpif = require('gulp-if'); +const lazypipe = require('lazypipe'); sass.compiler = require('node-sass'); @@ -28,6 +30,30 @@ if (mode.production()) { config = require('./webpack.dev.js'); } +const options = { + javascript: { + query: ['src/**/*.js', '!src/bundle.js', '!src/standalone.js', '!src/scripts/apploader.js'] + }, + apploader: { + query: ['src/standalone.js', 'src/scripts/apploader.js'] + }, + css: { + query: ['src/**/*.css', 'src/**/*.scss'] + }, + html: { + query: ['src/**/*.html', '!src/index.html'] + }, + images: { + query: ['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'] + }, + copy: { + query: ['src/**/*.json', 'src/**/*.ico'] + }, + injectBundle: { + query: 'src/index.html' + } +}; + function serve() { browserSync.init({ server: { @@ -36,40 +62,89 @@ function serve() { port: 8080 }); - watch(['src/**/*.js', '!src/bundle.js'], series(javascript, standalone)); - watch('src/bundle.js', webpack); - watch('src/**/*.css', css); - watch(['src/**/*.html', '!src/index.html'], html); - watch(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], images); - watch(['src/**/*.json', 'src/**/*.ico'], copy); - watch('src/index.html', injectBundle); -} + let events = ['add', 'change']; -function standalone() { - return src(['src/standalone.js', 'src/scripts/apploader.js'], { base: './src/' }) - .pipe(concat('scripts/apploader.js')) - .pipe(dest('dist/')) - .pipe(browserSync.stream()); + watch(options.javascript.query).on('all', function (event, path) { + if (events.includes(event)) { + javascript(path); + } + }); + + watch(options.apploader.query, apploader(true)); + + watch('src/bundle.js', webpack); + + watch(options.css.query).on('all', function (event, path) { + if (events.includes(event)) { + css(path); + } + }); + + watch(options.html.query).on('all', function (event, path) { + if (events.includes(event)) { + html(path); + } + }); + + watch(options.images.query).on('all', function (event, path) { + if (events.includes(event)) { + images(path); + } + }); + + watch(options.copy.query).on('all', function (event, path) { + if (events.includes(event)) { + copy(path); + } + }); + + watch(options.injectBundle.query, injectBundle); } function clean() { return del(['dist/']); } -function javascript() { - return src(['src/**/*.js', '!src/bundle.js'], { base: './src/' }) - .pipe(mode.development(sourcemaps.init({ loadMaps: true }))) - .pipe(babel({ +let pipelineJavascript = lazypipe() + .pipe(function () { + return mode.development(sourcemaps.init({ loadMaps: true })); + }) + .pipe(function () { + return babel({ presets: [ ['@babel/preset-env'] ] - })) - .pipe(terser({ + }); + }) + .pipe(function () { + return terser({ keep_fnames: true, mangle: false - })) - .pipe(mode.development(sourcemaps.write('.'))) + }); + }) + .pipe(function () { + return mode.development(sourcemaps.write('.')); + }); + +function javascript(query) { + return src(typeof query !== 'function' ? query : options.javascript.query, { base: './src/' }) + .pipe(pipelineJavascript()) .pipe(dest('dist/')) + .pipe(browserSync.stream()); +} + +function apploader(standalone) { + function task() { + return src(options.apploader.query, { base: './src/' }) + .pipe(gulpif(standalone, concat('scripts/apploader.js'))) + .pipe(pipelineJavascript()) + .pipe(dest('dist/')) + .pipe(browserSync.stream()); + }; + + task.displayName = 'apploader'; + + return task; } function webpack() { @@ -78,8 +153,8 @@ function webpack() { .pipe(browserSync.stream()); } -function css() { - return src(['src/**/*.css', 'src/**/*.scss'], { base: './src/' }) +function css(query) { + return src(typeof query !== 'function' ? query : options.css.query, { base: './src/' }) .pipe(mode.development(sourcemaps.init({ loadMaps: true }))) .pipe(sass().on('error', sass.logError)) .pipe(postcss()) @@ -88,28 +163,28 @@ function css() { .pipe(browserSync.stream()); } -function html() { - return src(['src/**/*.html', '!src/index.html'], { base: './src/' }) +function html(query) { + return src(typeof query !== 'function' ? query : options.html.query, { base: './src/' }) .pipe(mode.production(htmlmin({ collapseWhitespace: true }))) .pipe(dest('dist/')) .pipe(browserSync.stream()); } -function images() { - return src(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], { base: './src/' }) +function images(query) { + return src(typeof query !== 'function' ? query : options.images.query, { base: './src/' }) .pipe(mode.production(imagemin())) .pipe(dest('dist/')) .pipe(browserSync.stream()); } -function copy() { - return src(['src/**/*.json', 'src/**/*.ico'], { base: './src/' }) +function copy(query) { + return src(typeof query !== 'function' ? query : options.copy.query, { base: './src/' }) .pipe(dest('dist/')) .pipe(browserSync.stream()); } function injectBundle() { - return src('src/index.html', { base: './src/' }) + return src(options.injectBundle.query, { base: './src/' }) .pipe(inject( src(['src/scripts/apploader.js'], { read: false }, { base: './src/' }), { relative: true } )) @@ -117,6 +192,10 @@ function injectBundle() { .pipe(browserSync.stream()); } -exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle); -exports.standalone = series(exports.default, standalone); +function build(standalone) { + return series(clean, parallel(javascript, apploader(standalone), webpack, css, html, images, copy), injectBundle); +} + +exports.default = build(false); +exports.standalone = build(true); exports.serve = series(exports.standalone, serve); diff --git a/package.json b/package.json index 2de78b821c..58d288b371 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "gulp-cli": "^2.2.0", "gulp-concat": "^2.6.1", "gulp-htmlmin": "^5.0.1", + "gulp-if": "^3.0.0", "gulp-imagemin": "^7.1.0", "gulp-inject": "^5.0.5", "gulp-mode": "^1.0.2", @@ -32,6 +33,7 @@ "gulp-sourcemaps": "^2.6.5", "gulp-terser": "^1.2.0", "html-webpack-plugin": "^3.2.0", + "lazypipe": "^1.0.2", "node-sass": "^4.13.1", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", diff --git a/yarn.lock b/yarn.lock index 8b7697cef4..5641ad41a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3517,6 +3517,11 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -3527,6 +3532,16 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +duplexify@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" + integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + each-props@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" @@ -3610,7 +3625,7 @@ encodeurl@~1.0.1, encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -4524,6 +4539,11 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +fork-stream@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz#db849fce77f6708a5f8f386ae533a0907b54ae70" + integrity sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA= + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -5064,6 +5084,15 @@ gulp-htmlmin@^5.0.1: plugin-error "^1.0.1" through2 "^2.0.3" +gulp-if@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gulp-if/-/gulp-if-3.0.0.tgz#6c3e7edc8bafadc34f2ebecb314bf43324ba1e40" + integrity sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw== + dependencies: + gulp-match "^1.1.0" + ternary-stream "^3.0.0" + through2 "^3.0.1" + gulp-imagemin@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/gulp-imagemin/-/gulp-imagemin-7.1.0.tgz#d1810a908fb64b4fbf15a750d303d988443e68cf" @@ -5096,6 +5125,13 @@ gulp-inject@^5.0.5: stream-to-array "^2.3.0" through2 "^3.0.1" +gulp-match@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.1.0.tgz#552b7080fc006ee752c90563f9fec9d61aafdf4f" + integrity sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ== + dependencies: + minimatch "^3.0.3" + gulp-mode@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/gulp-mode/-/gulp-mode-1.0.2.tgz#33c76033491fb71f47f1ebf8c67561ad9da7dfc9" @@ -6480,6 +6516,13 @@ last-run@^1.1.0: default-resolution "^2.0.0" es6-weak-map "^2.0.1" +lazypipe@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lazypipe/-/lazypipe-1.0.2.tgz#b66f64ed7fd8b04869f1f1bcb795dbbaa80e418c" + integrity sha512-CrU+NYdFHW8ElaeXCWz5IbmetiYVYq1fOCmpdAeZ8L+khbv1e7EnshyjlKqkO+pJbVPrsJQnHbVxEiLujG6qhQ== + dependencies: + stream-combiner "*" + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -7119,6 +7162,11 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.2.3, merge2@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" @@ -7216,7 +7264,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -10525,6 +10573,14 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-combiner@*: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858" + integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg= + dependencies: + duplexer "~0.1.1" + through "~2.3.4" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -11062,6 +11118,16 @@ tempfile@^2.0.0: temp-dir "^1.0.0" uuid "^3.0.1" +ternary-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-3.0.0.tgz#7951930ea9e823924d956f03d516151a2d516253" + integrity sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ== + dependencies: + duplexify "^4.1.1" + fork-stream "^0.0.4" + merge-stream "^2.0.0" + through2 "^3.0.1" + terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -11129,7 +11195,7 @@ through2@^3.0.1: dependencies: readable-stream "2 || 3" -through@^2.3.6, through@^2.3.8: +through@^2.3.6, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= From 9f13e2a36c8e0fe18ec97e042615bd5f685736ca Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 26 Mar 2020 17:22:57 +0300 Subject: [PATCH 73/86] Enable subtitle settings on Tizen --- src/components/apphost.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/apphost.js b/src/components/apphost.js index f3e89ed29e..5470803846 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -280,11 +280,11 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet //features.push("multiserver"); features.push("screensaver"); - if (!browser.orsay && !browser.tizen && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || supportsCue())) { + if (!browser.orsay && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || supportsCue())) { features.push("subtitleappearancesettings"); } - if (!browser.orsay && !browser.tizen) { + if (!browser.orsay) { features.push("subtitleburnsettings"); } From fe85c5f96c44a01e03bae7de42ebed251cbf072a Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Thu, 26 Mar 2020 20:31:46 +0300 Subject: [PATCH 74/86] Enable subtitle sync slider focus and keyboard dragging --- src/components/subtitlesync/subtitlesync.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/subtitlesync/subtitlesync.js b/src/components/subtitlesync/subtitlesync.js index 07ce2cb7ec..23d0d07a04 100644 --- a/src/components/subtitlesync/subtitlesync.js +++ b/src/components/subtitlesync/subtitlesync.js @@ -1,4 +1,4 @@ -define(['playbackManager', 'text!./subtitlesync.template.html', 'css!./subtitlesync'], function (playbackManager, template, css) { +define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html', 'css!./subtitlesync'], function (playbackManager, layoutManager, template, css) { "use strict"; var player; @@ -10,6 +10,7 @@ define(['playbackManager', 'text!./subtitlesync.template.html', 'css!./subtitles function init(instance) { var parent = document.createElement('div'); + document.body.appendChild(parent); parent.innerHTML = template; subtitleSyncSlider = parent.querySelector(".subtitleSyncSlider"); @@ -17,6 +18,14 @@ define(['playbackManager', 'text!./subtitlesync.template.html', 'css!./subtitles subtitleSyncCloseButton = parent.querySelector(".subtitleSync-closeButton"); subtitleSyncContainer = parent.querySelector(".subtitleSyncContainer"); + if (layoutManager.tv) { + subtitleSyncSlider.classList.add("focusable"); + // HACK: Delay to give time for registered element attach (Firefox) + setTimeout(function () { + subtitleSyncSlider.enableKeyboardDragging(); + }, 0); + } + subtitleSyncContainer.classList.add("hide"); subtitleSyncTextField.updateOffset = function(offset) { @@ -87,8 +96,6 @@ define(['playbackManager', 'text!./subtitlesync.template.html', 'css!./subtitles SubtitleSync.prototype.toggle("forceToHide"); }); - document.body.appendChild(parent); - instance.element = parent; } From d60bec3834e11671e0a1ba9694cabfa3dbdf6fb2 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 15 Mar 2020 14:15:48 +0100 Subject: [PATCH 75/86] Improve details page informatios and selects --- src/assets/css/librarybrowser.css | 41 ++++++++++++++++++++++++ src/controllers/itemdetailpage.js | 31 ++++++++++-------- src/elements/emby-select/emby-select.css | 2 +- src/elements/emby-select/emby-select.js | 2 +- src/itemdetails.html | 26 ++++++++++----- src/strings/bg-bg.json | 6 ++-- src/strings/cs.json | 6 ++-- src/strings/da.json | 6 ++-- src/strings/de.json | 6 ++-- src/strings/el.json | 6 ++-- src/strings/en-gb.json | 6 ++-- src/strings/en-us.json | 12 +++---- src/strings/es-ar.json | 6 ++-- src/strings/es-mx.json | 6 ++-- src/strings/es.json | 8 ++--- src/strings/fi.json | 3 +- src/strings/fr.json | 8 ++--- src/strings/he.json | 8 ++--- src/strings/hu.json | 6 ++-- src/strings/it.json | 6 ++-- src/strings/ja.json | 6 ++-- src/strings/kk.json | 6 ++-- src/strings/ko.json | 6 ++-- src/strings/lt-lt.json | 6 ++-- src/strings/lv.json | 6 ++-- src/strings/nb.json | 6 ++-- src/strings/nl.json | 6 ++-- src/strings/pl.json | 6 ++-- src/strings/pt-br.json | 6 ++-- src/strings/pt-pt.json | 6 ++-- src/strings/pt.json | 6 ++-- src/strings/ro.json | 6 ++-- src/strings/ru.json | 6 ++-- src/strings/sk.json | 6 ++-- src/strings/sl-si.json | 6 ++-- src/strings/sv.json | 6 ++-- src/strings/tr.json | 8 ++--- src/strings/zh-cn.json | 6 ++-- src/strings/zh-tw.json | 6 ++-- 39 files changed, 152 insertions(+), 165 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 13265e40d1..b599ddde33 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -1123,3 +1123,44 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { .layout-mobile #myPreferencesMenuPage { padding-top: 3.75em; } + +.itemDetailsGroup { + margin-bottom: 1.5em; +} + +.trackSelections { + max-width: 44em; +} + +.detailsGroupItem, +.trackSelections .selectContainer { + display: flex; + max-width: 44em; + margin: 0 0 0.5em !important; +} + +.trackSelections .selectContainer { + margin: 0 0 0.15em !important; +} + +.detailsGroupItem .label, +.trackSelections .selectContainer .selectLabel { + flex-grow: 0; + flex-shrink: 0; + flex-basis: 6.25em; + margin: 0 0.6em 0 0; +} + +.trackSelections .selectContainer .selectLabel { + margin: 0 0.2em 0 0; +} + +.trackSelections .selectContainer .detailTrackSelect { + font-size: inherit; + padding: 0; +} + +.trackSelections .selectContainer .selectArrowContainer .selectArrow { + margin-top: 0; + font-size: 1.4em; +} diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 82569835ca..3d74ab4327 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -718,11 +718,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti function renderLinks(linksElem, item) { var html = []; - if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) { - var dateCreated = datetime.parseISO8601Date(item.DateCreated); - html.push(globalize.translate("AddedOnValue", datetime.toLocaleDateString(dateCreated) + " " + datetime.getDisplayTime(dateCreated))); - } - var links = []; if (!layoutManager.tv && item.HomePageUrl) { @@ -736,7 +731,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } if (links.length) { - html.push(globalize.translate("LinksValue", links.join(", "))); + html.push(links.join(", ")); } linksElem.innerHTML = html.join(", "); @@ -1032,13 +1027,17 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti context: context }) + '">' + p.Name + ""; }).join(", "); - var elem = page.querySelector(".genres"); - elem.innerHTML = globalize.translate(genres.length > 1 ? "GenresValue" : "GenreValue", html); + var genresLabel = page.querySelector(".genresLabel"); + genresLabel.innerHTML = globalize.translate(genres.length > 1 ? "Genres" : "Genre"); + var genresValue = page.querySelector(".genres"); + genresValue.innerHTML = html; + + var genresGroup = page.querySelector(".genresGroup"); if (genres.length) { - elem.classList.remove("hide"); + genresGroup.classList.remove("hide"); } else { - elem.classList.add("hide"); + genresGroup.classList.add("hide"); } } @@ -1056,13 +1055,17 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti context: context }) + '">' + p.Name + ""; }).join(", "); - var elem = page.querySelector(".directors"); - elem.innerHTML = globalize.translate(directors.length > 1 ? "DirectorsValue" : "DirectorValue", html); + var directorsLabel = page.querySelector(".directorsLabel"); + directorsLabel.innerHTML = globalize.translate(directors.length > 1 ? "Directors" : "Director"); + var directorsValue = page.querySelector(".directors"); + directorsValue.innerHTML = html; + + var directorsGroup = page.querySelector(".directorsGroup"); if (directors.length) { - elem.classList.remove("hide"); + directorsGroup.classList.remove("hide"); } else { - elem.classList.add("hide"); + directorsGroup.classList.add("hide"); } } diff --git a/src/elements/emby-select/emby-select.css b/src/elements/emby-select/emby-select.css index 9f07ca3f65..32aec69c46 100644 --- a/src/elements/emby-select/emby-select.css +++ b/src/elements/emby-select/emby-select.css @@ -109,7 +109,7 @@ } .selectArrow { - margin-top: 0.35em; + margin-top: 1.2em; font-size: 1.7em; } diff --git a/src/elements/emby-select/emby-select.js b/src/elements/emby-select/emby-select.js index 02818c6630..c772c0f960 100644 --- a/src/elements/emby-select/emby-select.js +++ b/src/elements/emby-select/emby-select.js @@ -144,7 +144,7 @@ define(['layoutManager', 'browser', 'actionsheet', 'css!./emby-select', 'registe this.parentNode.insertBefore(label, this); if (this.classList.contains('emby-select-withcolor')) { - this.parentNode.insertAdjacentHTML('beforeend', '
0
'); + this.parentNode.insertAdjacentHTML('beforeend', '
0
'); } }; diff --git a/src/itemdetails.html b/src/itemdetails.html index 672d0b65a6..3a1c2748a6 100644 --- a/src/itemdetails.html +++ b/src/itemdetails.html @@ -111,22 +111,32 @@
-
+
-
-
-
-
+
+
+
+
+
+ +
+
+
+
+
+ + +
-
+
-
+
-
+
diff --git a/src/strings/bg-bg.json b/src/strings/bg-bg.json index c2b0bb6922..ca95412f36 100644 --- a/src/strings/bg-bg.json +++ b/src/strings/bg-bg.json @@ -101,8 +101,7 @@ "Desktop": "Работен плот", "DeviceAccessHelp": "Това се отнася само за устройства, които могат да бъдат различени и няма да попречи на достъп от мрежов четец. Филтрирането на потребителски устройства ще предотврати използването им докато не бъдат одобрени тук.", "Director": "Режисьор", - "DirectorValue": "Режисьор: {0}", - "DirectorsValue": "Режисьори: {0}", + "Directors": "Режисьори", "Disc": "Диск", "Dislike": "Нехаресване", "Display": "Показване", @@ -137,9 +136,8 @@ "FormatValue": "Формат: {0}", "Friday": "Петък", "Fullscreen": "Цял екран", - "GenreValue": "Жанр: {0}", + "Genre": "Жанр", "Genres": "Жанрове", - "GenresValue": "Жанрове: {0}", "GroupVersions": "Групиране на версиите", "GuestStar": "Гостуваща звезда", "Guide": "Справочник", diff --git a/src/strings/cs.json b/src/strings/cs.json index ac3f8dd416..810be262b2 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1276,8 +1276,7 @@ "DetectingDevices": "Hledání zařízení", "DirectPlayError": "Chyba přímého přehrávání", "DirectStreamHelp2": "Přímé streamování souboru používá velmi malý výkon bez ztráty kvality videa.", - "DirectorValue": "Režisér: {0}", - "DirectorsValue": "Režiséři: {0}", + "Directors": "Režiséři", "Disabled": "Vypnuto", "DisplayInMyMedia": "Zobrazit na domovské obrazovce", "DisplayInOtherHomeScreenSections": "Zobrazení v sekcích domovské obrazovky, jako jsou nejnovější média, a pokračování ve sledování", @@ -1297,8 +1296,7 @@ "Filters": "Filtry", "Folders": "Složky", "General": "Hlavní", - "GenreValue": "Žánr: {0}", - "GenresValue": "Žánry: {0}", + "Genre": "Žánr", "GroupBySeries": "Seskupit podle série", "HandledByProxy": "Zpracováno reverzním proxy", "HeaderAddLocalUser": "Přidat místního uživatele", diff --git a/src/strings/da.json b/src/strings/da.json index 9ddba4c8f0..74d7d21b8a 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1166,8 +1166,7 @@ "DirectStreamHelp1": "Medie filen er kompatibel med enheden i forhold til opløsning og medie type (H.264,AC3, etc.), men er i en ikke kompatibel fil container (mkv, avi, wmv, etc). Videoen vil blive genpakket live før den streames til enheden.", "DirectStreamHelp2": "Direkte Streaming af en fil bruger meget lidt processor kraft uden nogen tab af video kvalitet.", "DirectStreaming": "Direkte streaming", - "DirectorValue": "Instruktør: {0}", - "DirectorsValue": "Instruktører: {0}", + "Directors": "Instruktører", "Disc": "Disk", "Dislike": "Kan ikke lide", "Display": "Visning", @@ -1207,8 +1206,7 @@ "Features": "Funktioner", "Filters": "Filtre", "FormatValue": "Format: {0}", - "GenreValue": "Genre: {0}", - "GenresValue": "Genrer: {0}", + "Genre": "Genre", "GroupBySeries": "Gruppér efter serie", "Guide": "Vejledning", "GuideProviderLogin": "Log Ind", diff --git a/src/strings/de.json b/src/strings/de.json index 5a449d8e55..861c57ef4b 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -175,8 +175,7 @@ "DirectStreamHelp2": "Direktes Streaming von Dateien benötigt sehr wenig Rechenleistung ohne Verlust der Videoqualität.", "DirectStreaming": "Direktes Streaming", "Director": "Regisseur", - "DirectorValue": "Regisseur: {0}", - "DirectorsValue": "Regisseure: {0}", + "Directors": "Regisseure", "Disabled": "Abgeschaltet", "Disc": "Disk", "Disconnect": "Verbindung trennen", @@ -1293,9 +1292,8 @@ "Extras": "Extras", "FolderTypeTvShows": "TV Serien", "FormatValue": "Format: {0}", - "GenreValue": "Genre: {0}", + "Genre": "Genre", "Genres": "Genres", - "GenresValue": "Genres: {0}", "HeaderAdmin": "Admin", "HeaderApp": "App", "HeaderGenres": "Genres", diff --git a/src/strings/el.json b/src/strings/el.json index fb02479421..8e0b77ac17 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -166,8 +166,7 @@ "DirectStreamHelp2": "Η άμεση ροή ενός αρχείου χρησιμοποιεί ελάχιστη ισχύ επεξεργασίας χωρίς απώλεια της ποιότητας του βίντεο.", "DirectStreaming": "Απευθείας Αναμετάδοση", "Director": "Σκηνοθέτης", - "DirectorValue": "Σκηνοθέτης: {0}", - "DirectorsValue": "Σκηνοθέτες: {0}", + "Directors": "Σκηνοθέτες", "Disabled": "Απενεργοποιημένο", "Disc": "Δίσκος", "Disconnect": "Αποσύνδεση", @@ -233,9 +232,8 @@ "Friday": "Παρασκευή", "Fullscreen": "ΠΛΗΡΗΣ ΟΘΟΝΗ", "General": "Γενικά", - "GenreValue": "Είδος: {0}", + "Genre": "Είδος", "Genres": "Είδη", - "GenresValue": "Είδη: {0}", "GroupBySeries": "Ομαδοποίηση κατά σειρά", "GroupVersions": "Ομαδικές εκδόσεις", "GuestStar": "Φιλική Συμμετοχή", diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 4f4f94f6fa..d5ed1acde5 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -223,8 +223,7 @@ "DirectStreamHelp2": "Direct Streaming a file uses very little processing power without any loss in video quality.", "DirectStreaming": "Direct streaming", "Director": "Director", - "DirectorValue": "Director: {0}", - "DirectorsValue": "Directors: {0}", + "Directors": "Directors", "Disabled": "Disabled", "Disc": "Disc", "Disconnect": "Disconnect", @@ -299,8 +298,7 @@ "Friday": "Friday", "Fullscreen": "Full screen", "General": "General", - "GenreValue": "Genre: {0}", - "GenresValue": "Genres: {0}", + "Genre": "Genre", "GroupBySeries": "Group by series", "GroupVersions": "Group versions", "GuestStar": "Guest star", diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 1afa731186..924f1a188b 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -192,8 +192,7 @@ "DirectStreamHelp2": "Direct Streaming a file uses very little processing power without any loss in video quality.", "DirectStreaming": "Direct streaming", "Director": "Director", - "DirectorValue": "Director: {0}", - "DirectorsValue": "Directors: {0}", + "Directors": "Directors", "Disabled": "Disabled", "Disc": "Disc", "Disconnect": "Disconnect", @@ -272,9 +271,8 @@ "Friday": "Friday", "Fullscreen": "Full screen", "General": "General", - "GenreValue": "Genre: {0}", + "Genre": "Genre", "Genres": "Genres", - "GenresValue": "Genres: {0}", "GroupBySeries": "Group by series", "GroupVersions": "Group versions", "GuestStar": "Guest star", @@ -551,7 +549,7 @@ "LabelAppNameExample": "Example: Sickbeard, Sonarr", "LabelArtists": "Artists:", "LabelArtistsHelp": "Separate multiple using ;", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelAudioBitDepth": "Audio bit depth:", "LabelAudioBitrate": "Audio bitrate:", "LabelAudioChannels": "Audio channels:", @@ -841,7 +839,7 @@ "LabelSubtitleDownloaders": "Subtitle downloaders:", "LabelSubtitleFormatHelp": "Example: srt", "LabelSubtitlePlaybackMode": "Subtitle mode:", - "LabelSubtitles": "Subtitles:", + "LabelSubtitles": "Subtitles", "LabelSupportedMediaTypes": "Supported Media Types:", "LabelTVHomeScreen": "TV mode home screen:", "LabelTag": "Tag:", @@ -887,7 +885,7 @@ "DashboardServerName": "Server: {0}", "DashboardOperatingSystem": "Operating System: {0}", "DashboardArchitecture": "Architecture: {0}", - "LabelVideo": "Video:", + "LabelVideo": "Video", "LabelVideoBitrate": "Video bitrate:", "LabelVideoCodec": "Video codec:", "LabelVideoResolution": "Video resolution:", diff --git a/src/strings/es-ar.json b/src/strings/es-ar.json index 64f7a0fd7e..6c7ed6f2d4 100644 --- a/src/strings/es-ar.json +++ b/src/strings/es-ar.json @@ -312,8 +312,7 @@ "DirectStreamHelp2": "Transmitir directamente un archivo usa muy poco procesamiento, esto sin perdida en la calidad de video.", "DirectStreaming": "Transmisión en directo", "Director": "Director", - "DirectorValue": "Director: {0}", - "DirectorsValue": "Directores: {0}", + "Directors": "Directores", "Disabled": "Deshabilitado", "Disc": "Disco", "Disconnect": "Desconectar", @@ -398,8 +397,7 @@ "Friday": "Viernes", "Fullscreen": "Pantalla Completa", "General": "General", - "GenreValue": "Género: {0}", - "GenresValue": "Géneros: {0}", + "Genre": "Género", "GroupBySeries": "Agrupar por Serie", "GroupVersions": "Agrupar versiones", "GuestStar": "Estrella invitada", diff --git a/src/strings/es-mx.json b/src/strings/es-mx.json index 2968bbcdd4..76679b698f 100644 --- a/src/strings/es-mx.json +++ b/src/strings/es-mx.json @@ -179,7 +179,7 @@ "DirectStreamHelp1": "El medio es compatible con el dispositivo en cuanto a la resolución y tipo de medio (H.264, AC3, etc.), pero está en un contenedor de archivo incompatible (mkv, avi, wmv, etc.). El video sera reempaquetado en el acto antes de transmitirlo al dispositivo.", "DirectStreamHelp2": "La Transmisión Directa de un archivo usa muy poco poder de procesamiento sin ninguna perdida en la calidad de video.", "DirectStreaming": "Transmisión Directa", - "DirectorsValue": "Directores: {0}", + "Directors": "Directores", "Disabled": "Desactivado", "Disc": "DIsco", "Disconnect": "Desconectar", @@ -255,9 +255,8 @@ "FormatValue": "Formato: {0}", "Friday": "Viernes", "Fullscreen": "Pantalla Completa", - "GenreValue": "Genero: {0}", + "Genre": "Genero", "Genres": "Géneros", - "GenresValue": "Géneros: {0}", "GroupBySeries": "Agrupar por series", "GroupVersions": "Agrupar versiones", "GuestStar": "Estrella invitada", @@ -1350,7 +1349,6 @@ "ButtonTrailer": "Trailer", "AuthProviderHelp": "Seleccione un proveedor de autenticación que se utilizará para autenticar la contraseña de este usuario.", "Director": "Director", - "DirectorValue": "Director: {0}", "Extras": "Extras", "General": "General", "HeaderAdmin": "Administrador", diff --git a/src/strings/es.json b/src/strings/es.json index 3d56ff56d8..2f3fb2769b 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1248,9 +1248,8 @@ "Descending": "Descendiente", "DirectStreamHelp1": "El tipo de archivo (H.264, AC3, etc.) y la resolución son compatibles con el dispositivo, pero no el contenedor (mkv, avi, wmv, etc.). El vídeo será re-empaquetado al vuelo antes de transmitirlo al dispositivo.", "DirectStreamHelp2": "La transmisión directa del archivo usa muy poco procesamiento sin ninguna pérdida de calidad en el vídeo.", - "Director": "Dirección de", - "DirectorValue": "Dirección de: {0}", - "DirectorsValue": "Directores: {0}", + "Director": "Director", + "Directors": "Directores", "Display": "Mostrar", "DisplayInMyMedia": "Mostrar en la pantalla de inicio", "DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla de inicio al igual que \"últimos\" y \"continuar viendo\"", @@ -1272,8 +1271,7 @@ "Filters": "Filtros", "Folders": "Carpetas", "General": "General", - "GenreValue": "Género: {0}", - "GenresValue": "Géneros: {0}", + "Genre": "Género", "GroupBySeries": "Agrupar por series", "GuideProviderLogin": "Credenciales", "HeaderAlbumArtists": "Artistas del álbum", diff --git a/src/strings/fi.json b/src/strings/fi.json index b61724e2fe..55c5a1fbcd 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -240,8 +240,7 @@ "DirectStreamHelp2": "Tiedoston suoraan toistaminen käyttää erittäin vähän prosessorin resursseja ilman laadun heikentämistä.", "DirectStreaming": "Suora suoratoisto", "Director": "Ohjaaja", - "DirectorValue": "Ohjaaja: {0}", - "DirectorsValue": "Ohjaajat: {0}", + "Directors": "Ohjaajat", "Disabled": "Pois päältä kytkettynä", "Disc": "Levy", "Disconnect": "Katkaise yhteys", diff --git a/src/strings/fr.json b/src/strings/fr.json index fd85828c17..465eca15f1 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -175,9 +175,8 @@ "DirectStreamHelp1": "Le média est compatible avec l'appareil en ce qui concerne la résolution et le type de média (H.264, AC3, etc), mais se trouve dans un conteneur de fichiers incompatible (mkv, avi, wmv, etc). La vidéo sera rempaquetée à la volée avant d'être diffusée à l'appareil.", "DirectStreamHelp2": "Le streaming en direct d'un fichier utilise très peu de puissance de traitement sans perte de qualité vidéo.", "DirectStreaming": "Streaming direct", - "Director": "Réalisation", - "DirectorValue": "Réalisation : {0}", - "DirectorsValue": "Réalisation : {0}", + "Director": "Réalisateur(trice)", + "Directors": "Réalisateurs", "Disabled": "Désactivé", "Disc": "Disque", "Disconnect": "Déconnecter", @@ -1329,9 +1328,8 @@ "ButtonPause": "Pause", "Collections": "Collections", "Extras": "Extras", - "GenreValue": "Genre: {0}", + "Genre": "Genre", "Genres": "Genres", - "GenresValue": "Genres: {0}", "Guide": "Guide", "GuestStar": "Guest star", "Photos": "Photos", diff --git a/src/strings/he.json b/src/strings/he.json index a334f312b7..381b9bc181 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -59,7 +59,6 @@ "DeleteImageConfirmation": "האם אתה בטוח שברצונך למחוק תמונה זו?", "DeleteMedia": "מחק מדיה", "DeleteUser": "מחק משתמש", - "Director": "מנהל", "Dislike": "לא אוהב", "DoNotRecord": "אל תקליט", "Download": "הורדה", @@ -557,8 +556,8 @@ "DisplayMissingEpisodesWithinSeasons": "הצג פרקים חסרים בתוך העונות", "DisplayInMyMedia": "הצג בעמוד הבית", "Disconnect": "התנתק", - "DirectorsValue": "במאים: {0}", - "DirectorValue": "במאי: {0}", + "Director": "במאי", + "Directors": "במאים", "Descending": "סדר יורד", "Default": "ברירת מחדל", "DeathDateValue": "נפטר: {0}", @@ -667,8 +666,7 @@ "HeaderAddScheduledTaskTrigger": "הוסף טריגר", "HeaderActivity": "פעילות", "Guide": "מדריך", - "GenresValue": "ז'אנרים: {0}", - "GenreValue": "ז'אנר: {0}", + "Genre": "ז'אנר", "General": "כללי", "Fullscreen": "מסך מלא", "FolderTypeUnset": "תוכן מעורבב", diff --git a/src/strings/hu.json b/src/strings/hu.json index 0f0b0aee68..69ce7acedd 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -87,8 +87,7 @@ "DeleteMedia": "Média törlése", "Descending": "Csökkenő", "Director": "Rendező", - "DirectorValue": "Rendező: {0}", - "DirectorsValue": "Rendezők: {0}", + "Directors": "Rendezők", "Dislike": "Nem tettszik", "Display": "Megjelenítés", "DisplayMissingEpisodesWithinSeasons": "Hiányzó évad epizódok megjelenítése", @@ -124,7 +123,6 @@ "Fullscreen": "Teljes képernyő", "General": "Általános", "Genres": "Műfajok", - "GenresValue": "Műfajok: {0}", "HeaderActiveDevices": "Aktív eszközök", "HeaderAddToCollection": "Hozzáadás gyűjteményhez", "HeaderAddToPlaylist": "Hozzáadás lejátszási listához", @@ -575,7 +573,7 @@ "Writer": "Író", "Yesterday": "Tegnap", "FormatValue": "Formátum: {0}", - "GenreValue": "Műfaj: {0}", + "Genre": "Műfaj", "HeaderServerSettings": "Szerver beállítások", "LabelDropImageHere": "Húzz ide egy képet, vagy kattints a böngészéshez.", "LabelDropShadow": "Árnyék:", diff --git a/src/strings/it.json b/src/strings/it.json index 4dd7b3d190..6ba6df0d12 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -165,8 +165,7 @@ "DirectStreamHelp2": "Lo Streaming in Diretta di un file utilizza poco il processore senza alcuna perdita di qualità video.", "DirectStreaming": "Streaming Diretto", "Director": "Regista", - "DirectorValue": "Regista: {0}", - "DirectorsValue": "Registi: {0}", + "Directors": "Registi", "Disabled": "Disabilitato", "Disc": "Disco", "Disconnect": "Disconnetti", @@ -240,9 +239,8 @@ "FormatValue": "Formato: {0}", "Friday": "Venerdì", "Fullscreen": "Schermo Intero", - "GenreValue": "Genere: {0}", + "Genre": "Genere", "Genres": "Generi", - "GenresValue": "Generi: {0}", "GroupBySeries": "Raggruppa per serie", "GroupVersions": "Raggruppa versioni", "GuestStar": "Personaggio famoso", diff --git a/src/strings/ja.json b/src/strings/ja.json index 8450f01f4d..9a881bce0d 100644 --- a/src/strings/ja.json +++ b/src/strings/ja.json @@ -176,8 +176,7 @@ "DirectStreamHelp2": "ファイルのダイレクトストリーミングは、ビデオ品質を損なうことなく、Jellyfin Serverにもほとんど負荷がありません。", "DirectStreaming": "ダイレクトストリーミング", "Director": "ディレクター", - "DirectorValue": "ディレクター: {0}", - "DirectorsValue": "ディレクターズ: {0}", + "Directors": "ディレクターズ", "Disabled": "無効", "Disc": "ディスク", "Disconnect": "切断", @@ -266,9 +265,8 @@ "Friday": "金曜日", "Fullscreen": "フルスクリーン", "General": "全般", - "GenreValue": "ジャンル: {0}", + "Genre": "ジャンル", "Genres": "ジャンル", - "GenresValue": "ジャンル: {0}", "GroupBySeries": "シリーズグループ", "GroupVersions": "グループバージョン", "GuestStar": "ゲストスター", diff --git a/src/strings/kk.json b/src/strings/kk.json index a70b03a69b..665091106d 100644 --- a/src/strings/kk.json +++ b/src/strings/kk.json @@ -188,8 +188,7 @@ "DirectStreamHelp2": "Faıldy tikeleı taratý beıne sapasyn joǵaltpaı óte az esepteý qýatyn paıdalanady.", "DirectStreaming": "Tikeleı tasymaldanýda", "Director": "Rejısór", - "DirectorValue": "Rejısóri: {0}", - "DirectorsValue": "Rejısórler; {0}", + "Directors": "Rejısórler", "Disabled": "Ajyratylǵan", "Disc": "Dıski", "Disconnect": "Ajyratý", @@ -267,9 +266,8 @@ "Friday": "juma", "Fullscreen": "Tolyq ekran", "General": "Jalpy", - "GenreValue": "Janr: {0}", + "Genre": "Janr", "Genres": "Janrlar", - "GenresValue": "Janrlar: {0}", "GroupBySeries": "Telehıkaıalar boıynsha toptastyrý", "GroupVersions": "Nusqalardy toptastyrý", "GuestStar": "Shaqyrylǵan aktór", diff --git a/src/strings/ko.json b/src/strings/ko.json index c7efcc0ea5..b96642d8d1 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -880,7 +880,6 @@ "DoNotRecord": "녹화 안 함", "Disconnect": "연결 끊기", "Disabled": "비활성화됨", - "DirectorValue": "감독: {0}", "DirectPlaying": "다이렉트 재생", "DirectStreaming": "다이렉트 스트리밍", "DirectStreamHelp2": "다이렉트 스트리밍은 비디오 퀄리티의 손실없이 매우 적은 처리능력을 사용합니다.", @@ -1145,8 +1144,7 @@ "HardwareAccelerationWarning": "하드웨어 가속을 활성화하면 일부 환경에서 불안정해질 수 있습니다. 운영체제 및 비디오 드라이버가 최신 상태인지 확인하십시오. 이 기능을 활성화한 후 비디오를 재생하는 데 어려움이 있을 경우 설정을 다시 '사용 안 함'으로 변경하십시오.", "GuestStar": "게스트 스타", "GroupBySeries": "시리즈별로 그룹화", - "GenresValue": "장르: {0}", - "GenreValue": "장르: {0}", + "Genre": "장르", "General": "일반", "FileReadCancelled": "파일 읽기 작업이 취소되었습니다.", "FetchingData": "추가 데이터를 가져오는 중", @@ -1284,7 +1282,7 @@ "LabelDiscNumber": "디스크 번호:", "Identify": "식별자", "HeaderMoreLikeThis": "비슷한 작품", - "DirectorsValue": "감독: {0}", + "Directors": "감독", "ButtonSplit": "나누기", "HeaderContainerProfileHelp": "컨테이너 프로파일은 사용자의 디바이스에서 재생 가능한 파일 형식을 나타냅니다. 다이렉트 플레이가 설정된 경우에도 디바이스에서 지원되지 않는 형식이라면 트랜스코딩이 적용됩니다.", "HeaderCodecProfileHelp": "코덱 프로파일은 사용자의 디바이스에서 재생 가능한 코덱을 가리킵니다. 다이렉트 플레이가 설정된 경우에도 디바이스에서 지원되지 않는 코덱이라면 트랜스코딩이 적용됩니다.", diff --git a/src/strings/lt-lt.json b/src/strings/lt-lt.json index fa97fe2d8b..07d1b790af 100644 --- a/src/strings/lt-lt.json +++ b/src/strings/lt-lt.json @@ -624,8 +624,7 @@ "ConfirmEndPlayerSession": "Ar norite išjungti Jellyfin ant {0}?", "Descending": "Mažėjančia tvarka", "DetectingDevices": "Ieškomi įrenginiai", - "DirectorValue": "Režisierius: {0}", - "DirectorsValue": "Režisieriai: {0}", + "Directors": "Režisieriai", "Disabled": "Išjungtas", "Disc": "Diskas", "Disconnect": "Atsijungti", @@ -805,7 +804,7 @@ "ExtraLarge": "Labai didelis", "Fullscreen": "Viso ekrano režimas", "General": "Bendri", - "GenreValue": "Žanras: {0}", + "Genre": "Žanras", "ErrorPleaseSelectLineup": "Pasirinkite TV programą ir bandykite dar kartą. Jei TV programos nerodoma, patikrinkite ar teisingas jūsų vartotojo vardas, slaptažodis ir pašto kodas.", "HeaderRevisionHistory": "Versijų istorija", "HeaderShutdown": "Išjungti", @@ -924,7 +923,6 @@ "ErrorAddingXmlTvFile": "Atidarant XMLTV failą įvyko klaida. Įsitikinkite, ar failas egzistuoja, ir bandykite dar kartą.", "ErrorGettingTvLineups": "Atsisiunčiant TV programas įvyko klaida. Įsitikinkite, kad jūsų informacija teisinga, ir bandykite dar kartą.", "Features": "Medžiagos", - "GenresValue": "Žanrai: {0}", "GroupBySeries": "Grupuoti pagal serialus", "Guide": "Gidas", "GuideProviderLogin": "Prisijungti", diff --git a/src/strings/lv.json b/src/strings/lv.json index 657a2261a5..660ebcd971 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -412,9 +412,8 @@ "GuestStar": "Vieszvaigzne", "GroupVersions": "Grupēt versijas", "GroupBySeries": "Grupēt pēc sērijām", - "GenresValue": "Žanri: {0}", "Genres": "Žanri", - "GenreValue": "Žanrs: {0}", + "Genre": "Žanrs", "General": "Vispārīgs", "Fullscreen": "Pilnekrāns", "Friday": "Piektdiena", @@ -464,8 +463,7 @@ "Dislike": "Nepatīk", "Disc": "Disks", "Disabled": "Atspējots", - "DirectorsValue": "Direktori: {0}", - "DirectorValue": "Direktors: {0}", + "Directors": "Direktori", "Director": "Direktors", "DirectStreaming": "Tiešā straumēšana", "DirectPlaying": "Tiešā Atskaņošana", diff --git a/src/strings/nb.json b/src/strings/nb.json index 1b6c1529ac..373cdc8a55 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1159,7 +1159,6 @@ "MediaInfoStreamTypeVideo": "Video", "OptionDownloadBannerImage": "Banner", "CopyStreamURLSuccess": "URLen ble kopiert.", - "DirectorValue": "Regissør: {0}", "OptionThumb": "Miniatyrbilde", "LabelInternetQuality": "Internettkvalitet:", "SubtitleAppearanceSettingsDisclaimer": "Disse innstillingene vil ikke påvirke grafiske undertekster (PGS, DVD, osv.) eller ASS/SSA-teksting som inkluderer sin egen formatering.", @@ -1267,7 +1266,7 @@ "LabelMatchType": "Matchtype:", "OptionPosterCard": "Plakatkort", "Uniform": "Jevn", - "DirectorsValue": "Regissører: {0}", + "Directors": "Regissører", "Disabled": "Deaktivert", "Disc": "Plate", "Display": "Vis", @@ -1283,8 +1282,7 @@ "FetchingData": "Henter ytterligere data", "Folders": "Mapper", "FormatValue": "Format: {0}", - "GenreValue": "Sjanger: {0}", - "GenresValue": "Sjangre: {0}", + "Genre": "Sjanger", "GroupBySeries": "Grupper etter serie", "GroupVersions": "Grupper etter versjon", "Guide": "Guide", diff --git a/src/strings/nl.json b/src/strings/nl.json index 9ac84a7396..5ca394dc26 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -168,8 +168,7 @@ "DirectStreamHelp2": "Direct streamen van een bestand gebruikt weinig processor kracht zonder verlies van beeldkwaliteit.", "DirectStreaming": "Direct streamen", "Director": "Regiseur", - "DirectorValue": "Regisseur: {0}", - "DirectorsValue": "Regisseurs: {0}", + "Directors": "Regisseurs", "Disabled": "Uitgeschakeld", "Disc": "Disk", "Disconnect": "Loskoppelen", @@ -1269,9 +1268,8 @@ "Desktop": "Bureaublad", "DownloadsValue": "{0} downloads", "Filters": "Filters", - "GenreValue": "Genre: {0}", + "Genre": "Genre", "Genres": "Genres", - "GenresValue": "Genres: {0}", "HeaderAlbums": "Albums", "HeaderCastAndCrew": "Cast & Crew", "HeaderCastCrew": "Cast & Crew", diff --git a/src/strings/pl.json b/src/strings/pl.json index 4097a6cc3f..71a4ba06e9 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -180,8 +180,7 @@ "DirectStreamHelp2": "Transmisja bezpośrednia pliku używa niewiele mocy przetwarzania, bez utraty jakości wideo.", "DirectStreaming": "Transmisja bezpośrednia", "Director": "Reżyser", - "DirectorValue": "Reżyser: {0}", - "DirectorsValue": "Reżyserzy: {0}", + "Directors": "Reżyserzy", "Disabled": "Nieaktywne", "Disc": "Dysk", "Disconnect": "Rozłącz", @@ -258,9 +257,8 @@ "Friday": "Piątek", "Fullscreen": "Pełny ekran", "General": "Ogólne", - "GenreValue": "Gatunek: {0}", + "Genre": "Gatunek", "Genres": "Gatunki", - "GenresValue": "Gatunki: {0}", "GroupBySeries": "Grupuj po serialach", "GroupVersions": "Wersje grup", "GuestStar": "Gość specjalny", diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index dcb24a2fcc..c5b426fead 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -172,8 +172,7 @@ "DirectStreamHelp2": "O streaming direto de um arquivo usa baixo processamento sem perda de qualidade de vídeo.", "DirectStreaming": "Streaming Direto", "Director": "Diretor", - "DirectorValue": "Diretor: {0}", - "DirectorsValue": "Diretores: {0}", + "Directors": "Diretores", "Disabled": "Desativado", "Disc": "Disco", "Disconnect": "Desconectar", @@ -248,9 +247,8 @@ "Friday": "Sexta-feira", "Fullscreen": "Tela cheia", "General": "Geral", - "GenreValue": "Gênero: {0}", + "Genre": "Gênero", "Genres": "Gêneros", - "GenresValue": "Gêneros: {0}", "GroupBySeries": "Agrupar por séries", "GroupVersions": "Agrupar versões", "GuestStar": "Convidado especial", diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index c8e20fd063..f80bc1f5aa 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -873,8 +873,7 @@ "GuestStar": "Estrela convidada", "GroupVersions": "Agrupar versões", "GroupBySeries": "Agrupar por série", - "GenresValue": "Géneros: {0}", - "GenreValue": "Género: {0}", + "Genre": "Género", "General": "Geral", "FormatValue": "Formato: {0}", "FolderTypeUnset": "Conteúdo Misto", @@ -1077,8 +1076,7 @@ "News": "Notícias", "Programs": "Programas", "HeaderMovies": "Filmes", - "DirectorsValue": "Realização: {0}", - "DirectorValue": "Realizador: {0}", + "Directors": "Realização", "ButtonOff": "Desligado", "ButtonAddImage": "Adicionar Imagem", "LabelOriginalTitle": "Título original:", diff --git a/src/strings/pt.json b/src/strings/pt.json index ecd6ccb079..a7cd41299d 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -906,8 +906,7 @@ "Disconnect": "Desligar", "Disc": "Disco", "Disabled": "Desactivado", - "DirectorsValue": "Realização: {0}", - "DirectorValue": "Realizador: {0}", + "Directors": "Realização", "Director": "Realizador", "DirectStreaming": "Reprodução directa", "DirectStreamHelp2": "A reprodução directa de um ficheiro requer pouco processamento e não implica perda de qualidade num vídeo.", @@ -1186,12 +1185,11 @@ "GuestStar": "Estrela convidada", "GroupVersions": "Agrupar versões", "GroupBySeries": "Agrupar por série", - "GenresValue": "Géneros: {0}", "ErrorAddingListingsToSchedulesDirect": "Ocorreu um erro ao adicionar o alinhamento à sua conta Schedules Direct. As contas Schedules Direct permitem apenas um número limitado de alinhamentos. Poderá ser necessário iniciar sessão na sua conta e remover outras listagens antes de prosseguir.", "Ended": "Terminado", "DefaultMetadataLangaugeDescription": "Estes são os valores por omissão que podem ser individualizados para cada uma das bibliotecas.", "Genres": "Géneros", - "GenreValue": "Género: {0}", + "Genre": "Género", "General": "Geral", "Fullscreen": "Ecrã inteiro", "Friday": "Sexta", diff --git a/src/strings/ro.json b/src/strings/ro.json index 34907d09f1..a5b938e7ee 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -382,8 +382,7 @@ "ConfirmDeletion": "Confirmă ștergerea", "DeleteDeviceConfirmation": "Sigur doriți să ștergeți acest dispozitiv? Acesta va reapărea data viitoare când un utilizator se conectează cu acesta.", "DeleteUser": "Șterge utilizator", - "DirectorValue": "Regizor: {0}", - "DirectorsValue": "Regizori: {0}", + "Directors": "Regizori", "Disabled": "Dezactivat", "Disconnect": "Deconectare", "Dislike": "Neplăcut", @@ -545,8 +544,7 @@ "EveryNDays": "La fiecare {0} zile", "Extras": "Extra", "Genres": "Genuri", - "GenreValue": "Gen: {0}", - "GenresValue": "Genuri: {0}", + "Genre": "Gen", "Guide": "Ghid", "HeaderCancelRecording": "Anulați înregistrarea", "HeaderCancelSeries": "Anulați seriile", diff --git a/src/strings/ru.json b/src/strings/ru.json index b84651ed58..4986855da5 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -181,8 +181,7 @@ "DirectStreamHelp2": "При прямой трансляции файла расходуется очень мало вычислительной мощности без потери качества видео.", "DirectStreaming": "Транслируется напрямую", "Director": "Режиссёр", - "DirectorValue": "Режиссёр: {0}", - "DirectorsValue": "Режиссёры: {0}", + "Directors": "Режиссёры", "Disabled": "Отключено", "Disc": "Диск", "Disconnect": "Разъединиться", @@ -260,9 +259,8 @@ "Friday": "пятница", "Fullscreen": "Полный экран", "General": "Общие", - "GenreValue": "Жанр: {0}", + "Genre": "Жанр", "Genres": "Жанры", - "GenresValue": "Жанры: {0}", "GroupBySeries": "Группирование по сериалам", "GroupVersions": "Сгруппировать версии", "GuestStar": "Пригл. актёр", diff --git a/src/strings/sk.json b/src/strings/sk.json index edbc343fae..2727fe01d1 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -123,8 +123,7 @@ "DetectingDevices": "Hľadám zariadenia", "DeviceAccessHelp": "Táto možnosť sa vzťahuje iba na zariadenia, ktoré môžu byť jedinečne identifikované a nezabráni prístup cez prehliadač. Filtrovaním prístupu používateľských zariadení zabraňuje užívateľom použiť nové zariadenie, pokiaľ neboli tu schválené.", "Director": "Režisér", - "DirectorValue": "Réžia: {0}", - "DirectorsValue": "Režiséri: {0}", + "Directors": "Režiséri", "Disc": "Disk", "Disconnect": "Odpojiť", "Dislike": "Nepáči sa mi to", @@ -165,9 +164,8 @@ "Friday": "Piatok", "Fullscreen": "Celá obrazovka", "General": "Všeobecné", - "GenreValue": "Žáner: {0}", + "Genre": "Žáner", "Genres": "Žánre", - "GenresValue": "Žánre: {0}", "GroupBySeries": "Zoskupiť podľa série", "GuestStar": "Hosťujúca hviezda", "Guide": "Sprievodca", diff --git a/src/strings/sl-si.json b/src/strings/sl-si.json index 83be4ddd92..9b74efe3a7 100644 --- a/src/strings/sl-si.json +++ b/src/strings/sl-si.json @@ -271,8 +271,7 @@ "Down": "Dol", "Dislike": "Ni mi všeč", "Disabled": "Onemogočen", - "DirectorsValue": "Režiserji: {0}", - "DirectorValue": "Režiser: {0}", + "Directors": "Režiserji", "Director": "Režiser", "DetectingDevices": "Zaznavanje naprav", "Desktop": "Namizje", @@ -462,8 +461,7 @@ "GuestStar": "Gostujoči igralec", "GroupVersions": "Združi različice", "GroupBySeries": "Združi bo serijah", - "GenresValue": "Zvrsti: {0}", - "GenreValue": "Zvrst: {0}", + "Genre": "Zvrst", "General": "Splošno", "Fullscreen": "Celoten zaslon", "Friday": "Petek", diff --git a/src/strings/sv.json b/src/strings/sv.json index 17bb11b57b..2dd5ec2dc2 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -163,8 +163,7 @@ "DirectStreamHelp2": "Direktströmning av en fil använder väldigt lite resurser av CPU'n utan att bildkvaliten försämras.", "DirectStreaming": "Direktströmning", "Director": "Regissör", - "DirectorValue": "Regi: {0}", - "DirectorsValue": "Regi: {0}", + "Directors": "Regi", "Disabled": "Inaktiverad", "Disc": "Skiva", "Disconnect": "Koppla bort", @@ -235,7 +234,6 @@ "Friday": "Fredag", "Fullscreen": "Fullskärm", "Genres": "Genrer", - "GenresValue": "Genrer: {0}", "GroupBySeries": "Gruppera efter serie", "GroupVersions": "Gruppera versioner", "GuestStar": "Gästmedverkande", @@ -1273,7 +1271,7 @@ "HeaderApp": "Applikation", "HeaderAdmin": "Administratör", "Guide": "Guide", - "GenreValue": "Genre: {0}", + "Genre": "Genre", "General": "Allmänt", "FastForward": "Snabbspola", "Extras": "Extramaterial", diff --git a/src/strings/tr.json b/src/strings/tr.json index e1ac24da6d..7d2afd756f 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -314,9 +314,8 @@ "ColorPrimaries": "Renk primerleri", "DirectStreamHelp2": "Doğrudan Akış, video kalitesinde herhangi bir kayıp olmadan çok az işlem gücü kullanır.", "DirectStreaming": "Doğrudan akış", - "Director": "yönetmen", - "DirectorValue": "Yönetmen: {0}", - "DirectorsValue": "Yöneticiler: {0}", + "Director": "Yönetmen", + "Directors": "Yöneticiler", "Disabled": "Deaktif", "DisplayModeHelp": "Jellyfin’i çalıştırdığınız ekran türünü seçin.", "DoNotRecord": "Kaydetme", @@ -521,8 +520,7 @@ "GuestStar": "Konuk sanatçı", "GroupVersions": "Grup versiyonları", "GroupBySeries": "Seriye göre gruplandır", - "GenresValue": "Türler: {0}", - "GenreValue": "Tür: {0}", + "Genre": "Tür", "General": "Genel", "Fullscreen": "Tam ekran", "FormatValue": "Biçim: {0}", diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index a37f839039..271be38b5f 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1310,16 +1310,14 @@ "BoxRear": "盒子(背面)", "ChannelNumber": "频道号码", "ColorSpace": "色彩空间", - "DirectorValue": "导演:{0}", - "DirectorsValue": "导演:{0}", + "Directors": "导演", "ColorTransfer": "色彩转换", "ConfirmDeleteItem": "这将同时在磁盘和媒体库中删除这个项目。确认删除?", "ConfirmDeleteItems": "这将同时在磁盘和媒体库中删除这些项目。确认删除?", "ConfirmEndPlayerSession": "确认要关闭位于{0}的Jellyfin吗?", "ValueSeconds": "{0}秒", "Features": "功能", - "GenreValue": "风格:{0}", - "GenresValue": "风格:{0}", + "Genre": "风格", "Guide": "指南", "HeaderCancelRecording": "取消录制", "HeaderFavoriteMovies": "最爱的电影", diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index ffc0228af2..59ab7fcdda 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -453,8 +453,7 @@ "DirectStreamHelp2": "直接串流檔案會占用非常少的處理效能並且影片的品質不會有任何損失。", "DirectStreaming": "直接串流", "Director": "導演", - "DirectorValue": "導演: {0}", - "DirectorsValue": "導演: {0}", + "Directors": "導演", "Disabled": "已停用", "Disc": "光碟", "Disconnect": "斷開連結", @@ -539,9 +538,8 @@ "FreeAppsFeatureDescription": "享受免費的Jellyfin應用程式。", "Fullscreen": "全螢幕", "General": "一般", - "GenreValue": "類型 : {0}", + "Genre": "類型", "Genres": "風格", - "GenresValue": "類型 : {0}", "GroupBySeries": "按系列分組", "GroupVersions": "按版本分組", "GuestStar": "特邀明星", From 4643c83ab14637fea8c4df0ed5dd251e3f451ee1 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 26 Mar 2020 20:48:09 +0100 Subject: [PATCH 76/86] Update some details page translations for the new layout --- src/strings/bg-bg.json | 4 ++-- src/strings/cs.json | 6 +++--- src/strings/da.json | 6 +++--- src/strings/de.json | 6 +++--- src/strings/el.json | 6 +++--- src/strings/en-gb.json | 6 +++--- src/strings/es-mx.json | 6 +++--- src/strings/es.json | 6 +++--- src/strings/fr.json | 6 +++--- src/strings/hu.json | 6 +++--- src/strings/it.json | 6 +++--- src/strings/ja.json | 6 +++--- src/strings/kk.json | 6 +++--- src/strings/ko.json | 6 +++--- src/strings/lt-lt.json | 2 +- src/strings/lv.json | 6 +++--- src/strings/nb.json | 6 +++--- src/strings/nl.json | 6 +++--- src/strings/pl.json | 6 +++--- src/strings/pt-br.json | 6 +++--- src/strings/pt-pt.json | 6 +++--- src/strings/pt.json | 2 +- src/strings/ro.json | 6 +++--- src/strings/ru.json | 6 +++--- src/strings/sk.json | 6 +++--- src/strings/sl-si.json | 4 ++-- src/strings/sv.json | 6 +++--- src/strings/tr.json | 2 +- src/strings/zh-cn.json | 6 +++--- src/strings/zh-tw.json | 6 +++--- 30 files changed, 82 insertions(+), 82 deletions(-) diff --git a/src/strings/bg-bg.json b/src/strings/bg-bg.json index ca95412f36..e6aaa30fb1 100644 --- a/src/strings/bg-bg.json +++ b/src/strings/bg-bg.json @@ -433,7 +433,7 @@ "LabelStatus": "Състояние:", "LabelStopWhenPossible": "Спирай, когато е възможно:", "LabelSubtitlePlaybackMode": "Режим на субтитрите:", - "LabelSubtitles": "Субтитри:", + "LabelSubtitles": "Субтитри", "LabelSupportedMediaTypes": "Поддържани типове медия:", "LabelTag": "Етикет:", "LabelTextColor": "Цвят на текста:", @@ -810,7 +810,7 @@ "MediaInfoLayout": "Подредба", "MusicVideo": "Музикален клип", "MediaInfoStreamTypeVideo": "Видео", - "LabelVideo": "Видео:", + "LabelVideo": "Видео", "HeaderVideoTypes": "Видове видеа", "HeaderVideoType": "Вид на видеото", "EnableExternalVideoPlayers": "Външни възпроизводители", diff --git a/src/strings/cs.json b/src/strings/cs.json index 810be262b2..bf74c4ad2d 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -461,7 +461,7 @@ "LabelArtist": "Umělec", "LabelArtists": "Umělci:", "LabelArtistsHelp": "Odděl pomocí ;", - "LabelAudio": "Zvuk:", + "LabelAudio": "Zvuk", "LabelAudioLanguagePreference": "Preferovaný jazyk zvuku:", "LabelBindToLocalNetworkAddress": "Vázat na místní síťovou adresu:", "LabelBindToLocalNetworkAddressHelp": "Volitelné. Přepsat lokální IP adresu vazanou na http server. Pokud je ponecháno prázdné, server se sváže ke všem dostupným adresám (aplikace bude dostupná na všech síťových zařízení, které server nabízí). Změna této hodnoty vyžaduje restartování Jellyfin Serveru.", @@ -709,7 +709,7 @@ "LabelStopping": "Zastavování", "LabelSubtitleFormatHelp": "Příklad: srt", "LabelSubtitlePlaybackMode": "Mód titulků:", - "LabelSubtitles": "Titulky:", + "LabelSubtitles": "Titulky", "LabelSupportedMediaTypes": "Podporované typy médií:", "LabelTagline": "Slogan:", "LabelTextBackgroundColor": "Barva pozadí textu:", @@ -1393,7 +1393,7 @@ "LabelUrl": "URL:", "LabelUserAgent": "User agent:", "LabelUserRemoteClientBitrateLimitHelp": "Přepíše výchozí globální hodnotu nastavenou v nastavení přehrávání serveru.", - "LabelVideo": "Video:", + "LabelVideo": "Video", "LabelVideoCodec": "Video kodek:", "LeaveBlankToNotSetAPassword": "Můžete ponechat prázdné pro nastavení bez hesla.", "LetterButtonAbbreviation": "A", diff --git a/src/strings/da.json b/src/strings/da.json index 74d7d21b8a..22ddc52200 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1268,7 +1268,7 @@ "Label3DFormat": "3D format:", "LabelAlbum": "Album:", "LabelArtist": "Kunstner", - "LabelAudio": "Lyd:", + "LabelAudio": "Lyd", "LabelBitrateMbps": "Bitrate (Mbps):", "LabelBlockContentWithTags": "Blokér filer med mærkerne:", "LabelBurnSubtitles": "Brænd undertekster:", @@ -1313,7 +1313,7 @@ "LabelSortOrder": "Sorteringsorden:", "LabelSoundEffects": "Lydeffekter:", "LabelStatus": "Status:", - "LabelSubtitles": "Undertekster:", + "LabelSubtitles": "Undertekster", "LabelSyncNoTargetsHelp": "Det ser ud til at du ikke har nogen apps der understøtter offline hentning.", "LabelTVHomeScreen": "TV modus hjemmeskærm:", "LabelTag": "Mærke:", @@ -1327,7 +1327,7 @@ "LabelUrl": "Link:", "LabelVersion": "Version:", "LabelVersionNumber": "Version {0}", - "LabelVideo": "Video:", + "LabelVideo": "Video", "LabelVideoCodec": "Video codec:", "LabelWindowBackgroundColor": "Tekst baggrundsfarve:", "LabelXDlnaCap": "X-DLNA begrænsning:", diff --git a/src/strings/de.json b/src/strings/de.json index 861c57ef4b..97cb1f959e 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -758,7 +758,7 @@ "LabelSubtitleDownloaders": "Untertitel Downloader:", "LabelSubtitleFormatHelp": "Beispiel: srt", "LabelSubtitlePlaybackMode": "Untertitelmodus:", - "LabelSubtitles": "Untertitel:", + "LabelSubtitles": "Untertitel", "LabelSupportedMediaTypes": "Unterstüzte Medientypen:", "LabelTVHomeScreen": "TV-Mode Startseite:", "LabelTextBackgroundColor": "Hintergrundfarbe des Textes:", @@ -1305,7 +1305,7 @@ "Home": "Startseite", "Horizontal": "Horizontal", "LabelAlbum": "Album:", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelCache": "Cache:", "LabelFormat": "Format:", "LabelH264Crf": "H264 Encodierungs-CRF:", @@ -1324,7 +1324,7 @@ "LabelTypeText": "Text", "LabelVersion": "Version:", "LabelVersionNumber": "Version {0}", - "LabelVideo": "Video:", + "LabelVideo": "Video", "LeaveBlankToNotSetAPassword": "Du kannst dieses Feld frei lassen um kein Passwort zu setzen.", "LinksValue": "Links: {0}", "MessageImageFileTypeAllowed": "Nur JPEG- und PNG-Dateien werden unterstützt.", diff --git a/src/strings/el.json b/src/strings/el.json index 8e0b77ac17..3856480fd0 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -450,7 +450,7 @@ "LabelAppNameExample": "Παράδειγμα: Sickbeard, NzbDrone", "LabelArtists": "Καλλιτέχνες:", "LabelArtistsHelp": "Ξεχωρίστε πολλαπλά χρησιμοποιώντας;", - "LabelAudio": "Ήχος:", + "LabelAudio": "Ήχος", "LabelAudioLanguagePreference": "Προτιμώμενη γλώσσα ήχου:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Αυτόματη ανανέωση μεταδεδομένων από το internet:", "LabelBirthDate": "Ημερομηνία Γενεθλίων:", @@ -664,7 +664,7 @@ "LabelStopWhenPossible": "Διακοπή όταν είναι δυνατόν:", "LabelSubtitleFormatHelp": "Παράδειγμα: srt", "LabelSubtitlePlaybackMode": "Λειτουργία υποτίτλων:", - "LabelSubtitles": "Υπότιτλοι:", + "LabelSubtitles": "Υπότιτλοι", "LabelSupportedMediaTypes": "Υποστηριζόμενοι τύποι μέσων:", "LabelTVHomeScreen": "Αρχική οθόνη λειτουργίας τηλεόρασης:", "LabelTag": "Ετικέτα:", @@ -694,7 +694,7 @@ "LabelVersion": "Έκδοση:", "LabelVersionInstalled": "{0} εγκαταστήθηκε", "LabelVersionNumber": "Έκδοση {0}", - "LabelVideo": "Βίντεο:", + "LabelVideo": "Βίντεο", "LabelXDlnaCapHelp": "Καθορίζει το περιεχόμενο του στοιχείου X_DLNACAP στο urn:schemas-dlna-org:device-1-0 namespace.", "LabelXDlnaDocHelp": "Καθορίζει το περιεχόμενο του στοιχείου X_DLNACAP στο urn:schemas-dlna-org:device-1-0 namespace.", "LabelYear": "Έτος:", diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index d5ed1acde5..757ea55266 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -806,7 +806,7 @@ "LabelTag": "Tag:", "LabelTVHomeScreen": "TV mode home screen:", "LabelSupportedMediaTypes": "Supported Media Types:", - "LabelSubtitles": "Subtitles:", + "LabelSubtitles": "Subtitles", "LabelSubtitlePlaybackMode": "Subtitle mode:", "LabelSubtitleFormatHelp": "Example: srt", "LabelSubtitleDownloaders": "Subtitle downloaders:", @@ -1167,7 +1167,7 @@ "LabelAudioChannels": "Audio channels:", "LabelAudioBitrate": "Audio bitrate:", "LabelAudioBitDepth": "Audio bit depth:", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelArtistsHelp": "Separate multiple using ;", "LabelArtists": "Artists:", "LabelAppName": "App name", @@ -1336,7 +1336,7 @@ "MediaInfoSoftware": "Software", "ValueOneSeries": "1 series", "MediaInfoBitrate": "Bitrate", - "LabelVideo": "Video:", + "LabelVideo": "Video", "LabelPrevious": "Previous", "LabelPostProcessorArgumentsHelp": "Use {path} as the path to the recording file.", "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart to extrathumbs field", diff --git a/src/strings/es-mx.json b/src/strings/es-mx.json index 76679b698f..1aff47675c 100644 --- a/src/strings/es-mx.json +++ b/src/strings/es-mx.json @@ -781,7 +781,7 @@ "LabelSubtitleDownloaders": "Recolectores de Subtitulos:", "LabelSubtitleFormatHelp": "Ejemplo: srt", "LabelSubtitlePlaybackMode": "Modo de subtítulo:", - "LabelSubtitles": "Subtítulos:", + "LabelSubtitles": "Subtítulos", "LabelSupportedMediaTypes": "Tipos de Medios Soportados:", "LabelTVHomeScreen": "Modo de pantalla de TV:", "LabelTag": "Etiqueta:", @@ -1365,7 +1365,7 @@ "HeaderRestartingServer": "Reiniciando servidor", "HeaderVideos": "Videos", "Horizontal": "Horizontal", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelAuthProvider": "Proveedor de autenticación:", "LabelDynamicExternalId": "{0} Id:", "LabelPasswordResetProvider": "Proveedor de restablecimiento de contraseña:", @@ -1378,7 +1378,7 @@ "DashboardServerName": "Servidor: {0}", "DashboardOperatingSystem": "Sistema operativo: {0}", "DashboardArchitecture": "Arquitectura: {0}", - "LabelVideo": "Video:", + "LabelVideo": "Video", "LabelWeb": "Web: ", "LaunchWebAppOnStartup": "Iniciar la interfaz web al iniciar el servidor", "LaunchWebAppOnStartupHelp": "Abre el cliente web en su navegador web predeterminado cuando se inicia el servidor. Esto no ocurrirá cuando se utilice la función de reinicio del servidor.", diff --git a/src/strings/es.json b/src/strings/es.json index 2f3fb2769b..6666964c49 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1288,7 +1288,7 @@ "HeaderVideoType": "Tipo de vídeo", "Home": "Inicio", "Horizontal": "Horizontal", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelBurnSubtitles": "Incrustar subtítulos:", "LabelDashboardTheme": "Tema para la interfaz del servidor:", "LabelDateTimeLocale": "Fecha y hora local:", @@ -1306,10 +1306,10 @@ "LabelSortBy": "Ordenar por:", "LabelSortOrder": "Orden:", "LabelSoundEffects": "Efectos de sonido:", - "LabelSubtitles": "Subtítulos:", + "LabelSubtitles": "Subtítulos", "LabelTVHomeScreen": "Modo televisión en pantalla de inicio:", "LabelVersion": "Versión:", - "LabelVideo": "Vídeo:", + "LabelVideo": "Vídeo", "LabelXDlnaCap": "X-DNLA cap:", "LabelXDlnaDoc": "X-DLNA doc:", "LearnHowYouCanContribute": "Descubre cómo puedes contribuir.", diff --git a/src/strings/fr.json b/src/strings/fr.json index 465eca15f1..aab47271c0 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -776,7 +776,7 @@ "LabelSubtitleDownloaders": "Outils de téléchargement de sous-titres :", "LabelSubtitleFormatHelp": "Exemple : srt", "LabelSubtitlePlaybackMode": "Mode des sous-titres :", - "LabelSubtitles": "Sous-titres :", + "LabelSubtitles": "Sous-titres", "LabelSupportedMediaTypes": "Types de médias supportés :", "LabelTVHomeScreen": "Écran d'accueil du mode TV :", "LabelTag": "Étiquette :", @@ -813,7 +813,7 @@ "LabelValue": "Valeur :", "LabelVersion": "Version :", "LabelVersionInstalled": "{0} installé(s)", - "LabelVideo": "Vidéo :", + "LabelVideo": "Vidéo", "LabelXDlnaCap": "Cap X-DLNA :", "LabelXDlnaCapHelp": "Détermine le contenu de l'élément X_DLNACAP dans l'espace de nom urn:schemas-dlna-org:device-1-0.", "LabelXDlnaDoc": "Doc X-DLNA :", @@ -1339,7 +1339,7 @@ "HeaderTuners": "Égaliseur", "Horizontal": "Horizontal", "Images": "Images", - "LabelAudio": "Audio :", + "LabelAudio": "Audio", "LabelVersionNumber": "Version {0}", "LeaveBlankToNotSetAPassword": "Laissez vide pour ne pas définir de mot de passe.", "Logo": "Logo", diff --git a/src/strings/hu.json b/src/strings/hu.json index 69ce7acedd..f8dfecb6c0 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -231,7 +231,7 @@ "LabelAllowServerAutoRestart": "Automatikus újraindítás engedélyezése a szervernek a frissítések telepítéséhez", "LabelAllowServerAutoRestartHelp": "A szerver csak akkor indul újra ha nincs felhasználói tevékenység.", "LabelArtists": "Előadók:", - "LabelAudio": "Audió:", + "LabelAudio": "Audió", "LabelAudioLanguagePreference": "Audió nyelvének beállítása:", "LabelBirthYear": "Születési év:", "LabelCachePath": "Gyorsítótár útvonal:", @@ -319,7 +319,7 @@ "LabelStopping": "Megállítás", "LabelSubtitleFormatHelp": "Például: srt", "LabelSubtitlePlaybackMode": "Felirat mód:", - "LabelSubtitles": "Feliratok:", + "LabelSubtitles": "Feliratok", "LabelTagline": "Címke:", "LabelTheme": "Kinézet:", "LabelTime": "Idő:", @@ -336,7 +336,7 @@ "LabelUsername": "Felhasználónév:", "LabelVersionInstalled": "{0} telepítve", "LabelVersionNumber": "Verzió {0}", - "LabelVideo": "Videó:", + "LabelVideo": "Videó", "LabelYear": "Év:", "LabelYourFirstName": "Keresztneved:", "LabelYoureDone": "Készen vagy!", diff --git a/src/strings/it.json b/src/strings/it.json index 6ba6df0d12..cf9e06910e 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -749,7 +749,7 @@ "LabelSubtitleDownloaders": "Downloader sottotitoli:", "LabelSubtitleFormatHelp": "Esempio: srt", "LabelSubtitlePlaybackMode": "Modalità Sottotitolo:", - "LabelSubtitles": "Sottotitoli:", + "LabelSubtitles": "Sottotitoli", "LabelSupportedMediaTypes": "Tipi di media supportati:", "LabelTVHomeScreen": "Schermata iniziale della modalità TV:", "LabelTagline": "Slogan:", @@ -1317,7 +1317,7 @@ "HeaderRestartingServer": "Riavvio Server", "Home": "Home", "LabelAlbum": "Album:", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelCache": "Cache:", "ButtonAddImage": "Aggiungi Immagine", "CopyStreamURL": "Copia Indirizzo dello Stream", @@ -1398,7 +1398,7 @@ "LabelTranscodingProgress": "Progresso di trascodifica:", "DashboardVersionNumber": "Versione: {0}", "DashboardServerName": "Server: {0}", - "LabelVideo": "Video:", + "LabelVideo": "Video", "DashboardArchitecture": "Architettura: {0}", "LabelWeb": "Web:", "LaunchWebAppOnStartup": "Lancia l'interfaccia web quando viene avviato il server", diff --git a/src/strings/ja.json b/src/strings/ja.json index 9a881bce0d..4a15d798c3 100644 --- a/src/strings/ja.json +++ b/src/strings/ja.json @@ -558,7 +558,7 @@ "LabelOriginalAspectRatio": "元のアスペクト比:", "LabelPrevious": "前へ", "LabelServerName": "サーバー名:", - "LabelSubtitles": "字幕:", + "LabelSubtitles": "字幕", "LabelSupportedMediaTypes": "サポートされているメディアタイプ:", "LabelTVHomeScreen": "TVモードホームスクリーン:", "LabelTextColor": "文字色:", @@ -858,7 +858,7 @@ "LabelAllowedRemoteAddresses": "リモートIPアドレスフィルター:", "LabelAppNameExample": "例: スケートボード、ソナー", "LabelArtists": "アーティスト:", - "LabelAudio": "音声:", + "LabelAudio": "音声", "LabelAudioBitDepth": "音声ビット深度:", "LabelAudioBitrate": "音声ビットレート:", "LabelAudioChannels": "音声チャンネル:", @@ -963,7 +963,7 @@ "DashboardVersionNumber": "バージョン: {0}", "DashboardServerName": "サーバー: {0}", "DashboardArchitecture": "アーキテクチャ: {0}", - "LabelVideo": "映像:", + "LabelVideo": "映像", "LabelVideoBitrate": "映像ビットレート:", "LabelYourFirstName": "名前:", "Share": "共有", diff --git a/src/strings/kk.json b/src/strings/kk.json index 665091106d..852e408a3b 100644 --- a/src/strings/kk.json +++ b/src/strings/kk.json @@ -536,7 +536,7 @@ "LabelAppNameExample": "Mysaly: Sickbeard, Sonarr", "LabelArtists": "Oryndaýshylar:", "LabelArtistsHelp": "Birneshýin mynaýmen bólińiz ;", - "LabelAudio": "Dybys:", + "LabelAudio": "Dybys", "LabelAudioLanguagePreference": "Dybys tiliniń teńshelimi:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Metaderekterdi Internetten avtomatty jańartý:", "LabelBindToLocalNetworkAddress": "Jergilikti jeli mekenjaıyna baılastyrý:", @@ -807,7 +807,7 @@ "LabelSubtitleDownloaders": "Sýbtıtrler júkteýshileri:", "LabelSubtitleFormatHelp": "Mysal: srt", "LabelSubtitlePlaybackMode": "Sýbtıtr rejimi:", - "LabelSubtitles": "Sýbtıtrler:", + "LabelSubtitles": "Sýbtıtrler", "LabelSupportedMediaTypes": "Qoldaýdaǵy tasyǵyshderekter túrleri:", "LabelTVHomeScreen": "TD rejimindegi basqy ekran:", "LabelTag": "Teg:", @@ -849,7 +849,7 @@ "LabelVersion": "Nusqa:", "LabelVersionInstalled": "{0} ornatylǵan", "LabelVersionNumber": "Nýsqasy: {0}", - "LabelVideo": "Beıne:", + "LabelVideo": "Beıne", "LabelXDlnaCap": "X-DLNA sıpattary:", "LabelXDlnaCapHelp": "urn:schemas-dlna-org:device-1-0 ataýlar keńistigindegi X_DLNACAP elementi mazmunyn anyqtaıdy.", "LabelXDlnaDoc": "X-DLNA tásimi:", diff --git a/src/strings/ko.json b/src/strings/ko.json index b96642d8d1..833f8ccb10 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1025,7 +1025,7 @@ "LabelWeb": "웹:", "LabelVideoCodec": "비디오 코덱:", "LabelVideoBitrate": "비디오 비트레이트:", - "LabelVideo": "비디오:", + "LabelVideo": "비디오", "DashboardArchitecture": "아키텍처: {0}", "DashboardOperatingSystem": "운영체제: {0}", "DashboardServerName": "서버: {0}", @@ -1042,7 +1042,7 @@ "LabelTheme": "테마:", "LabelTextSize": "글자 크기:", "LabelTextColor": "글자 색:", - "LabelSubtitles": "자막:", + "LabelSubtitles": "자막", "LabelSubtitleFormatHelp": "예시: srt", "LabelSubtitleDownloaders": "자막 다운로더:", "LabelStopping": "중지", @@ -1082,7 +1082,7 @@ "LabelAudioCodec": "오디오 코덱:", "LabelAudioChannels": "오디오 채널:", "LabelAudioBitrate": "오디오 비트레이트:", - "LabelAudio": "오디오:", + "LabelAudio": "오디오", "Items": "항목", "Kids": "어린이", "Home": "홈", diff --git a/src/strings/lt-lt.json b/src/strings/lt-lt.json index 07d1b790af..c87628316c 100644 --- a/src/strings/lt-lt.json +++ b/src/strings/lt-lt.json @@ -784,7 +784,7 @@ "HeaderLoginFailure": "Prisijungimo klaida", "Hide": "Paslėpti", "LabelAll": "Visi", - "LabelAudio": "Garsas:", + "LabelAudio": "Garsas", "LabelCancelled": "Atšaukta", "LabelCertificatePassword": "Sertifikato slaptažodis:", "LabelCertificatePasswordHelp": "Jei sertifikatui reikalingas slaptažodis, jį įveskite čia.", diff --git a/src/strings/lv.json b/src/strings/lv.json index 660ebcd971..8c19b23ad7 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -52,7 +52,7 @@ "LabelVideoResolution": "Video izšķirtspēja:", "LabelVideoCodec": "Video kodeks:", "LabelVideoBitrate": "Video bitu-ātrums:", - "LabelVideo": "Video:", + "LabelVideo": "Video", "DashboardArchitecture": "Arhitektūra: {0}", "DashboardOperatingSystem": "Operētājsistēma: {0}", "DashboardServerName": "Serveris: {0}", @@ -85,7 +85,7 @@ "LabelTag": "Tags:", "LabelTVHomeScreen": "TV režīma mājas ekrāns:", "LabelSupportedMediaTypes": "Atbalstītie Multivides Veidi:", - "LabelSubtitles": "Subtitri:", + "LabelSubtitles": "Subtitri", "LabelSubtitlePlaybackMode": "Subtitru veids:", "LabelSubtitleFormatHelp": "Piemērs: srt", "LabelSubtitleDownloaders": "Subtitru lejupielādētāji:", @@ -222,7 +222,7 @@ "LabelBirthYear": "Dzimšanas gads:", "LabelBirthDate": "Dzimšanas datums:", "LabelAudioLanguagePreference": "Ieteicamā audio valoda:", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelArtistsHelp": "Atdali vairākus izmantojot ;", "LabelArtists": "Izpildītājs:", "LabelAppNameExample": "Piemēram: Sickbeard, Sonarr", diff --git a/src/strings/nb.json b/src/strings/nb.json index 373cdc8a55..3d863d17e0 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1179,7 +1179,7 @@ "MediaInfoSampleRate": "Samplingsfrekvens", "MediaInfoStreamTypeData": "Data", "Option3D": "3D", - "LabelVideo": "Video:", + "LabelVideo": "Video", "OptionAlbum": "Album", "OptionAlbumArtist": "Albumartist", "Filters": "Filtre", @@ -1313,7 +1313,7 @@ "Horizontal": "Horisontal", "HttpsRequiresCert": "For å bruke sikker tilkobling må du legge inn et klarert SSL-sertifikat, for eksempel fra Let's Encrypt. Du må enten legge inn et sertifikat, eller deaktivere sikker tilkobling.", "LabelAlbumArtPN": "Albumomslag PN:", - "LabelAudio": "Lyd:", + "LabelAudio": "Lyd", "LabelAuthProvider": "Autentiserings-metode:", "LabelBitrate": "Bithastighet:", "LabelBurnSubtitles": "Brenn inn undertekst:", @@ -1342,7 +1342,7 @@ "LabelSpecialSeasonsDisplayName": "Visningsnavn for spesialsesong:", "LabelStatus": "Status:", "LabelSubtitleDownloaders": "Kilder for undertekst:", - "LabelSubtitles": "Undertekster:", + "LabelSubtitles": "Undertekster", "LabelTVHomeScreen": "Hjemskjerm for TV-modus:", "LabelTag": "Tagg:", "LabelTextBackgroundColor": "Tekstbagrunnsfarge:", diff --git a/src/strings/nl.json b/src/strings/nl.json index 5ca394dc26..2acfe83414 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -744,7 +744,7 @@ "LabelSubtitleDownloaders": "Ondertiteldownloaders:", "LabelSubtitleFormatHelp": "Voorbeeld: srt", "LabelSubtitlePlaybackMode": "Ondertitel mode:", - "LabelSubtitles": "Ondertitels:", + "LabelSubtitles": "Ondertitels", "LabelSupportedMediaTypes": "Ondersteunde Media Types:", "LabelTVHomeScreen": "TV mode begin scherm", "LabelTextBackgroundColor": "Tekst achtergrond kleur:", @@ -1310,7 +1310,7 @@ "ItemCount": "{0} items", "Items": "Items", "LabelAlbum": "Album:", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelAuthProvider": "Authenticatie Aanbieder:", "LabelCache": "Cache:", "LabelDidlMode": "DIDL mode:", @@ -1429,7 +1429,7 @@ "LabelXDlnaCap": "X-DLNA cap:", "DashboardVersionNumber": "Versie: {0}", "DashboardArchitecture": "Architectuur: {0}", - "LabelVideo": "Video:", + "LabelVideo": "Video", "MediaInfoStreamTypeAudio": "Audio", "MediaInfoStreamTypeData": "Data", "MediaInfoStreamTypeSubtitle": "Ondertiteling", diff --git a/src/strings/pl.json b/src/strings/pl.json index 71a4ba06e9..32e9a97980 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -523,7 +523,7 @@ "LabelAppNameExample": "Przykład: Sickbeard, Sonarr", "LabelArtists": "Wykonawcy:", "LabelArtistsHelp": "Oddzielaj używając ;", - "LabelAudio": "Dźwięk:", + "LabelAudio": "Dźwięk", "LabelAudioLanguagePreference": "Preferowany język ścieżki dźwiękowej:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Odświeżaj automatycznie metadane z Internetu:", "LabelBindToLocalNetworkAddress": "Przypisz do lokalnego adresu sieciowego:", @@ -789,7 +789,7 @@ "LabelSubtitleDownloaders": "Dostawcy napisów:", "LabelSubtitleFormatHelp": "Przykład: srt", "LabelSubtitlePlaybackMode": "Tryb napisów:", - "LabelSubtitles": "Napisy:", + "LabelSubtitles": "Napisy", "LabelSupportedMediaTypes": "Obsługiwane typy mediów:", "LabelTVHomeScreen": "Ekran startowy trybu telewizyjnego:", "LabelTag": "Znacznik:", @@ -827,7 +827,7 @@ "LabelVersion": "Wersja:", "LabelVersionInstalled": "Zainstalowano {0}", "LabelVersionNumber": "Wersja {0}", - "LabelVideo": "Wideo:", + "LabelVideo": "Wideo", "LabelXDlnaCapHelp": "Określa zawartość elementu X_DLNACAP w przestrzeni nazw urn:schemas-dlna-org:device-1-0.", "LabelXDlnaDocHelp": "Określa zawartość elementu X_DLNADOC w przestrzeni nazw urn:schemas-dlna-org:device-1-0.", "LabelYear": "Rok:", diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index c5b426fead..f1bffad58c 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -506,7 +506,7 @@ "LabelAppNameExample": "Exemplo: Sickbeard, Sonarr", "LabelArtists": "Artistas:", "LabelArtistsHelp": "Separa vários usando ;", - "LabelAudio": "Áudio:", + "LabelAudio": "Áudio", "LabelAudioLanguagePreference": "Idioma preferido de áudio:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Atualizar automaticamente os metadados da internet:", "LabelBindToLocalNetworkAddress": "Vincular a um endereço de rede local:", @@ -768,7 +768,7 @@ "LabelSubtitleDownloaders": "Downloaders de legendas:", "LabelSubtitleFormatHelp": "Exemplo: srt", "LabelSubtitlePlaybackMode": "Modo de legenda:", - "LabelSubtitles": "Legendas:", + "LabelSubtitles": "Legendas", "LabelSupportedMediaTypes": "Tipos de Mídia Suportados:", "LabelTVHomeScreen": "Tela inicial do modo TV:", "LabelTagline": "Slogan:", @@ -804,7 +804,7 @@ "LabelVersion": "Versão:", "LabelVersionInstalled": "{0} instalado", "LabelVersionNumber": "Versão {0}", - "LabelVideo": "Vídeo:", + "LabelVideo": "Vídeo", "LabelXDlnaCapHelp": "Determina o conteúdo do elemento X_DLNACAP no namespace urn:schemas-dlna-org:device-1-0.", "LabelXDlnaDocHelp": "Determina o conteúdo do elemento X_DLNADOC no namespace urn:schemas-dlna-org:device-1-0.", "LabelYear": "Ano:", diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index f80bc1f5aa..d4a81580f2 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -955,7 +955,7 @@ "LabelBindToLocalNetworkAddress": "Endereço local para colocar o servidor à escuta:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Atualizar metadados automaticamente a partir da Internet:", "LabelAuthProvider": "Provedor de autenticação:", - "LabelAudio": "Áudio:", + "LabelAudio": "Áudio", "LabelAllowedRemoteAddressesMode": "Tipo de filtro de IP remoto:", "LabelAllowedRemoteAddresses": "Filtro de IP remoto:", "LabelAllowHWTranscoding": "Permitir transcodificação por hardware", @@ -1306,7 +1306,7 @@ "LabelWeb": "Web:", "LabelVideoCodec": "Codec de vídeo:", "LabelVideoBitrate": "Taxa de bits de vídeo:", - "LabelVideo": "Vídeo:", + "LabelVideo": "Vídeo", "DashboardArchitecture": "Arquitetura: {0}", "DashboardOperatingSystem": "Sistema Operativo: {0}", "DashboardServerName": "Servidor: {0}", @@ -1320,7 +1320,7 @@ "LabelTextColor": "Côr do texto:", "LabelTextBackgroundColor": "Côr de fundo do texto:", "LabelTag": "Etiqueta:", - "LabelSubtitles": "Legendas:", + "LabelSubtitles": "Legendas", "LabelSportsCategories": "Categorias de Desporto:", "FetchingData": "A transferir informação adicional", "List": "lista", diff --git a/src/strings/pt.json b/src/strings/pt.json index a7cd41299d..57787e93eb 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -450,7 +450,7 @@ "LabelAudioCodec": "Codec de áudio:", "LabelAudioChannels": "Canais de áudio:", "LabelAudioBitrate": "Taxa de bits de áudio:", - "LabelAudio": "Áudio:", + "LabelAudio": "Áudio", "LabelArtistsHelp": "Separe múltiplos com ;", "LabelArtists": "Artistas:", "LabelAppNameExample": "Exemplo: Sickbeard, NzbDrone", diff --git a/src/strings/ro.json b/src/strings/ro.json index a5b938e7ee..427ccff485 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -653,7 +653,7 @@ "LabelTag": "Etichetă:", "LabelTVHomeScreen": "Ecran de pornire în modul TV:", "LabelSupportedMediaTypes": "Tipuri media suportate:", - "LabelSubtitles": "Subtitrări:", + "LabelSubtitles": "Subtitrări", "LabelSubtitlePlaybackMode": "Mod subtitrare:", "LabelSubtitleFormatHelp": "Exemplu: srt", "LabelSubtitleDownloaders": "Descărcare subtitrări:", @@ -903,7 +903,7 @@ "LabelAudioChannels": "Canale audio:", "LabelAudioBitrate": "Rata de biți audio:", "LabelAudioBitDepth": "Adâncimea bitului audio:", - "LabelAudio": "Audio:", + "LabelAudio": "Audio", "LabelAppNameExample": "Exemplu: Sickbeard, Sonarr", "LabelAppName": "Nume app", "LabelAllowedRemoteAddressesMode": "Modul de filtrare a adresei IP de la distanță:", @@ -1146,7 +1146,7 @@ "LabelWeb": "Web:", "LabelVideoCodec": "Codec video:", "LabelVideoBitrate": "Rata de biți a video-ului:", - "LabelVideo": "Video:", + "LabelVideo": "Video", "DashboardArchitecture": "Arhitectură: {0}", "DashboardOperatingSystem": "Sistem de operare: {0}", "DashboardServerName": "Server: {0}", diff --git a/src/strings/ru.json b/src/strings/ru.json index 4986855da5..d50bcaccaa 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -525,7 +525,7 @@ "LabelAppNameExample": "Пример: Sickbeard, Sonarr", "LabelArtists": "Исполнители:", "LabelArtistsHelp": "Для разделения используйте точку с запятой ;", - "LabelAudio": "Аудио:", + "LabelAudio": "Аудио", "LabelAudioLanguagePreference": "Выбор языка аудио:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Автоматически обновлять метаданные из Интернета:", "LabelBindToLocalNetworkAddress": "Привязка к адресу в локальной сети:", @@ -792,7 +792,7 @@ "LabelSubtitleDownloaders": "Загрузчики субтитров:", "LabelSubtitleFormatHelp": "Пример: srt", "LabelSubtitlePlaybackMode": "Режим субтитров:", - "LabelSubtitles": "Субтитры:", + "LabelSubtitles": "Субтитры", "LabelSupportedMediaTypes": "Поддерживаемые типы медиаданных:", "LabelTVHomeScreen": "Главная страница ТВ-режима:", "LabelTag": "Тег:", @@ -830,7 +830,7 @@ "LabelVersion": "Версия:", "LabelVersionInstalled": "Установлена: {0}", "LabelVersionNumber": "Версия {0}", - "LabelVideo": "Видео:", + "LabelVideo": "Видео", "LabelXDlnaCap": "Свойства X-Dlna:", "LabelXDlnaCapHelp": "Определяется содержание из элемента X_DLNACAP во пространстве имён urn:schemas-dlna-org:device-1-0.", "LabelXDlnaDoc": "Схема X-Dlna:", diff --git a/src/strings/sk.json b/src/strings/sk.json index 2727fe01d1..e0bebec52f 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -471,7 +471,7 @@ "LabelStartWhenPossible": "Spustiť akonáhle je možné:", "LabelStatus": "Stav:", "LabelSubtitleFormatHelp": "Príklad: srt", - "LabelSubtitles": "Titulky:", + "LabelSubtitles": "Titulky", "LabelSupportedMediaTypes": "Podporované typy médií:", "LabelTextBackgroundColor": "Farba pozadia textu:", "LabelTextColor": "Farba textu:", @@ -960,7 +960,7 @@ "HeaderVideoType": "Typ videa", "HeaderVideoTypes": "Typy videí", "LabelAirsBeforeSeason": "Vysielané pred sériou:", - "LabelAudio": "Zvuk:", + "LabelAudio": "Zvuk", "LabelBlockContentWithTags": "Blokovať položky s tagmi:", "LabelDisplayMode": "Režim zobrazenia:", "LabelDisplaySpecialsWithinSeasons": "Zobraziť špeciálne epizódy v sérií, v ktorej boli odvysielané", @@ -1327,7 +1327,7 @@ "LabelXDlnaCap": "X-DLNA cap:", "LabelVideoCodec": "Video kodek:", "LabelVideoBitrate": "Dátový tok videa:", - "LabelVideo": "Video:", + "LabelVideo": "Video", "LabelVaapiDeviceHelp": "Toto je vykreslovací node, ktorý sa používa na hardvérovú akceleráciu.", "LabelVaapiDevice": "VA API zariadenie:", "LabelUserRemoteClientBitrateLimitHelp": "Prepíše východzie globálne hodnoty nastavené v nastavení prehrávania servera.", diff --git a/src/strings/sl-si.json b/src/strings/sl-si.json index 9b74efe3a7..a692edbd3f 100644 --- a/src/strings/sl-si.json +++ b/src/strings/sl-si.json @@ -594,7 +594,7 @@ "LabelAppName": "Ime aplikacije", "LabelAppNameExample": "Primer: Sickbeard, Sonarr", "LabelArtistsHelp": "Loči več z ;", - "LabelAudio": "Zvok:", + "LabelAudio": "Zvok", "LabelAudioBitrate": "Bitna hitrost zvoka:", "LabelAudioChannels": "Kanali zvoka:", "LabelAudioCodec": "Zvočni kodek:", @@ -1185,7 +1185,7 @@ "LabelTextBackgroundColor": "Barva ozadja besedila:", "LabelTag": "Oznaka:", "LabelSupportedMediaTypes": "Podprti tipi predstavnosti:", - "LabelSubtitles": "Podnapisi:", + "LabelSubtitles": "Podnapisi", "LabelSubtitlePlaybackMode": "Način podnapisov:", "LabelSubtitleFormatHelp": "Primer: srt", "LabelSubtitleDownloaders": "Pridobivanje podnapisov:", diff --git a/src/strings/sv.json b/src/strings/sv.json index 2dd5ec2dc2..595780f070 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -480,7 +480,7 @@ "LabelAppNameExample": "Exempel: Sickbeard, Sonarr", "LabelArtists": "Artister:", "LabelArtistsHelp": "Separera med vid flera ;", - "LabelAudio": "Ljud:", + "LabelAudio": "Ljud", "LabelAudioLanguagePreference": "Önskat ljudspråk:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Uppdatera metadata automatiskt ifrån internet:", "LabelBindToLocalNetworkAddress": "Knyt till lokal nätverksadress:", @@ -740,7 +740,7 @@ "LabelSubtitleDownloaders": "Undertextskällor:", "LabelSubtitleFormatHelp": "Exempel: srt", "LabelSubtitlePlaybackMode": "Undertextläge:", - "LabelSubtitles": "Undertexter:", + "LabelSubtitles": "Undertexter", "LabelSupportedMediaTypes": "Mediaformat som stöds:", "LabelTVHomeScreen": "Hemskärm i TV-läge:", "LabelTag": "Etikett:", @@ -1451,7 +1451,7 @@ "LabelVideoResolution": "Video upplösning:", "LabelVideoCodec": "Video codec:", "LabelVideoBitrate": "Video bitrate:", - "LabelVideo": "Video:", + "LabelVideo": "Video", "DashboardArchitecture": "Arkitektur: {0}", "DashboardOperatingSystem": "Operativsystem: {0}", "DashboardServerName": "Server: {0}", diff --git a/src/strings/tr.json b/src/strings/tr.json index 7d2afd756f..5588a3091e 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -649,7 +649,7 @@ "LabelAudioSampleRate": "Ses örnekleme hızı:", "LabelAudioCodec": "Ses kodeği:", "LabelAudioChannels": "Ses kanalları:", - "LabelAudio": "Ses:", + "LabelAudio": "Ses", "LabelAppName": "Uygulama adı", "LabelAllowHWTranscoding": "Donanım kod dönüştürmesine izin ver", "LabelAll": "Tümü", diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 271be38b5f..1a3aa1e4de 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -753,7 +753,7 @@ "LabelSubtitleDownloaders": "字幕下载器:", "LabelSubtitleFormatHelp": "例如:SRT", "LabelSubtitlePlaybackMode": "字幕模式:", - "LabelSubtitles": "字幕:", + "LabelSubtitles": "字幕", "LabelSupportedMediaTypes": "支持的媒体类型:", "LabelTVHomeScreen": "TV 模式主屏幕:", "LabelTag": "标签:", @@ -1327,7 +1327,7 @@ "HeaderFavoriteVideos": "最爱的视频", "HeaderVideoType": "视频类型", "Items": "项目", - "LabelAudio": "音频:", + "LabelAudio": "音频", "LabelServerName": "服务器名称:", "LabelTranscodePath": "转码路径:", "LabelTranscodes": "转码:", @@ -1363,7 +1363,7 @@ "LabelUserLoginAttemptsBeforeLockout": "用户被封禁前可尝试的次数:", "DashboardVersionNumber": "版本:{0}", "DashboardServerName": "服务器:{0}", - "LabelVideo": "视频:", + "LabelVideo": "视频", "LabelWeb": "网站:", "LeaveBlankToNotSetAPassword": "您可以将此字段留空以设置空密码。", "LinksValue": "链接:{0}", diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 59ab7fcdda..718cb4d572 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -915,7 +915,7 @@ "LabelAppNameExample": "例如: Sickbeard, Sonarr", "LabelArtists": "藝人:", "LabelArtistsHelp": "分開多重使用 ;", - "LabelAudio": "音頻:", + "LabelAudio": "音頻", "LabelAuthProvider": "認證提供者:", "LabelAutomaticallyRefreshInternetMetadataEvery": "從網路自動刷新數據:", "LabelBindToLocalNetworkAddress": "聯結本地網絡地址:", @@ -1044,7 +1044,7 @@ "LabelExtractChaptersDuringLibraryScan": "於媒體庫掃描時擷取章節圖片", "LabelHttpsPort": "本地 HTTPS 端口:", "LabelFailed": "失敗", - "LabelSubtitles": "字幕:", + "LabelSubtitles": "字幕", "LabelSupportedMediaTypes": "支援的媒體類型:", "LabelTextBackgroundColor": "文字背景顏色:", "LabelTextColor": "文字顏色:", @@ -1060,7 +1060,7 @@ "LabelTypeText": "文本", "LabelUsername": "使用者名稱:", "DashboardOperatingSystem": "作業系統:{0}", - "LabelVideo": "影片:", + "LabelVideo": "影片", "LabelVideoCodec": "影片編碼:", "LabelYear": "年:", "LatestFromLibrary": "最新 {0}", From 37ebb772e8443c602f61d7f8746b98aa008789e5 Mon Sep 17 00:00:00 2001 From: Fernando Date: Thu, 26 Mar 2020 19:25:34 +0000 Subject: [PATCH 77/86] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index 3d56ff56d8..f99c06410e 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -5,7 +5,7 @@ "AddToCollection": "Añadir a la colección", "AddToPlaylist": "Añadir a la lista de reproducción", "AddedOnValue": "Añadido {0}", - "AdditionalNotificationServices": "Visite el catálogo de complementos para instalar servicios de notificación adicionales.", + "AdditionalNotificationServices": "Visite el catálogo de extensiones para instalar servicios de notificación adicionales.", "Albums": "Álbumes", "Alerts": "Alertas", "All": "Todo", @@ -40,7 +40,7 @@ "Box": "Caja", "BoxRear": "Caja (trasera)", "Browse": "Explorar", - "BrowsePluginCatalogMessage": "Navegar el catalogo de complementos para ver los complementos disponibles.", + "BrowsePluginCatalogMessage": "Explore el catálogo de extensiones para ver las extensiones disponibles.", "ButtonAdd": "Añadir", "ButtonAddMediaLibrary": "Añadir biblioteca de medios", "ButtonAddScheduledTaskTrigger": "Agregar Activador", @@ -818,16 +818,16 @@ "MessageItemSaved": "Elemento grabado.", "MessageItemsAdded": "Ítems añadidos.", "MessageLeaveEmptyToInherit": "Dejar en blanco para heredar la configuración del elemento padre, o el valor global por defecto.", - "MessageNoAvailablePlugins": "No hay complementos disponibles.", + "MessageNoAvailablePlugins": "No hay extensiones disponibles.", "MessageNoMovieSuggestionsAvailable": "No hay sugerencias de películas disponibles. Comience ver y calificar sus películas y vuelva para ver las recomendaciones.", - "MessageNoPluginsInstalled": "No tiene complementos instalados.", + "MessageNoPluginsInstalled": "No hay extensiones instaladas.", "MessageNoTrailersFound": "No se han encontrado tráilers. Instala el canal de tráilers para mejorar su experiencia añadiendo una biblioteca de tráilers por internet.", "MessageNothingHere": "Nada aquí.", "MessagePasswordResetForUsers": "Se ha restablecido las contraseñas a los siguientes usuarios. Ahora pueden iniciar sesión con los códigos PIN que usaron para el restablecimiento.", "MessagePleaseEnsureInternetMetadata": "Asegúrate de que la descarga de etiquetas desde internet está activada.", "MessagePleaseWait": "Por favor, espere.", "MessagePluginConfigurationRequiresLocalAccess": "Para configurar este complemento inicia sesión en tu servidor local directamente.", - "MessagePluginInstallDisclaimer": "Los complementos creados por los miembros de la comunidad de Jellyfin son una buena forma de mejorar tu experiencia Jellyfin con características adicionales y otros beneficios. Antes de instalarlos considera los efectos que pueden tener en tu servidor Jellyfin, como escaneos de la biblioteca más largos, procesado en segundo plano adicional y una reducción de la estabilidad del sistema.", + "MessagePluginInstallDisclaimer": "Las extensiones creadas por los miembros de la comunidad de Jellyfin son una buena forma de mejorar tu experiencia con características adicionales y otros beneficios. Antes de instalarlos considera los efectos que pueden tener en tu servidor Jellyfin, como escaneos de la biblioteca más largos, procesado en segundo plano adicional y una reducción de la estabilidad del sistema.", "MessageReenableUser": "Mira abajo para reactivarlo", "MessageSettingsSaved": "Ajustes guardados.", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Se eliminarán las siguientes ubicaciones de medios de tu biblioteca:", @@ -1138,7 +1138,7 @@ "TabMovies": "Películas", "TabMusic": "Música", "TabMusicVideos": "Videos musicales", - "TabMyPlugins": "Mis complementos", + "TabMyPlugins": "Mis extensiones", "TabNetworks": "Cadenas", "TabNfoSettings": "Ajustes de NFO", "TabNotifications": "Notificaciones", @@ -1418,7 +1418,7 @@ "TV": "Televisión", "TabInfo": "Info", "TabLogs": "Registros", - "TabPlugins": "Complementos", + "TabPlugins": "Extensiones", "TabSeries": "Series", "TabTrailers": "Tráilers", "TagsValue": "Etiquetas: {0}", From 499f9835b48fa27847f368dd0c6f5737363a7644 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 26 Mar 2020 21:04:37 +0100 Subject: [PATCH 78/86] Remove Last Played label on details page --- src/assets/css/librarybrowser.css | 3 ++- src/controllers/itemdetailpage.js | 13 ------------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index b599ddde33..4e3f36921d 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -1140,11 +1140,12 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { } .trackSelections .selectContainer { - margin: 0 0 0.15em !important; + margin: 0 0 0.3em !important; } .detailsGroupItem .label, .trackSelections .selectContainer .selectLabel { + cursor: default; flex-grow: 0; flex-shrink: 0; flex-basis: 6.25em; diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 3d74ab4327..23a672751c 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -703,18 +703,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } } - function renderUserInfo(page, item) { - var lastPlayedElement = page.querySelector(".itemLastPlayed"); - - if (item.UserData && item.UserData.LastPlayedDate) { - lastPlayedElement.classList.remove("hide"); - var datePlayed = datetime.parseISO8601Date(item.UserData.LastPlayedDate); - lastPlayedElement.innerHTML = globalize.translate("DatePlayed") + ": " + datetime.toLocaleDateString(datePlayed) + " " + datetime.getDisplayTime(datePlayed); - } else { - lastPlayedElement.classList.add("hide"); - } - } - function renderLinks(linksElem, item) { var html = []; @@ -1123,7 +1111,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti reloadUserDataButtons(page, item); renderLinks(externalLinksElem, item); - renderUserInfo(page, item); renderTags(page, item); renderSeriesAirTime(page, item, isStatic); } From af3176af7c31e50bb94c6a12337b6966b8ff1a6a Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 26 Mar 2020 21:13:26 +0100 Subject: [PATCH 79/86] Fix oversized track selector on details page --- src/assets/css/librarybrowser.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 4e3f36921d..965adec943 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -1159,6 +1159,7 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { .trackSelections .selectContainer .detailTrackSelect { font-size: inherit; padding: 0; + overflow: hidden; } .trackSelections .selectContainer .selectArrowContainer .selectArrow { From f3b5c804a323a72803824e673936f3b72447b90b Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Thu, 19 Mar 2020 21:20:47 -0400 Subject: [PATCH 80/86] Migrate some easy components to ES6 --- package.json | 22 +- src/components/filedownloader.js | 28 +- src/components/filesystem.js | 29 +-- src/components/input/keyboardnavigation.js | 290 ++++++++++----------- src/components/sanitizefilename.js | 154 ++++++----- 5 files changed, 256 insertions(+), 267 deletions(-) diff --git a/package.json b/package.json index 2de78b821c..9bf666a74e 100644 --- a/package.json +++ b/package.json @@ -70,11 +70,23 @@ "whatwg-fetch": "^3.0.0" }, "babel": { - "presets": ["@babel/preset-env"], - "overrides": [{ - "test": ["src/components/cardbuilder/cardBuilder.js"], - "plugins": ["@babel/plugin-transform-modules-amd"] - }] + "presets": [ + "@babel/preset-env" + ], + "overrides": [ + { + "test": [ + "src/components/cardbuilder/cardBuilder.js", + "src/components/filedownloader.js", + "src/components/filesystem.js", + "src/components/input/keyboardnavigation.js", + "src/components/sanatizefilename.js" + ], + "plugins": [ + "@babel/plugin-transform-modules-amd" + ] + } + ] }, "browserslist": [ "last 2 Firefox versions", diff --git a/src/components/filedownloader.js b/src/components/filedownloader.js index 08b6176a02..d64e48967c 100644 --- a/src/components/filedownloader.js +++ b/src/components/filedownloader.js @@ -1,18 +1,14 @@ -define(['multi-download'], function (multiDownload) { - 'use strict'; +import multiDownload from "multi-download" - return { - download: function (items) { +export function download(items) { - if (window.NativeShell) { - items.map(function (item) { - window.NativeShell.downloadFile(item.url); - }); - } else { - multiDownload(items.map(function (item) { - return item.url; - })); - } - } - }; -}); + if (window.NativeShell) { + items.map(function (item) { + window.NativeShell.downloadFile(item.url); + }); + } else { + multiDownload(items.map(function (item) { + return item.url; + })); + } +} diff --git a/src/components/filesystem.js b/src/components/filesystem.js index aac697415e..3c14020d1a 100644 --- a/src/components/filesystem.js +++ b/src/components/filesystem.js @@ -1,18 +1,13 @@ -define([], function () { - 'use strict'; +export function fileExists(path) { + if (window.NativeShell && window.NativeShell.FileSystem) { + return window.NativeShell.FileSystem.fileExists(path); + } + return Promise.reject(); +} - return { - fileExists: function (path) { - if (window.NativeShell && window.NativeShell.FileSystem) { - return window.NativeShell.FileSystem.fileExists(path); - } - return Promise.reject(); - }, - directoryExists: function (path) { - if (window.NativeShell && window.NativeShell.FileSystem) { - return window.NativeShell.FileSystem.directoryExists(path); - } - return Promise.reject(); - } - }; -}); +export function directoryExists(path) { + if (window.NativeShell && window.NativeShell.FileSystem) { + return window.NativeShell.FileSystem.directoryExists(path); + } + return Promise.reject(); +} diff --git a/src/components/input/keyboardnavigation.js b/src/components/input/keyboardnavigation.js index 0359ee7430..bdcb733179 100644 --- a/src/components/input/keyboardnavigation.js +++ b/src/components/input/keyboardnavigation.js @@ -1,165 +1,157 @@ -define(["inputManager", "layoutManager"], function (inputManager, layoutManager) { - "use strict"; +import inputManager from "inputManager"; +import layoutManager from "layoutManager"; - /** - * Key name mapping. - */ - // Add more to support old browsers - var KeyNames = { - 13: "Enter", - 19: "Pause", - 27: "Escape", - 32: "Space", - 37: "ArrowLeft", - 38: "ArrowUp", - 39: "ArrowRight", - 40: "ArrowDown", - // MediaRewind (Tizen/WebOS) - 412: "MediaRewind", - // MediaStop (Tizen/WebOS) - 413: "MediaStop", - // MediaPlay (Tizen/WebOS) - 415: "MediaPlay", - // MediaFastForward (Tizen/WebOS) - 417: "MediaFastForward", - // Back (WebOS) - 461: "Back", - // Back (Tizen) - 10009: "Back", - // MediaTrackPrevious (Tizen) - 10232: "MediaTrackPrevious", - // MediaTrackNext (Tizen) - 10233: "MediaTrackNext", - // MediaPlayPause (Tizen) - 10252: "MediaPlayPause" - }; +/** + * Key name mapping. + */ +const KeyNames = { + 13: "Enter", + 19: "Pause", + 27: "Escape", + 32: "Space", + 37: "ArrowLeft", + 38: "ArrowUp", + 39: "ArrowRight", + 40: "ArrowDown", + // MediaRewind (Tizen/WebOS) + 412: "MediaRewind", + // MediaStop (Tizen/WebOS) + 413: "MediaStop", + // MediaPlay (Tizen/WebOS) + 415: "MediaPlay", + // MediaFastForward (Tizen/WebOS) + 417: "MediaFastForward", + // Back (WebOS) + 461: "Back", + // Back (Tizen) + 10009: "Back", + // MediaTrackPrevious (Tizen) + 10232: "MediaTrackPrevious", + // MediaTrackNext (Tizen) + 10233: "MediaTrackNext", + // MediaPlayPause (Tizen) + 10252: "MediaPlayPause" +}; - /** - * Keys used for keyboard navigation. - */ - var NavigationKeys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"]; +/** + * Keys used for keyboard navigation. + */ +const NavigationKeys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"]; - var hasFieldKey = false; - try { - hasFieldKey = "key" in new KeyboardEvent("keydown"); - } catch (e) { - console.error("error checking 'key' field"); +let hasFieldKey = false; +try { + hasFieldKey = "key" in new KeyboardEvent("keydown"); +} catch (e) { + console.error("error checking 'key' field"); +} + +if (!hasFieldKey) { + // Add [a..z] + for (let i = 65; i <= 90; i++) { + KeyNames[i] = String.fromCharCode(i).toLowerCase(); } +} - if (!hasFieldKey) { - // Add [a..z] - for (var i = 65; i <= 90; i++) { - KeyNames[i] = String.fromCharCode(i).toLowerCase(); +/** + * Returns key name from event. + * + * @param {KeyboardEvent} event keyboard event + * @return {string} key name + */ +export function getKeyName(event) { + return KeyNames[event.keyCode] || event.key; +} + +/** + * Returns _true_ if key is used for navigation. + * + * @param {string} key name + * @return {boolean} _true_ if key is used for navigation + */ +export function isNavigationKey(key) { + return NavigationKeys.indexOf(key) != -1; +} + +export function enable() { + document.addEventListener("keydown", function (e) { + const key = getKeyName(e); + + // Ignore navigation keys for non-TV + if (!layoutManager.tv && isNavigationKey(key)) { + return; } - } - /** - * Returns key name from event. - * - * @param {KeyboardEvent} keyboard event - * @return {string} key name - */ - function getKeyName(event) { - return KeyNames[event.keyCode] || event.key; - } + let capture = true; - /** - * Returns _true_ if key is used for navigation. - * - * @param {string} key name - * @return {boolean} _true_ if key is used for navigation - */ - function isNavigationKey(key) { - return NavigationKeys.indexOf(key) != -1; - } + switch (key) { + case "ArrowLeft": + inputManager.handle("left"); + break; + case "ArrowUp": + inputManager.handle("up"); + break; + case "ArrowRight": + inputManager.handle("right"); + break; + case "ArrowDown": + inputManager.handle("down"); + break; - function enable() { - document.addEventListener("keydown", function (e) { - var key = getKeyName(e); + case "Back": + inputManager.handle("back"); + break; - // Ignore navigation keys for non-TV - if (!layoutManager.tv && isNavigationKey(key)) { - return; - } - - var capture = true; - - switch (key) { - case "ArrowLeft": - inputManager.handle("left"); - break; - case "ArrowUp": - inputManager.handle("up"); - break; - case "ArrowRight": - inputManager.handle("right"); - break; - case "ArrowDown": - inputManager.handle("down"); - break; - - case "Back": + case "Escape": + if (layoutManager.tv) { inputManager.handle("back"); - break; - - case "Escape": - if (layoutManager.tv) { - inputManager.handle("back"); - } else { - capture = false; - } - break; - - case "MediaPlay": - inputManager.handle("play"); - break; - case "Pause": - inputManager.handle("pause"); - break; - case "MediaPlayPause": - inputManager.handle("playpause"); - break; - case "MediaRewind": - inputManager.handle("rewind"); - break; - case "MediaFastForward": - inputManager.handle("fastforward"); - break; - case "MediaStop": - inputManager.handle("stop"); - break; - case "MediaTrackPrevious": - inputManager.handle("previoustrack"); - break; - case "MediaTrackNext": - inputManager.handle("nexttrack"); - break; - - default: + } else { capture = false; - } + } + break; - if (capture) { - console.debug("disabling default event handling"); - e.preventDefault(); - } - }); - } + case "MediaPlay": + inputManager.handle("play"); + break; + case "Pause": + inputManager.handle("pause"); + break; + case "MediaPlayPause": + inputManager.handle("playpause"); + break; + case "MediaRewind": + inputManager.handle("rewind"); + break; + case "MediaFastForward": + inputManager.handle("fastforward"); + break; + case "MediaStop": + inputManager.handle("stop"); + break; + case "MediaTrackPrevious": + inputManager.handle("previoustrack"); + break; + case "MediaTrackNext": + inputManager.handle("nexttrack"); + break; - // Gamepad initialisation. No script is required if no gamepads are present at init time, saving a bit of resources. - // Whenever the gamepad is connected, we hand all the control of the gamepad to gamepadtokey.js by removing the event handler - function attachGamepadScript(e) { - console.log("Gamepad connected! Attaching gamepadtokey.js script"); - window.removeEventListener("gamepadconnected", attachGamepadScript); - require(["components/input/gamepadtokey"]); - } + default: + capture = false; + } - // No need to check for gamepads manually at load time, the eventhandler will be fired for that - window.addEventListener("gamepadconnected", attachGamepadScript); + if (capture) { + console.debug("disabling default event handling"); + e.preventDefault(); + } + }); +} - return { - enable: enable, - getKeyName: getKeyName, - isNavigationKey: isNavigationKey - }; -}); +// Gamepad initialisation. No script is required if no gamepads are present at init time, saving a bit of resources. +// Whenever the gamepad is connected, we hand all the control of the gamepad to gamepadtokey.js by removing the event handler +function attachGamepadScript(e) { + console.log("Gamepad connected! Attaching gamepadtokey.js script"); + window.removeEventListener("gamepadconnected", attachGamepadScript); + require(["components/input/gamepadtokey"]); +} + +// No need to check for gamepads manually at load time, the eventhandler will be fired for that +window.addEventListener("gamepadconnected", attachGamepadScript); diff --git a/src/components/sanitizefilename.js b/src/components/sanitizefilename.js index f53ce613f6..adfb852e1f 100644 --- a/src/components/sanitizefilename.js +++ b/src/components/sanitizefilename.js @@ -1,96 +1,90 @@ // From https://github.com/parshap/node-sanitize-filename -define([], function () { - 'use strict'; +const illegalRe = /[\/\?<>\\:\*\|":]/g; +// eslint-disable-next-line no-control-regex +const controlRe = /[\x00-\x1f\x80-\x9f]/g; +const reservedRe = /^\.+$/; +const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i; +const windowsTrailingRe = /[\. ]+$/; - var illegalRe = /[\/\?<>\\:\*\|":]/g; - // eslint-disable-next-line no-control-regex - var controlRe = /[\x00-\x1f\x80-\x9f]/g; - var reservedRe = /^\.+$/; - var windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i; - var windowsTrailingRe = /[\. ]+$/; +function isHighSurrogate(codePoint) { + return codePoint >= 0xd800 && codePoint <= 0xdbff; +} - function isHighSurrogate(codePoint) { - return codePoint >= 0xd800 && codePoint <= 0xdbff; +function isLowSurrogate(codePoint) { + return codePoint >= 0xdc00 && codePoint <= 0xdfff; +} + +function getByteLength(string) { + if (typeof string !== "string") { + throw new Error("Input must be string"); } - function isLowSurrogate(codePoint) { - return codePoint >= 0xdc00 && codePoint <= 0xdfff; - } - - function getByteLength(string) { - if (typeof string !== "string") { - throw new Error("Input must be string"); - } - - var charLength = string.length; - var byteLength = 0; - var codePoint = null; - var prevCodePoint = null; - for (var i = 0; i < charLength; i++) { - codePoint = string.charCodeAt(i); - // handle 4-byte non-BMP chars - // low surrogate - if (isLowSurrogate(codePoint)) { - // when parsing previous hi-surrogate, 3 is added to byteLength - if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) { - byteLength += 1; - } else { - byteLength += 3; - } - } else if (codePoint <= 0x7f) { + const charLength = string.length; + let byteLength = 0; + let codePoint = null; + let prevCodePoint = null; + for (let i = 0; i < charLength; i++) { + codePoint = string.charCodeAt(i); + // handle 4-byte non-BMP chars + // low surrogate + if (isLowSurrogate(codePoint)) { + // when parsing previous hi-surrogate, 3 is added to byteLength + if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) { byteLength += 1; - } else if (codePoint >= 0x80 && codePoint <= 0x7ff) { - byteLength += 2; - } else if (codePoint >= 0x800 && codePoint <= 0xffff) { + } else { byteLength += 3; } - prevCodePoint = codePoint; + } else if (codePoint <= 0x7f) { + byteLength += 1; + } else if (codePoint >= 0x80 && codePoint <= 0x7ff) { + byteLength += 2; + } else if (codePoint >= 0x800 && codePoint <= 0xffff) { + byteLength += 3; } - - return byteLength; + prevCodePoint = codePoint; } - function truncate(string, byteLength) { - if (typeof string !== "string") { - throw new Error("Input must be string"); - } + return byteLength; +} - var charLength = string.length; - var curByteLength = 0; - var codePoint; - var segment; - - for (var i = 0; i < charLength; i += 1) { - codePoint = string.charCodeAt(i); - segment = string[i]; - - if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) { - i += 1; - segment += string[i]; - } - - curByteLength += getByteLength(segment); - - if (curByteLength === byteLength) { - return string.slice(0, i + 1); - } else if (curByteLength > byteLength) { - return string.slice(0, i - segment.length + 1); - } - } - - return string; +function truncate(string, byteLength) { + if (typeof string !== "string") { + throw new Error("Input must be string"); } - return { - sanitize: function (input, replacement) { - var sanitized = input - .replace(illegalRe, replacement) - .replace(controlRe, replacement) - .replace(reservedRe, replacement) - .replace(windowsReservedRe, replacement) - .replace(windowsTrailingRe, replacement); - return truncate(sanitized, 255); + const charLength = string.length; + let curByteLength = 0; + let codePoint; + let segment; + + for (let i = 0; i < charLength; i += 1) { + codePoint = string.charCodeAt(i); + segment = string[i]; + + if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) { + i += 1; + segment += string[i]; } - }; -}); + + curByteLength += getByteLength(segment); + + if (curByteLength === byteLength) { + return string.slice(0, i + 1); + } else if (curByteLength > byteLength) { + return string.slice(0, i - segment.length + 1); + } + } + + return string; +} + +export function sanitize(input, replacement) { + const sanitized = input + .replace(illegalRe, replacement) + .replace(controlRe, replacement) + .replace(reservedRe, replacement) + .replace(windowsReservedRe, replacement) + .replace(windowsTrailingRe, replacement); + return truncate(sanitized, 255); +} From 9f18abb938b1207034f6a27525d43fa127ee9bce Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Thu, 26 Mar 2020 18:53:10 -0400 Subject: [PATCH 81/86] Fix package.json formatting --- package.json | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 9bf666a74e..81dd250ab5 100644 --- a/package.json +++ b/package.json @@ -70,23 +70,17 @@ "whatwg-fetch": "^3.0.0" }, "babel": { - "presets": [ - "@babel/preset-env" - ], - "overrides": [ - { + "presets": ["@babel/preset-env"], + "overrides": [{ "test": [ - "src/components/cardbuilder/cardBuilder.js", - "src/components/filedownloader.js", - "src/components/filesystem.js", - "src/components/input/keyboardnavigation.js", - "src/components/sanatizefilename.js" + "src/components/cardbuilder/cardBuilder.js", + "src/components/filedownloader.js", + "src/components/filesystem.js", + "src/components/input/keyboardnavigation.js", + "src/components/sanatizefilename.js" ], - "plugins": [ - "@babel/plugin-transform-modules-amd" - ] - } - ] + "plugins": ["@babel/plugin-transform-modules-amd"] + }] }, "browserslist": [ "last 2 Firefox versions", From b9dbad421a4214ee70586959b9a4f76451c9e0de Mon Sep 17 00:00:00 2001 From: Danilo Date: Fri, 27 Mar 2020 00:13:50 +0000 Subject: [PATCH 82/86] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 116 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 112 insertions(+), 4 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index ecd6ccb079..8457cb9f8b 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -340,7 +340,7 @@ "LabelHttpsPort": "Número da porta HTTPS local:", "LabelHomeScreenSectionValue": "Secção {0} do Painel Principal:", "LabelHomeNetworkQuality": "Qualidade da rede interna:", - "LabelHardwareAccelerationTypeHelp": "Esta funcionalidade é experimental e está disponível apenas em sistemas suportados.", + "LabelHardwareAccelerationTypeHelp": "A aceleração de hardware requer configuração adicional.", "LabelHardwareAccelerationType": "Aceleração por hardware:", "LabelEncoderPreset": "Predefinição para codificação H264:", "LabelH264Crf": "CRF para codificação H264:", @@ -377,7 +377,7 @@ "LabelEnableDlnaClientDiscoveryInterval": "Intervalo para descoberta de clientes (segundos)", "LabelEnableBlastAliveMessagesHelp": "Activar esta opção se o servidor não for convenientemente detectado por outros dispositivos UPnP na rede.", "LabelEnableBlastAliveMessages": "Enviar mensagens de reconhecimento", - "LabelEnableAutomaticPortMapHelp": "Tenta correponder automaticamente a porta pública para a porta local através de UPnP. Isto poderá não funcionar em alguns modelos de routers.", + "LabelEnableAutomaticPortMapHelp": "Tenta corresponder automaticamente a porta pública para a porta local através de UPnP. Isto poderá não funcionar em alguns modelos de roteadores. As alterações não serão até reinicialização do servidor.", "LabelEnableAutomaticPortMap": "Activar a correspondência automática de portas", "LabelEmbedAlbumArtDidlHelp": "Alguns dispositivos preferem este método para obter a capa do álbum. Outros pode não ser capazes de reproduzir com esta opção activada.", "LabelEmbedAlbumArtDidl": "Incorporar a capa do álbum no DIDL", @@ -1092,7 +1092,7 @@ "AuthProviderHelp": "Seleccione um mecanismo de autenticação a ser utilizado para validar as credenciais deste utilizador.", "Audio": "Áudio", "AttributeNew": "Novo", - "AspectRatio": "Formato", + "AspectRatio": "Proporção da tela", "Ascending": "Crescente", "Art": "Capa", "AroundTime": "Por volta das {0}", @@ -1218,5 +1218,113 @@ "LabelUserLoginAttemptsBeforeLockout": "Número de tentativas de login falhadas antes do bloqueio do utilizador:", "LabelTrackNumber": "Número da faixa:", "LabelSportsCategories": "Categorias de Desportos:", - "Yesterday": "Ontem" + "Yesterday": "Ontem", + "MusicVideo": "Vídeo de música", + "MusicLibraryHelp": "Reveja o {0} guia de nomes de músicas {1}.", + "MusicArtist": "Artista musical", + "MusicAlbum": "Álbum de música", + "MovieLibraryHelp": "Reveja o {0} guia de nomeação de filmes {1}.", + "MoveRight": "Mover para a direita", + "MoveLeft": "Mova à esquerda", + "MoreMediaInfo": "Informações sobre mídia", + "MoreFromValue": "Mais de {0}", + "MediaInfoRefFrames": "Quadros de referência", + "MediaInfoContainer": "Container", + "MediaInfoAnamorphic": "Anamorphic", + "LabelVideoResolution": "Resolução do vídeo:", + "LabelTypeMetadataDownloaders": "{0} metadata downloaders:", + "LabelTranscodePath": "Caminho da transcodificação:", + "OnlyImageFormats": "Somente formatos de imagem (VOBSUB, PGS, SUB, etc)", + "OnlyForcedSubtitlesHelp": "Apenas as legendas marcadas como forçadas serão carregadas.", + "OnlyForcedSubtitles": "Apenas legendas forçadas", + "Off": "Desligar", + "NumLocationsValue": "{0} pastas", + "Normal": "Normal", + "None": "Nenhum", + "NoSubtitlesHelp": "As legendas não serão carregadas por padrão. Eles ainda podem ser ativados manualmente durante a reprodução.", + "NoSubtitles": "Sem legendas", + "NoSubtitleSearchResultsFound": "Nenhum resultado encontrado.", + "NoNewDevicesFound": "Não foram encontrados novos dispositivos. Para adicionar um novo sintonizador, feche esta caixa de diálogo e insira as informações do dispositivo manualmente.", + "NoCreatedLibraries": "Parece que você ainda não criou nenhuma biblioteca. {0} Deseja criar um agora? {1}", + "No": "Não", + "Mobile": "Celular", + "MetadataSettingChangeHelp": "A alteração das configurações de metadados afetará o novo conteúdo adicionado a partir de agora. Para atualizar o conteúdo existente, abra a tela de detalhes e clique no botão Atualizar ou execute atualizações em massa usando o gerenciador de metadados.", + "MetadataManager": "Gestor de metadados", + "Metadata": "Metadados", + "MessageYouHaveVersionInstalled": "Você possui a versão {0} atualmente instalada.", + "MessageUnsetContentHelp": "O conteúdo será exibido como pastas simples. Para obter melhores resultados, use o gerenciador de metadados para definir os tipos de conteúdo das subpastas.", + "MessageSettingsSaved": "Configurações salvas.", + "MessagePleaseWait": "Por favor, espere. Isso pode levar um minuto.", + "MessagePlayAccessRestricted": "A reprodução deste conteúdo está atualmente restrita. Entre em contato com o administrador do servidor para obter mais informações.", + "MessageNoServersAvailable": "Nenhum servidor foi encontrado usando a descoberta automática de servidores.", + "MessageNoCollectionsAvailable": "As coleções permitem que você desfrute de agrupamentos personalizados de filmes, séries e álbuns. Clique no botão + para começar a criar coleções.", + "MessageConfirmAppExit": "Você quer sair?", + "MediaInfoLayout": "Layout", + "MediaInfoLanguage": "Língua", + "MediaInfoInterlaced": "Entrelaçada", + "MediaInfoFramerate": "Taxa de quadros", + "MediaInfoForced": "Forçar", + "MediaInfoExternal": "Externo", + "MediaInfoDefault": "Padrão", + "MediaInfoCodecTag": "Codec tag", + "MediaInfoCodec": "Codec", + "MediaInfoBitrate": "Taxa de bits", + "MediaInfoBitDepth": "Profundidade de bits", + "MediaInfoAspectRatio": "Proporção da tela", + "ManageRecording": "Gerenciar gravações", + "Logo": "Logo", + "List": "Lista", + "LinksValue": "Links: {0}", + "Like": "Gostei", + "LeaveBlankToNotSetAPassword": "Você pode deixar esse campo em branco para definir nenhuma senha.", + "LearnHowYouCanContribute": "Aprenda como você pode contribuir.", + "LaunchWebAppOnStartupHelp": "Open the web client in your default web browser when the server initially starts. This will not occur when using the restart server function.", + "LaunchWebAppOnStartup": "Inicie a interface da web ao iniciar o servidor", + "Large": "Amplo", + "LanNetworksHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be considered on local network when enforcing bandwidth restrictions. If set, all other IP addresses will be considered to be on the external network and will be subject to the external bandwidth restrictions. If left blank, only the server's subnet is considered to be on the local network.", + "LabelffmpegPathHelp": "O caminho para o arquivo do aplicativo ffmpeg ou pasta que contém o ffmpeg.", + "LabelffmpegPath": "FFmpeg caminho:", + "LabelYear": "Ano:", + "LabelXDlnaDoc": "X-DLNA doc:", + "LabelXDlnaCap": "X-DLNA cap:", + "LabelWeb": "Web:", + "LabelVideoCodec": "Vídeo: codec:", + "LabelVideoBitrate": "Vídeo taxa de bits:", + "LabelVideo": "Vídeo:", + "DashboardArchitecture": "Arquitetura: {0}", + "DashboardServerName": "Servidor: {0}", + "DashboardVersionNumber": "Versão: {0}", + "LabelVersion": "Versão:", + "LabelVaapiDeviceHelp": "Este é o nó de renderização usado para aceleração de hardware.", + "LabelVaapiDevice": "VA API Dispositivo:", + "LabelUserAgent": "Agente de usuário", + "LabelTranscodes": "Transcodificação:", + "LabelTranscodingFramerate": "Transcodificação frame por segundo:", + "LabelTranscodingProgress": "Progresso da transcodificação:", + "LabelTitle": "Título:", + "LabelTheme": "Tema:", + "LabelTextColor": "Cor do texto:", + "LabelTextBackgroundColor": "Cor do plano de fundo do texto:", + "LabelTag": "Tag:", + "LabelTVHomeScreen": "Tela inicial do modo TV:", + "LabelSubtitles": "Legendas:", + "LabelSubtitleDownloaders": "Downloaders de legendas:", + "LabelStreamType": "Tipo de fluxo:", + "LabelSpecialSeasonsDisplayName": "Nome de exibição da temporada especial:", + "LabelSoundEffects": "Efeitos sonoros:", + "LabelSortTitle": "Classificar título:", + "LabelSortOrder": "Ordem da Ordenação", + "LabelSortBy": "Ordenar por:", + "LabelSkin": "Skin:", + "EnableFastImageFadeInHelp": "Habilite uma animação mais rápida para imagens carregadas", + "EnableFastImageFadeIn": "Efeito de imagem fade-in rápido", + "LabelRemoteClientBitrateLimitHelp": "Um limite opcional de taxa de bits por fluxo para todos os dispositivos fora da rede. Isso é útil para impedir que os dispositivos solicitem uma taxa de bits mais alta do que a sua conexão à Internet pode suportar. Isso pode resultar no aumento da carga da CPU no servidor para transcodificar vídeos em tempo real para uma taxa de bits mais baixa.", + "LabelPlayerDimensions": "Dimensões do reprodutor:", + "LabelParentNumber": "Número pai:", + "LabelMetadataSavers": "Economizadores de metadados:", + "LabelDroppedFrames": "Quadros caídos:", + "LabelCorruptedFrames": "Quadros corrompidos:", + "LabelAudioBitDepth": "Profundidade do bit de áudio:", + "ClientSettings": "Configurações do Cliente", + "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução." } From a02fe56a871b3ad43df44e5bb6c74e8d5ce5c085 Mon Sep 17 00:00:00 2001 From: Danilo Date: Fri, 27 Mar 2020 00:34:22 +0000 Subject: [PATCH 83/86] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 8457cb9f8b..a66f98916b 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1326,5 +1326,6 @@ "LabelCorruptedFrames": "Quadros corrompidos:", "LabelAudioBitDepth": "Profundidade do bit de áudio:", "ClientSettings": "Configurações do Cliente", - "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução." + "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução.", + "MySubtitles": "Minhas legendas" } From 63a05df3a8dd9a192819b5fede49d51e500bff64 Mon Sep 17 00:00:00 2001 From: Danilo Date: Fri, 27 Mar 2020 00:34:29 +0000 Subject: [PATCH 84/86] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index a66f98916b..e9a0f2dd05 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1327,5 +1327,6 @@ "LabelAudioBitDepth": "Profundidade do bit de áudio:", "ClientSettings": "Configurações do Cliente", "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução.", - "MySubtitles": "Minhas legendas" + "MySubtitles": "Minhas legendas", + "Name": "Nome" } From 000f6e776d481b9af69a674f6a965c0b40958ee2 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 27 Mar 2020 15:52:50 +0300 Subject: [PATCH 85/86] Fix dom addEventListener/removeEventListener for case of undefined options --- src/components/dom.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/dom.js b/src/components/dom.js index cc37e2fc5b..b91e5b1687 100644 --- a/src/components/dom.js +++ b/src/components/dom.js @@ -74,17 +74,17 @@ define([], function () { } function addEventListenerWithOptions(target, type, handler, options) { - var optionsOrCapture = options; + var optionsOrCapture = options || {}; if (!supportsCaptureOption) { - optionsOrCapture = options.capture; + optionsOrCapture = optionsOrCapture.capture; } target.addEventListener(type, handler, optionsOrCapture); } function removeEventListenerWithOptions(target, type, handler, options) { - var optionsOrCapture = options; + var optionsOrCapture = options || {}; if (!supportsCaptureOption) { - optionsOrCapture = options.capture; + optionsOrCapture = optionsOrCapture.capture; } target.removeEventListener(type, handler, optionsOrCapture); } From 5dfc5d6c2be8cc7957af11dae6dc0951691be033 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 29 Mar 2020 12:48:55 +0200 Subject: [PATCH 86/86] Fix admin drawer logo showing up everywhere --- src/assets/css/dashboard.css | 6 +++++- src/assets/css/librarybrowser.css | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/assets/css/dashboard.css b/src/assets/css/dashboard.css index 8c8a9ca7f1..894d7332f4 100644 --- a/src/assets/css/dashboard.css +++ b/src/assets/css/dashboard.css @@ -63,6 +63,10 @@ progress[aria-valuenow]::before { } .adminDrawerLogo { + display: none; +} + +.layout-mobile .adminDrawerLogo { padding: 1.5em 1em 1.2em; border-bottom: 1px solid #e0e0e0; margin-bottom: 1em; @@ -161,7 +165,7 @@ div[data-role=controlgroup] a.ui-btn-active { @media all and (min-width: 40em) { .content-primary { - padding-top: 7em; + padding-top: 4.6em; } .withTabs .content-primary { diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 13265e40d1..1b0fab8d14 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -313,7 +313,7 @@ } .dashboardDocument .mainDrawer-scrollContainer { - margin-top: 6em !important; + margin-top: 4.6em !important; } }