mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-15 18:08:17 -07:00
Merge branch 'master' into query
This commit is contained in:
commit
51ca49e479
@ -7,6 +7,10 @@ trigger:
|
||||
tags:
|
||||
include:
|
||||
- '*'
|
||||
pr:
|
||||
branches:
|
||||
include:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
- job: main_build
|
||||
@ -27,6 +31,9 @@ jobs:
|
||||
- script: 'yarn install'
|
||||
displayName: 'Install Dependencies'
|
||||
|
||||
- script: 'yarn build'
|
||||
displayName: 'Build'
|
||||
|
||||
- script: 'test -d dist'
|
||||
displayName: 'Check Build'
|
||||
|
||||
|
10
README.md
10
README.md
@ -45,6 +45,7 @@ Jellyfin Web is the frontend used for most of the clients available for end user
|
||||
### Dependencies
|
||||
|
||||
- Yarn
|
||||
- Gulp-cli
|
||||
|
||||
### Getting Started
|
||||
|
||||
@ -62,3 +63,12 @@ Jellyfin Web is the frontend used for most of the clients available for end user
|
||||
```sh
|
||||
yarn serve
|
||||
```
|
||||
|
||||
4. Build the client with sourcemaps.
|
||||
'''sh
|
||||
yarn
|
||||
'''
|
||||
Or without sourcemaps
|
||||
'''sh
|
||||
yarn --production
|
||||
'''
|
123
gulpfile.js
Normal file
123
gulpfile.js
Normal file
@ -0,0 +1,123 @@
|
||||
'use strict';
|
||||
|
||||
const { src, dest, series, parallel, watch } = require('gulp');
|
||||
const browserSync = require('browser-sync').create();
|
||||
const del = require('del');
|
||||
const babel = require('gulp-babel');
|
||||
const concat = require('gulp-concat');
|
||||
const terser = require('gulp-terser');
|
||||
const htmlmin = require('gulp-htmlmin');
|
||||
const imagemin = require('gulp-imagemin');
|
||||
const sourcemaps = require('gulp-sourcemaps');
|
||||
const mode = require('gulp-mode')({
|
||||
modes: ["production", "development"],
|
||||
default: "development",
|
||||
verbose: false
|
||||
});
|
||||
const webpack_stream = require('webpack-stream');
|
||||
const inject = require('gulp-inject');
|
||||
const postcss = require('gulp-postcss');
|
||||
const sass = require('gulp-sass');
|
||||
|
||||
sass.compiler = require('node-sass')
|
||||
|
||||
|
||||
if (mode.production()) {
|
||||
var webpack_config = require('./webpack.prod.js');
|
||||
} else {
|
||||
var webpack_config = require('./webpack.dev.js');
|
||||
}
|
||||
|
||||
function serve() {
|
||||
browserSync.init({
|
||||
server: {
|
||||
baseDir: "./dist"
|
||||
},
|
||||
port: 8080
|
||||
});
|
||||
|
||||
watch(['src/**/*.js', '!src/bundle.js'], javascript);
|
||||
watch('src/bundle.js', webpack);
|
||||
watch('src/**/*.css', css);
|
||||
watch(['src/**/*.html', '!src/index.html'], html);
|
||||
watch(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], images);
|
||||
watch(['src/**/*.json', 'src/**/*.ico'], copy);
|
||||
watch('src/index.html', injectBundle);
|
||||
watch(['src/standalone.js', 'src/scripts/apploader.js'], setStandalone);
|
||||
}
|
||||
|
||||
function setStandalone() {
|
||||
return src(['src/standalone.js', 'src/scripts/apploader.js'], {base: './src/'})
|
||||
.pipe(concat('scripts/apploader.js'))
|
||||
.pipe(dest('dist/'));
|
||||
}
|
||||
|
||||
// Clean assets
|
||||
function clean() {
|
||||
return del(['dist/']);
|
||||
}
|
||||
|
||||
function javascript() {
|
||||
return src(['src/**/*.js', '!src/bundle.js'], {base: './src/'})
|
||||
.pipe(mode.development(sourcemaps.init({loadMaps: true})))
|
||||
.pipe(babel({
|
||||
presets: [
|
||||
['@babel/preset-env']
|
||||
]
|
||||
}))
|
||||
.pipe(terser({
|
||||
keep_fnames: true,
|
||||
mangle: false
|
||||
}))
|
||||
.pipe(mode.development(sourcemaps.write('.')))
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function webpack() {
|
||||
return webpack_stream(webpack_config)
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function css() {
|
||||
return src(['src/**/*.css', 'src/**/*.scss'], {base: './src/'})
|
||||
.pipe(mode.development(sourcemaps.init({loadMaps: true})))
|
||||
.pipe(sass().on('error', sass.logError))
|
||||
.pipe(postcss())
|
||||
.pipe(mode.development(sourcemaps.write('.')))
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function html() {
|
||||
return src(['src/**/*.html', '!src/index.html'], {base: './src/'})
|
||||
.pipe(mode.production(htmlmin({ collapseWhitespace: true })))
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function images() {
|
||||
return src(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], {base: './src/'})
|
||||
.pipe(imagemin())
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function copy() {
|
||||
return src(['src/**/*.json', 'src/**/*.ico'], {base: './src/'})
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function injectBundle() {
|
||||
return src('src/index.html', {base: './src/'})
|
||||
.pipe(inject(
|
||||
src(['src/scripts/apploader.js'], {read: false}, {base: './src/'}), {relative: true}
|
||||
))
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle)
|
||||
exports.serve = series(exports.default, setStandalone, serve)
|
41
package.json
41
package.json
@ -5,12 +5,35 @@
|
||||
"repository": "https://github.com/jellyfin/jellyfin-web",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.8.6",
|
||||
"@babel/polyfill": "^7.8.7",
|
||||
"@babel/preset-env": "^7.8.6",
|
||||
"autoprefixer": "^9.7.4",
|
||||
"babel-loader": "^8.0.6",
|
||||
"browser-sync": "^2.26.7",
|
||||
"clean-webpack-plugin": "^3.0.0",
|
||||
"copy-webpack-plugin": "^5.1.1",
|
||||
"css-loader": "^3.4.2",
|
||||
"cssnano": "^4.1.10",
|
||||
"del": "^5.1.0",
|
||||
"eslint": "^6.8.0",
|
||||
"file-loader": "^5.0.2",
|
||||
"gulp": "^4.0.2",
|
||||
"gulp-babel": "^8.0.0",
|
||||
"gulp-cli": "^2.2.0",
|
||||
"gulp-concat": "^2.6.1",
|
||||
"gulp-htmlmin": "^5.0.1",
|
||||
"gulp-imagemin": "^7.1.0",
|
||||
"gulp-inject": "^5.0.5",
|
||||
"gulp-mode": "^1.0.2",
|
||||
"gulp-postcss": "^8.0.0",
|
||||
"gulp-sass": "^4.0.2",
|
||||
"gulp-sourcemaps": "^2.6.5",
|
||||
"gulp-terser": "^1.2.0",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"node-sass": "^4.13.1",
|
||||
"postcss-loader": "^3.0.0",
|
||||
"postcss-preset-env": "^6.7.0",
|
||||
"style-loader": "^1.1.3",
|
||||
"stylelint": "^13.1.0",
|
||||
"stylelint-config-rational-order": "^0.1.2",
|
||||
@ -20,10 +43,12 @@
|
||||
"webpack-cli": "^3.3.10",
|
||||
"webpack-concat-plugin": "^3.0.0",
|
||||
"webpack-dev-server": "^3.10.3",
|
||||
"webpack-merge": "^4.2.2"
|
||||
"webpack-merge": "^4.2.2",
|
||||
"webpack-stream": "^5.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"alameda": "^1.4.0",
|
||||
"core-js": "^3.6.4",
|
||||
"document-register-element": "^1.14.3",
|
||||
"flv.js": "^1.5.0",
|
||||
"hls.js": "^0.13.1",
|
||||
@ -44,6 +69,11 @@
|
||||
"webcomponents.js": "^0.7.24",
|
||||
"whatwg-fetch": "^3.0.0"
|
||||
},
|
||||
"babel": {
|
||||
"presets": [
|
||||
"@babel/preset-env"
|
||||
]
|
||||
},
|
||||
"browserslist": [
|
||||
"last 2 Firefox versions",
|
||||
"last 2 Chrome versions",
|
||||
@ -51,6 +81,7 @@
|
||||
"last 2 Safari versions",
|
||||
"last 2 iOS versions",
|
||||
"last 2 Edge versions",
|
||||
"Chrome 27",
|
||||
"Chrome 38",
|
||||
"Chrome 47",
|
||||
"Chrome 53",
|
||||
@ -59,10 +90,10 @@
|
||||
"Firefox ESR"
|
||||
],
|
||||
"scripts": {
|
||||
"serve": "webpack-dev-server --config webpack.dev.js --open",
|
||||
"build": "webpack --config webpack.prod.js",
|
||||
"serve": "gulp serve",
|
||||
"build": "gulp --production",
|
||||
"build dev": "gulp",
|
||||
"lint": "eslint \"src\"",
|
||||
"stylelint": "stylelint \"src/**/*.css\"",
|
||||
"prepare": "webpack --config webpack.prod.js"
|
||||
"stylelint": "stylelint \"src/**/*.css\""
|
||||
}
|
||||
}
|
||||
|
11
postcss.config.js
Normal file
11
postcss.config.js
Normal file
@ -0,0 +1,11 @@
|
||||
const postcssPresetEnv = require('postcss-preset-env');
|
||||
const cssnano = require('cssnano');
|
||||
|
||||
const config = () => ({
|
||||
plugins: [
|
||||
postcssPresetEnv(),
|
||||
cssnano()
|
||||
]
|
||||
});
|
||||
|
||||
module.exports = config
|
@ -103,6 +103,7 @@ _define("material-icons", function() {
|
||||
return material_icons;
|
||||
});
|
||||
|
||||
// noto font
|
||||
var noto = require("jellyfin-noto");
|
||||
_define("jellyfin-noto", function () {
|
||||
return noto;
|
||||
@ -113,3 +114,8 @@ var page = require("page");
|
||||
_define("page", function() {
|
||||
return page;
|
||||
});
|
||||
|
||||
var polyfill = require("@babel/polyfill/dist/polyfill");
|
||||
_define("polyfill", function () {
|
||||
return polyfill;
|
||||
});
|
||||
|
@ -242,9 +242,15 @@ define(['appRouter', 'focusManager', 'browser', 'layoutManager', 'inputManager',
|
||||
|
||||
var onAnimationFinish = function () {
|
||||
focusManager.pushScope(dlg);
|
||||
|
||||
if (dlg.getAttribute('data-autofocus') === 'true') {
|
||||
focusManager.autoFocus(dlg);
|
||||
}
|
||||
|
||||
if (document.activeElement && !dlg.contains(document.activeElement)) {
|
||||
// Blur foreign element to prevent triggering of an action from the previous scope
|
||||
document.activeElement.blur();
|
||||
}
|
||||
};
|
||||
|
||||
if (enableAnimation()) {
|
||||
|
@ -346,11 +346,7 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter",
|
||||
break;
|
||||
case "copy-stream":
|
||||
var downloadHref = apiClient.getItemDownloadUrl(itemId);
|
||||
navigator.clipboard.writeText(downloadHref).then(function () {
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("CopyStreamURLSuccess"));
|
||||
});
|
||||
}, function () {
|
||||
var textAreaCopy = function () {
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.value = downloadHref;
|
||||
document.body.appendChild(textArea);
|
||||
@ -364,7 +360,16 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter",
|
||||
prompt(globalize.translate("CopyStreamURL"), downloadHref);
|
||||
}
|
||||
document.body.removeChild(textArea);
|
||||
});
|
||||
};
|
||||
if (navigator.clipboard === undefined) {
|
||||
textAreaCopy();
|
||||
} else {
|
||||
navigator.clipboard.writeText(downloadHref).then(function () {
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("CopyStreamURLSuccess"));
|
||||
});
|
||||
}, textAreaCopy);
|
||||
}
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case "editsubtitles":
|
||||
|
@ -90,10 +90,11 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
||||
}
|
||||
|
||||
function validateHttps(form) {
|
||||
var remoteAccess = form.querySelector("#chkRemoteAccess").checked;
|
||||
var certPath = form.querySelector("#txtCertificatePath").value || null;
|
||||
var httpsMode = form.querySelector("#selectHttpsMode").value;
|
||||
|
||||
if ("enabled" !== httpsMode && "required" !== httpsMode || certPath) {
|
||||
if (!remoteAccess || ("enabled" !== httpsMode && "required" !== httpsMode || certPath)) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
|
@ -459,7 +459,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti
|
||||
var usePrimaryImage = item.MediaType === "Video" && item.Type !== "Movie" && item.Type !== "Trailer" ||
|
||||
item.MediaType && item.MediaType !== "Video" ||
|
||||
item.Type === "MusicAlbum" ||
|
||||
item.Type === "MusicArtist" ||
|
||||
item.Type === "Person";
|
||||
|
||||
if (!layoutManager.mobile && !userSettings.enableBackdrops()) {
|
||||
|
@ -105,5 +105,8 @@
|
||||
<div class="skinHeader focuscontainer-x"></div>
|
||||
<div class="mainAnimatedPages skinBody"></div>
|
||||
<div class="mainDrawerHandle"></div>
|
||||
|
||||
<!-- inject:js -->
|
||||
<!-- endinject -->
|
||||
</body>
|
||||
</html>
|
||||
|
@ -58,7 +58,15 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], funct
|
||||
sourceElement = focusManager.focusableParent(sourceElement);
|
||||
}
|
||||
|
||||
sourceElement = sourceElement || document.activeElement || window;
|
||||
if (!sourceElement) {
|
||||
sourceElement = document.activeElement || window;
|
||||
|
||||
var dlg = document.querySelector('.dialogContainer .dialog.opened');
|
||||
|
||||
if (dlg && (!sourceElement || !dlg.contains(sourceElement))) {
|
||||
sourceElement = dlg;
|
||||
}
|
||||
}
|
||||
|
||||
if (eventListenerCount) {
|
||||
var customEvent = new CustomEvent("command", {
|
||||
|
@ -739,7 +739,8 @@ var AppInfo = {};
|
||||
"webcomponents",
|
||||
"material-icons",
|
||||
"jellyfin-noto",
|
||||
"page"
|
||||
"page",
|
||||
"polyfill"
|
||||
]
|
||||
},
|
||||
urlArgs: urlArgs,
|
||||
@ -747,6 +748,8 @@ var AppInfo = {};
|
||||
onError: onRequireJsError
|
||||
});
|
||||
|
||||
require(["polyfill"]);
|
||||
|
||||
// Expose jQuery globally
|
||||
require(["jQuery"], function(jQuery) {
|
||||
window.$ = jQuery;
|
||||
|
@ -1142,8 +1142,8 @@
|
||||
"Share": "Teilen",
|
||||
"ShowAdvancedSettings": "Zeige erweiterte Einstellungen",
|
||||
"ShowIndicatorsFor": "Zeige Indikatoren für:",
|
||||
"ShowTitle": "Zeige Titel",
|
||||
"ShowYear": "Zeige Jahr",
|
||||
"ShowTitle": "Titel anzeigen",
|
||||
"ShowYear": "Jahr anzeigen",
|
||||
"Shows": "Serien",
|
||||
"Shuffle": "Zufallswiedergabe",
|
||||
"SimultaneousConnectionLimitHelp": "Die maximale Anzahl der parallel erlaubten Streams. 0 für kein Limit.",
|
||||
@ -1274,7 +1274,7 @@
|
||||
"Audio": "Audio",
|
||||
"Auto": "Auto",
|
||||
"Banner": "Banner",
|
||||
"Blacklist": "Blacklist",
|
||||
"Blacklist": "Sperrliste",
|
||||
"ButtonDownload": "Download",
|
||||
"ButtonFilter": "Filter",
|
||||
"ButtonHome": "Startseite",
|
||||
@ -1450,7 +1450,7 @@
|
||||
"LabelFolder": "Ordner:",
|
||||
"LabelPasswordResetProvider": "Anbieter zum Zurücksetzen des Passwortes:",
|
||||
"LabelPlayMethod": "Spielmethode:",
|
||||
"DashboardOperatingSystem": "Betriebssystem: {O}",
|
||||
"DashboardOperatingSystem": "Betriebssystem: {0}",
|
||||
"DashboardArchitecture": "Architektur: {0}",
|
||||
"LabelVideoCodec": "Videocodec:",
|
||||
"LaunchWebAppOnStartup": "Das Webinterface öffnen, wenn der Server startet",
|
||||
|
@ -1469,6 +1469,6 @@
|
||||
"AskAdminToCreateLibrary": "Demander à un administrateur de créer une médiathèque.",
|
||||
"AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment loin de la position de lecture, le processus se mettra en pause afin d’économiser des ressources. Plus utile lors d’une lecture continue. À désactiver en cas de problèmes de lecture.",
|
||||
"AllowFfmpegThrottling": "Adapter la Vitesse du Transcodage",
|
||||
"NoCreatedLibraries": "Il semblerait que vous n’ayez pas encore créé de médiathèque. {0}Voulez-vous en créer une tout de suite ?{1}",
|
||||
"NoCreatedLibraries": "Il semblerait que vous n'ayez créé aucune librairie. {0}Voulez-vous en créer une maintenant ?{1}",
|
||||
"PlaybackErrorNoCompatibleStream": "Problème de profil client, le serveur n’a pas pu envoyer un format média compatible."
|
||||
}
|
||||
|
@ -1502,5 +1502,7 @@
|
||||
"CopyStreamURLError": "URL kóshirgende qate oryn aldy.",
|
||||
"ButtonSplit": "Bólý",
|
||||
"AskAdminToCreateLibrary": "Tasýǵyshanany jasaý úshin ákimshiden suraý.",
|
||||
"AllowFfmpegThrottling": "Qaıta kodtaýdy retteý"
|
||||
"AllowFfmpegThrottling": "Qaıta kodtaýdy retteý",
|
||||
"PlaybackErrorNoCompatibleStream": "Klıent profaılyn jasaýda másele oryn aldy jáne server úılesimdi pishiminde tasyǵysh derekterin jibermedi.",
|
||||
"AllowFfmpegThrottlingHelp": "Qaıta kodtaý nemese qaıta býmalaý aǵymdyq oınatý jaıǵasymynan edáýir alǵa ozǵanda, qor kózderin azdaý tutynatyndaı etip údiristi kidirtedi. Bul jıi izdemeı qaraý kezinde paıdaly. Eger oınatý máseleleri bolsa, ony óshirińiz."
|
||||
}
|
||||
|
@ -271,7 +271,7 @@
|
||||
"EncoderPresetHelp": "Wybierz wartość faster, żeby zwiększyć wydajność, albo slower, żeby zwiększyć jakość.",
|
||||
"HDPrograms": "Programy w jakości HD",
|
||||
"HandledByProxy": "Obsługiwane przez usługę pośredniczącą",
|
||||
"HardwareAccelerationWarning": "Aktywacja akceleracji sprzętowej może powodować niestabilność na niektórych środowiskach. Upewnij się, że system operacyjny i sterowniki karty graficznej są aktualne. Jeżeli masz problemy z odtwarzaniem wideo po aktywacji, przywróć to ustawienie do wartości Automatycznie.",
|
||||
"HardwareAccelerationWarning": "Aktywacja akceleracji sprzętowej może powodować niestabilność na niektórych środowiskach. Upewnij się, że system operacyjny i sterowniki karty graficznej są aktualne. Jeżeli masz problemy z odtwarzaniem wideo po aktywacji, przywróć to ustawienie do wartości Brak.",
|
||||
"HeaderAccessSchedule": "Harmonogram dostępu",
|
||||
"HeaderAccessScheduleHelp": "Utwórz dostęp do harmonogramu aby ograniczyć go do określonych godzin.",
|
||||
"HeaderActiveDevices": "Aktywne urządzenia",
|
||||
@ -585,7 +585,7 @@
|
||||
"LabelEmbedAlbumArtDidl": "Wbudowana okładka albumu w Didl",
|
||||
"LabelEmbedAlbumArtDidlHelp": "Niektóre urządzenia wybierają tę metodę uzyskiwania okładki albumu. Inne mogą nie odtwarzać gdy ta opcja jest włączona.",
|
||||
"LabelEnableAutomaticPortMap": "Mapuj porty automatycznie",
|
||||
"LabelEnableAutomaticPortMapHelp": "Umożliwia automatyczne mapowanie publicznego numeru portu z lokalnym numerem portu za pomocą UPnP. Ta opcja może nie działać z niektórymi modelami ruterów.",
|
||||
"LabelEnableAutomaticPortMapHelp": "Umożliwia automatyczne mapowanie publicznego numeru portu z lokalnym numerem portu za pomocą UPnP. Ta opcja może nie działać z niektórymi modelami ruterów. Zmiany zaczną działać po ponownym uruchomieniu serwera.",
|
||||
"LabelEnableBlastAliveMessages": "Przesyłaj komunikaty o dostępności",
|
||||
"LabelEnableBlastAliveMessagesHelp": "Aktywuj tę funkcję, jeśli serwer nie jest odpowiednio wykrywany przez inne urządzenia UPnP w twojej sieci.",
|
||||
"LabelEnableDlnaClientDiscoveryInterval": "Częstotliwość wykrywania klientów (sekundy)",
|
||||
@ -619,7 +619,7 @@
|
||||
"LabelH264Crf": "CRF kodowania H264:",
|
||||
"LabelEncoderPreset": "Szablon kodowania H264:",
|
||||
"LabelHardwareAccelerationType": "Akceleracja sprzętowa:",
|
||||
"LabelHardwareAccelerationTypeHelp": "Jest to funkcja eksperymentalna dostępna tylko w obsługiwanych systemach.",
|
||||
"LabelHardwareAccelerationTypeHelp": "Akceleracja sprzętowa wymaga dodatkowej konfiguracji.",
|
||||
"LabelHomeNetworkQuality": "Jakość dla sieci lokalnej:",
|
||||
"LabelHomeScreenSectionValue": "Sekcja ekranu startowego {0}:",
|
||||
"LabelHttpsPort": "Lokalny numer portu HTTPS:",
|
||||
@ -1273,7 +1273,7 @@
|
||||
"TabPassword": "Hasło",
|
||||
"TabPlayback": "Odtwarzanie",
|
||||
"TabPlaylist": "Lista odtwarzania",
|
||||
"TabPlaylists": "Lista odtwarzania",
|
||||
"TabPlaylists": "Listy odtwarzania",
|
||||
"TabPlugins": "Wtyczki",
|
||||
"TabProfile": "Profil",
|
||||
"TabProfiles": "Profile",
|
||||
@ -1453,7 +1453,21 @@
|
||||
"HeaderFavoritePeople": "Ulubieni ludzie",
|
||||
"FetchingData": "Pobieranie dodatkowych danych",
|
||||
"ButtonSplit": "Rozdziel",
|
||||
"SelectAdminUsername": "Proszę wybierz nazwę użytkownika dla konta administratora.",
|
||||
"SelectAdminUsername": "Podaj nazwę użytkownika dla konta administratora.",
|
||||
"MessageConfirmAppExit": "Czy chcesz wyjść?",
|
||||
"HeaderNavigation": "Nawigacja"
|
||||
"HeaderNavigation": "Nawigacja",
|
||||
"LabelPlayerDimensions": "Rozmiar odtwarzacza:",
|
||||
"LabelDroppedFrames": "Upuszczone klatki:",
|
||||
"LabelCorruptedFrames": "Uszkodzone klatki:",
|
||||
"CopyStreamURLError": "Wystąpił błąd podczas kopiowania adresu URL.",
|
||||
"AskAdminToCreateLibrary": "Poproś administratora o stworzenie biblioteki.",
|
||||
"AllowFfmpegThrottlingHelp": "Kiedy transkodowanie lub remuxowanie dotrze wystarczająco daleko od aktualnej pozycji odtwarzania, zatrzymaj proces aby zużywać mniej zasobów. Jest to najbardziej użyteczne podczas oglądania bez częstego przeskakiwania. Wyłącz jeśli zaobserwujesz problemy z odtwarzaniem.",
|
||||
"AllowFfmpegThrottling": "Ograniczaj transkodowanie",
|
||||
"PlaybackErrorNoCompatibleStream": "Wystąpił problem ze sprofilowaniem klienta i serwer nie wysyła kompatybilnego formatu mediów.",
|
||||
"OptionForceRemoteSourceTranscoding": "Wymuś transkodowanie zewnętrznych źródeł mediów (jak telewizja na żywo)",
|
||||
"NoCreatedLibraries": "Wygląda na to, że nie utworzyłeś jeszcze żadnych bibliotek. {0}Czy chcesz utworzyć jedną teraz?{1}",
|
||||
"LabelVideoResolution": "Rozdzielczość wideo:",
|
||||
"LabelStreamType": "Typ transmisji:",
|
||||
"EnableFastImageFadeInHelp": "Włącz szybszą animację pojawiania się dla załadowanych obrazów",
|
||||
"EnableFastImageFadeIn": "Szybkie pojawianie się obrazów"
|
||||
}
|
||||
|
@ -1464,5 +1464,10 @@
|
||||
"HeaderNavigation": "Navegação",
|
||||
"CopyStreamURLError": "Houve um erro ao copiar a URL.",
|
||||
"ButtonSplit": "Dividir",
|
||||
"AskAdminToCreateLibrary": "Peça a um administrador para criar uma biblioteca."
|
||||
"AskAdminToCreateLibrary": "Peça a um administrador para criar uma biblioteca.",
|
||||
"AllowFfmpegThrottling": "Limitar transcodificação",
|
||||
"PlaybackErrorNoCompatibleStream": "Houve um erro na criação de perfil do cliente e o servidor não está enviando um formato de mídia compatível.",
|
||||
"EnableFastImageFadeInHelp": "Habilitar animações rápidas de aparecimento para imagens carregadas",
|
||||
"LabelDroppedFrames": "Quadros caídos:",
|
||||
"AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux estiver suficientemente avançada da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais proveitoso para quando não há avanço ou retrocesso do vídeo com frequência. Desative se tiver problemas de reprodução."
|
||||
}
|
||||
|
@ -61,7 +61,7 @@
|
||||
"TabUpcoming": "Prihajajoče",
|
||||
"TellUsAboutYourself": "Povej nam nekaj o sebi",
|
||||
"ThisWizardWillGuideYou": "Čarovnik vas bo vodil skozi postopek namestitve. Za začetek, izberite jezik.",
|
||||
"WelcomeToProject": "Dobrodosli v Jellyfin!",
|
||||
"WelcomeToProject": "Dobrodošli v Jellyfin!",
|
||||
"Absolute": "Absolutno",
|
||||
"AccessRestrictedTryAgainLater": "Dostop je trenutno omejen. Poskusite ponovno kasneje.",
|
||||
"Actor": "Igralec",
|
||||
@ -352,7 +352,7 @@
|
||||
"HeaderMyMediaSmall": "Moja predstavnost (majhno)",
|
||||
"HeaderMyMedia": "Moja predstavnost",
|
||||
"HeaderMyDevice": "Moja naprava",
|
||||
"HeaderMusicVideos": "Glasbeni video posnetki",
|
||||
"HeaderMusicVideos": "Glasbeni videi",
|
||||
"HeaderMusicQuality": "Kvaliteta glasbe",
|
||||
"HeaderMovies": "Filmi",
|
||||
"HeaderMoreLikeThis": "Podobno",
|
||||
@ -828,7 +828,7 @@
|
||||
"OptionAllowMediaPlaybackTranscodingHelp": "Omejitev dostopa do prekodiranja lahko povzroči napake pri predvajanju v Jellyfin aplikacijah zaradi nepodprtih formatov predstavnosti.",
|
||||
"OptionAllowVideoPlaybackRemuxing": "Dovoli predvajanje videoposnetkov, ki zahtevajo pretvarjanje brez prekodiranja",
|
||||
"ViewPlaybackInfo": "Oglejte si informacije o predvajanju",
|
||||
"WizardCompleted": "To je vse kar potrebujemo za zdaj. Jellyfin je začel zbirati informacije o vaši knjižnici predstavnosti. Oglejte si nekaj naših aplikacij in nato kliknite <b>Zaključi</b> za ogled <b>Nadzorne pološče</b>.",
|
||||
"WizardCompleted": "To je vse kar potrebujemo za zdaj. Jellyfin je začel zbirati informacije o vaši knjižnici predstavnosti. Oglejte si nekaj naših aplikacij in nato kliknite <b>Zaključi</b> za ogled <b>Nadzorne plošče</b>.",
|
||||
"Suggestions": "Predlogi",
|
||||
"SubtitleDownloadersHelp": "Omogočite in razvrstite želene vire podnapisov po prioriteti.",
|
||||
"NewCollectionHelp": "Zbirke vam omogočajo ustvarjanje prilagojenih skupin filmov in drugih vsebin.",
|
||||
@ -1190,5 +1190,34 @@
|
||||
"LabelSubtitles": "Podnapisi:",
|
||||
"LabelSubtitlePlaybackMode": "Način podnapisov:",
|
||||
"LabelSubtitleFormatHelp": "Primer: srt",
|
||||
"LabelSubtitleDownloaders": "Pridobivanje podnapisov:"
|
||||
"LabelSubtitleDownloaders": "Pridobivanje podnapisov:",
|
||||
"Wednesday": "Sreda",
|
||||
"ValueVideoCodec": "Video kodek: {0}",
|
||||
"ValueTimeLimitSingleHour": "Časovna omejitev: 1 ura",
|
||||
"ValueTimeLimitMultiHour": "Časovna omejitev: {0} ur",
|
||||
"ValueSongCount": "{0} pesmi",
|
||||
"ValueMusicVideoCount": "{0} glasbenih videov",
|
||||
"ValueMovieCount": "{0} filmov",
|
||||
"ValueMinutes": "{0} minut",
|
||||
"ValueEpisodeCount": "{0} epizod",
|
||||
"ValueSeriesCount": "{0} serij",
|
||||
"ValueSeconds": "{0} sekund",
|
||||
"ValueOneSong": "1 skladba",
|
||||
"ValueOneSeries": "1 serija",
|
||||
"ValueOneMusicVideo": "1 glasbeni video",
|
||||
"ValueOneMovie": "1 film",
|
||||
"ValueOneEpisode": "1 epizoda",
|
||||
"ValueOneAlbum": "1 album",
|
||||
"ValueContainer": "Kontejner: {0}",
|
||||
"ValueConditions": "Pogoji: {0}",
|
||||
"ValueCodec": "Kodek: {0}",
|
||||
"ValueAudioCodec": "Zvočni kodek: {0}",
|
||||
"Unrated": "Neocenjeno",
|
||||
"Unplayed": "Nepredvajano",
|
||||
"Tuesday": "Torek",
|
||||
"Trailers": "Napovedniki",
|
||||
"TitleHardwareAcceleration": "Strojno pospeševanje",
|
||||
"Thursday": "Četrtek",
|
||||
"TabUsers": "Uporabniki",
|
||||
"TabTrailers": "Napovedniki"
|
||||
}
|
||||
|
@ -22,12 +22,12 @@ module.exports = {
|
||||
path.resolve(__dirname, "node_modules")
|
||||
]
|
||||
},
|
||||
output: {
|
||||
filename: "bundle.js",
|
||||
path: path.resolve(__dirname, "dist"),
|
||||
libraryTarget: "amd-require"
|
||||
},
|
||||
plugins: [
|
||||
new CleanWebpackPlugin(),
|
||||
new CopyPlugin([{
|
||||
from: "**/*",
|
||||
to: "."
|
||||
}]),
|
||||
new CopyPlugin(
|
||||
Assets.map(asset => {
|
||||
return {
|
||||
|
@ -1,8 +1,6 @@
|
||||
const path = require("path");
|
||||
const common = require("./webpack.common");
|
||||
const merge = require("webpack-merge");
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
const ConcatPlugin = require('webpack-concat-plugin');
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: "development",
|
||||
@ -13,9 +11,14 @@ module.exports = merge(common, {
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /node_modules/,
|
||||
loader: "babel-loader"
|
||||
},
|
||||
{
|
||||
test: /\.css$/i,
|
||||
use: ["style-loader", "css-loader"]
|
||||
use: ["style-loader", "css-loader", "postcss-loader"]
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|gif)$/i,
|
||||
@ -28,15 +31,5 @@ module.exports = merge(common, {
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new HtmlWebpackPlugin({
|
||||
filename: 'index.html',
|
||||
template: 'index.html'
|
||||
}),
|
||||
new ConcatPlugin({
|
||||
name: 'scripts/apploader.js',
|
||||
filesToConcat: ['./standalone.js', './scripts/apploader.js']
|
||||
})
|
||||
]
|
||||
}
|
||||
});
|
||||
|
@ -4,16 +4,16 @@ const merge = require("webpack-merge");
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: "production",
|
||||
output: {
|
||||
filename: "bundle.js",
|
||||
path: path.resolve(__dirname, "dist"),
|
||||
libraryTarget: "amd-require"
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /node_modules/,
|
||||
loader: "babel-loader"
|
||||
},
|
||||
{
|
||||
test: /\.css$/i,
|
||||
use: ["style-loader", "css-loader"]
|
||||
use: ["style-loader", "css-loader", "postcss-loader"]
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|gif)$/i,
|
||||
|
Loading…
Reference in New Issue
Block a user