From 74530fe4d9f3047bf9409ea2ac5e17951816e821 Mon Sep 17 00:00:00 2001 From: Thibault Nocchi <1619359+ThibaultNocchi@users.noreply.github.com> Date: Sat, 1 Feb 2020 17:26:03 +0100 Subject: [PATCH 01/25] Moved URL copy to Clipboard API method --- src/components/itemcontextmenu.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index 4e9bab6849..192bd821da 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -346,23 +346,16 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter", break; case "copy-stream": var downloadHref = apiClient.getItemDownloadUrl(itemId); - var textArea = document.createElement("textarea"); - textArea.value = downloadHref; - document.body.appendChild(textArea); - textArea.focus(); - textArea.select(); - if (document.execCommand("copy")) { + navigator.clipboard.writeText(downloadHref).then(function () { require(["toast"], function (toast) { toast(globalize.translate("CopyStreamURLSuccess")); }); - } else { + }, function () { console.error("Failed to copy to clipboard"); require(["toast"], function (toast) { toast(globalize.translate("CopyStreamURLError")); }); - } - - document.body.removeChild(textArea); + }); getResolveFunction(resolve, id)(); break; case "editsubtitles": From 4bea999849bcd387be5f703481461eecccd85d01 Mon Sep 17 00:00:00 2001 From: Thibault Nocchi <1619359+ThibaultNocchi@users.noreply.github.com> Date: Sat, 1 Feb 2020 17:28:04 +0100 Subject: [PATCH 02/25] Fallback method to copy URL in unsupported cases --- CONTRIBUTORS.md | 1 + src/components/itemcontextmenu.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index e0855c1e09..5a43208068 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -32,6 +32,7 @@ - [bilde2910](https://github.com/bilde2910) - [Daniel Hartung](https://github.com/dhartung) - [Ryan Hartzell](https://github.com/ryan-hartzell) + - [Thibault Nocchi](https://github.com/ThibaultNocchi) # Emby Contributors diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index 192bd821da..cfbdb260d6 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -351,9 +351,9 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter", toast(globalize.translate("CopyStreamURLSuccess")); }); }, function () { - console.error("Failed to copy to clipboard"); + prompt(globalize.translate("CopyStreamURL"), downloadHref); require(["toast"], function (toast) { - toast(globalize.translate("CopyStreamURLError")); + toast(globalize.translate("CopyStreamURLSuccess")); }); }); getResolveFunction(resolve, id)(); From f2735dc5a2c0dafc7fa0eac4c6f37c2d94059f52 Mon Sep 17 00:00:00 2001 From: DJSweder Date: Sat, 1 Feb 2020 05:45:36 +0000 Subject: [PATCH 03/25] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 14d2aa4874..5f0c1e60b3 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1558,5 +1558,7 @@ "OptionRandom": "Náhodně", "SelectAdminUsername": "Vyberte uživatelské jméno pro účet správce.", "HeaderNavigation": "Navigace", - "ButtonSplit": "Rozdělit" + "ButtonSplit": "Rozdělit", + "MessageConfirmAppExit": "Přejete si odejít?", + "CopyStreamURLError": "Při kopírování URL došlo k chybě." } From 34ef7610773c0046eb8b83253b92a4a91f91ea1f Mon Sep 17 00:00:00 2001 From: Nutjob Date: Fri, 31 Jan 2020 21:45:01 +0000 Subject: [PATCH 04/25] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 120 +++++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index a54203665c..19ed9b741e 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -32,7 +32,7 @@ "Artists": "Artisti", "AsManyAsPossible": "Tutto il possibile", "Ascending": "Crescente", - "AspectRatio": "Rapporto d'aspetto", + "AspectRatio": "Rapporto d'Aspetto", "AttributeNew": "Nuovo", "AutoBasedOnLanguageSetting": "Auto (basato sull'impostazione della lingua)", "Backdrop": "Sfondo", @@ -574,57 +574,57 @@ "LabelEvent": "Evento:", "LabelEveryXMinutes": "Tutti:", "LabelExtractChaptersDuringLibraryScan": "Estrarre immagini capitolo durante la scansione della libreria", - "LabelExtractChaptersDuringLibraryScanHelp": "Se abilitata, le immagini capitolo verranno estratti quando i video vengono importati durante la scansione della libreria. Se disabilitata verranno estratti durante l'operazione pianificata di estrazione delle immagini capitolo, permettendo la scansione della libreria più velocemente.", + "LabelExtractChaptersDuringLibraryScanHelp": "Genera le immagini del capitolo quando i video vengono importati durante la scansione della libreria. Altrimenti verranno estratti durante l'operazione pianificata di estrazione delle immagini capitolo, permettendo la scansione della libreria più velocemente.", "LabelFailed": "Fallito", "LabelFileOrUrl": "File o URL:", "LabelFinish": "Finito", "LabelForgotPasswordUsernameHelp": "Inserisci il tuo nome utente, se te lo ricordi.", "LabelFormat": "Formato:", "LabelFriendlyName": "Nome Condiviso:", - "LabelServerNameHelp": "Questo nome è usato per identificare il server sulla rete.Se lasciato vuoto verra usato il nome del pc", + "LabelServerNameHelp": "Questo nome è usato per identificare il server e verrà usato di default come 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:", "LabelH264EncodingPreset": "Preset di codifica H264:", "LabelHardwareAccelerationType": "Accelerazione Hardware:", - "LabelHardwareAccelerationTypeHelp": "Disponibile solo su sistemi supportati.", + "LabelHardwareAccelerationTypeHelp": "Questa è una componente sperimentale disponibile solo su sistemi supportati.", "LabelHomeNetworkQuality": "Qualità della rete domestica:", "LabelHomeScreenSectionValue": "Pagina iniziale Sezione {0}:", - "LabelHttpsPort": "Porta HTTPS locale", - "LabelHttpsPortHelp": "Numero di porta TCP da associare al server https di Jellyfin", - "LabelIconMaxHeight": "Altezza Icona massima:", + "LabelHttpsPort": "Porta HTTPS locale:", + "LabelHttpsPortHelp": "Numero di porta TCP da associare al server HTTPS di Jellyfin.", + "LabelIconMaxHeight": "Altezza icona massima:", "LabelIconMaxHeightHelp": "Risoluzione massima delle icone inviate tramite upnp:icon.", - "LabelIconMaxWidth": "Larghezza massima Icona:", + "LabelIconMaxWidth": "Larghezza massima icona:", "LabelIconMaxWidthHelp": "Risoluzione massima delle icone inviate tramite upnp:icon.", "LabelIdentificationFieldHelp": "Una stringa o espressione regex sensibile a maiuscole e minuscole.", "LabelImageFetchersHelp": "Abilitare e classificare i tuoi Fetchers immagini preferite in ordine di priorità.", "LabelImageType": "Tipo immagine:", "LabelImportOnlyFavoriteChannels": "Limitare ai canali segnato come", "LabelInNetworkSignInWithEasyPassword": "Abilita l'accesso da rete locale tramite codice PIN.", - "LabelInNetworkSignInWithEasyPasswordHelp": "Se attivata, sarai in grado di utilizzare il tuo codice pin facile per accedere alle app di Jellyfin all'interno della tua rete domestica. La tua password usuale sarà necessaria solo per accedere alle app quando sei fuori casa. Se il codice PIN viene lasciato vuoto, non avrai bisogno di una password quando sei all'interno della tua rete domestica.", + "LabelInNetworkSignInWithEasyPasswordHelp": "Usa il codice pin facile per accedere alle app all'interno della tua rete domestica. La tua password usuale sarà necessaria solo per accedere alle app quando sei fuori casa. Se il codice PIN viene lasciato vuoto, non avrai bisogno di una password quando sei all'interno della tua rete domestica.", "LabelInternetQuality": "Qualità Internet:", "LabelKeepUpTo": "Conservane fino a:", "LabelKidsCategories": "Categorie bambini:", "LabelKodiMetadataDateFormat": "Data di uscita Formato:", - "LabelKodiMetadataDateFormatHelp": "Tutte le date all'interno del nfo verranno letti e scritti utilizzando questo formato.", + "LabelKodiMetadataDateFormatHelp": "Tutte le date all'interno dei files NFO verranno analizzate utilizzando questo formato.", "LabelKodiMetadataEnableExtraThumbs": "Copia extrafanart in extrathumbs", "LabelKodiMetadataEnableExtraThumbsHelp": "Copia extrafanart in extrathumbs", "LabelKodiMetadataEnablePathSubstitution": "Abilita sostituzione di percorso", "LabelKodiMetadataEnablePathSubstitutionHelp": "Consente percorso sostituzione dei percorsi delle immagini utilizzando le impostazioni di sostituzione percorso del server.", "LabelKodiMetadataSaveImagePaths": "Salva percorsi delle immagini all'interno dei file NFO", "LabelKodiMetadataSaveImagePathsHelp": "Questo è consigliato se si dispone di nomi di file immagine che non sono conformi alle linee guida Kodi.", - "LabelKodiMetadataUser": "Salva dati utente in file nfo per:", - "LabelKodiMetadataUserHelp": "Abilita questa opzione per salvare i dati in file Nfo per usarli in altre applicazioni", + "LabelKodiMetadataUser": "Salva dati utente nei files NFO per:", + "LabelKodiMetadataUserHelp": "Salvare i dati nei filse NFO per usarli in altre applicazioni.", "LabelLanNetworks": "Reti LAN:", "LabelLanguage": "Lingua:", "LabelLineup": "Allineare:", - "LabelLocalHttpServerPortNumber": "Porta HTTP locale", - "LabelLocalHttpServerPortNumberHelp": "Numero di porta TCP da associare al server http di Jellyfin", + "LabelLocalHttpServerPortNumber": "Porta HTTP locale:", + "LabelLocalHttpServerPortNumberHelp": "Numero di porta TCP da associare al server HTTP di Jellyfin.", "LabelLockItemToPreventChanges": "Blocca questo elemento per impedire modifiche future", "LabelLoginDisclaimer": "Avviso Login:", - "LabelLoginDisclaimerHelp": "Questo verrà visualizzato nella parte inferiore della pagina di accesso.", + "LabelLoginDisclaimerHelp": "Un messaggio che verrà visualizzato nella parte inferiore della pagina di accesso.", "LabelLogs": "Log:", - "LabelManufacturer": "Produttore", + "LabelManufacturer": "Produttore:", "LabelManufacturerUrl": "URL del produttore", "LabelMaxBackdropsPerItem": "Massimo numero di sfondi per oggetto:", "LabelMaxChromecastBitrate": "Qualità streaming su Chromecast:", @@ -646,22 +646,22 @@ "LabelMetadataSaversHelp": "Scegliere i formati di file per salvare i metadati", "LabelMethod": "Metodo:", "LabelMinBackdropDownloadWidth": "Massima larghezza sfondo:", - "LabelMinResumeDuration": "Durata minima per il riprendi (secondi)", - "LabelMinResumeDurationHelp": "I film più corti non saranno riprendibili", - "LabelMinResumePercentage": "Percentuale minima per il riprendi", - "LabelMinResumePercentageHelp": "I film Sono considerati non visti se fermati prima di questo tempo", + "LabelMinResumeDuration": "Durata minima per il riprendi:", + "LabelMinResumeDurationHelp": "La durata video più corta in secondi che salverà la locazione di riproduzione e ti permetterà di riprendere.", + "LabelMinResumePercentage": "Percentuale minima per il riprendi:", + "LabelMinResumePercentageHelp": "I film sono considerati non visti se fermati prima di questo tempo.", "LabelMinScreenshotDownloadWidth": "Larghezza minima screenshot scaricati:", "LabelModelDescription": "Descrizione Modello", "LabelModelName": "Nome Modello", "LabelModelNumber": "Numero Modello", - "LabelModelUrl": "Url Modello", + "LabelModelUrl": "Modello URL", "LabelMonitorUsers": "Monitora l'attività da:", "LabelMovieCategories": "Categorie film:", "LabelMoviePrefix": "Prefisso film:", - "LabelMoviePrefixHelp": "Se un prefisso viene applicato ai titoli di film, inseriscilo qui in modo che Jellyfin possa gestirlo correttamente.", + "LabelMoviePrefixHelp": "Se un prefisso viene applicato ai titoli di film, inseriscilo qui in modo che il server possa gestirlo correttamente.", "LabelMovieRecordingPath": "Percorso di registrazione film (opzionale):", "LabelMusicStreamingTranscodingBitrate": "Musica trascodifica bitrate:", - "LabelMusicStreamingTranscodingBitrateHelp": "Specifica il max Bitrate per lo streaming musica", + "LabelMusicStreamingTranscodingBitrateHelp": "Specifica il massimo bitrate per lo streaming musicale.", "LabelName": "Nome:", "LabelNewName": "Nuovo nome:", "LabelNewPassword": "Nuova password:", @@ -702,9 +702,9 @@ "LabelProtocol": "Protocollo:", "LabelProtocolInfo": "Info protocollo:", "LabelProtocolInfoHelp": "Il valore che verrà utilizzato quando si risponde a richieste GetProtocolInfo dal dispositivo.", - "LabelPublicHttpPort": "Porta HTTP pubblica", + "LabelPublicHttpPort": "Porta HTTP pubblica:", "LabelPublicHttpPortHelp": "Numero di porta pubblica che dovrebbe essere mappato sulla porta HTTP locale.", - "LabelPublicHttpsPort": "Numero porta HTTPS pubblica", + "LabelPublicHttpsPort": "Numero porta HTTPS pubblica:", "LabelPublicHttpsPortHelp": "Numero della porta pubblica che dovrebbe essere mappato sulla porta HTTPS locale.", "LabelReadHowYouCanContribute": "Scopri come puoi contribuire.", "LabelReasonForTranscoding": "Motivo per la transcodifica:", @@ -765,9 +765,9 @@ "LabelTrackNumber": "Numero traccia:", "LabelTranscodingAudioCodec": "Codec Audio:", "LabelTranscodingContainer": "contenitore:", - "LabelTranscodingTempPathHelp": "Questa cartella contiene i file di lavoro utilizzati dal transcoder. Specificare un percorso personalizzato, oppure lasciare vuoto per utilizzare l'impostazione predefinita all'interno della cartella dei dati del server.", + "LabelTranscodingTempPathHelp": "Specifica un percorso personalizzato per la transcodifica dei files utilizzati dai client. Lasciare vuoto per utilizzare l'impostazione predefinita dal server.", "LabelTranscodingThreadCount": "Transcodifica numero di thread:", - "LabelTranscodingThreadCountHelp": "Selezionare il numero massimo di thread da utilizzare durante la transcodifica. Ridurre il numero di thread si abbasserà l'utilizzo della CPU, ma non può convertire abbastanza veloce per un'esperienza di riproduzione fluida.", + "LabelTranscodingThreadCountHelp": "Selezionare il numero massimo di thread da utilizzare durante la transcodifica. Ridurre il numero di thread si abbasserà l'utilizzo della CPU, ma può non convertire abbastanza veloce per un'esperienza di riproduzione fluida.", "LabelTranscodingVideoCodec": "Codec Video:", "LabelTriggerType": "Tipo Evento:", "LabelTunerIpAddress": "Tuner Indirizzo IP:", @@ -779,7 +779,7 @@ "LabelUserAgent": "Agente utente:", "LabelUserLibrary": "Libreria utente:", "LabelUserLibraryHelp": "Selezionare la libreria utente da visualizzare sul dispositivo. Lasciare vuoto per ereditare l'impostazione predefinita.", - "LabelUserRemoteClientBitrateLimitHelp": "Questo sovrascriverà il valore globale predefinito impostato nelle impostazioni di riproduzione del server.", + "LabelUserRemoteClientBitrateLimitHelp": "Sovrascrive il valore globale predefinito impostato nelle impostazioni di riproduzione del server.", "LabelUsername": "Nome utente", "LabelVaapiDevice": "Dispositivo VA API:", "LabelVaapiDeviceHelp": "Questo è il nodo rendering usato dall'accelerazione hardware.", @@ -799,7 +799,7 @@ "Large": "Grande", "LatestFromLibrary": "Ultimi {0}", "LearnHowYouCanContribute": "Scopri come puoi contribuire.", - "LibraryAccessHelp": "Seleziona le cartelle multimediali da condividere con questo utente. Gli amministratori saranno in grado di modificare tutte le cartelle utilizzando il gestore dei metadati.", + "LibraryAccessHelp": "Seleziona le librerie da condividere con questo utente. Gli amministratori saranno in grado di modificare tutte le cartelle utilizzando il gestore dei metadati.", "Like": "Mi piace", "List": "Lista", "Live": "In diretta", @@ -842,38 +842,38 @@ "MessageConfirmRemoveMediaLocation": "Sei sicuro di voler rimuovere questa posizione?", "MessageConfirmRestart": "Sei sicuro di voler riavviare il Server Jellyfin?", "MessageConfirmRevokeApiKey": "Sei sicuro di voler revocare questa chiave api? La connessione dell'applicazione al Server Jellyfin terminerà immediatamente", - "MessageConfirmShutdown": "Sei sicuro di voler spegnere il Server Jellyfin?", + "MessageConfirmShutdown": "Sei sicuro di voler spegnere il server?", "MessageContactAdminToResetPassword": "Si prega di contattare l'amministratore di sistema per reimpostare la password.", "MessageCreateAccountAt": "Crea un account a {0}", "MessageDeleteTaskTrigger": "Sei sicuro di voler cancellare questo evento?", "MessageDirectoryPickerBSDInstruction": "Per BSD, potrebbe essere necessario per configurare le unità all'interno della vostra prigione FreeNAS al fine di permettere ricamato accedervi.", "MessageDirectoryPickerInstruction": "Percorsi di rete possono essere inseriti manualmente nel caso in cui il pulsante Rete non riesce a individuare i vostri dispositivi. Ad esempio, {0} o {1}", - "MessageDirectoryPickerLinuxInstruction": "Per Linux su Arch Linux, CentOS, Debian, Fedora, OpenSuse o Ubuntu, è necessario concedere all'utente del sistema Jellyfin almeno l'accesso alle posizioni di archiviazione.", + "MessageDirectoryPickerLinuxInstruction": "Per Linux su Arch Linux, CentOS, Debian, Fedora, openSUSE o Ubuntu, è necessario concedere all'utente del servizio almeno l'accesso alle posizioni di archiviazione.", "MessageDownloadQueued": "Scaricamento programmato.", "MessageEnablingOptionLongerScans": "L'abilitazione di questa opzione può rallentare significativamente le scansioni della libreria.", "MessageFileReadError": "Si è verificato un errore durante la lettura del file. Si prega di riprovare.", "MessageForgotPasswordFileCreated": "Il seguente file è stato creato sul server e contiene le istruzioni su come procedere:", "MessageForgotPasswordInNetworkRequired": "Riprova all'interno della rete domestica per avviare il processo di reimpostazione della password.", - "MessageInstallPluginFromApp": "Questo Plugin deve essere installato dall'app in cui vuoi farlo funzionare", - "MessageInvalidForgotPasswordPin": "Un pin Invalido o scaduto è stato inserito. Riprova.", + "MessageInstallPluginFromApp": "Questo plugin deve essere installato dall'app in cui vuoi farlo funzionare.", + "MessageInvalidForgotPasswordPin": "É stato inserito un codice pin invalido o scaduto . Riprova.", "MessageInvalidUser": "Utente o password errato. Riprova", "MessageItemSaved": "Elemento salvato.", "MessageItemsAdded": "Elementi aggiunti.", - "MessageLeaveEmptyToInherit": "Lascia vuoto per ereditare le impostazioni dall'elemento principale, o il valore predefinito globale.", + "MessageLeaveEmptyToInherit": "Lascia vuoto per ereditare le impostazioni dall'elemento principale o il valore predefinito globale.", "MessageNoAvailablePlugins": "Nessun plugin disponibile.", "MessageNoMovieSuggestionsAvailable": "Nessun suggerimento di film attualmente disponibile. Iniziare a guardare e valutare i vostri film, e poi tornare per i suggerimenti.", "MessageNoPluginsInstalled": "Non hai plugin installati", "MessageNoTrailersFound": "Nessun Trailer trovato.Installa Il plug in dei trailer per importare la libreria dei trailer da internet", "MessageNothingHere": "Non c'è niente qui.", - "MessagePasswordResetForUsers": "Le password sono state rimosse dai seguenti utenti. Per accedere lasciare vuoto il campo password.", - "MessagePlayAccessRestricted": "Le riproduzione di questi contenuti è bloccata. Per favore contatta il tuo amministratore Jellyfin Server per maggiori informazioni.", + "MessagePasswordResetForUsers": "I seguenti utenti havvo avuto le loro password resettate. Adesso possono accedere con i codici pin che sono stati utilizzati per eseguire il reset.", + "MessagePlayAccessRestricted": "Le riproduzione di questi contenuti è bloccata. Per favore contatta il tuo amministratore del server per maggiori informazioni.", "MessagePleaseEnsureInternetMetadata": "Assicurarsi che il download dei metadati Internet sia abilitato.", "MessagePleaseWait": "Per favore attendi. La procedura potrebbe impiegare qualche minuto.", "MessagePluginConfigurationRequiresLocalAccess": "Per configurare questo plugin si prega di accedere al proprio server locale direttamente.", "MessagePluginInstallDisclaimer": "I plugin creati dai membri della comunità Jellyfin sono un ottimo modo per migliorare l'esperienza di Jellyfin con funzionalità e vantaggi aggiuntivi. Prima di installare, si prega di notare gli effetti che possono avere sul tuo server Jellyfin, come le scansioni più lunghe della libreria, l'elaborazione di sfondo aggiuntiva e la stabilità del sistema diminuita.", "MessageReenableUser": "Guarda in basso per ri-abilitare", "MessageSettingsSaved": "Settaggi salvati.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "I seguenti percorsi ai file multimediali saranno rimossi dalla tua libreria Jellyfin:", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "I seguenti percorsi ai file multimediali saranno rimossi dalla tua libreria:", "MessageUnableToConnectToServer": "Non siamo in grado di connettersi al server selezionato al momento. Per favore assicurati che sia in esecuzione e riprova.", "MessageUnsetContentHelp": "Il contenuto verrà visualizzato come pianura cartelle. Per ottenere i migliori risultati utilizzare il gestore di metadati per impostare i tipi di contenuto di sottocartelle.", "MessageYouHaveVersionInstalled": "Attualmente hai la versione {0} installato.", @@ -883,10 +883,10 @@ "MinutesBefore": "minuti prima", "Monday": "Lunedì", "MoreFromValue": "Altro di {0}", - "MoreUsersCanBeAddedLater": "Altri utenti possono essere aggiunti in un secondo momento dal Pannello di Controllo.", + "MoreUsersCanBeAddedLater": "Altri utenti possono essere aggiunti in un secondo momento dal pannello di controllo.", "MoveLeft": "Sposta a sinistra", "MoveRight": "Sposta a destra", - "MovieLibraryHelp": "Rivedere la {0} guida di denominazione del film Jellyfin {1}.", + "MovieLibraryHelp": "Rivedere la {0} guida di denominazione dei film{1}.", "Movies": "Film", "Mute": "Muto", "MySubtitles": "I miei Sottotitoli", @@ -912,7 +912,7 @@ "OneChannel": "Un canale", "OnlyForcedSubtitles": "Solo i sottotitoli forzati", "OnlyForcedSubtitlesHelp": "Solo i sottotitoli contrassegnati come forzati saranno caricati.", - "OnlyImageFormats": "Solo formati immagine (VOBSUB, PGS, SUB / IDX, ecc.)", + "OnlyImageFormats": "Solo formati immagine (VOBSUB, PGS, SUB, ecc)", "OptionAdminUsers": "Amministratori", "OptionAlbumArtist": "Artista Album", "OptionAllUsers": "Tutti gli utenti", @@ -957,7 +957,7 @@ "OptionDisableUserHelp": "Se disabilitato, il server non sarà disponibile per questo utente. Le connessioni esistenti verranno terminate.", "OptionDislikes": "Non mi piace", "OptionDisplayFolderView": "Visualizza cartelle come normali cartelle dei media", - "OptionDisplayFolderViewHelp": "Se abilitato, le applicazioni Jellyfin visualizzeranno una categoria Cartelle accanto alla libreria multimediale. Ciò è utile se si desidera avere viste di cartelle semplici.", + "OptionDisplayFolderViewHelp": "Visualizza le cartelle accanto alle librerie multimediali. Questo può essere utile se si desidera avere una vista di cartelle semplici.", "OptionDownloadBackImage": "Indietro", "OptionDownloadDiscImage": "Disco", "OptionDownloadImagesInAdvance": "Scarica preventivamente le immagini", @@ -970,7 +970,7 @@ "OptionEnableAccessToAllChannels": "Abilita l'accesso a tutti i canali", "OptionEnableAccessToAllLibraries": "Abilita l'accesso a tutte le librerie", "OptionEnableExternalContentInSuggestions": "Abilita contenuto remoto nei suggerimenti", - "OptionEnableExternalContentInSuggestionsHelp": "Consenti l'inclusione di trailer Internet e programmi TV tra i contenuti suggeriti.", + "OptionEnableExternalContentInSuggestionsHelp": "Consenti l'inclusione di trailer da Internet e programmi TV in diretta tra i contenuti suggeriti.", "OptionEnableForAllTuners": "Abilita per tutti i sintonizzatori", "OptionEnableM2tsMode": "Attiva modalità M2TS", "OptionEnableM2tsModeHelp": "Attivare la modalità m2ts durante la codifica di mpegts.", @@ -988,8 +988,8 @@ "OptionHasThemeVideo": "Video Sigla", "OptionHideUser": "Nascondi questo utente dalla schermata di accesso", "OptionHideUserFromLoginHelp": "Utile per account nascosti o amministratore. L'utente avrà bisogno di accedere manualmente utilizzando la propria username e password", - "OptionHlsSegmentedSubtitles": "Hls segmentato sottotitoli", - "OptionHomeVideos": "Video e foto personali", + "OptionHlsSegmentedSubtitles": "HLS sottotitoli segmentati", + "OptionHomeVideos": "Foto", "OptionIgnoreTranscodeByteRangeRequests": "Ignorare le richieste di intervallo di byte di trascodifica", "OptionIgnoreTranscodeByteRangeRequestsHelp": "Se abilitata, queste richieste saranno onorate, ma ignorano l'intervallo di byte.", "OptionImdbRating": "Voto IMDB", @@ -1027,7 +1027,7 @@ "OptionThursday": "Giovedì", "OptionTrackName": "Titolo Traccia", "OptionTuesday": "Martedì", - "OptionTvdbRating": "Voto Tvdb", + "OptionTvdbRating": "Voto TVDB", "OptionUnairedEpisode": "Episodi mai andati in onda", "OptionUnplayed": "Non visto", "OptionWakeFromSleep": "Risveglio:", @@ -1062,7 +1062,7 @@ "Playlists": "Playlist", "PleaseAddAtLeastOneFolder": "Per favore aggiungi almeno una cartella alla raccolta cliccando sul pulsante Aggiungi.", "PleaseConfirmPluginInstallation": "Per favore premi OK per confermare che hai letto quanto precede e che vuoi procedere all'installazione del plug-in.", - "PleaseEnterNameOrId": "Per favore inserisci un nome o un id esterno.", + "PleaseEnterNameOrId": "Per favore inserisci un nome o un ID esterno.", "PleaseRestartServerName": "Per favore riavvia Jellyfin Server - {0}.", "PleaseSelectTwoItems": "Seleziona almeno due elementi.", "PluginInstalledMessage": "Il plugin è stato installato correttamente. Il server Jellyfin dovrà essere riavviato affinché le modifiche abbiano effetto.", @@ -1129,7 +1129,7 @@ "SendMessage": "Invio messaggio", "Series": "Serie TV", "SeriesCancelled": "Serie TV annullate.", - "SeriesDisplayOrderHelp": "Ordina gli episodi per data messa in onda, ordine dvd o numerazione assoluta.", + "SeriesDisplayOrderHelp": "Ordina gli episodi per data messa in onda, ordine DVD o numerazione assoluta.", "SeriesRecordingScheduled": "Registrazione serie TV pianificata.", "SeriesSettings": "Impostazioni Serie TV", "SeriesYearToPresent": "{0} - Oggi", @@ -1161,7 +1161,7 @@ "Sports": "Sport", "StopRecording": "Ferma registrazione", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Queste impostazioni si applicano anche a qualsiasi riproduzione di Chromecast avviata da questo dispositivo.", - "SubtitleAppearanceSettingsDisclaimer": "Queste impostazioni non si applicano a sottotitoli grafici (PGS, DVD, ecc.), o sottotitoli che hanno i propri stili incorporati (ASS / SSA).", + "SubtitleAppearanceSettingsDisclaimer": "Queste impostazioni non si applicano a sottotitoli grafici (PGS, DVD, ecc.) o sottotitoli ASS/SSA che hanno i propri stili.", "SubtitleDownloadersHelp": "Abilita e classifica i tuoi downloader di sottotitoli preferiti in ordine di priorità.", "Subtitles": "Sottotitoli", "Suggestions": "Suggerimenti", @@ -1194,7 +1194,7 @@ "TabMusicVideos": "Video Musicali", "TabMyPlugins": "I miei Plug-in", "TabNetworks": "Reti", - "TabNfoSettings": "Impostazioni nfo", + "TabNfoSettings": "Impostazioni NFO", "TabNotifications": "Notifiche", "TabOther": "Altro", "TabParentalControl": "Controllo Genitore", @@ -1204,7 +1204,7 @@ "TabProfiles": "Profili", "TabRecordings": "Registrazioni", "TabResponses": "Risposte", - "TabResumeSettings": "Ripristina Impostazioni", + "TabResumeSettings": "Ripristina", "TabScheduledTasks": "Operazioni Pianificate", "TabSeries": "Serie TV", "TabSettings": "Impostazioni", @@ -1230,7 +1230,7 @@ "Trailers": "Trailer", "Transcoding": "Trascodifica", "Tuesday": "Martedì", - "TvLibraryHelp": "Rivedere la {0} guida di denominazione Jellyfin TV {1}.", + "TvLibraryHelp": "Rivedere la {0} guida di denominazione TV{1}.", "Uniform": "Uniforme", "UninstallPluginConfirmation": "Sei sicuro di voler Disinstallare {0}?", "UninstallPluginHeader": "Disinstalla Plugin", @@ -1239,8 +1239,8 @@ "Unrated": "Non votato", "Up": "Su", "Upload": "Carica", - "UserAgentHelp": "Fornire un'intestazione http personalizzata per utente-agente, se necessario.", - "UserProfilesIntro": "Jellyfin include il supporto integrato per i profili utente, che permette ad ogni utente di avere le proprie impostazioni di visualizzazione, stato di riproduzione e controlli parentali.", + "UserAgentHelp": "Fornire un'intestazione HTTP personalizzata per utente-agente.", + "UserProfilesIntro": "Jellyfin include il supporto per i profili utente con impostazioni di visualizzazione granulare, stato di riproduzione, e controlli parentali.", "ValueAlbumCount": "{0} album", "ValueAudioCodec": "Codec Audio: {0}", "ValueConditions": "Condizioni: {0}", @@ -1269,13 +1269,13 @@ "Watched": "Visto", "Wednesday": "Mercoledì", "WelcomeToProject": "Benvenuto in Jellyfin!", - "WizardCompleted": "Questo è tutto ciò che serve per ora. Jellyfin ha iniziato a raccogliere informazioni sulla tua libreria di media. Scopri alcune delle nostre app, quindi clicca su Fine per visualizzare il Pannello di Controllo del server.", + "WizardCompleted": "Questo è tutto ciò che serve per ora. Jellyfin ha iniziato a raccogliere informazioni sulla tua libreria di media. Scopri alcune delle nostre app, quindi clicca su Fine per visualizzare il Pannello di Controllo.", "Writer": "Scrittore", "XmlDocumentAttributeListHelp": "Questi attributi vengono applicati all'elemento radice di ogni risposta XML.", "XmlTvKidsCategoriesHelp": "I programmi con queste categorie saranno visualizzati come programmi per i bambini. Separa multipli con '|'.", "XmlTvMovieCategoriesHelp": "I programmi con queste categorie saranno visualizzati come filmati. Separa multipli con '|'.", "XmlTvNewsCategoriesHelp": "I programmi con queste categorie saranno visualizzati come programmi di news. Separa multipli con '|'.", - "XmlTvPathHelp": "Un percorso di un file xml tv. Jellyfin leggerà questo file e controlla periodicamente per gli aggiornamenti. Sei responsabile della creazione e dell'aggiornamento del file.", + "XmlTvPathHelp": "Un percorso di un file XMLTV. Jellyfin leggerà questo file e controlla periodicamente per gli aggiornamenti. Sei responsabile della creazione e dell'aggiornamento del file.", "XmlTvSportsCategoriesHelp": "I programmi con queste categorie saranno visualizzati come programmi sportivi. Separa multipli con '|'.", "Yes": "Si", "Yesterday": "Ieri", @@ -1402,7 +1402,7 @@ "DashboardServerName": "Server: {0}", "LabelVideo": "Video:", "DashboardArchitecture": "Architettura: {0}", - "LabelWeb": "Web: ", + "LabelWeb": "Web:", "LaunchWebAppOnStartup": "Lancia l'interfaccia web quando viene avviato il server", "LaunchWebAppOnStartupHelp": "Apri il client web nel tuo web browser quando il server si avvia inizialmente. Ciò non accadrà quando si usa la funzione riavvio server.", "LeaveBlankToNotSetAPassword": "Puoi lasciare questo campo vuoto per non impostare alcuna password.", @@ -1450,5 +1450,11 @@ "TabStreaming": "Streaming", "ValueCodec": "Codec: {0}", "ValueMinutes": "{0} min", - "ValueOneAlbum": "1 album" + "ValueOneAlbum": "1 album", + "ButtonSplit": "Dividi", + "SelectAdminUsername": "Scegli un nome utente per l'account d'amministratore.", + "OptionRandom": "Casuale", + "MessageConfirmAppExit": "Vuoi uscire?", + "HeaderNavigation": "Navigazione", + "CopyStreamURLError": "Si è verificato un errore nel copiare l'indirizzo." } From 128dc8598b0492bdf92ea9985c9b50087006e3ed Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Sat, 1 Feb 2020 14:35:17 +0000 Subject: [PATCH 05/25] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 104 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 3 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index d5822cd26a..89df6ba163 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1002,7 +1002,7 @@ "RequiredForAllRemoteConnections": "Necessário para todas as ligações externas", "ReplaceAllMetadata": "Substituir todos os metadados", "RepeatOne": "Repetir este", - "RepeatMode": "Modo de repetição", + "RepeatMode": "Modo de Repetição", "ServerRestartNeededAfterPluginInstall": "O Servidor Jellyfin necessitará de reiniciar depois de instalar uma extensão.", "NoPluginConfigurationMessage": "Esta extensão não é configurável.", "MessagePluginInstallDisclaimer": "As extensões desenvolvidas pela comunidade Jellyfin são uma ótima forma de melhorar a experiência de utilização do Jellyfin, adicionando novas funcionalidades e benefícios. Antes de proceder à instalação, tenha em atenção que estas podem alterar determinados comportamentos no Servidor Jellyfin e provocar efeitos como tempos de atualização da Biblioteca mais longos, processamento adicional em segundo plano e estabilidade do sistema reduzida.", @@ -1201,7 +1201,7 @@ "Home": "Início", "GuideProviderLogin": "Iniciar Sessão", "HeaderSubtitleDownloads": "Transferir legendas", - "LabelRecord": "Registo/Guardar", + "LabelRecord": "Gravação:", "LabelSkin": "Máscara:", "LabelMetadataDownloadersHelp": "Active e ordene os seus provedores de metadados por ordem de preferência. Provedores com menos prioriadade só serão usados para completar informação em falta.", "LabelMetadataReadersHelp": "Ordene as suas fontes preferidas de metadados por ordem de preferência. O primeiro ficheiro encontrado será utilizado.", @@ -1344,5 +1344,103 @@ "MusicAlbum": " Álbum de Música", "MoreMediaInfo": "Informações", "MediaInfoBitrate": "Taxa de Bits", - "LabelUserAgent": "User-Agent:" + "LabelUserAgent": "User-Agent:", + "MediaInfoAnamorphic": "Anamórfico", + "LabelTranscodes": "Transcodificação:", + "Whitelist": "Lista branca", + "VideoRange": "Alcance video", + "ValueOneAlbum": "1 álbum", + "ValueMusicVideoCount": "{0} videoclipes musicais", + "ValueMovieCount": "{0} filmes", + "ValueMinutes": "{0} min", + "ValueEpisodeCount": "{0} episódios", + "ValueDiscNumber": "Disco {0}", + "ValueContainer": "Contentor: {0}", + "ValueCodec": "Codec: {0}", + "ValueAlbumCount": "{0} álbuns", + "Upload": "Carregar", + "Up": "Cima", + "Unrated": "Sem avaliação", + "Transcoding": "Transcodificando", + "Trailers": "Videoclipes", + "TitleHostingSettings": "Configurações de Hospedagem", + "Thumb": "Miniatura", + "ThemeVideos": "Vídeos de tema", + "ThemeSongs": "Músicas de tema", + "TagsValue": "Etiquetas: {0}", + "Tags": "Etiquetas", + "TabTrailers": "Videoclipes", + "TabResumeSettings": "Resumir", + "TabLogs": "Logs", + "TabInfo": "Info", + "TabCodecs": "Codecs", + "Suggestions": "Sugestões", + "SortName": "Ordenar nome", + "SortByValue": "Ordenar por {0}", + "Sort": "Ordenar", + "Smart": "Inteligente", + "Smaller": "Menor", + "Small": "Pequeno", + "ShowTitle": "Mostrar título", + "ShowIndicatorsFor": "Mostrar indicadores para:", + "ServerNameIsShuttingDown": "Jellyfin Server - {0} está a desligar.", + "ServerNameIsRestarting": "Jellyfin Server - {0} está a reiniciar.", + "SeriesYearToPresent": "{0} - Presente", + "SeriesSettings": "Configuração de série", + "SeriesCancelled": "Série cancelada.", + "SelectAdminUsername": "Por favor selecione um nome de utilizador para a conta de administração.", + "RepeatEpisodes": "Repetir episódios", + "RepeatAll": "Repetir tudo", + "RemoveFromCollection": "Remover da coleção", + "RememberMe": "Lembrar-me", + "ReleaseDate": "Data de lançamento", + "RefreshQueued": "Recarregar na fila.", + "RefreshMetadata": "Recarregar metadados", + "RecentlyWatched": "Vistos recentemente", + "Rate": "Avaliação", + "QueueAllFromHere": "Fila a partir daqui", + "Quality": "Qualidade", + "ProductionLocations": "Localizações de produção", + "Primary": "Primário", + "Previous": "Anterior", + "Premieres": "Estreias", + "Premiere": "Estreia", + "PreferredNotRequired": "Prefiro, mas não obrigatório", + "PreferEmbeddedTitlesOverFileNames": "Preferir títulos embutidos a nomes de ficheiro", + "PictureInPicture": "Imagem em imagem", + "OptionThumbCard": "Miniatura cartão", + "OptionThumb": "Miniatura", + "OptionPosterCard": "Poster cartão", + "OptionPoster": "Poster", + "OptionDownloadBannerImage": "Cartaz", + "OptionDisplayFolderView": "Mostre em vista de pasta para ver pastas de mídia", + "OptionBanner": "Cartaz", + "NewCollectionHelp": "Coleções permitem criar grupos personalizados de filmes e outros tipos de conteúdo.", + "MusicLibraryHelp": "Reveja o {0}guia de nomeação de música{1}.", + "MovieLibraryHelp": "Reveja o {0} guia de nomeação de filmes {1}.", + "MessageConfirmAppExit": "Quer sair?", + "MediaInfoRefFrames": "Ref quadros", + "MediaInfoLayout": "Disposição", + "MediaInfoDefault": "Padrão", + "MediaInfoBitDepth": "Bit profundidade", + "Logo": "Logotipo", + "LinksValue": "Ligações: {0}", + "Like": "Gosto", + "LaunchWebAppOnStartupHelp": "Abra o cliente web no ser browser padrão quando o servidor iniciar. Isto não acontecerá usando uma função de reiniciar de servidor.", + "LabelXDlnaDoc": "X-DLNA doc:", + "LabelXDlnaCap": "X-DLNA cap:", + "LabelVaapiDeviceHelp": "Este é o nó de renderização usado para aceleração de hardware.", + "LabelVaapiDevice": "VA API Dispositivo:", + "LabelTypeMetadataDownloaders": "{0} transferências de metadados:", + "LabelTheme": "Tema:", + "LabelTVHomeScreen": "TV modo ecrã de casa:", + "LabelSubtitleDownloaders": "Transferência de legendas:", + "LabelParentNumber": "Número fonte:", + "LabelMetadataSavers": "Gravadores de metadados:", + "LabelAudioBitDepth": "Áudio bit quantidade:", + "HeaderNavigation": "Navegação", + "EnableStreamLooping": "Auto-cíclico de streams ao vivo", + "Down": "Baixo", + "CopyStreamURLError": "Ocorreu um erro a copiar o URL.", + "ButtonSplit": "Dividir" } From a72d05db84352c2b1bbcbd5ba3361faac141df6b Mon Sep 17 00:00:00 2001 From: 4d1m Date: Sat, 1 Feb 2020 22:15:46 +0000 Subject: [PATCH 06/25] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index c21b57198b..d18607642c 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -1453,5 +1453,7 @@ "TabCatalog": "Registru", "TV": "TV", "SystemDlnaProfilesHelp": "Profilele de sistem pot fi numai citite. Modificările aduse unui profil de sistem vor fi salvate într-un nou profil personalizat.", - "HeaderNavigation": "Navigare" + "HeaderNavigation": "Navigare", + "MessageConfirmAppExit": "Vrei să ieși?", + "CopyStreamURLError": "A apărut o eroare la copierea adresei URL." } From 2e6b2b5f82a9480fddc5707e8a1ad53dff2810aa Mon Sep 17 00:00:00 2001 From: Thibault Nocchi <1619359+ThibaultNocchi@users.noreply.github.com> Date: Sun, 2 Feb 2020 14:13:43 +0100 Subject: [PATCH 07/25] Added back old URL copy method as fallback --- src/components/itemcontextmenu.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index cfbdb260d6..b6dce6b2e6 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -351,10 +351,22 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter", toast(globalize.translate("CopyStreamURLSuccess")); }); }, function () { - prompt(globalize.translate("CopyStreamURL"), downloadHref); - require(["toast"], function (toast) { - toast(globalize.translate("CopyStreamURLSuccess")); - }); + var textArea = document.createElement("textarea"); + textArea.value = downloadHref; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + if (document.execCommand("copy")) { + require(["toast"], function (toast) { + toast(globalize.translate("CopyStreamURLSuccess")); + }); + } else { + prompt(globalize.translate("CopyStreamURL"), downloadHref); + require(["toast"], function (toast) { + toast(globalize.translate("CopyStreamURLSuccess")); + }); + } + document.body.removeChild(textArea); }); getResolveFunction(resolve, id)(); break; From 5e86eb84314cd1484142ffae58110702c1080708 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 4 Feb 2020 21:25:00 +0100 Subject: [PATCH 08/25] Adjust details page ribbon margins and colors --- src/assets/css/librarybrowser.css | 2 +- src/themes/appletv/theme.css | 8 + src/themes/blueradiance/theme.css | 8 + src/themes/emby/theme.css | 432 ------------------------------ src/themes/light/theme.css | 8 + src/themes/purplehaze/theme.css | 7 + src/themes/wmc/theme.css | 4 + 7 files changed, 36 insertions(+), 433 deletions(-) delete mode 100644 src/themes/emby/theme.css diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 8475b72b2f..9f1516c16e 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -499,7 +499,7 @@ align-items: center; align-content: center; position: sticky; - top: 8%; + top: 6.6%; z-index: 2; } diff --git a/src/themes/appletv/theme.css b/src/themes/appletv/theme.css index 9c3bc803ec..ccc6eaaabe 100644 --- a/src/themes/appletv/theme.css +++ b/src/themes/appletv/theme.css @@ -224,6 +224,14 @@ html { color: #fff !important; } +.detailSticky { + background: #303030; + background: -webkit-gradient(linear, left top, right top, from(#bcbcbc), color-stop(#a7b4b7), color-stop(#beb5a5), color-stop(#adbec2), to(#b9c7cb)); + background: -webkit-linear-gradient(left, #bcbcbc, #a7b4b7, #beb5a5, #adbec2, #b9c7cb); + background: -o-linear-gradient(left, #bcbcbc, #a7b4b7, #beb5a5, #adbec2, #b9c7cb); + background: linear-gradient(to right, #bcbcbc, #a7b4b7, #beb5a5, #adbec2, #b9c7cb); +} + .detailTableBodyRow-shaded:nth-child(even) { background: #f8f8f8; background: rgba(0, 0, 0, 0.1); diff --git a/src/themes/blueradiance/theme.css b/src/themes/blueradiance/theme.css index b1979e4901..63c765e4e6 100644 --- a/src/themes/blueradiance/theme.css +++ b/src/themes/blueradiance/theme.css @@ -216,6 +216,14 @@ html { color: #fff !important; } +.detailSticky { + background: #303030; + background: -webkit-gradient(linear, left top, right top, from(#291a31), color-stop(#033664), color-stop(#011432), color-stop(#141a3a), to(#291a31)); + background: -webkit-linear-gradient(left, #291a31, #033664, #011432, #141a3a, #291a31); + background: -o-linear-gradient(left, #291a31, #033664, #011432, #141a3a, #291a31); + background: linear-gradient(to right, #291a31, #033664, #011432, #141a3a, #291a31); +} + .detailTableBodyRow-shaded:nth-child(even) { background: #1c1c1c; background: rgba(30, 30, 30, 0.9); diff --git a/src/themes/emby/theme.css b/src/themes/emby/theme.css deleted file mode 100644 index ba0699cc65..0000000000 --- a/src/themes/emby/theme.css +++ /dev/null @@ -1,432 +0,0 @@ -.skinHeader, -html { - color: #ddd; - color: rgba(255, 255, 255, 0.8); -} - -.wizardStartForm, -.ui-corner-all, -.ui-shadow { - background-color: #1f1f1f; -} - -.emby-collapsible-button { - border-color: #383838; - border-color: rgba(255, 255, 255, 0.135); -} - -.skinHeader-withBackground { - background-color: #1f1f1f; -} - -.skinHeader.semiTransparent { - backdrop-filter: none !important; - background-color: rgba(0, 0, 0, 0.4); -} - -.pageTitleWithDefaultLogo { - background-image: url(../logowhite.png); -} - -.backgroundContainer, -.dialog, -html { - background-color: #1a1a1a; -} - -.backgroundContainer.withBackdrop { - background-color: rgba(0, 0, 0, 0.86); -} - -.paper-icon-button-light:hover:not(:disabled) { - color: #52b54b; - background-color: rgba(82, 181, 75, 0.2); -} - -.paper-icon-button-light.show-focus:focus { - color: #52b54b; -} - -.fab, -.raised { - background: #303030; - color: rgba(255, 255, 255, 0.87); -} - -.fab:focus, -.raised:focus { - background: #383838; -} - -.button-submit { - background: #52b54b; - color: #fff; -} - -.button-submit:focus { - background: #5ec157; - color: #fff; -} - -.button-delete { - background: rgb(247, 0, 0); - color: rgba(255, 255, 255, 0.87); -} - -.checkboxLabel { - color: inherit; -} - -.checkboxListLabel, -.inputLabel, -.inputLabelUnfocused, -.paperListLabel, -.textareaLabelUnfocused { - color: #bbb; - color: rgba(255, 255, 255, 0.7); -} - -.inputLabelFocused, -.selectLabelFocused, -.textareaLabelFocused { - color: #52b54b; -} - -.checkboxOutline { - border-color: currentColor; -} - -.collapseContent, -.formDialogFooter:not(.formDialogFooter-clear), -.formDialogHeader:not(.formDialogHeader-clear), -.paperList, -.visualCardBox { - background-color: #242424; -} - -.defaultCardBackground1 { - background-color: #d2b019; -} - -.defaultCardBackground2 { - background-color: #338abb; -} - -.defaultCardBackground3 { - background-color: #6b689d; -} - -.defaultCardBackground4 { - background-color: #dd452b; -} - -.defaultCardBackground5 { - background-color: #5ccea9; -} - -.cardText-secondary, -.fieldDescription, -.guide-programNameCaret, -.listItem .secondary, -.nowPlayingBarSecondaryText, -.programSecondaryTitle, -.secondaryText { - color: #999; - color: rgba(255, 255, 255, 0.5); -} - -.actionsheetDivider { - background: #444; - background: rgba(255, 255, 255, 0.14); -} - -.cardFooter-vibrant .cardText-secondary { - color: inherit; - opacity: 0.5; -} - -.actionSheetMenuItem:hover { - background-color: #242424; -} - -.toast { - background: #303030; - color: #fff; - color: rgba(255, 255, 255, 0.87); -} - -.appfooter { - background: #101010; - color: #ccc; - color: rgba(255, 255, 255, 0.78); -} - -.itemSelectionPanel { - border: 1px solid #52b54b; -} - -.selectionCommandsPanel { - background: #52b54b; - color: #fff; -} - -.upNextDialog-countdownText { - color: #52b54b; -} - -.alphaPickerButton { - color: #999; - color: rgba(255, 255, 255, 0.5); - background-color: transparent; -} - -.alphaPickerButton-selected { - color: #fff; -} - -.alphaPickerButton-tv:focus { - background-color: #52b54b; - color: #fff !important; -} - -.detailTableBodyRow-shaded:nth-child(even) { - background: #1c1c1c; - background: rgba(30, 30, 30, 0.9); -} - -.listItem-border { - border-color: rgba(34, 34, 34, 0.9) !important; -} - -.listItem:focus { - background: #333; -} - -.progressring-spiner { - border-color: #52b54b; -} - -.button-flat-accent, -.button-link { - color: #52b54b; -} - -.mediaInfoText { - color: #ddd; - background: rgba(170, 170, 190, 0.2); -} - -.mediaInfoTimerIcon, -.starIcon { - color: #cb272a; -} - -.emby-input, -.emby-textarea { - color: inherit; - background: #292929; - border: 0.16em solid #292929; - border-radius: 0.2em; -} - -.emby-input:focus, -.emby-textarea:focus { - border-color: #52b54b; -} - -.emby-select-withcolor { - color: inherit; - background: #292929; - border: 0.07em solid #292929; -} - -.emby-select-withcolor > option { - color: inherit; - background: #222; -} - -.emby-select-withcolor:focus { - border-color: #52b54b !important; -} - -.emby-select-tv-withcolor:focus { - background-color: #52b54b !important; - color: #fff !important; -} - -.emby-checkbox:checked + span + .checkboxOutline { - border-color: #52b54b; -} - -.emby-checkbox:focus + span + .checkboxOutline { - border-color: #fff; -} - -.emby-checkbox:checked + span + .checkboxOutline, -.itemProgressBarForeground { - background-color: #52b54b; -} - -.emby-checkbox:focus:not(:checked) + span + .checkboxOutline { - border-color: #52b54b; -} - -.itemProgressBarForeground-recording { - background-color: #cb272a; -} - -.countIndicator, -.fullSyncIndicator, -.playedIndicator { - background: #52b54b; -} - -.fullSyncIndicator { - color: #fff; -} - -.mainDrawer { - background-color: #1c1c1c; -} - -.navMenuOption:hover { - background: #252528; -} - -.navMenuOption-selected { - background: #52b54b !important; - color: #fff; -} - -.emby-button.show-focus:focus { - background: #52b54b; - color: #fff; -} - -.emby-tab-button { - color: #999; -} - -.emby-tab-button-active { - color: #52b54b; -} - -.emby-tab-button.show-focus:focus { - color: #52b54b; -} - -.emby-tab-button:hover { - color: #52b54b; -} - -.channelPrograms, -.guide-channelHeaderCell, -.programCell { - border-color: rgba(255, 255, 255, 0.05); -} - -.programCell-sports { - background: #3949ab !important; -} - -.programCell-movie { - background: #5e35b1 !important; -} - -.programCell-kids { - background: #039be5 !important; -} - -.programCell-news { - background: #43a047 !important; -} - -.programCell-active { - background: #1e1e1e !important; -} - -.guide-channelHeaderCell:focus, -.programCell:focus { - background-color: #52b54b !important; - color: #fff !important; -} - -.guide-programTextIcon { - color: #1e1e1e; - background: #555; -} - -.guide-headerTimeslots { - color: inherit; -} - -.guide-date-tab-button { - color: #555; - color: rgba(255, 255, 255, 0.3); -} - -.guide-date-tab-button.emby-tab-button-active, -.guide-date-tab-button:focus { - color: #52b54b; -} - -.guide-date-tab-button.show-focus:focus { - background-color: #52b54b; - color: #fff; -} - -.infoBanner { - color: #ddd; - background: #111; - padding: 1em; - border-radius: 0.25em; -} - -.ratingbutton-icon-withrating { - color: #c33; -} - -.downloadbutton-icon-complete, -.downloadbutton-icon-on { - color: #4285f4; -} - -.playstatebutton-icon-played { - color: #c33; -} - -.repeatButton-active { - color: #4285f4; -} - -.card:focus .cardBox.visualCardBox, -.card:focus .cardBox:not(.visualCardBox) .cardScalable { - border-color: #52b54b !important; -} - -::-webkit-scrollbar-track { - box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); -} - -::-webkit-scrollbar-track-piece { - background-color: #3b3b3b; -} - -.layout-desktop ::-webkit-scrollbar { - width: 1em; - height: 1em; -} - -::-webkit-scrollbar-thumb:horizontal, -::-webkit-scrollbar-thumb:vertical { - border-radius: 2px; - background: center no-repeat #888; -} - -.timeslotHeaders-desktop::-webkit-scrollbar { - height: 0.7em; -} - -.metadataSidebarIcon { - color: #00a4dc; -} diff --git a/src/themes/light/theme.css b/src/themes/light/theme.css index c6e5bca899..cedc8bfb8b 100644 --- a/src/themes/light/theme.css +++ b/src/themes/light/theme.css @@ -218,6 +218,14 @@ html { color: #fff !important; } +.detailSticky { + background-color: #303030; + color: #ccc; + color: rgba(255, 255, 255, 0.87); + -webkit-box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37); + box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37); +} + .detailTableBodyRow-shaded:nth-child(even) { background: #f8f8f8; } diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index 7f10c9265b..4986736582 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -304,6 +304,13 @@ a[data-role=button] { color: #f8f8fe !important; } +.detailSticky { + background: #000420; + background: -moz-linear-gradient(left, #000420 0%, #06256f 18%, #2b052b 38%, #2b052b 68%, #06256f 81%, #000420 100%); + background: -webkit-linear-gradient(left, #000420 0%, #06256f 18%, #2b052b 38%, #2b052b 68%, #06256f 81%, #000420 100%); + background: linear-gradient(to right, #000420 0%, #06256f 18%, #2b052b 38%, #2b052b 68%, #06256f 81%, #000420 100%); +} + .detailTableBodyRow-shaded:nth-child(even) { background: #1c1c1c; background: rgba(30, 30, 30, 0.9); diff --git a/src/themes/wmc/theme.css b/src/themes/wmc/theme.css index 4243204172..41e1767565 100644 --- a/src/themes/wmc/theme.css +++ b/src/themes/wmc/theme.css @@ -202,6 +202,10 @@ html { color: #fff !important; } +.detailSticky { + background-color: #081b3b; +} + .detailTableBodyRow-shaded:nth-child(even) { background: #1c1c1c; background: rgba(0, 0, 0, 0.3); From efbfbb822e978981902fc94e84fbc6bd88e72285 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 4 Feb 2020 17:24:44 -0500 Subject: [PATCH 09/25] Fix device images on main dashboard page --- src/scripts/imagehelper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scripts/imagehelper.js b/src/scripts/imagehelper.js index 96961eb0cc..2edc130165 100644 --- a/src/scripts/imagehelper.js +++ b/src/scripts/imagehelper.js @@ -3,7 +3,7 @@ define(["browser"], function (browser) { function getDeviceIcon(device) { var baseUrl = "assets/img/devices/"; - switch (device.AppName) { + switch (device.AppName || device.Client) { case "Samsung Smart TV": return baseUrl + "samsung.svg"; case "Xbox One": @@ -15,7 +15,7 @@ define(["browser"], function (browser) { case "Jellyfin Android": return baseUrl + "android.svg"; case "Jellyfin Web": - switch (device.Name) { + switch (device.Name || device.DeviceName) { case "Opera": case "Opera TV": return baseUrl + "opera.svg"; From 17f948018815946cbcbf8540397046e4ed1e3a28 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Wed, 5 Feb 2020 15:20:48 +0300 Subject: [PATCH 10/25] Disable keyboard navigation for non-TV --- src/components/keyboardnavigation.js | 27 +++++++++++++++++++++++++-- src/controllers/playback/videoosd.js | 7 +------ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/components/keyboardnavigation.js b/src/components/keyboardnavigation.js index d1ed03138c..4f3ed873d9 100644 --- a/src/components/keyboardnavigation.js +++ b/src/components/keyboardnavigation.js @@ -36,6 +36,11 @@ define(["inputManager", "layoutManager"], function (inputManager, layoutManager) 10252: "MediaPlayPause" }; + /** + * Keys used for keyboard navigation. + */ + var NavigationKeys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"]; + var hasFieldKey = false; try { hasFieldKey = "key" in new KeyboardEvent("keydown"); @@ -60,11 +65,28 @@ define(["inputManager", "layoutManager"], function (inputManager, layoutManager) 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 + */ + function isNavigationKey(key) { + return NavigationKeys.indexOf(key) != -1; + } + function enable() { document.addEventListener("keydown", function (e) { + var key = getKeyName(e); + + // Ignore navigation keys for non-TV + if (!layoutManager.tv && isNavigationKey(key)) { + return; + } + var capture = true; - switch (getKeyName(e)) { + switch (key) { case "ArrowLeft": inputManager.handle("left"); break; @@ -128,6 +150,7 @@ define(["inputManager", "layoutManager"], function (inputManager, layoutManager) return { enable: enable, - getKeyName: getKeyName + getKeyName: getKeyName, + isNavigationKey: isNavigationKey }; }); diff --git a/src/controllers/playback/videoosd.js b/src/controllers/playback/videoosd.js index 122b2c8080..fd42f68498 100644 --- a/src/controllers/playback/videoosd.js +++ b/src/controllers/playback/videoosd.js @@ -1087,11 +1087,6 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med } } - /** - * Keys used for keyboard navigation. - */ - var NavigationKeys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"]; - /** * Clicked element. * To skip 'click' handling on Firefox/Edge. @@ -1109,7 +1104,7 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med return; } - if (layoutManager.tv && NavigationKeys.indexOf(key) != -1) { + if (layoutManager.tv && keyboardnavigation.isNavigationKey(key)) { showOsd(); return; } From 8ac0cde29ec0f1c2e1c14ba1910a235cd7d19954 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Wed, 5 Feb 2020 17:58:11 +0300 Subject: [PATCH 11/25] Fix logoscreensaver image path --- src/components/logoscreensaver/plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/logoscreensaver/plugin.js b/src/components/logoscreensaver/plugin.js index 0eb5e85d31..7716bbf6e5 100644 --- a/src/components/logoscreensaver/plugin.js +++ b/src/components/logoscreensaver/plugin.js @@ -160,7 +160,7 @@ define(["pluginManager"], function (pluginManager) { elem.classList.add("logoScreenSaver"); document.body.appendChild(elem); - elem.innerHTML = ''; + elem.innerHTML = ''; } stopInterval(); From 532d73a80b8fe541d865d41ab6667ef4780f61f1 Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 6 Feb 2020 00:13:11 +0900 Subject: [PATCH 12/25] minor theme changes --- src/components/appfooter/appfooter.js | 6 ------ src/controllers/dashboard/dashboard.js | 13 ++++++++++--- src/elements/emby-button/emby-button.css | 4 ---- src/themes/blueradiance/theme.css | 7 +++++-- src/themes/dark/theme.css | 13 ++++++++++--- src/themes/purplehaze/theme.css | 7 +++++-- src/themes/wmc/theme.css | 5 ++++- 7 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/components/appfooter/appfooter.js b/src/components/appfooter/appfooter.js index 61bb62ec29..07d7701ff2 100644 --- a/src/components/appfooter/appfooter.js +++ b/src/components/appfooter/appfooter.js @@ -2,24 +2,18 @@ define(['browser', 'css!./appfooter'], function (browser) { 'use strict'; function render(options) { - var elem = document.createElement('div'); - elem.classList.add('appfooter'); - elem.classList.add('appfooter-blurred'); - document.body.appendChild(elem); return elem; } function appFooter(options) { - var self = this; self.element = render(options); - self.add = function (elem) { self.element.appendChild(elem); }; diff --git a/src/controllers/dashboard/dashboard.js b/src/controllers/dashboard/dashboard.js index 36cf80fb14..9746b58afe 100644 --- a/src/controllers/dashboard/dashboard.js +++ b/src/controllers/dashboard/dashboard.js @@ -301,23 +301,30 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa html += ""; html += '
'; html += '
'; - var btnCssClass; - btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; - html += ''; + + var btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl ? "" : " hide"; + var playIcon = session.PlayState.IsPaused ? 'pause' : 'play'; + + html += ''; html += ''; + btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length ? "" : " hide"; html += ''; + btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; html += ''; html += "
"; + html += '
'; html += DashboardPage.getSessionNowPlayingStreamInfo(session); html += "
"; + html += '
'; var userImage = DashboardPage.getUserImage(session); html += userImage ? '
" : '
'; html += '
'; html += DashboardPage.getUsersHtml(session); + html += "
"; html += "
"; html += "
"; diff --git a/src/elements/emby-button/emby-button.css b/src/elements/emby-button/emby-button.css index 2776dec65d..a19ce571e2 100644 --- a/src/elements/emby-button/emby-button.css +++ b/src/elements/emby-button/emby-button.css @@ -47,10 +47,6 @@ background: transparent; } -.button-flat:hover { - opacity: 0.5; -} - .button-link { background: transparent; margin: 0; diff --git a/src/themes/blueradiance/theme.css b/src/themes/blueradiance/theme.css index b1979e4901..f1faea2ffc 100644 --- a/src/themes/blueradiance/theme.css +++ b/src/themes/blueradiance/theme.css @@ -182,7 +182,7 @@ html { } @supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) { - .appfooter-blurred { + .appfooter { background: rgba(1, 2, 50, 0.7); backdrop-filter: blur(20px); } @@ -233,7 +233,10 @@ html { border-color: #00a4dc; } -.button-flat-accent, +.button-flat:hover { + color: #00a4dc; +} + .button-link { color: #00a4dc; } diff --git a/src/themes/dark/theme.css b/src/themes/dark/theme.css index 58e9ab1856..2df689a84c 100644 --- a/src/themes/dark/theme.css +++ b/src/themes/dark/theme.css @@ -16,7 +16,7 @@ html { } .skinHeader-withBackground { - background-color: #101010; + background-color: #202020; } .skinHeader.semiTransparent { @@ -157,7 +157,7 @@ html { } .appfooter { - background: #101010; + background: #202020; color: #ccc; color: rgba(255, 255, 255, 0.78); } @@ -195,6 +195,10 @@ html { background: rgba(30, 30, 30, 0.9); } +.detailSticky { + background: #202020; +} + .listItem-border { border-color: rgba(34, 34, 34, 0.9) !important; } @@ -207,7 +211,10 @@ html { border-color: #00a4dc; } -.button-flat-accent, +.button-flat:hover { + color: #00a4dc; +} + .button-link { color: #00a4dc; } diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index 7f10c9265b..ab21a30321 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -276,7 +276,7 @@ a[data-role=button] { } @supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) { - .appfooter-blurred { + .appfooter { background: rgba(6, 37, 111, 0.7); backdrop-filter: blur(20px); } @@ -321,7 +321,10 @@ a[data-role=button] { border-color: #48c3c8; } -.button-flat-accent, +.button-flat:hover { + color: #48c3c8; +} + .button-link { color: #48c3c8; } diff --git a/src/themes/wmc/theme.css b/src/themes/wmc/theme.css index 4243204172..8235cf283b 100644 --- a/src/themes/wmc/theme.css +++ b/src/themes/wmc/theme.css @@ -219,7 +219,10 @@ html { border-color: #00a4dc; } -.button-flat-accent, +.button-flat:hover { + color: #00a4dc; +} + .button-link { color: #00a4dc; } From 1b23895e81f135ae4b4e914cabfe07405d19ba91 Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 6 Feb 2020 03:14:17 +0900 Subject: [PATCH 13/25] fix placeholder message style --- src/assets/css/librarybrowser.css | 6 ++++++ src/components/tabbedview/itemstab.js | 7 ------- src/tv.html | 8 +++----- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 8475b72b2f..9c6e532583 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -220,6 +220,12 @@ left: 0; } +.centerMessage { + margin: auto; + width: 30%; + text-align: center; +} + .layout-desktop .searchTabButton, .layout-mobile .searchTabButton, .layout-tv .headerSearchButton { diff --git a/src/components/tabbedview/itemstab.js b/src/components/tabbedview/itemstab.js index 33eddb6ec5..d430102f2a 100644 --- a/src/components/tabbedview/itemstab.js +++ b/src/components/tabbedview/itemstab.js @@ -104,24 +104,17 @@ define(['playbackManager', 'userSettings', 'alphaPicker', 'alphaNumericShortcuts } function showSortMenu() { - var instance = this; - require(['sortMenu'], function (SortMenu) { - new SortMenu().show({ - settingsKey: instance.getSettingsKey(), settings: instance.getSortValues(), onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer), serverId: instance.params.serverId, sortOptions: instance.getSortMenuOptions() - }).then(function () { - updateSortText(instance); updateAlphaPickerState(instance); - instance.itemsContainer.refreshItems(); }); }); diff --git a/src/tv.html b/src/tv.html index 3c15b61b8b..0840652c77 100644 --- a/src/tv.html +++ b/src/tv.html @@ -45,11 +45,9 @@
-
From 1619646f0a49ef7f11accab4c4faf9e35937bfdb Mon Sep 17 00:00:00 2001 From: ferferga Date: Mon, 3 Feb 2020 17:18:15 +0100 Subject: [PATCH 14/25] Default font family now is Noto Sans. Linked to jellyfin-noto package --- package.json | 1 + src/assets/css/fonts.css | 13 +- src/assets/css/fonts.sized.css | 6 +- src/bundle.js | 5 + src/scripts/site.js | 4 +- yarn.lock | 316 +++++++++++++++++++++++++++++---- 6 files changed, 304 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 4392f12153..b75968aa8a 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "flv.js": "^1.5.0", "hls.js": "^0.12.4", "howler": "^2.1.2", + "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jquery": "^3.4.1", "jstree": "^3.3.7", "libass-wasm": "^2.1.1", diff --git a/src/assets/css/fonts.css b/src/assets/css/fonts.css index 30fd1e2eb6..f125bc6a03 100644 --- a/src/assets/css/fonts.css +++ b/src/assets/css/fonts.css @@ -1,29 +1,30 @@ html { - font-family: -apple-system, "Helvetica", system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", 'Open Sans', sans-serif; + font-family: "Noto Sans", sans-serif; font-size: 93%; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; } h1, h2, h3 { - /* For better bolding, since Helvetica does not support 500 weight, and 600 is too thick */ - font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", 'Open Sans', sans-serif; + font-family: "Noto Sans", sans-serif; } h1 { - font-weight: 500; + font-weight: 400; font-size: 1.8em; } h2 { - font-weight: 500; + font-weight: 400; font-size: 1.5em; } h3 { - font-weight: 500; + font-weight: 400; font-size: 1.17em; } diff --git a/src/assets/css/fonts.sized.css b/src/assets/css/fonts.sized.css index 9cdd666109..f60a94f236 100644 --- a/src/assets/css/fonts.sized.css +++ b/src/assets/css/fonts.sized.css @@ -1,5 +1,5 @@ h1 { - font-weight: 500; + font-weight: 400; font-size: 1.8em; } @@ -8,12 +8,12 @@ h1 { } h2 { - font-weight: 500; + font-weight: 400; font-size: 1.5em; } h3 { - font-weight: 500; + font-weight: 400; font-size: 1.17em; } diff --git a/src/bundle.js b/src/bundle.js index 9e3bc4f237..47e8f890e2 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -102,3 +102,8 @@ var material_icons = require("material-design-icons-iconfont/dist/material-desig _define("material-icons", function() { return material_icons; }); + +var jellyfin_noto = require("jellyfin-noto"); +_define("jellyfin-noto", function () { + return jellyfin_noto; +}); diff --git a/src/scripts/site.js b/src/scripts/site.js index f5ad942d6e..f26e6b68ba 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -732,7 +732,8 @@ var AppInfo = {}; "sortable", "libjass", "webcomponents", - "material-icons" + "material-icons", + "jellyfin-noto" ] }, urlArgs: urlArgs, @@ -747,6 +748,7 @@ var AppInfo = {}; }); require(["css!assets/css/site"]); + require(["jellyfin-noto"]); // define styles // TODO determine which of these files can be moved to the components themselves diff --git a/yarn.lock b/yarn.lock index cc0fe93261..33323c9d71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -675,6 +675,24 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^9.0.0, autoprefixer@^9.7.3: + version "9.7.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" + integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== + dependencies: + browserslist "^4.8.3" + caniuse-lite "^1.0.30001020" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.26" + postcss-value-parser "^4.0.2" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -856,6 +874,23 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" +browserslist@^1.1.3: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^4.8.3: + version "4.8.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.6.tgz#96406f3f5f0755d272e27a66f4163ca821590a7e" + integrity sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg== + dependencies: + caniuse-lite "^1.0.30001023" + electron-to-chromium "^1.3.341" + node-releases "^1.1.47" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -895,27 +930,7 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^11.3.3: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^12.0.3: +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== @@ -956,6 +971,25 @@ call-me-maybe@^1.0.1: resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -997,7 +1031,22 @@ camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: +caniuse-db@^1.0.30000639: + version "1.0.30001024" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001024.tgz#64045c5d0d57b00c30e09323b578b2305c4737ad" + integrity sha512-dmwZ7u58E68UCexHf92QERFL8kwwCv0TVS1LCNluhZo+565AXU5uNtnPF+J5E2MExwWJeNnhTD63BH8ncMV09g== + +caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001023: + version "1.0.30001023" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001023.tgz#b82155827f3f5009077bdd2df3d8968bcbcc6fc4" + integrity sha512-C5TDMiYG11EOhVOA62W1p3UsJ2z4DsHtMBQtjzp3ZsUglcQn62WOUgW0y795c7A5uZ+GCEIvzkMatLIlAsbNTA== + +ccount@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" + integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1383,6 +1432,27 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -1783,6 +1853,11 @@ 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.341: + version "1.3.344" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz#f1397a633c35e726730c24be1084cd25c3ee8148" + integrity sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw== + elliptic@^6.0.0: version "6.5.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" @@ -1849,6 +1924,13 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.5.1: version "1.16.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" @@ -2944,6 +3026,19 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.0.4, ignore@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-fresh@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" @@ -2952,6 +3047,24 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" + integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== + +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -3117,6 +3230,11 @@ is-arguments@^1.0.4: resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -3181,6 +3299,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3368,6 +3491,10 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +"jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": + version "1.0.0" + resolved "https://github.com/jellyfin/jellyfin-noto#251448082fdeeb6db4563001de18192842498df7" + jquery@>=1.9.1, jquery@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" @@ -3681,11 +3808,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -material-design-icons-iconfont@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/material-design-icons-iconfont/-/material-design-icons-iconfont-5.0.1.tgz#371875ed7fe9c8c520bc7123c3231feeab731c31" - integrity sha512-Xg6rIdGrfySTqiTZ6d+nQbcFepS6R4uKbJP0oAqyeZXJY/bX6mZDnOmmUJusqLXfhIwirs0c++a6JpqVa8RFvA== - markdown-escapes@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" @@ -3696,6 +3818,11 @@ markdown-table@^1.1.0: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== +material-design-icons-iconfont@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/material-design-icons-iconfont/-/material-design-icons-iconfont-5.0.1.tgz#371875ed7fe9c8c520bc7123c3231feeab731c31" + integrity sha512-Xg6rIdGrfySTqiTZ6d+nQbcFepS6R4uKbJP0oAqyeZXJY/bX6mZDnOmmUJusqLXfhIwirs0c++a6JpqVa8RFvA== + mathml-tag-names@^2.0.1, mathml-tag-names@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc" @@ -4115,6 +4242,13 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" +node-releases@^1.1.47: + version "1.1.47" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" + integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== + dependencies: + semver "^6.3.0" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -4145,6 +4279,16 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" @@ -4182,6 +4326,11 @@ nth-check@~1.0.1: dependencies: boolbase "~1.0.0" +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -4342,6 +4491,13 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" @@ -4349,6 +4505,20 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -4425,6 +4595,36 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-entities@^1.0.2, parse-entities@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -4568,6 +4768,40 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-html@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" + integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== + dependencies: + htmlparser2 "^3.10.0" + +postcss-jsx@^0.36.0, postcss-jsx@^0.36.3: + version "0.36.4" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.4.tgz#37a68f300a39e5748d547f19a747b3257240bd50" + integrity sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA== + dependencies: + "@babel/core" ">=7.2.2" + +postcss-less@^3.1.0, postcss-less@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" + integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== + dependencies: + postcss "^7.0.14" + +postcss-markdown@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.36.0.tgz#7f22849ae0e3db18820b7b0d5e7833f13a447560" + integrity sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ== + dependencies: + remark "^10.0.1" + unist-util-find-all-after "^1.0.2" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + postcss-modules-extract-imports@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" @@ -4708,10 +4942,25 @@ postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" - integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== +postcss-value-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + +postcss@^5.0.0, postcss@^5.0.18: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.7: + version "7.0.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" + integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -5326,6 +5575,11 @@ serialize-javascript@^1.7.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" From bf55c427a55032d16cbc3a6bdddf7e4b2c3e0abe Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 7 Feb 2020 09:03:49 +0300 Subject: [PATCH 15/25] Remove unused logo image --- src/components/logoscreensaver/logowhite.png | Bin 39729 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/components/logoscreensaver/logowhite.png diff --git a/src/components/logoscreensaver/logowhite.png b/src/components/logoscreensaver/logowhite.png deleted file mode 100644 index 560d910d74f696d9f4a5a8ff2e08aa32cbd2fa2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39729 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 OWvHjCpUXO@geCwqo=^S& From 90bd682334c7e119bc7c2240fed53faef84b0100 Mon Sep 17 00:00:00 2001 From: The Iiseppi Date: Fri, 7 Feb 2020 06:10:45 +0000 Subject: [PATCH 16/25] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 10e1a95a72..d5ffc9c2d7 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -276,7 +276,7 @@ "HeaderFavoriteAlbums": "Lempialbumit", "HeaderContinueWatching": "Jatka Katsomista", "HeaderAlbumArtists": "Albumiartistit", - "Genres": "Genret", + "Genres": "Lajipiiri", "Folders": "Kansiot", "Favorites": "Suosikit", "Display": "Näytä" From 8689e4965f913c7001ea552206bec0509cbfa0ef Mon Sep 17 00:00:00 2001 From: WWWesten Date: Fri, 7 Feb 2020 21:09:05 +0000 Subject: [PATCH 17/25] Translated using Weblate (Kazakh) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/ --- src/strings/kk.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/kk.json b/src/strings/kk.json index 05651f0c0d..ebb3d22b95 100644 --- a/src/strings/kk.json +++ b/src/strings/kk.json @@ -235,7 +235,7 @@ "ErrorAddingListingsToSchedulesDirect": "Schedules Direct tirkelgińizge tizbek ústeý kezinde qate oryn aldy. Schedules Direct tirkelgisinde tizbekterdiń tek qana shekteýli sany rýqsat etiledi. Oryndamas buryn Schedules Direct saıtyna kirip jáne tirkelgiden basqa tizbelerdi alastaý qajet bolýy múmkin.", "ErrorAddingMediaPathToVirtualFolder": "Tasyǵyshderekter jolyn ústegen kezinde qate oryn aldy. Jol durys ekenine jáne Jellyfin Server prosesi osy jaıǵasymǵa qatynaıtyna kóz jetkizińiz.", "ErrorAddingTunerDevice": "Túner qurylǵysyn ústeý kezinde qate oryn aldy. Bul qatynaýly ekenine kóz jetkizińiz de áreketti qaıtalańyz.", - "ErrorAddingXmlTvFile": "XmlTV faılyna qatynaý kezinde qate oryn aldy. Faıl bar bolýyna kóz jetkizińiz de áreketti qaıtalańyz.", + "ErrorAddingXmlTvFile": "XMLTV-faılyna qatynaý kezinde qate oryn aldy. Faıl bar bolýyna kóz jetkizińiz de áreketti qaıtalańyz.", "ErrorDeletingItem": "Jellyfin Server elementin joıý kezinde qate oryn aldy. Jellyfin Server tasyǵysh qaltasyna jazýǵa ruqsaty bar ekenin tekserip, qaıtalap kórińiz.", "ErrorGettingTvLineups": "TD kezekterin júktep alý kezinde qate oryn aldy. Málimetterińiz durys ekenine kóz jetkizińiz de áreketti qaıtalańyz.", "ErrorMessageStartHourGreaterThanEnd": "Aıaqtalý ýaqyty bastaý ýaqytynan keıinrek bolýy qajet etedi.", @@ -674,7 +674,7 @@ "LabelLoginDisclaimer": "Kirgendegi eskertý:", "LabelLoginDisclaimerHelp": "Kirý beti tómengi jaǵynda beınelenetin habar.", "LabelLogs": "Jurnaldar:", - "LabelManufacturer": "Óndirýshi", + "LabelManufacturer": "Óndirýshi:", "LabelManufacturerUrl": "Óndirýshi URL mekenjaıy", "LabelMatchType": "Sáıkes túri:", "LabelMaxBackdropsPerItem": "Tarmaq boıynsha artqy sýretterdiń eń kóp sany:", @@ -713,7 +713,7 @@ "LabelMoviePrefixHelp": "Eger fılmderdiń ataýynda prefıks qoldanylsa, server durys óńdeı alý úshin buny munda engizińiz.", "LabelMovieRecordingPath": "Fılm jazbalardyń joly (mindetti emes):", "LabelMusicStreamingTranscodingBitrate": "Mýzykany qaıta kodtaý qarqyny:", - "LabelMusicStreamingTranscodingBitrateHelp": "Mýzyka tasymaldaný kezinde eń joǵary qarqyndy anyqtańyz", + "LabelMusicStreamingTranscodingBitrateHelp": "Mýzyka tasymaldaný kezinde eń joǵary qarqyndy anyqtańyz.", "LabelName": "Aty:", "LabelNewName": "Jańa aty:", "LabelNewPassword": "Jańa paról:", @@ -1401,7 +1401,7 @@ "XmlTvKidsCategoriesHelp": "Osy sanattaǵy baǵdarlamalar balalyq baǵdarlamary retinde beınelenedi. Birneshýin '|' arqyly bólińiz.", "XmlTvMovieCategoriesHelp": "Osy sanattaǵy baǵdarlamalar fılmder retinde beınelenedi. Birneshýin '|' arqyly bólińiz.", "XmlTvNewsCategoriesHelp": "Osy sanattaǵy baǵdarlamalar jańalyq baǵdarlamary retinde beınelenedi. Birneshýin '|' arqyly bólińiz.", - "XmlTvPathHelp": "XML TV faılynyń joly. Jellyfin osy faıldy oqıdy jáne ony jańartýlar úshin mezgilinde tekserip shyǵady. Faıldy jasaý jáne jańartý úshin ózińiz jaýapty bolyp tabylasyz.", + "XmlTvPathHelp": "XMLTV-faılynyń joly. Jellyfin osy faıldy oqıdy jáne ony jańartýlar úshin mezgilinde tekserip shyǵady. Faıldy jasaý jáne jańartý úshin ózińiz jaýapty bolyp tabylasyz.", "XmlTvSportsCategoriesHelp": "Osy sanattaǵy baǵdarlamalar sporttyq baǵdarlamary retinde beınelenedi. Birneshýin '|' arqyly bólińiz.", "Yes": "Iá", "Yesterday": "Keshe", @@ -1431,7 +1431,7 @@ "DashboardServerName": "Server: {0}", "DashboardOperatingSystem": "Operasıalyq júıe: {0}", "DashboardArchitecture": "Arhıtektýrasy: {0}", - "LabelWeb": "Ýeb: ", + "LabelWeb": "Ýeb:", "LaunchWebAppOnStartup": "Serverdi iske qosqan kezde ýeb-ınterfeısti iske qosý", "LaunchWebAppOnStartupHelp": "Server bastapqyda iske qosylǵan kezde, ýeb-klıent ádepki sholǵyshta ashylady. Bul serverdi qaıta iske qosý fýnksıasyn qoldanǵanda oryn almaıdy.", "MediaInfoSoftware": "Baǵdarlamalyq jasaqtama", From 6902ec9b4c36c7fd4451d5e0f1a7c9836be260ca Mon Sep 17 00:00:00 2001 From: WWWesten Date: Fri, 7 Feb 2020 21:05:19 +0000 Subject: [PATCH 18/25] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 7615a26cda..b90aaa90b4 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1455,5 +1455,13 @@ "OptionRandom": "Случайный", "ButtonSplit": "Разделить", "SelectAdminUsername": "Выберите имя пользователя для учётной записи администратора.", - "HeaderNavigation": "Навигация" + "HeaderNavigation": "Навигация", + "LabelVideoResolution": "Разрешение видео:", + "LabelStreamType": "Тип потока:", + "EnableFastImageFadeInHelp": "Включить быстрое гашение анимации для загруженных рисунков", + "EnableFastImageFadeIn": "Быстрое гашение рисунка", + "LabelPlayerDimensions": "Размерности проигрывателя:", + "LabelDroppedFrames": "Пропущенные кадры:", + "LabelCorruptedFrames": "Испорченные кадры:", + "CopyStreamURLError": "Произошла ошибка при копировании URL." } From 3b82d9f4389642f3641591e4a85048c90a039d60 Mon Sep 17 00:00:00 2001 From: diegoalrey Date: Fri, 7 Feb 2020 14:57:13 +0000 Subject: [PATCH 19/25] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gl/ --- src/strings/gl.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/strings/gl.json b/src/strings/gl.json index 0967ef424b..5341462de7 100644 --- a/src/strings/gl.json +++ b/src/strings/gl.json @@ -1 +1,15 @@ -{} +{ + "AllowMediaConversion": "Permitir a conversión dos medios", + "AllComplexFormats": "Todos os formatos complexos (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", + "AllLibraries": "Todas as librarías", + "AllLanguages": "Todas as linguas", + "AllEpisodes": "Todos os episodios", + "All": "Todo", + "Albums": "Álbumes", + "Alerts": "Avisos", + "AllChannels": "Todos os canais", + "AirDate": "Data de emisión", + "Aired": "Emitido", + "AddToPlaylist": "Engadir á lista de reprodución", + "Add": "Engadir" +} From 1448ce1199b112f0373952951b66bb7fe9758908 Mon Sep 17 00:00:00 2001 From: Thibault Nocchi <1619359+ThibaultNocchi@users.noreply.github.com> Date: Sat, 8 Feb 2020 11:14:24 +0100 Subject: [PATCH 20/25] No success toast when copying URL from prompt --- src/components/itemcontextmenu.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index b6dce6b2e6..77ba2a6f49 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -362,9 +362,6 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter", }); } else { prompt(globalize.translate("CopyStreamURL"), downloadHref); - require(["toast"], function (toast) { - toast(globalize.translate("CopyStreamURLSuccess")); - }); } document.body.removeChild(textArea); }); From 8b8f84bd429151b76599b0f663543a6ff8598333 Mon Sep 17 00:00:00 2001 From: Danny Michel Date: Sat, 1 Feb 2020 21:41:30 -0500 Subject: [PATCH 21/25] Fix logo page margin --- src/assets/css/librarybrowser.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index e5f45f7ab1..2ce6af8340 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -124,6 +124,11 @@ flex-shrink: 1; } + +.pageTitleWithDefaultLogo { + margin-top: 0; +} + .headerLeft, .skinHeader { display: -webkit-box; From 07d3e16ff556409e7453e54885b9c773691ff735 Mon Sep 17 00:00:00 2001 From: Danny Michel Date: Sat, 1 Feb 2020 21:13:56 -0500 Subject: [PATCH 22/25] Fix padding in header --- src/assets/css/librarybrowser.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index e5f45f7ab1..85c6b3ab0d 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -264,7 +264,7 @@ @media all and (max-width: 84em) { .withSectionTabs .headerTop { - padding-bottom: 0.2em; + padding-bottom: 0.55em; } .sectionTabs { From 9580732c9fa8753b72fd08cf28bd5e83ba62fc1e Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sat, 8 Feb 2020 21:51:58 +0100 Subject: [PATCH 23/25] Fix linting issue --- src/assets/css/librarybrowser.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 2ce6af8340..948f336dca 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -124,7 +124,6 @@ flex-shrink: 1; } - .pageTitleWithDefaultLogo { margin-top: 0; } From 446f10a9891dae0b4498aacc5d62e6de78ba062c Mon Sep 17 00:00:00 2001 From: Pooka Mustard Date: Sat, 8 Feb 2020 18:37:04 +0000 Subject: [PATCH 24/25] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index e2d30ffce1..38a8d51203 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1039,5 +1039,6 @@ "EnableNextVideoInfoOverlay": "عرض معلومات الفيديو القادم اثناء التشغيل", "DatePlayed": "تاريخ التشغيل", "DateAdded": "تاريخ الاضافة", - "CriticRating": "تقييم النقاد" + "CriticRating": "تقييم النقاد", + "ResumeAt": "اكمل من {0}" } From 6c68d37e9930b8282f093dac7e0b37be8bc6ec29 Mon Sep 17 00:00:00 2001 From: Tommy Vange Date: Sat, 8 Feb 2020 15:45:10 +0000 Subject: [PATCH 25/25] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tran?= =?UTF-8?q?slate-URL:=20https://translate.jellyfin.org/projects/jellyfin/j?= =?UTF-8?q?ellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 8f8f32998f..f654132e92 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1458,5 +1458,8 @@ "MessageConfirmAppExit": "Vil du avslutte?", "EnableFastImageFadeInHelp": "Bruk rask inntoning av animasjon for lastede bilder", "EnableFastImageFadeIn": "Rask bilde inntoning", - "CopyStreamURLError": "Det var en feil under kopiering av URL'en." + "CopyStreamURLError": "Det var en feil under kopiering av URL'en.", + "LabelVideoResolution": "Video oppløsning:", + "LabelPlayerDimensions": "Spiller dimensjoner:", + "LabelCorruptedFrames": "Korrupte rammer:" }