mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'master' into codeowners
This commit is contained in:
commit
1ce5987adc
118 changed files with 2416 additions and 780 deletions
1
.copr/Makefile
Symbolic link
1
.copr/Makefile
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../fedora/Makefile
|
|
@ -7,3 +7,6 @@ charset = utf-8
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
|
|
||||||
|
[json]
|
||||||
|
indent_size = 2
|
||||||
|
|
|
@ -1 +1,5 @@
|
||||||
libraries/
|
node_modules
|
||||||
|
dist
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
src/libraries
|
||||||
|
|
190
.eslintrc.js
Normal file
190
.eslintrc.js
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
plugins: [
|
||||||
|
'promise',
|
||||||
|
'import',
|
||||||
|
'eslint-comments'
|
||||||
|
],
|
||||||
|
env: {
|
||||||
|
node: true,
|
||||||
|
es6: true,
|
||||||
|
es2017: true,
|
||||||
|
es2020: true
|
||||||
|
},
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 2020,
|
||||||
|
sourceType: 'module',
|
||||||
|
ecmaFeatures: {
|
||||||
|
impliedStrict: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
extends: [
|
||||||
|
'eslint:recommended',
|
||||||
|
// 'plugin:promise/recommended',
|
||||||
|
'plugin:import/errors',
|
||||||
|
'plugin:import/warnings',
|
||||||
|
'plugin:eslint-comments/recommended',
|
||||||
|
'plugin:compat/recommended'
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
'block-spacing': ["error"],
|
||||||
|
'brace-style': ["error"],
|
||||||
|
'comma-dangle': ["error", "never"],
|
||||||
|
'comma-spacing': ["error"],
|
||||||
|
'eol-last': ["error"],
|
||||||
|
'indent': ["error", 4, { "SwitchCase": 1 }],
|
||||||
|
'keyword-spacing': ["error"],
|
||||||
|
'max-statements-per-line': ["error"],
|
||||||
|
'no-floating-decimal': ["error"],
|
||||||
|
'no-multi-spaces': ["error"],
|
||||||
|
'no-multiple-empty-lines': ["error", { "max": 1 }],
|
||||||
|
'no-trailing-spaces': ["error"],
|
||||||
|
'one-var': ["error", "never"],
|
||||||
|
'semi': ["error"],
|
||||||
|
'space-before-blocks': ["error"]
|
||||||
|
},
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: [
|
||||||
|
'./src/**/*.js'
|
||||||
|
],
|
||||||
|
env: {
|
||||||
|
node: false,
|
||||||
|
amd: true,
|
||||||
|
browser: true,
|
||||||
|
es6: true,
|
||||||
|
es2017: true,
|
||||||
|
es2020: true
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
// Browser globals
|
||||||
|
'MediaMetadata': 'readonly',
|
||||||
|
// Tizen globals
|
||||||
|
'tizen': 'readonly',
|
||||||
|
'webapis': 'readonly',
|
||||||
|
// WebOS globals
|
||||||
|
'webOS': 'readonly',
|
||||||
|
// Dependency globals
|
||||||
|
'$': 'readonly',
|
||||||
|
'jQuery': 'readonly',
|
||||||
|
'requirejs': 'readonly',
|
||||||
|
// Jellyfin globals
|
||||||
|
'ApiClient': 'writable',
|
||||||
|
'AppInfo': 'writable',
|
||||||
|
'chrome': 'writable',
|
||||||
|
'ConnectionManager': 'writable',
|
||||||
|
'DlnaProfilePage': 'writable',
|
||||||
|
'Dashboard': 'writable',
|
||||||
|
'DashboardPage': 'writable',
|
||||||
|
'Emby': 'readonly',
|
||||||
|
'Events': 'writable',
|
||||||
|
'getParameterByName': 'writable',
|
||||||
|
'getWindowLocationSearch': 'writable',
|
||||||
|
'Globalize': 'writable',
|
||||||
|
'Hls': 'writable',
|
||||||
|
'dfnshelper': 'writable',
|
||||||
|
'LibraryMenu': 'writable',
|
||||||
|
'LinkParser': 'writable',
|
||||||
|
'LiveTvHelpers': 'writable',
|
||||||
|
'MetadataEditor': 'writable',
|
||||||
|
'pageClassOn': 'writable',
|
||||||
|
'pageIdOn': 'writable',
|
||||||
|
'PlaylistViewer': 'writable',
|
||||||
|
'UserParentalControlPage': 'writable',
|
||||||
|
'Windows': 'readonly'
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
// TODO: Fix warnings and remove these rules
|
||||||
|
'no-redeclare': ["warn"],
|
||||||
|
'no-unused-vars': ["warn"],
|
||||||
|
'no-useless-escape': ["warn"],
|
||||||
|
// TODO: Remove after ES6 migration is complete
|
||||||
|
'import/no-unresolved': ["off"]
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
polyfills: [
|
||||||
|
// Native Promises Only
|
||||||
|
'Promise',
|
||||||
|
// whatwg-fetch
|
||||||
|
'fetch',
|
||||||
|
// document-register-element
|
||||||
|
'document.registerElement',
|
||||||
|
// resize-observer-polyfill
|
||||||
|
'ResizeObserver',
|
||||||
|
// fast-text-encoding
|
||||||
|
'TextEncoder',
|
||||||
|
// intersection-observer
|
||||||
|
'IntersectionObserver',
|
||||||
|
// Core-js
|
||||||
|
'Object.assign',
|
||||||
|
'Object.is',
|
||||||
|
'Object.setPrototypeOf',
|
||||||
|
'Object.toString',
|
||||||
|
'Object.freeze',
|
||||||
|
'Object.seal',
|
||||||
|
'Object.preventExtensions',
|
||||||
|
'Object.isFrozen',
|
||||||
|
'Object.isSealed',
|
||||||
|
'Object.isExtensible',
|
||||||
|
'Object.getOwnPropertyDescriptor',
|
||||||
|
'Object.getPrototypeOf',
|
||||||
|
'Object.keys',
|
||||||
|
'Object.getOwnPropertyNames',
|
||||||
|
'Function.name',
|
||||||
|
'Function.hasInstance',
|
||||||
|
'Array.from',
|
||||||
|
'Array.arrayOf',
|
||||||
|
'Array.copyWithin',
|
||||||
|
'Array.fill',
|
||||||
|
'Array.find',
|
||||||
|
'Array.findIndex',
|
||||||
|
'Array.iterator',
|
||||||
|
'String.fromCodePoint',
|
||||||
|
'String.raw',
|
||||||
|
'String.iterator',
|
||||||
|
'String.codePointAt',
|
||||||
|
'String.endsWith',
|
||||||
|
'String.includes',
|
||||||
|
'String.repeat',
|
||||||
|
'String.startsWith',
|
||||||
|
'String.trim',
|
||||||
|
'String.anchor',
|
||||||
|
'String.big',
|
||||||
|
'String.blink',
|
||||||
|
'String.bold',
|
||||||
|
'String.fixed',
|
||||||
|
'String.fontcolor',
|
||||||
|
'String.fontsize',
|
||||||
|
'String.italics',
|
||||||
|
'String.link',
|
||||||
|
'String.small',
|
||||||
|
'String.strike',
|
||||||
|
'String.sub',
|
||||||
|
'String.sup',
|
||||||
|
'RegExp',
|
||||||
|
'Number',
|
||||||
|
'Math',
|
||||||
|
'Date',
|
||||||
|
'async',
|
||||||
|
'Symbol',
|
||||||
|
'Map',
|
||||||
|
'Set',
|
||||||
|
'WeakMap',
|
||||||
|
'WeakSet',
|
||||||
|
'ArrayBuffer',
|
||||||
|
'DataView',
|
||||||
|
'Int8Array',
|
||||||
|
'Uint8Array',
|
||||||
|
'Uint8ClampedArray',
|
||||||
|
'Int16Array',
|
||||||
|
'Uint16Array',
|
||||||
|
'Int32Array',
|
||||||
|
'Uint32Array',
|
||||||
|
'Float32Array',
|
||||||
|
'Float64Array',
|
||||||
|
'Reflect'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
171
.eslintrc.yml
171
.eslintrc.yml
|
@ -1,171 +0,0 @@
|
||||||
env:
|
|
||||||
amd: true
|
|
||||||
browser: true
|
|
||||||
es6: true
|
|
||||||
es2017: true
|
|
||||||
es2020: true
|
|
||||||
|
|
||||||
parserOptions:
|
|
||||||
ecmaVersion: 2020
|
|
||||||
sourceType: module
|
|
||||||
ecmaFeatures:
|
|
||||||
impliedStrict: true
|
|
||||||
|
|
||||||
plugins:
|
|
||||||
- promise
|
|
||||||
- import
|
|
||||||
- eslint-comments
|
|
||||||
|
|
||||||
extends:
|
|
||||||
- eslint:recommended
|
|
||||||
- plugin:promise/recommended
|
|
||||||
- plugin:import/errors
|
|
||||||
- plugin:import/warnings
|
|
||||||
- plugin:eslint-comments/recommended
|
|
||||||
- plugin:compat/recommended
|
|
||||||
|
|
||||||
globals:
|
|
||||||
# Browser globals
|
|
||||||
MediaMetadata: readonly
|
|
||||||
# Tizen globals
|
|
||||||
tizen: readonly
|
|
||||||
webapis: readonly
|
|
||||||
# WebOS globals
|
|
||||||
webOS: readonly
|
|
||||||
# Dependency globals
|
|
||||||
$: readonly
|
|
||||||
jQuery: readonly
|
|
||||||
requirejs: readonly
|
|
||||||
# Jellyfin globals
|
|
||||||
ApiClient: writable
|
|
||||||
AppInfo: writable
|
|
||||||
chrome: writable
|
|
||||||
ConnectionManager: writable
|
|
||||||
DlnaProfilePage: writable
|
|
||||||
Dashboard: writable
|
|
||||||
DashboardPage: writable
|
|
||||||
Emby: readonly
|
|
||||||
Events: writable
|
|
||||||
getParameterByName: writable
|
|
||||||
getWindowLocationSearch: writable
|
|
||||||
Globalize: writable
|
|
||||||
Hls: writable
|
|
||||||
dfnshelper: writable
|
|
||||||
LibraryMenu: writable
|
|
||||||
LinkParser: writable
|
|
||||||
LiveTvHelpers: writable
|
|
||||||
MetadataEditor: writable
|
|
||||||
pageClassOn: writable
|
|
||||||
pageIdOn: writable
|
|
||||||
PlaylistViewer: writable
|
|
||||||
UserParentalControlPage: writable
|
|
||||||
Windows: readonly
|
|
||||||
|
|
||||||
rules:
|
|
||||||
block-spacing: ["error"]
|
|
||||||
brace-style: ["error"]
|
|
||||||
comma-dangle: ["error", "never"]
|
|
||||||
comma-spacing: ["error"]
|
|
||||||
eol-last: ["error"]
|
|
||||||
indent: ["error", 4, { "SwitchCase": 1 }]
|
|
||||||
keyword-spacing: ["error"]
|
|
||||||
max-statements-per-line: ["error"]
|
|
||||||
no-floating-decimal: ["error"]
|
|
||||||
no-multi-spaces: ["error"]
|
|
||||||
no-multiple-empty-lines: ["error", { "max": 1 }]
|
|
||||||
no-trailing-spaces: ["error"]
|
|
||||||
one-var: ["error", "never"]
|
|
||||||
semi: ["error"]
|
|
||||||
space-before-blocks: ["error"]
|
|
||||||
# TODO: Fix warnings and remove these rules
|
|
||||||
no-redeclare: ["warn"]
|
|
||||||
no-unused-vars: ["warn"]
|
|
||||||
no-useless-escape: ["warn"]
|
|
||||||
promise/catch-or-return: ["warn"]
|
|
||||||
promise/always-return: ["warn"]
|
|
||||||
promise/no-return-wrap: ["warn"]
|
|
||||||
# TODO: Remove after ES6 migration is complete
|
|
||||||
import/no-unresolved: ["warn"]
|
|
||||||
|
|
||||||
settings:
|
|
||||||
polyfills:
|
|
||||||
# Native Promises Only
|
|
||||||
- Promise
|
|
||||||
# whatwg-fetch
|
|
||||||
- fetch
|
|
||||||
# document-register-element
|
|
||||||
- document.registerElement
|
|
||||||
# resize-observer-polyfill
|
|
||||||
- ResizeObserver
|
|
||||||
# fast-text-encoding
|
|
||||||
- TextEncoder
|
|
||||||
# intersection-observer
|
|
||||||
- IntersectionObserver
|
|
||||||
# Core-js
|
|
||||||
- Object.assign
|
|
||||||
- Object.is
|
|
||||||
- Object.setPrototypeOf
|
|
||||||
- Object.toString
|
|
||||||
- Object.freeze
|
|
||||||
- Object.seal
|
|
||||||
- Object.preventExtensions
|
|
||||||
- Object.isFrozen
|
|
||||||
- Object.isSealed
|
|
||||||
- Object.isExtensible
|
|
||||||
- Object.getOwnPropertyDescriptor
|
|
||||||
- Object.getPrototypeOf
|
|
||||||
- Object.keys
|
|
||||||
- Object.getOwnPropertyNames
|
|
||||||
- Function.name
|
|
||||||
- Function.hasInstance
|
|
||||||
- Array.from
|
|
||||||
- Array.arrayOf
|
|
||||||
- Array.copyWithin
|
|
||||||
- Array.fill
|
|
||||||
- Array.find
|
|
||||||
- Array.findIndex
|
|
||||||
- Array.iterator
|
|
||||||
- String.fromCodePoint
|
|
||||||
- String.raw
|
|
||||||
- String.iterator
|
|
||||||
- String.codePointAt
|
|
||||||
- String.endsWith
|
|
||||||
- String.includes
|
|
||||||
- String.repeat
|
|
||||||
- String.startsWith
|
|
||||||
- String.trim
|
|
||||||
- String.anchor
|
|
||||||
- String.big
|
|
||||||
- String.blink
|
|
||||||
- String.bold
|
|
||||||
- String.fixed
|
|
||||||
- String.fontcolor
|
|
||||||
- String.fontsize
|
|
||||||
- String.italics
|
|
||||||
- String.link
|
|
||||||
- String.small
|
|
||||||
- String.strike
|
|
||||||
- String.sub
|
|
||||||
- String.sup
|
|
||||||
- RegExp
|
|
||||||
- Number
|
|
||||||
- Math
|
|
||||||
- Date
|
|
||||||
- async
|
|
||||||
- Symbol
|
|
||||||
- Map
|
|
||||||
- Set
|
|
||||||
- WeakMap
|
|
||||||
- WeakSet
|
|
||||||
- ArrayBuffer
|
|
||||||
- DataView
|
|
||||||
- Int8Array
|
|
||||||
- Uint8Array
|
|
||||||
- Uint8ClampedArray
|
|
||||||
- Int16Array
|
|
||||||
- Uint16Array
|
|
||||||
- Int32Array
|
|
||||||
- Uint32Array
|
|
||||||
- Float32Array
|
|
||||||
- Float64Array
|
|
||||||
- Reflect
|
|
36
.gitattributes
vendored
36
.gitattributes
vendored
|
@ -1 +1,35 @@
|
||||||
/CONTRIBUTORS.md merge=union
|
* text=auto
|
||||||
|
|
||||||
|
CONTRIBUTORS.md merge=union
|
||||||
|
README.md text
|
||||||
|
LICENSE text
|
||||||
|
|
||||||
|
*.css text
|
||||||
|
*.eot binary
|
||||||
|
*.gif binary
|
||||||
|
*.html text diff=html
|
||||||
|
*.ico binary
|
||||||
|
*.*ignore text
|
||||||
|
*.jpg binary
|
||||||
|
*.js text
|
||||||
|
*.json text
|
||||||
|
*.lock text -diff
|
||||||
|
*.map text -diff
|
||||||
|
*.md text
|
||||||
|
*.otf binary
|
||||||
|
*.png binary
|
||||||
|
*.py text diff=python
|
||||||
|
*.svg binary
|
||||||
|
*.ts text
|
||||||
|
*.ttf binary
|
||||||
|
*.sass text
|
||||||
|
*.vue text
|
||||||
|
*.webp binary
|
||||||
|
*.woff binary
|
||||||
|
*.woff2 binary
|
||||||
|
|
||||||
|
.editorconfig text
|
||||||
|
.gitattributes export-ignore
|
||||||
|
.gitignore export-ignore
|
||||||
|
|
||||||
|
*.gitattributes linguist-language=gitattributes
|
||||||
|
|
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
|
@ -1,2 +1,4 @@
|
||||||
.ci @dkanada @EraYaN
|
.ci @dkanada @EraYaN
|
||||||
.github @jellyfin/core
|
.github @jellyfin/core
|
||||||
|
build.sh @joshuaboniface
|
||||||
|
deployment @joshuaboniface
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,6 +3,7 @@ config.json
|
||||||
|
|
||||||
# npm
|
# npm
|
||||||
dist
|
dist
|
||||||
|
web
|
||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
# ide
|
# ide
|
||||||
|
|
110
build.sh
Executable file
110
build.sh
Executable file
|
@ -0,0 +1,110 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# build.sh - Build Jellyfin binary packages
|
||||||
|
# Part of the Jellyfin Project
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo -e "build.sh - Build Jellyfin binary packages"
|
||||||
|
echo -e "Usage:"
|
||||||
|
echo -e " $0 -t/--type <BUILD_TYPE> -p/--platform <PLATFORM> [-k/--keep-artifacts] [-l/--list-platforms]"
|
||||||
|
echo -e "Notes:"
|
||||||
|
echo -e " * BUILD_TYPE can be one of: [native, docker] and must be specified"
|
||||||
|
echo -e " * native: Build using the build script in the host OS"
|
||||||
|
echo -e " * docker: Build using the build script in a standardized Docker container"
|
||||||
|
echo -e " * PLATFORM can be any platform shown by -l/--list-platforms and must be specified"
|
||||||
|
echo -e " * If -k/--keep-artifacts is specified, transient artifacts (e.g. Docker containers) will be"
|
||||||
|
echo -e " retained after the build is finished; the source directory will still be cleaned"
|
||||||
|
echo -e " * If -l/--list-platforms is specified, all other arguments are ignored; the script will print"
|
||||||
|
echo -e " the list of supported platforms and exit"
|
||||||
|
}
|
||||||
|
|
||||||
|
list_platforms() {
|
||||||
|
declare -a platforms
|
||||||
|
platforms=(
|
||||||
|
$( find deployment -maxdepth 1 -mindepth 1 -name "build.*" | awk -F'.' '{ $1=""; printf $2; if ($3 != ""){ printf "." $3; }; if ($4 != ""){ printf "." $4; }; print ""; }' | sort )
|
||||||
|
)
|
||||||
|
echo -e "Valid platforms:"
|
||||||
|
echo
|
||||||
|
for platform in ${platforms[@]}; do
|
||||||
|
echo -e "* ${platform} : $( grep '^#=' deployment/build.${platform} | sed 's/^#= //' )"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
do_build_native() {
|
||||||
|
export IS_DOCKER=NO
|
||||||
|
deployment/build.${PLATFORM}
|
||||||
|
}
|
||||||
|
|
||||||
|
do_build_docker() {
|
||||||
|
if ! dpkg --print-architecture | grep -q 'amd64'; then
|
||||||
|
echo "Docker-based builds only support amd64-based cross-building; use a 'native' build instead."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ ! -f deployment/Dockerfile.${PLATFORM} ]]; then
|
||||||
|
echo "Missing Dockerfile for platform ${PLATFORM}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ ${KEEP_ARTIFACTS} == YES ]]; then
|
||||||
|
docker_args=""
|
||||||
|
else
|
||||||
|
docker_args="--rm"
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker build . -t "jellyfin-builder.${PLATFORM}" -f deployment/Dockerfile.${PLATFORM}
|
||||||
|
mkdir -p ${ARTIFACT_DIR}
|
||||||
|
docker run $docker_args -v "${SOURCE_DIR}:/jellyfin" -v "${ARTIFACT_DIR}:/dist" "jellyfin-builder.${PLATFORM}"
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
key="$1"
|
||||||
|
case $key in
|
||||||
|
-t|--type)
|
||||||
|
BUILD_TYPE="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-p|--platform)
|
||||||
|
PLATFORM="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-k|--keep-artifacts)
|
||||||
|
KEEP_ARTIFACTS=YES
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-l|--list-platforms)
|
||||||
|
list_platforms
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option $1"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z ${BUILD_TYPE} || -z ${PLATFORM} ]]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export SOURCE_DIR="$( pwd )"
|
||||||
|
export ARTIFACT_DIR="${SOURCE_DIR}/../bin/${PLATFORM}"
|
||||||
|
|
||||||
|
# Determine build type
|
||||||
|
case ${BUILD_TYPE} in
|
||||||
|
native)
|
||||||
|
do_build_native
|
||||||
|
;;
|
||||||
|
docker)
|
||||||
|
do_build_docker
|
||||||
|
;;
|
||||||
|
esac
|
9
build.yaml
Normal file
9
build.yaml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
# We just wrap `build` so this is really it
|
||||||
|
name: "jellyfin-web"
|
||||||
|
version: "10.6.0"
|
||||||
|
packages:
|
||||||
|
- debian.all
|
||||||
|
- fedora.all
|
||||||
|
- centos.all
|
||||||
|
- portable
|
96
bump_version
Executable file
96
bump_version
Executable file
|
@ -0,0 +1,96 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# bump_version - increase the shared version and generate changelogs
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo -e "bump_version - increase the shared version and generate changelogs"
|
||||||
|
echo -e ""
|
||||||
|
echo -e "Usage:"
|
||||||
|
echo -e " $ bump_version <new_version>"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
shared_version_file="src/components/apphost.js"
|
||||||
|
build_file="./build.yaml"
|
||||||
|
|
||||||
|
new_version="$1"
|
||||||
|
|
||||||
|
# Parse the version from shared version file
|
||||||
|
old_version="$(
|
||||||
|
grep "appVersion" ${shared_version_file} | head -1 \
|
||||||
|
| sed -E 's/var appVersion = "([0-9\.]+)";/\1/'
|
||||||
|
)"
|
||||||
|
echo "Old version in appHost is: $old_version"
|
||||||
|
|
||||||
|
# Set the shared version to the specified new_version
|
||||||
|
old_version_sed="$( sed 's/\./\\./g' <<<"${old_version}" )" # Escape the '.' chars
|
||||||
|
new_version_sed="$( cut -f1 -d'-' <<<"${new_version}" )"
|
||||||
|
sed -i "s/${old_version_sed}/${new_version_sed}/g" ${shared_version_file}
|
||||||
|
|
||||||
|
old_version="$(
|
||||||
|
grep "version:" ${build_file} \
|
||||||
|
| sed -E 's/version: "([0-9\.]+[-a-z0-9]*)"/\1/'
|
||||||
|
)"
|
||||||
|
echo "Old version in ${build_file}: $old_version`"
|
||||||
|
|
||||||
|
# Set the build.yaml version to the specified new_version
|
||||||
|
old_version_sed="$( sed 's/\./\\./g' <<<"${old_version}" )" # Escape the '.' chars
|
||||||
|
sed -i "s/${old_version_sed}/${new_version}/g" ${build_file}
|
||||||
|
|
||||||
|
if [[ ${new_version} == *"-"* ]]; then
|
||||||
|
new_version_deb="$( sed 's/-/~/g' <<<"${new_version}" )"
|
||||||
|
else
|
||||||
|
new_version_deb="${new_version}-1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Write out a temporary Debian changelog with our new stuff appended and some templated formatting
|
||||||
|
debian_changelog_file="debian/changelog"
|
||||||
|
debian_changelog_temp="$( mktemp )"
|
||||||
|
# Create new temp file with our changelog
|
||||||
|
echo -e "jellyfin (${new_version_deb}) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version ${new_version}; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v${new_version}
|
||||||
|
|
||||||
|
-- Jellyfin Packaging Team <packaging@jellyfin.org> $( date --rfc-2822 )
|
||||||
|
" >> ${debian_changelog_temp}
|
||||||
|
cat ${debian_changelog_file} >> ${debian_changelog_temp}
|
||||||
|
# Move into place
|
||||||
|
mv ${debian_changelog_temp} ${debian_changelog_file}
|
||||||
|
|
||||||
|
# Write out a temporary Yum changelog with our new stuff prepended and some templated formatting
|
||||||
|
fedora_spec_file="fedora/jellyfin.spec"
|
||||||
|
fedora_changelog_temp="$( mktemp )"
|
||||||
|
fedora_spec_temp_dir="$( mktemp -d )"
|
||||||
|
fedora_spec_temp="${fedora_spec_temp_dir}/jellyfin.spec.tmp"
|
||||||
|
# Make a copy of our spec file for hacking
|
||||||
|
cp ${fedora_spec_file} ${fedora_spec_temp_dir}/
|
||||||
|
pushd ${fedora_spec_temp_dir}
|
||||||
|
# Split out the stuff before and after changelog
|
||||||
|
csplit jellyfin.spec "/^%changelog/" # produces xx00 xx01
|
||||||
|
# Update the version in xx00
|
||||||
|
sed -i "s/${old_version_sed}/${new_version_sed}/g" xx00
|
||||||
|
# Remove the header from xx01
|
||||||
|
sed -i '/^%changelog/d' xx01
|
||||||
|
# Create new temp file with our changelog
|
||||||
|
echo -e "%changelog
|
||||||
|
* $( LANG=C date '+%a %b %d %Y' ) Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
|
- New upstream version ${new_version}; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v${new_version}" >> ${fedora_changelog_temp}
|
||||||
|
cat xx01 >> ${fedora_changelog_temp}
|
||||||
|
# Reassembble
|
||||||
|
cat xx00 ${fedora_changelog_temp} > ${fedora_spec_temp}
|
||||||
|
popd
|
||||||
|
# Move into place
|
||||||
|
mv ${fedora_spec_temp} ${fedora_spec_file}
|
||||||
|
# Clean up
|
||||||
|
rm -rf ${fedora_changelog_temp} ${fedora_spec_temp_dir}
|
||||||
|
|
||||||
|
# Stage the changed files for commit
|
||||||
|
git add ${shared_version_file} ${build_file} ${debian_changelog_file} ${fedora_spec_file} Dockerfile*
|
||||||
|
git status
|
5
debian/changelog
vendored
Normal file
5
debian/changelog
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
jellyfin-web (10.6.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version 10.6.0; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.0
|
||||||
|
|
||||||
|
-- Jellyfin Packaging Team <packaging@jellyfin.org> Mon, 16 Mar 2020 11:15:00 -0400
|
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
8
|
16
debian/control
vendored
Normal file
16
debian/control
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
Source: jellyfin-web
|
||||||
|
Section: misc
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Jellyfin Team <team@jellyfin.org>
|
||||||
|
Build-Depends: debhelper (>= 9),
|
||||||
|
npm | nodejs
|
||||||
|
Standards-Version: 3.9.4
|
||||||
|
Homepage: https://jellyfin.org/
|
||||||
|
Vcs-Git: https://github.org/jellyfin/jellyfin-web.git
|
||||||
|
Vcs-Browser: https://github.org/jellyfin/jellyfin-web
|
||||||
|
|
||||||
|
Package: jellyfin-web
|
||||||
|
Recommends: jellyfin-server
|
||||||
|
Architecture: all
|
||||||
|
Description: Jellyfin is the Free Software Media System.
|
||||||
|
This package provides the Jellyfin web client.
|
28
debian/copyright
vendored
Normal file
28
debian/copyright
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Format: http://dep.debian.net/deps/dep5
|
||||||
|
Upstream-Name: jellyfin-web
|
||||||
|
Source: https://github.com/jellyfin/jellyfin-web
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 2018-2020 Jellyfin Team
|
||||||
|
License: GPL-3.0
|
||||||
|
|
||||||
|
Files: debian/*
|
||||||
|
Copyright: 2020 Joshua Boniface <joshua@boniface.me>
|
||||||
|
License: GPL-3.0
|
||||||
|
|
||||||
|
License: GPL-3.0
|
||||||
|
This package is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
.
|
||||||
|
This package is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General
|
||||||
|
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
6
debian/gbp.conf
vendored
Normal file
6
debian/gbp.conf
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[DEFAULT]
|
||||||
|
pristine-tar = False
|
||||||
|
cleaner = fakeroot debian/rules clean
|
||||||
|
|
||||||
|
[import-orig]
|
||||||
|
filter = [ ".git*", ".hg*", ".vs*", ".vscode*" ]
|
1
debian/install
vendored
Normal file
1
debian/install
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
web usr/share/jellyfin/
|
1
debian/po/POTFILES.in
vendored
Normal file
1
debian/po/POTFILES.in
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[type: gettext/rfc822deb] templates
|
57
debian/po/templates.pot
vendored
Normal file
57
debian/po/templates.pot
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: jellyfin-server\n"
|
||||||
|
"Report-Msgid-Bugs-To: jellyfin-server@packages.debian.org\n"
|
||||||
|
"POT-Creation-Date: 2015-06-12 20:51-0600\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. Type: note
|
||||||
|
#. Description
|
||||||
|
#: ../templates:1001
|
||||||
|
msgid "Jellyfin permission info:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Type: note
|
||||||
|
#. Description
|
||||||
|
#: ../templates:1001
|
||||||
|
msgid ""
|
||||||
|
"Jellyfin by default runs under a user named \"jellyfin\". Please ensure that the "
|
||||||
|
"user jellyfin has read and write access to any folders you wish to add to your "
|
||||||
|
"library. Otherwise please run jellyfin under a different user."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Type: string
|
||||||
|
#. Description
|
||||||
|
#: ../templates:2001
|
||||||
|
msgid "Username to run Jellyfin as:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Type: string
|
||||||
|
#. Description
|
||||||
|
#: ../templates:2001
|
||||||
|
msgid "The user that jellyfin will run as."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Type: note
|
||||||
|
#. Description
|
||||||
|
#: ../templates:3001
|
||||||
|
msgid "Jellyfin still running"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Type: note
|
||||||
|
#. Description
|
||||||
|
#: ../templates:3001
|
||||||
|
msgid "Jellyfin is currently running. Please close it and try again."
|
||||||
|
msgstr ""
|
20
debian/rules
vendored
Executable file
20
debian/rules
vendored
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
#! /usr/bin/make -f
|
||||||
|
export DH_VERBOSE=1
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
# disable "make check"
|
||||||
|
override_dh_auto_test:
|
||||||
|
|
||||||
|
# disable stripping debugging symbols
|
||||||
|
override_dh_clistrip:
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
||||||
|
npx yarn install
|
||||||
|
mv $(CURDIR)/dist $(CURDIR)/web
|
||||||
|
|
||||||
|
override_dh_auto_clean:
|
||||||
|
test -d $(CURDIR)/dist && rm -rf '$(CURDIR)/dist' || true
|
||||||
|
test -d $(CURDIR)/web && rm -rf '$(CURDIR)/web' || true
|
||||||
|
test -d $(CURDIR)/node_modules && rm -rf '$(CURDIR)/node_modules' || true
|
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
1.0
|
7
debian/source/options
vendored
Normal file
7
debian/source/options
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
tar-ignore='.git*'
|
||||||
|
tar-ignore='**/.git'
|
||||||
|
tar-ignore='**/.hg'
|
||||||
|
tar-ignore='**/.vs'
|
||||||
|
tar-ignore='**/.vscode'
|
||||||
|
tar-ignore='deployment'
|
||||||
|
tar-ignore='*.deb'
|
27
deployment/Dockerfile.centos.all
Normal file
27
deployment/Dockerfile.centos.all
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
FROM centos:7
|
||||||
|
# Docker build arguments
|
||||||
|
ARG SOURCE_DIR=/jellyfin
|
||||||
|
ARG ARTIFACT_DIR=/dist
|
||||||
|
# Docker run environment
|
||||||
|
ENV SOURCE_DIR=/jellyfin
|
||||||
|
ENV ARTIFACT_DIR=/dist
|
||||||
|
ENV IS_DOCKER=YES
|
||||||
|
|
||||||
|
# Prepare CentOS environment
|
||||||
|
RUN yum update -y \
|
||||||
|
&& yum install -y epel-release \
|
||||||
|
&& yum install -y @buildsys-build rpmdevtools git yum-plugins-core nodejs-yarn autoconf automake glibc-devel
|
||||||
|
|
||||||
|
# Install recent NodeJS and Yarn
|
||||||
|
RUN curl -fSsLo /etc/yum.repos.d/yarn.repo https://dl.yarnpkg.com/rpm/yarn.repo \
|
||||||
|
&& rpm -i https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm \
|
||||||
|
&& yum install -y yarn
|
||||||
|
|
||||||
|
# Link to build script
|
||||||
|
RUN ln -sf ${SOURCE_DIR}/deployment/build.centos.all /build.sh
|
||||||
|
|
||||||
|
VOLUME ${SOURCE_DIR}/
|
||||||
|
|
||||||
|
VOLUME ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
ENTRYPOINT ["/build.sh"]
|
25
deployment/Dockerfile.debian.all
Normal file
25
deployment/Dockerfile.debian.all
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
FROM debian:10
|
||||||
|
# Docker build arguments
|
||||||
|
ARG SOURCE_DIR=/jellyfin
|
||||||
|
ARG ARTIFACT_DIR=/dist
|
||||||
|
# Docker run environment
|
||||||
|
ENV SOURCE_DIR=/jellyfin
|
||||||
|
ENV ARTIFACT_DIR=/dist
|
||||||
|
ENV DEB_BUILD_OPTIONS=noddebs
|
||||||
|
ENV IS_DOCKER=YES
|
||||||
|
|
||||||
|
# Prepare Debian build environment
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y debhelper mmv npm git
|
||||||
|
|
||||||
|
# Prepare Yarn
|
||||||
|
RUN npm install -g yarn
|
||||||
|
|
||||||
|
# Link to build script
|
||||||
|
RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.all /build.sh
|
||||||
|
|
||||||
|
VOLUME ${SOURCE_DIR}/
|
||||||
|
|
||||||
|
VOLUME ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
ENTRYPOINT ["/build.sh"]
|
21
deployment/Dockerfile.fedora.all
Normal file
21
deployment/Dockerfile.fedora.all
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
FROM fedora:31
|
||||||
|
# Docker build arguments
|
||||||
|
ARG SOURCE_DIR=/jellyfin
|
||||||
|
ARG ARTIFACT_DIR=/dist
|
||||||
|
# Docker run environment
|
||||||
|
ENV SOURCE_DIR=/jellyfin
|
||||||
|
ENV ARTIFACT_DIR=/dist
|
||||||
|
ENV IS_DOCKER=YES
|
||||||
|
|
||||||
|
# Prepare Fedora environment
|
||||||
|
RUN dnf update -y \
|
||||||
|
&& dnf install -y @buildsys-build rpmdevtools git dnf-plugins-core nodejs-yarn autoconf automake glibc-devel
|
||||||
|
|
||||||
|
# Link to build script
|
||||||
|
RUN ln -sf ${SOURCE_DIR}/deployment/build.fedora.all /build.sh
|
||||||
|
|
||||||
|
VOLUME ${SOURCE_DIR}/
|
||||||
|
|
||||||
|
VOLUME ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
ENTRYPOINT ["/build.sh"]
|
25
deployment/Dockerfile.portable
Normal file
25
deployment/Dockerfile.portable
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
FROM debian:10
|
||||||
|
# Docker build arguments
|
||||||
|
ARG SOURCE_DIR=/jellyfin
|
||||||
|
ARG ARTIFACT_DIR=/dist
|
||||||
|
# Docker run environment
|
||||||
|
ENV SOURCE_DIR=/jellyfin
|
||||||
|
ENV ARTIFACT_DIR=/dist
|
||||||
|
ENV DEB_BUILD_OPTIONS=noddebs
|
||||||
|
ENV IS_DOCKER=YES
|
||||||
|
|
||||||
|
# Prepare Debian build environment
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y mmv npm git
|
||||||
|
|
||||||
|
# Prepare Yarn
|
||||||
|
RUN npm install -g yarn
|
||||||
|
|
||||||
|
# Link to build script
|
||||||
|
RUN ln -sf ${SOURCE_DIR}/deployment/build.portable /build.sh
|
||||||
|
|
||||||
|
VOLUME ${SOURCE_DIR}/
|
||||||
|
|
||||||
|
VOLUME ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
ENTRYPOINT ["/build.sh"]
|
27
deployment/build.centos.all
Executable file
27
deployment/build.centos.all
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#= CentOS 7 all .rpm
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# Move to source directory
|
||||||
|
pushd ${SOURCE_DIR}
|
||||||
|
|
||||||
|
cp -a yarn.lock /tmp/yarn.lock
|
||||||
|
|
||||||
|
# Build RPM
|
||||||
|
make -f fedora/Makefile srpm outdir=/root/rpmbuild/SRPMS
|
||||||
|
rpmbuild --rebuild -bb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
|
||||||
|
|
||||||
|
# Move the artifacts out
|
||||||
|
mv /root/rpmbuild/RPMS/noarch/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
if [[ ${IS_DOCKER} == YES ]]; then
|
||||||
|
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f fedora/jellyfin*.tar.gz
|
||||||
|
cp -a /tmp/yarn.lock yarn.lock
|
||||||
|
|
||||||
|
popd
|
25
deployment/build.debian.all
Executable file
25
deployment/build.debian.all
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#= Debian/Ubuntu all .deb
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# Move to source directory
|
||||||
|
pushd ${SOURCE_DIR}
|
||||||
|
|
||||||
|
cp -a yarn.lock /tmp/yarn.lock
|
||||||
|
|
||||||
|
# Build DEB
|
||||||
|
dpkg-buildpackage -us -uc --pre-clean --post-clean
|
||||||
|
|
||||||
|
mkdir -p ${ARTIFACT_DIR}/
|
||||||
|
mv ../jellyfin*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
cp -a /tmp/yarn.lock yarn.lock
|
||||||
|
|
||||||
|
if [[ ${IS_DOCKER} == YES ]]; then
|
||||||
|
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd
|
27
deployment/build.fedora.all
Executable file
27
deployment/build.fedora.all
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#= Fedora 29+ all .rpm
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# Move to source directory
|
||||||
|
pushd ${SOURCE_DIR}
|
||||||
|
|
||||||
|
cp -a yarn.lock /tmp/yarn.lock
|
||||||
|
|
||||||
|
# Build RPM
|
||||||
|
make -f fedora/Makefile srpm outdir=/root/rpmbuild/SRPMS
|
||||||
|
rpmbuild -rb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
|
||||||
|
|
||||||
|
# Move the artifacts out
|
||||||
|
mv /root/rpmbuild/RPMS/noarch/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
if [[ ${IS_DOCKER} == YES ]]; then
|
||||||
|
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f fedora/jellyfin*.tar.gz
|
||||||
|
cp -a /tmp/yarn.lock yarn.lock
|
||||||
|
|
||||||
|
popd
|
28
deployment/build.portable
Executable file
28
deployment/build.portable
Executable file
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#= Portable .NET DLL .tar.gz
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# Move to source directory
|
||||||
|
pushd ${SOURCE_DIR}
|
||||||
|
|
||||||
|
# Get version
|
||||||
|
version="$( grep "version:" ./build.yaml | sed -E 's/version: "([0-9\.]+.*)"/\1/' )"
|
||||||
|
|
||||||
|
# Build archives
|
||||||
|
npx yarn install
|
||||||
|
mv dist/ jellyfin-web_${version}
|
||||||
|
tar -czf jellyfin-web_${version}_portable.tar.gz jellyfin-web_${version}
|
||||||
|
rm -rf dist/
|
||||||
|
|
||||||
|
# Move the artifacts out
|
||||||
|
mkdir -p ${ARTIFACT_DIR}/
|
||||||
|
mv jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
if [[ ${IS_DOCKER} == YES ]]; then
|
||||||
|
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd
|
21
fedora/Makefile
Normal file
21
fedora/Makefile
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
VERSION := $(shell sed -ne '/^Version:/s/.* *//p' fedora/jellyfin-web.spec)
|
||||||
|
|
||||||
|
srpm:
|
||||||
|
cd fedora/; \
|
||||||
|
SOURCE_DIR=.. \
|
||||||
|
WORKDIR="$${PWD}"; \
|
||||||
|
tar \
|
||||||
|
--transform "s,^\.,jellyfin-web-$(VERSION)," \
|
||||||
|
--exclude='.git*' \
|
||||||
|
--exclude='**/.git' \
|
||||||
|
--exclude='**/.hg' \
|
||||||
|
--exclude='deployment' \
|
||||||
|
--exclude='*.deb' \
|
||||||
|
--exclude='*.rpm' \
|
||||||
|
--exclude='jellyfin-web-$(VERSION).tar.gz' \
|
||||||
|
-czf "jellyfin-web-$(VERSION).tar.gz" \
|
||||||
|
-C $${SOURCE_DIR} ./
|
||||||
|
cd fedora/; \
|
||||||
|
rpmbuild -bs jellyfin-web.spec \
|
||||||
|
--define "_sourcedir $$PWD/" \
|
||||||
|
--define "_srcrpmdir $(outdir)"
|
43
fedora/jellyfin-web.spec
Normal file
43
fedora/jellyfin-web.spec
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
%global debug_package %{nil}
|
||||||
|
|
||||||
|
Name: jellyfin-web
|
||||||
|
Version: 10.6.0
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary: The Free Software Media System web client
|
||||||
|
License: GPLv3
|
||||||
|
URL: https://jellyfin.org
|
||||||
|
# Jellyfin Server tarball created by `make -f .copr/Makefile srpm`, real URL ends with `v%{version}.tar.gz`
|
||||||
|
Source0: jellyfin-web-%{version}.tar.gz
|
||||||
|
|
||||||
|
%if 0%{?centos}
|
||||||
|
BuildRequires: yarn
|
||||||
|
%else
|
||||||
|
BuildRequires nodejs-yarn
|
||||||
|
%endif
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
# Disable Automatic Dependency Processing
|
||||||
|
AutoReqProv: no
|
||||||
|
|
||||||
|
%description
|
||||||
|
Jellyfin is a free software media system that puts you in control of managing and streaming your media.
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -n jellyfin-web-%{version} -b 0
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
%install
|
||||||
|
yarn install
|
||||||
|
%{__mkdir} -p %{buildroot}%{_datadir}
|
||||||
|
mv dist %{buildroot}%{_datadir}/jellyfin-web
|
||||||
|
%{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/jellyfin/LICENSE
|
||||||
|
|
||||||
|
%files
|
||||||
|
%attr(755,root,root) %{_datadir}/jellyfin-web
|
||||||
|
%{_datadir}/licenses/jellyfin/LICENSE
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Mar 23 2020 Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
|
- Forthcoming stable release
|
|
@ -1,5 +1,3 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const { src, dest, series, parallel, watch } = require('gulp');
|
const { src, dest, series, parallel, watch } = require('gulp');
|
||||||
const browserSync = require('browser-sync').create();
|
const browserSync = require('browser-sync').create();
|
||||||
const del = require('del');
|
const del = require('del');
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"@babel/plugin-transform-modules-amd": "^7.8.3",
|
"@babel/plugin-transform-modules-amd": "^7.8.3",
|
||||||
"@babel/polyfill": "^7.8.7",
|
"@babel/polyfill": "^7.8.7",
|
||||||
"@babel/preset-env": "^7.8.6",
|
"@babel/preset-env": "^7.8.6",
|
||||||
"autoprefixer": "^9.7.4",
|
"autoprefixer": "^9.7.6",
|
||||||
"babel-loader": "^8.0.6",
|
"babel-loader": "^8.0.6",
|
||||||
"browser-sync": "^2.26.7",
|
"browser-sync": "^2.26.7",
|
||||||
"clean-webpack-plugin": "^3.0.0",
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
"howler": "^2.1.3",
|
"howler": "^2.1.3",
|
||||||
"intersection-observer": "^0.7.0",
|
"intersection-observer": "^0.7.0",
|
||||||
"jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto",
|
"jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto",
|
||||||
"jquery": "^3.4.1",
|
"jquery": "^3.5.0",
|
||||||
"jstree": "^3.3.7",
|
"jstree": "^3.3.7",
|
||||||
"libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-cordova",
|
"libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-cordova",
|
||||||
"material-design-icons-iconfont": "^5.0.1",
|
"material-design-icons-iconfont": "^5.0.1",
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
"src/components/cardbuilder/cardBuilder.js",
|
"src/components/cardbuilder/cardBuilder.js",
|
||||||
"src/scripts/dom.js",
|
"src/scripts/dom.js",
|
||||||
"src/components/filedownloader.js",
|
"src/components/filedownloader.js",
|
||||||
"src/components/filesystem.js",
|
"src/scripts/filesystem.js",
|
||||||
"src/scripts/keyboardnavigation.js",
|
"src/scripts/keyboardnavigation.js",
|
||||||
"src/components/sanatizefilename.js",
|
"src/components/sanatizefilename.js",
|
||||||
"src/components/scrollManager.js",
|
"src/components/scrollManager.js",
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
"build:development": "gulp --development",
|
"build:development": "gulp --development",
|
||||||
"build:production": "gulp --production",
|
"build:production": "gulp --production",
|
||||||
"build:standalone": "gulp standalone --development",
|
"build:standalone": "gulp standalone --development",
|
||||||
"lint": "eslint \"src\"",
|
"lint": "eslint \".\"",
|
||||||
"stylelint": "stylelint \"src/**/*.css\""
|
"stylelint": "stylelint \"src/**/*.css\""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
const postcssPresetEnv = require('postcss-preset-env');
|
const postcssPresetEnv = require('postcss-preset-env');
|
||||||
|
const autoprefixer = require('autoprefixer');
|
||||||
const cssnano = require('cssnano');
|
const cssnano = require('cssnano');
|
||||||
|
|
||||||
const config = () => ({
|
const config = () => ({
|
||||||
plugins: [
|
plugins: [
|
||||||
postcssPresetEnv(),
|
postcssPresetEnv(),
|
||||||
|
autoprefixer(),
|
||||||
cssnano()
|
cssnano()
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = config
|
module.exports = config;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["dialogHelper", "datetime", "emby-select", "paper-icon-button-light", "formDialogStyle"], function (dialogHelper, datetime) {
|
define(["dialogHelper", "datetime", "globalize", "emby-select", "paper-icon-button-light", "formDialogStyle"], function (dialogHelper, datetime, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getDisplayTime(hours) {
|
function getDisplayTime(hours) {
|
||||||
|
@ -38,7 +38,7 @@ define(["dialogHelper", "datetime", "emby-select", "paper-icon-button-light", "f
|
||||||
};
|
};
|
||||||
|
|
||||||
if (parseFloat(updatedSchedule.StartHour) >= parseFloat(updatedSchedule.EndHour)) {
|
if (parseFloat(updatedSchedule.StartHour) >= parseFloat(updatedSchedule.EndHour)) {
|
||||||
return void alert(Globalize.translate("ErrorMessageStartHourGreaterThanEnd"));
|
return void alert(globalize.translate("ErrorMessageStartHourGreaterThanEnd"));
|
||||||
}
|
}
|
||||||
|
|
||||||
context.submitted = true;
|
context.submitted = true;
|
||||||
|
@ -60,7 +60,7 @@ define(["dialogHelper", "datetime", "emby-select", "paper-icon-button-light", "f
|
||||||
});
|
});
|
||||||
dlg.classList.add("formDialog");
|
dlg.classList.add("formDialog");
|
||||||
var html = "";
|
var html = "";
|
||||||
html += Globalize.translateDocument(template);
|
html += globalize.translateDocument(template);
|
||||||
dlg.innerHTML = html;
|
dlg.innerHTML = html;
|
||||||
populateHours(dlg);
|
populateHours(dlg);
|
||||||
loadSchedule(dlg, options.schedule);
|
loadSchedule(dlg, options.schedule);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["appSettings", "browser", "events", "htmlMediaHelper", "webSettings"], function (appSettings, browser, events, htmlMediaHelper, webSettings) {
|
define(["appSettings", "browser", "events", "htmlMediaHelper", "webSettings", "globalize"], function (appSettings, browser, events, htmlMediaHelper, webSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getBaseProfileOptions(item) {
|
function getBaseProfileOptions(item) {
|
||||||
|
@ -46,20 +46,9 @@ define(["appSettings", "browser", "events", "htmlMediaHelper", "webSettings"], f
|
||||||
if (window.NativeShell) {
|
if (window.NativeShell) {
|
||||||
profile = window.NativeShell.AppHost.getDeviceProfile(profileBuilder);
|
profile = window.NativeShell.AppHost.getDeviceProfile(profileBuilder);
|
||||||
} else {
|
} else {
|
||||||
profile = profileBuilder(getBaseProfileOptions(item));
|
var builderOpts = getBaseProfileOptions(item);
|
||||||
|
builderOpts.enableSsaRender = (item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin"));
|
||||||
if (item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin")) {
|
profile = profileBuilder(builderOpts);
|
||||||
if (!browser.orsay && !browser.tizen) {
|
|
||||||
profile.SubtitleProfiles.push({
|
|
||||||
Format: "ass",
|
|
||||||
Method: "External"
|
|
||||||
});
|
|
||||||
profile.SubtitleProfiles.push({
|
|
||||||
Format: "ssa",
|
|
||||||
Method: "External"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve(profile);
|
resolve(profile);
|
||||||
|
@ -328,10 +317,10 @@ define(["appSettings", "browser", "events", "htmlMediaHelper", "webSettings"], f
|
||||||
|
|
||||||
require(["actionsheet"], function (actionsheet) {
|
require(["actionsheet"], function (actionsheet) {
|
||||||
exitPromise = actionsheet.show({
|
exitPromise = actionsheet.show({
|
||||||
title: Globalize.translate("MessageConfirmAppExit"),
|
title: globalize.translate("MessageConfirmAppExit"),
|
||||||
items: [
|
items: [
|
||||||
{id: "yes", name: Globalize.translate("Yes")},
|
{id: "yes", name: globalize.translate("Yes")},
|
||||||
{id: "no", name: Globalize.translate("No")}
|
{id: "no", name: globalize.translate("No")}
|
||||||
]
|
]
|
||||||
}).then(function (value) {
|
}).then(function (value) {
|
||||||
if (value === "yes") {
|
if (value === "yes") {
|
||||||
|
@ -346,7 +335,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper", "webSettings"], f
|
||||||
var deviceId;
|
var deviceId;
|
||||||
var deviceName;
|
var deviceName;
|
||||||
var appName = "Jellyfin Web";
|
var appName = "Jellyfin Web";
|
||||||
var appVersion = "10.5.0";
|
var appVersion = "10.6.0";
|
||||||
|
|
||||||
var appHost = {
|
var appHost = {
|
||||||
getWindowState: function () {
|
getWindowState: function () {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-icon-button-light', 'css!./directorybrowser', 'formDialogStyle', 'emby-button'], function(loading, dialogHelper, dom) {
|
define(['loading', 'dialogHelper', 'dom', 'globalize', 'listViewStyle', 'emby-input', 'paper-icon-button-light', 'css!./directorybrowser', 'formDialogStyle', 'emby-button'], function(loading, dialogHelper, dom, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function getSystemInfo() {
|
function getSystemInfo() {
|
||||||
|
@ -53,7 +53,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!path) {
|
if (!path) {
|
||||||
html += getItem("lnkPath lnkDirectory", "", "Network", Globalize.translate("ButtonNetwork"));
|
html += getItem("lnkPath lnkDirectory", "", "Network", globalize.translate("ButtonNetwork"));
|
||||||
}
|
}
|
||||||
|
|
||||||
page.querySelector(".results").innerHTML = html;
|
page.querySelector(".results").innerHTML = html;
|
||||||
|
@ -89,16 +89,16 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
var instruction = options.instruction ? options.instruction + "<br/><br/>" : "";
|
var instruction = options.instruction ? options.instruction + "<br/><br/>" : "";
|
||||||
html += '<div class="infoBanner" style="margin-bottom:1.5em;">';
|
html += '<div class="infoBanner" style="margin-bottom:1.5em;">';
|
||||||
html += instruction;
|
html += instruction;
|
||||||
html += Globalize.translate("MessageDirectoryPickerInstruction", "<b>\\\\server</b>", "<b>\\\\192.168.1.101</b>");
|
html += globalize.translate("MessageDirectoryPickerInstruction", "<b>\\\\server</b>", "<b>\\\\192.168.1.101</b>");
|
||||||
if ("bsd" === systemInfo.OperatingSystem.toLowerCase()) {
|
if ("bsd" === systemInfo.OperatingSystem.toLowerCase()) {
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
html += Globalize.translate("MessageDirectoryPickerBSDInstruction");
|
html += globalize.translate("MessageDirectoryPickerBSDInstruction");
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
} else if ("linux" === systemInfo.OperatingSystem.toLowerCase()) {
|
} else if ("linux" === systemInfo.OperatingSystem.toLowerCase()) {
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
html += Globalize.translate("MessageDirectoryPickerLinuxInstruction");
|
html += globalize.translate("MessageDirectoryPickerLinuxInstruction");
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
}
|
}
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
|
@ -113,10 +113,10 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
labelKey = "LabelPath";
|
labelKey = "LabelPath";
|
||||||
}
|
}
|
||||||
var readOnlyAttribute = options.pathReadOnly ? " readonly" : "";
|
var readOnlyAttribute = options.pathReadOnly ? " readonly" : "";
|
||||||
html += '<input is="emby-input" id="txtDirectoryPickerPath" type="text" required="required" ' + readOnlyAttribute + ' label="' + Globalize.translate(labelKey) + '"/>';
|
html += '<input is="emby-input" id="txtDirectoryPickerPath" type="text" required="required" ' + readOnlyAttribute + ' label="' + globalize.translate(labelKey) + '"/>';
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
if (!readOnlyAttribute) {
|
if (!readOnlyAttribute) {
|
||||||
html += '<button type="button" is="paper-icon-button-light" class="btnRefreshDirectories emby-input-iconbutton" title="' + Globalize.translate("ButtonRefresh") + '"><i class="material-icons">search</i></button>';
|
html += '<button type="button" is="paper-icon-button-light" class="btnRefreshDirectories emby-input-iconbutton" title="' + globalize.translate("ButtonRefresh") + '"><i class="material-icons">search</i></button>';
|
||||||
}
|
}
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
if (!readOnlyAttribute) {
|
if (!readOnlyAttribute) {
|
||||||
|
@ -124,14 +124,14 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
}
|
}
|
||||||
if (options.enableNetworkSharePath) {
|
if (options.enableNetworkSharePath) {
|
||||||
html += '<div class="inputContainer" style="margin-top:2em;">';
|
html += '<div class="inputContainer" style="margin-top:2em;">';
|
||||||
html += '<input is="emby-input" id="txtNetworkPath" type="text" label="' + Globalize.translate("LabelOptionalNetworkPath") + '"/>';
|
html += '<input is="emby-input" id="txtNetworkPath" type="text" label="' + globalize.translate("LabelOptionalNetworkPath") + '"/>';
|
||||||
html += '<div class="fieldDescription">';
|
html += '<div class="fieldDescription">';
|
||||||
html += Globalize.translate("LabelOptionalNetworkPathHelp");
|
html += globalize.translate("LabelOptionalNetworkPathHelp");
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
}
|
}
|
||||||
html += '<div class="formDialogFooter">';
|
html += '<div class="formDialogFooter">';
|
||||||
html += '<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem">' + Globalize.translate("ButtonOk") + "</button>";
|
html += '<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem">' + globalize.translate("ButtonOk") + "</button>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += "</form>";
|
html += "</form>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
|
@ -164,14 +164,14 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
}).catch(function(response) {
|
}).catch(function(response) {
|
||||||
if (response) {
|
if (response) {
|
||||||
if (response.status === 404) {
|
if (response.status === 404) {
|
||||||
alertText(Globalize.translate("PathNotFound"));
|
alertText(globalize.translate("PathNotFound"));
|
||||||
return Promise.reject();
|
return Promise.reject();
|
||||||
}
|
}
|
||||||
if (response.status === 500) {
|
if (response.status === 500) {
|
||||||
if (validateWriteable) {
|
if (validateWriteable) {
|
||||||
alertText(Globalize.translate("WriteAccessRequired"));
|
alertText(globalize.translate("WriteAccessRequired"));
|
||||||
} else {
|
} else {
|
||||||
alertText(Globalize.translate("PathNotFound"));
|
alertText(globalize.translate("PathNotFound"));
|
||||||
}
|
}
|
||||||
return Promise.reject();
|
return Promise.reject();
|
||||||
}
|
}
|
||||||
|
@ -266,7 +266,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
html += '<div class="formDialogHeader">';
|
html += '<div class="formDialogHeader">';
|
||||||
html += '<button is="paper-icon-button-light" class="btnCloseDialog autoSize" tabindex="-1"><i class="material-icons arrow_back"></i></button>';
|
html += '<button is="paper-icon-button-light" class="btnCloseDialog autoSize" tabindex="-1"><i class="material-icons arrow_back"></i></button>';
|
||||||
html += '<h3 class="formDialogHeaderTitle">';
|
html += '<h3 class="formDialogHeaderTitle">';
|
||||||
html += options.header || Globalize.translate("HeaderSelectPath");
|
html += options.header || globalize.translate("HeaderSelectPath");
|
||||||
html += "</h3>";
|
html += "</h3>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += getEditorHtml(options, systemInfo);
|
html += getEditorHtml(options, systemInfo);
|
||||||
|
|
|
@ -64,13 +64,13 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
|
||||||
} else {
|
} else {
|
||||||
var noLibDescription;
|
var noLibDescription;
|
||||||
if (user['Policy'] && user['Policy']['IsAdministrator']) {
|
if (user['Policy'] && user['Policy']['IsAdministrator']) {
|
||||||
noLibDescription = Globalize.translate("NoCreatedLibraries", '<br><a id="button-createLibrary" class="button-link">', '</a>');
|
noLibDescription = globalize.translate("NoCreatedLibraries", '<br><a id="button-createLibrary" class="button-link">', '</a>');
|
||||||
} else {
|
} else {
|
||||||
noLibDescription = Globalize.translate("AskAdminToCreateLibrary");
|
noLibDescription = globalize.translate("AskAdminToCreateLibrary");
|
||||||
}
|
}
|
||||||
|
|
||||||
html += '<div class="centerMessage padded-left padded-right">';
|
html += '<div class="centerMessage padded-left padded-right">';
|
||||||
html += '<h2>' + Globalize.translate("MessageNothingHere") + '</h2>';
|
html += '<h2>' + globalize.translate("MessageNothingHere") + '</h2>';
|
||||||
html += '<p>' + noLibDescription + '</p>';
|
html += '<p>' + noLibDescription + '</p>';
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
|
|
|
@ -218,7 +218,7 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter",
|
||||||
if (item.Type === "Program" && options.record !== false) {
|
if (item.Type === "Program" && options.record !== false) {
|
||||||
if (item.TimerId) {
|
if (item.TimerId) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: Globalize.translate("ManageRecording"),
|
name: globalize.translate("ManageRecording"),
|
||||||
id: "record",
|
id: "record",
|
||||||
icon: "fiber_manual_record"
|
icon: "fiber_manual_record"
|
||||||
});
|
});
|
||||||
|
@ -228,7 +228,7 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter",
|
||||||
if (item.Type === "Program" && options.record !== false) {
|
if (item.Type === "Program" && options.record !== false) {
|
||||||
if (!item.TimerId) {
|
if (!item.TimerId) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: Globalize.translate("Record"),
|
name: globalize.translate("Record"),
|
||||||
id: "record",
|
id: "record",
|
||||||
icon: "fiber_manual_record"
|
icon: "fiber_manual_record"
|
||||||
});
|
});
|
||||||
|
@ -283,7 +283,7 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter",
|
||||||
|
|
||||||
if (options.openAlbum !== false && item.AlbumId && item.MediaType !== "Photo") {
|
if (options.openAlbum !== false && item.AlbumId && item.MediaType !== "Photo") {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: Globalize.translate("ViewAlbum"),
|
name: globalize.translate("ViewAlbum"),
|
||||||
id: "album",
|
id: "album",
|
||||||
icon: "album"
|
icon: "album"
|
||||||
});
|
});
|
||||||
|
@ -291,7 +291,7 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter",
|
||||||
|
|
||||||
if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) {
|
if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: Globalize.translate("ViewArtist"),
|
name: globalize.translate("ViewArtist"),
|
||||||
id: "artist",
|
id: "artist",
|
||||||
icon: "person"
|
icon: "person"
|
||||||
});
|
});
|
||||||
|
|
|
@ -166,6 +166,7 @@ define(['dom', 'browser', 'events', 'emby-tabs', 'emby-button'], function (dom,
|
||||||
}).join('') + '</div></div>';
|
}).join('') + '</div></div>';
|
||||||
|
|
||||||
tabsContainerElem.innerHTML = tabsHtml;
|
tabsContainerElem.innerHTML = tabsHtml;
|
||||||
|
window.CustomElements.upgradeSubtree(tabsContainerElem);
|
||||||
|
|
||||||
document.body.classList.add('withSectionTabs');
|
document.body.classList.add('withSectionTabs');
|
||||||
tabOwnerView = view;
|
tabOwnerView = view;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionseditor/libraryoptionseditor", "emby-toggle", "emby-input", "emby-select", "paper-icon-button-light", "listViewStyle", "formDialogStyle", "emby-button", "flexStyles"], function (loading, dialogHelper, dom, $, libraryoptionseditor) {
|
define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionseditor/libraryoptionseditor", "globalize", "emby-toggle", "emby-input", "emby-select", "paper-icon-button-light", "listViewStyle", "formDialogStyle", "emby-button", "flexStyles"], function (loading, dialogHelper, dom, $, libraryoptionseditor, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function onAddLibrary() {
|
function onAddLibrary() {
|
||||||
|
@ -9,7 +9,7 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
|
||||||
if (pathInfos.length == 0) {
|
if (pathInfos.length == 0) {
|
||||||
require(["alert"], function (alert) {
|
require(["alert"], function (alert) {
|
||||||
alert({
|
alert({
|
||||||
text: Globalize.translate("PleaseAddAtLeastOneFolder"),
|
text: globalize.translate("PleaseAddAtLeastOneFolder"),
|
||||||
type: "error"
|
type: "error"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -36,7 +36,7 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
|
||||||
dialogHelper.close(dlg);
|
dialogHelper.close(dlg);
|
||||||
}, function () {
|
}, function () {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
|
toast(globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
|
||||||
});
|
});
|
||||||
|
|
||||||
isCreating = false;
|
isCreating = false;
|
||||||
|
@ -196,7 +196,7 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
|
||||||
dlg.classList.add("background-theme-a");
|
dlg.classList.add("background-theme-a");
|
||||||
dlg.classList.add("dlg-librarycreator");
|
dlg.classList.add("dlg-librarycreator");
|
||||||
dlg.classList.add("formDialog");
|
dlg.classList.add("formDialog");
|
||||||
dlg.innerHTML = Globalize.translateDocument(template);
|
dlg.innerHTML = globalize.translateDocument(template);
|
||||||
initEditor(dlg, options.collectionTypeOptions);
|
initEditor(dlg, options.collectionTypeOptions);
|
||||||
dlg.addEventListener("close", onDialogClosed);
|
dlg.addEventListener("close", onDialogClosed);
|
||||||
dialogHelper.open(dlg);
|
dialogHelper.open(dlg);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionseditor/libraryoptionseditor", "emby-button", "listViewStyle", "paper-icon-button-light", "formDialogStyle", "emby-toggle", "flexStyles"], function (jQuery, loading, dialogHelper, dom, libraryoptionseditor) {
|
define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionseditor/libraryoptionseditor", "globalize", "emby-button", "listViewStyle", "paper-icon-button-light", "formDialogStyle", "emby-toggle", "flexStyles"], function (jQuery, loading, dialogHelper, dom, libraryoptionseditor, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function onEditLibrary() {
|
function onEditLibrary() {
|
||||||
|
@ -31,7 +31,7 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
|
||||||
refreshLibraryFromServer(page);
|
refreshLibraryFromServer(page);
|
||||||
}, function () {
|
}, function () {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
|
toast(globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
|
||||||
refreshLibraryFromServer(page);
|
refreshLibraryFromServer(page);
|
||||||
}, function () {
|
}, function () {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
|
toast(globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -57,9 +57,9 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
|
||||||
|
|
||||||
require(["confirm"], function (confirm) {
|
require(["confirm"], function (confirm) {
|
||||||
confirm({
|
confirm({
|
||||||
title: Globalize.translate("HeaderRemoveMediaLocation"),
|
title: globalize.translate("HeaderRemoveMediaLocation"),
|
||||||
text: Globalize.translate("MessageConfirmRemoveMediaLocation"),
|
text: globalize.translate("MessageConfirmRemoveMediaLocation"),
|
||||||
confirmText: Globalize.translate("ButtonDelete"),
|
confirmText: globalize.translate("ButtonDelete"),
|
||||||
primary: "delete"
|
primary: "delete"
|
||||||
}).then(function () {
|
}).then(function () {
|
||||||
var refreshAfterChange = currentOptions.refresh;
|
var refreshAfterChange = currentOptions.refresh;
|
||||||
|
@ -68,7 +68,7 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
|
||||||
refreshLibraryFromServer(dom.parentWithClass(button, "dlg-libraryeditor"));
|
refreshLibraryFromServer(dom.parentWithClass(button, "dlg-libraryeditor"));
|
||||||
}, function () {
|
}, function () {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("DefaultErrorMessage"));
|
toast(globalize.translate("DefaultErrorMessage"));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -213,7 +213,7 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
|
||||||
dlg.classList.add("ui-body-a");
|
dlg.classList.add("ui-body-a");
|
||||||
dlg.classList.add("background-theme-a");
|
dlg.classList.add("background-theme-a");
|
||||||
dlg.classList.add("formDialog");
|
dlg.classList.add("formDialog");
|
||||||
dlg.innerHTML = Globalize.translateDocument(template);
|
dlg.innerHTML = globalize.translateDocument(template);
|
||||||
dlg.querySelector(".formDialogHeaderTitle").innerHTML = options.library.Name;
|
dlg.querySelector(".formDialogHeaderTitle").innerHTML = options.library.Name;
|
||||||
initEditor(dlg, options);
|
initEditor(dlg, options);
|
||||||
dlg.addEventListener("close", onDialogClosed);
|
dlg.addEventListener("close", onDialogClosed);
|
||||||
|
|
|
@ -212,7 +212,7 @@ define(["browser", "appStorage", "apphost", "loading", "connectionManager", "glo
|
||||||
|
|
||||||
if (user.Policy.EnableContentDownloading && appHost.supports("filedownload")) {
|
if (user.Policy.EnableContentDownloading && appHost.supports("filedownload")) {
|
||||||
menuItems.push({
|
menuItems.push({
|
||||||
name: Globalize.translate("ButtonDownload"),
|
name: globalize.translate("ButtonDownload"),
|
||||||
id: "download",
|
id: "download",
|
||||||
icon: "file_download"
|
icon: "file_download"
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,8 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
|
||||||
document.removeEventListener('click', onOneDocumentClick);
|
document.removeEventListener('click', onOneDocumentClick);
|
||||||
document.removeEventListener('keydown', onOneDocumentClick);
|
document.removeEventListener('keydown', onOneDocumentClick);
|
||||||
|
|
||||||
if (window.Notification) {
|
// don't request notification permissions if they're already granted or denied
|
||||||
|
if (window.Notification && window.Notification.permission === "default") {
|
||||||
/* eslint-disable-next-line compat/compat */
|
/* eslint-disable-next-line compat/compat */
|
||||||
Notification.requestPermission();
|
Notification.requestPermission();
|
||||||
}
|
}
|
||||||
|
|
|
@ -672,18 +672,6 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
|
||||||
playbackManager.setVolume(this.value, currentPlayer);
|
playbackManager.setVolume(this.value, currentPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
var contextmenuHtml = '<button id="toggleContextMenu" is="paper-icon-button-light" class="btnToggleContextMenu" title=' + globalize.translate('ButtonToggleContextMenu') + '><i class="material-icons more_vert"></i></button>';
|
|
||||||
var volumecontrolHtml = '<div class="volumecontrol flex align-items-center flex-wrap-wrap justify-content-center">';
|
|
||||||
volumecontrolHtml += '<button is="paper-icon-button-light" class="buttonMute autoSize" title=' + globalize.translate('Mute') + '><i class="xlargePaperIconButton material-icons"></i></button>';
|
|
||||||
volumecontrolHtml += '<div class="sliderContainer nowPlayingVolumeSliderContainer"><input is="emby-slider" type="range" step="1" min="0" max="100" value="0" class="nowPlayingVolumeSlider"/></div>';
|
|
||||||
volumecontrolHtml += '</div>';
|
|
||||||
if (!layoutManager.mobile) {
|
|
||||||
context.querySelector(".nowPlayingSecondaryButtons").innerHTML += volumecontrolHtml;
|
|
||||||
context.querySelector(".playlistSectionButton").innerHTML += contextmenuHtml;
|
|
||||||
} else {
|
|
||||||
context.querySelector(".playlistSectionButton").innerHTML += volumecontrolHtml + contextmenuHtml;
|
|
||||||
}
|
|
||||||
|
|
||||||
context.querySelector(".nowPlayingVolumeSlider").addEventListener("change", setVolume);
|
context.querySelector(".nowPlayingVolumeSlider").addEventListener("change", setVolume);
|
||||||
context.querySelector(".nowPlayingVolumeSlider").addEventListener("mousemove", setVolume);
|
context.querySelector(".nowPlayingVolumeSlider").addEventListener("mousemove", setVolume);
|
||||||
context.querySelector(".nowPlayingVolumeSlider").addEventListener("touchmove", setVolume);
|
context.querySelector(".nowPlayingVolumeSlider").addEventListener("touchmove", setVolume);
|
||||||
|
@ -767,6 +755,18 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
|
||||||
}
|
}
|
||||||
|
|
||||||
function init(ownerView, context) {
|
function init(ownerView, context) {
|
||||||
|
let contextmenuHtml = `<button id="toggleContextMenu" is="paper-icon-button-light" class="btnToggleContextMenu" title=${globalize.translate('ButtonToggleContextMenu')}><i class="material-icons more_vert"></i></button>`;
|
||||||
|
let volumecontrolHtml = '<div class="volumecontrol flex align-items-center flex-wrap-wrap justify-content-center">';
|
||||||
|
volumecontrolHtml += `<button is="paper-icon-button-light" class="buttonMute autoSize" title=${globalize.translate('Mute')}><i class="xlargePaperIconButton material-icons"></i></button>`;
|
||||||
|
volumecontrolHtml += '<div class="sliderContainer nowPlayingVolumeSliderContainer"><input is="emby-slider" type="range" step="1" min="0" max="100" value="0" class="nowPlayingVolumeSlider"/></div>';
|
||||||
|
volumecontrolHtml += '</div>';
|
||||||
|
if (!layoutManager.mobile) {
|
||||||
|
context.querySelector('.nowPlayingSecondaryButtons').innerHTML += volumecontrolHtml;
|
||||||
|
context.querySelector('.playlistSectionButton').innerHTML += contextmenuHtml;
|
||||||
|
} else {
|
||||||
|
context.querySelector('.playlistSectionButton').innerHTML += volumecontrolHtml + contextmenuHtml;
|
||||||
|
}
|
||||||
|
|
||||||
bindEvents(context);
|
bindEvents(context);
|
||||||
context.querySelector(".sendMessageForm").addEventListener("submit", onMessageSubmit);
|
context.querySelector(".sendMessageForm").addEventListener("submit", onMessageSubmit);
|
||||||
context.querySelector(".typeTextForm").addEventListener("submit", onSendStringSubmit);
|
context.querySelector(".typeTextForm").addEventListener("submit", onSendStringSubmit);
|
||||||
|
|
|
@ -397,7 +397,7 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
||||||
var items = [];
|
var items = [];
|
||||||
|
|
||||||
items.push({
|
items.push({
|
||||||
name: Globalize.translate('Download'),
|
name: globalize.translate('Download'),
|
||||||
id: 'download'
|
id: 'download'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "emby-select", "emby-button", "flexStyles"], function ($, loading) {
|
define(["jQuery", "loading", "globalize", "emby-checkbox", "listViewStyle", "emby-input", "emby-select", "emby-button", "flexStyles"], function ($, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (page, providerId, options) {
|
return function (page, providerId, options) {
|
||||||
|
@ -69,7 +69,7 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em
|
||||||
$(page.querySelector(".txtZipCode")).trigger("change");
|
$(page.querySelector(".txtZipCode")).trigger("change");
|
||||||
}, function () { // ApiClient.getJSON() error handler
|
}, function () { // ApiClient.getJSON() error handler
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("ErrorGettingTvLineups")
|
message: globalize.translate("ErrorGettingTvLineups")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
@ -130,7 +130,7 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em
|
||||||
reload();
|
reload();
|
||||||
}, function () {
|
}, function () {
|
||||||
Dashboard.alert({ // ApiClient.ajax() error handler
|
Dashboard.alert({ // ApiClient.ajax() error handler
|
||||||
message: Globalize.translate("ErrorSavingTvProvider")
|
message: globalize.translate("ErrorSavingTvProvider")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -141,7 +141,7 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em
|
||||||
|
|
||||||
if (!selectedListingsId) {
|
if (!selectedListingsId) {
|
||||||
return void Dashboard.alert({
|
return void Dashboard.alert({
|
||||||
message: Globalize.translate("ErrorPleaseSelectLineup")
|
message: globalize.translate("ErrorPleaseSelectLineup")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em
|
||||||
}, function () {
|
}, function () {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("ErrorAddingListingsToSchedulesDirect")
|
message: globalize.translate("ErrorAddingListingsToSchedulesDirect")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -210,7 +210,7 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em
|
||||||
loading.hide();
|
loading.hide();
|
||||||
}, function (result) {
|
}, function (result) {
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("ErrorGettingTvLineups")
|
message: globalize.translate("ErrorGettingTvLineups")
|
||||||
});
|
});
|
||||||
refreshListings("");
|
refreshListings("");
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
@ -290,7 +290,7 @@ define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "em
|
||||||
page.querySelector(".selectTunersSection").classList.remove("hide");
|
page.querySelector(".selectTunersSection").classList.remove("hide");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$(".createAccountHelp", page).html(Globalize.translate("MessageCreateAccountAt", '<a is="emby-linkbutton" class="button-link" href="http://www.schedulesdirect.org" target="_blank">http://www.schedulesdirect.org</a>'));
|
$(".createAccountHelp", page).html(globalize.translate("MessageCreateAccountAt", '<a is="emby-linkbutton" class="button-link" href="http://www.schedulesdirect.org" target="_blank">http://www.schedulesdirect.org</a>'));
|
||||||
reload();
|
reload();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "emby-checkbox", "emby-input", "listViewStyle", "paper-icon-button-light"], function ($, loading) {
|
define(["jQuery", "loading", "globalize", "emby-checkbox", "emby-input", "listViewStyle", "paper-icon-button-light"], function ($, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (page, providerId, options) {
|
return function (page, providerId, options) {
|
||||||
|
@ -92,7 +92,7 @@ define(["jQuery", "loading", "emby-checkbox", "emby-input", "listViewStyle", "pa
|
||||||
}, function () {
|
}, function () {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("ErrorAddingXmlTvFile")
|
message: globalize.translate("ErrorAddingXmlTvFile")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["appSettings", "loading", "browser", "emby-button"], function(appSettings, loading, browser) {
|
define(["appSettings", "loading", "browser", "globalize", "emby-button"], function(appSettings, loading, browser, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function handleConnectionResult(page, result) {
|
function handleConnectionResult(page, result) {
|
||||||
|
@ -17,13 +17,13 @@ define(["appSettings", "loading", "browser", "emby-button"], function(appSetting
|
||||||
break;
|
break;
|
||||||
case "ServerUpdateNeeded":
|
case "ServerUpdateNeeded":
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("ServerUpdateNeeded", '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
|
message: globalize.translate("ServerUpdateNeeded", '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case "Unavailable":
|
case "Unavailable":
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("MessageUnableToConnectToServer"),
|
message: globalize.translate("MessageUnableToConnectToServer"),
|
||||||
title: Globalize.translate("HeaderConnectionFailure")
|
title: globalize.translate("HeaderConnectionFailure")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
define([], function () {
|
define(["globalize"], function (globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function processForgotPasswordResult(result) {
|
function processForgotPasswordResult(result) {
|
||||||
if ("ContactAdmin" == result.Action) {
|
if ("ContactAdmin" == result.Action) {
|
||||||
return void Dashboard.alert({
|
return void Dashboard.alert({
|
||||||
message: Globalize.translate("MessageContactAdminToResetPassword"),
|
message: globalize.translate("MessageContactAdminToResetPassword"),
|
||||||
title: Globalize.translate("HeaderForgotPassword")
|
title: globalize.translate("HeaderForgotPassword")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("InNetworkRequired" == result.Action) {
|
if ("InNetworkRequired" == result.Action) {
|
||||||
return void Dashboard.alert({
|
return void Dashboard.alert({
|
||||||
message: Globalize.translate("MessageForgotPasswordInNetworkRequired"),
|
message: globalize.translate("MessageForgotPasswordInNetworkRequired"),
|
||||||
title: Globalize.translate("HeaderForgotPassword")
|
title: globalize.translate("HeaderForgotPassword")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("PinCode" == result.Action) {
|
if ("PinCode" == result.Action) {
|
||||||
var msg = Globalize.translate("MessageForgotPasswordFileCreated");
|
var msg = globalize.translate("MessageForgotPasswordFileCreated");
|
||||||
msg += "<br/>";
|
msg += "<br/>";
|
||||||
msg += "<br/>";
|
msg += "<br/>";
|
||||||
msg += "Enter PIN here to finish Password Reset<br/>";
|
msg += "Enter PIN here to finish Password Reset<br/>";
|
||||||
|
@ -26,7 +26,7 @@ define([], function () {
|
||||||
msg += "<br/>";
|
msg += "<br/>";
|
||||||
return void Dashboard.alert({
|
return void Dashboard.alert({
|
||||||
message: msg,
|
message: msg,
|
||||||
title: Globalize.translate("HeaderForgotPassword"),
|
title: globalize.translate("HeaderForgotPassword"),
|
||||||
callback: function () {
|
callback: function () {
|
||||||
Dashboard.navigate("forgotpasswordpin.html");
|
Dashboard.navigate("forgotpasswordpin.html");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
define([], function () {
|
define(["globalize"], function (globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function processForgotPasswordResult(result) {
|
function processForgotPasswordResult(result) {
|
||||||
if (result.Success) {
|
if (result.Success) {
|
||||||
var msg = Globalize.translate("MessagePasswordResetForUsers");
|
var msg = globalize.translate("MessagePasswordResetForUsers");
|
||||||
msg += "<br/>";
|
msg += "<br/>";
|
||||||
msg += "<br/>";
|
msg += "<br/>";
|
||||||
msg += result.UsersReset.join("<br/>");
|
msg += result.UsersReset.join("<br/>");
|
||||||
return void Dashboard.alert({
|
return void Dashboard.alert({
|
||||||
message: msg,
|
message: msg,
|
||||||
title: Globalize.translate("HeaderPasswordReset"),
|
title: globalize.translate("HeaderPasswordReset"),
|
||||||
callback: function () {
|
callback: function () {
|
||||||
window.location.href = "index.html";
|
window.location.href = "index.html";
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,8 @@ define([], function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("MessageInvalidForgotPasswordPin"),
|
message: globalize.translate("MessageInvalidForgotPasswordPin"),
|
||||||
title: Globalize.translate("HeaderPasswordReset")
|
title: globalize.translate("HeaderPasswordReset")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layoutManager", "browser", "cardStyle", "emby-checkbox"], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser) {
|
define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layoutManager", "browser", "globalize", "cardStyle", "emby-checkbox"], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var enableFocusTransform = !browser.slow && !browser.edge;
|
var enableFocusTransform = !browser.slow && !browser.edge;
|
||||||
|
@ -28,12 +28,12 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
|
||||||
if (UnauthorizedOrForbidden.includes(response.status)) {
|
if (UnauthorizedOrForbidden.includes(response.status)) {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
const messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser";
|
const messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser";
|
||||||
toast(Globalize.translate(messageKey));
|
toast(globalize.translate(messageKey));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("MessageUnableToConnectToServer"),
|
message: globalize.translate("MessageUnableToConnectToServer"),
|
||||||
title: Globalize.translate("HeaderConnectionFailure")
|
title: globalize.translate("HeaderConnectionFailure")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-input", "emby-checkbox", "listViewStyle", "emby-button"], function ($, loading) {
|
define(["jQuery", "loading", "globalize", "fnchecked", "emby-select", "emby-button", "emby-input", "emby-checkbox", "listViewStyle", "emby-button"], function ($, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadProfile(page) {
|
function loadProfile(page) {
|
||||||
|
@ -258,14 +258,14 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if ("Video" == profile.Type) {
|
if ("Video" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
} else {
|
} else {
|
||||||
if ("Audio" == profile.Type) {
|
if ("Audio" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,14 +319,14 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>Protocol: " + (profile.Protocol || "Http") + "</p>";
|
html += "<p>Protocol: " + (profile.Protocol || "Http") + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if ("Video" == profile.Type) {
|
if ("Video" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
} else {
|
} else {
|
||||||
if ("Audio" == profile.Type) {
|
if ("Audio" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,11 +404,11 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if (profile.Conditions && profile.Conditions.length) {
|
if (profile.Conditions && profile.Conditions.length) {
|
||||||
html += "<p>";
|
html += "<p>";
|
||||||
html += Globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
html += globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
||||||
return c.Property;
|
return c.Property;
|
||||||
}).join(", "));
|
}).join(", "));
|
||||||
html += "</p>";
|
html += "</p>";
|
||||||
|
@ -476,11 +476,11 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueCodec", profile.Codec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueCodec", profile.Codec || allText) + "</p>";
|
||||||
|
|
||||||
if (profile.Conditions && profile.Conditions.length) {
|
if (profile.Conditions && profile.Conditions.length) {
|
||||||
html += "<p>";
|
html += "<p>";
|
||||||
html += Globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
html += globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
||||||
return c.Property;
|
return c.Property;
|
||||||
}).join(", "));
|
}).join(", "));
|
||||||
html += "</p>";
|
html += "</p>";
|
||||||
|
@ -547,20 +547,20 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if ("Video" == profile.Type) {
|
if ("Video" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
} else {
|
} else {
|
||||||
if ("Audio" == profile.Type) {
|
if ("Audio" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile.Conditions && profile.Conditions.length) {
|
if (profile.Conditions && profile.Conditions.length) {
|
||||||
html += "<p>";
|
html += "<p>";
|
||||||
html += Globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
html += globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
||||||
return c.Property;
|
return c.Property;
|
||||||
}).join(", "));
|
}).join(", "));
|
||||||
html += "</p>";
|
html += "</p>";
|
||||||
|
@ -690,7 +690,7 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
var currentProfile;
|
var currentProfile;
|
||||||
var currentSubProfile;
|
var currentSubProfile;
|
||||||
var isSubProfileNew;
|
var isSubProfileNew;
|
||||||
var allText = Globalize.translate("LabelAll");
|
var allText = globalize.translate("LabelAll");
|
||||||
|
|
||||||
$(document).on("pageinit", "#dlnaProfilePage", function () {
|
$(document).on("pageinit", "#dlnaProfilePage", function () {
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading, libraryMenu) {
|
define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function ($, loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadPage(page, config, users) {
|
function loadPage(page, config, users) {
|
||||||
|
@ -34,10 +34,10 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
href: "dlnasettings.html",
|
href: "dlnasettings.html",
|
||||||
name: Globalize.translate("TabSettings")
|
name: globalize.translate("TabSettings")
|
||||||
}, {
|
}, {
|
||||||
href: "dlnaprofiles.html",
|
href: "dlnaprofiles.html",
|
||||||
name: Globalize.translate("TabProfiles")
|
name: globalize.translate("TabProfiles")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,13 +116,13 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
href: "encodingsettings.html",
|
href: "encodingsettings.html",
|
||||||
name: Globalize.translate("Transcoding")
|
name: globalize.translate("Transcoding")
|
||||||
}, {
|
}, {
|
||||||
href: "playbackconfiguration.html",
|
href: "playbackconfiguration.html",
|
||||||
name: Globalize.translate("TabResumeSettings")
|
name: globalize.translate("TabResumeSettings")
|
||||||
}, {
|
}, {
|
||||||
href: "streamingsettings.html",
|
href: "streamingsettings.html",
|
||||||
name: Globalize.translate("TabStreaming")
|
name: globalize.translate("TabStreaming")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emby-input", "emby-select", "emby-button"], function ($, loading) {
|
define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox", "emby-textarea", "emby-input", "emby-select", "emby-button"], function ($, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadPage(page, config, languageOptions, systemInfo) {
|
function loadPage(page, config, languageOptions, systemInfo) {
|
||||||
|
@ -58,7 +58,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
|
||||||
});
|
});
|
||||||
}, function () {
|
}, function () {
|
||||||
require(["alert"], function (alert) {
|
require(["alert"], function (alert) {
|
||||||
alert(Globalize.translate("DefaultErrorMessage"));
|
alert(globalize.translate("DefaultErrorMessage"));
|
||||||
});
|
});
|
||||||
|
|
||||||
Dashboard.processServerConfigurationUpdateResult();
|
Dashboard.processServerConfigurationUpdateResult();
|
||||||
|
@ -83,8 +83,8 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
|
||||||
picker.close();
|
picker.close();
|
||||||
},
|
},
|
||||||
validateWriteable: true,
|
validateWriteable: true,
|
||||||
header: Globalize.translate("HeaderSelectServerCachePath"),
|
header: globalize.translate("HeaderSelectServerCachePath"),
|
||||||
instruction: Globalize.translate("HeaderSelectServerCachePathHelp")
|
instruction: globalize.translate("HeaderSelectServerCachePathHelp")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -106,8 +106,8 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
|
||||||
picker.close();
|
picker.close();
|
||||||
},
|
},
|
||||||
validateWriteable: true,
|
validateWriteable: true,
|
||||||
header: Globalize.translate("HeaderSelectMetadataPath"),
|
header: globalize.translate("HeaderSelectMetadataPath"),
|
||||||
instruction: Globalize.translate("HeaderSelectMetadataPathHelp"),
|
instruction: globalize.translate("HeaderSelectMetadataPathHelp"),
|
||||||
enableNetworkSharePath: true
|
enableNetworkSharePath: true
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,16 +4,16 @@ define(["globalize", "loading", "libraryMenu", "emby-checkbox", "emby-button", "
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
href: "library.html",
|
href: "library.html",
|
||||||
name: Globalize.translate("HeaderLibraries")
|
name: globalize.translate("HeaderLibraries")
|
||||||
}, {
|
}, {
|
||||||
href: "librarydisplay.html",
|
href: "librarydisplay.html",
|
||||||
name: Globalize.translate("TabDisplay")
|
name: globalize.translate("TabDisplay")
|
||||||
}, {
|
}, {
|
||||||
href: "metadataimages.html",
|
href: "metadataimages.html",
|
||||||
name: Globalize.translate("TabMetadata")
|
name: globalize.translate("TabMetadata")
|
||||||
}, {
|
}, {
|
||||||
href: "metadatanfo.html",
|
href: "metadatanfo.html",
|
||||||
name: Globalize.translate("TabNfoSettings")
|
name: globalize.translate("TabNfoSettings")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "dom", "loading", "libraryMenu", "listViewStyle"], function($, dom, loading, libraryMenu) {
|
define(["jQuery", "dom", "loading", "libraryMenu", "globalize", "listViewStyle"], function($, dom, loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function populateLanguages(select) {
|
function populateLanguages(select) {
|
||||||
|
@ -43,16 +43,16 @@ define(["jQuery", "dom", "loading", "libraryMenu", "listViewStyle"], function($,
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
href: "library.html",
|
href: "library.html",
|
||||||
name: Globalize.translate("HeaderLibraries")
|
name: globalize.translate("HeaderLibraries")
|
||||||
}, {
|
}, {
|
||||||
href: "librarydisplay.html",
|
href: "librarydisplay.html",
|
||||||
name: Globalize.translate("TabDisplay")
|
name: globalize.translate("TabDisplay")
|
||||||
}, {
|
}, {
|
||||||
href: "metadataimages.html",
|
href: "metadataimages.html",
|
||||||
name: Globalize.translate("TabMetadata")
|
name: globalize.translate("TabMetadata")
|
||||||
}, {
|
}, {
|
||||||
href: "metadatanfo.html",
|
href: "metadatanfo.html",
|
||||||
name: Globalize.translate("TabNfoSettings")
|
name: globalize.translate("TabNfoSettings")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu) {
|
define(["jQuery", "loading", "libraryMenu", "globalize"], function ($, loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadPage(page, config, users) {
|
function loadPage(page, config, users) {
|
||||||
var html = '<option value="" selected="selected">' + Globalize.translate("OptionNone") + "</option>";
|
var html = '<option value="" selected="selected">' + globalize.translate("OptionNone") + "</option>";
|
||||||
html += users.map(function (user) {
|
html += users.map(function (user) {
|
||||||
return '<option value="' + user.Id + '">' + user.Name + "</option>";
|
return '<option value="' + user.Id + '">' + user.Name + "</option>";
|
||||||
}).join("");
|
}).join("");
|
||||||
|
@ -33,7 +33,7 @@ define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu)
|
||||||
|
|
||||||
function showConfirmMessage(config) {
|
function showConfirmMessage(config) {
|
||||||
var msg = [];
|
var msg = [];
|
||||||
msg.push(Globalize.translate("MetadataSettingChangeHelp"));
|
msg.push(globalize.translate("MetadataSettingChangeHelp"));
|
||||||
|
|
||||||
require(["alert"], function (alert) {
|
require(["alert"], function (alert) {
|
||||||
alert({
|
alert({
|
||||||
|
@ -45,16 +45,16 @@ define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu)
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
href: "library.html",
|
href: "library.html",
|
||||||
name: Globalize.translate("HeaderLibraries")
|
name: globalize.translate("HeaderLibraries")
|
||||||
}, {
|
}, {
|
||||||
href: "librarydisplay.html",
|
href: "librarydisplay.html",
|
||||||
name: Globalize.translate("TabDisplay")
|
name: globalize.translate("TabDisplay")
|
||||||
}, {
|
}, {
|
||||||
href: "metadataimages.html",
|
href: "metadataimages.html",
|
||||||
name: Globalize.translate("TabMetadata")
|
name: globalize.translate("TabMetadata")
|
||||||
}, {
|
}, {
|
||||||
href: "metadatanfo.html",
|
href: "metadatanfo.html",
|
||||||
name: Globalize.translate("TabNfoSettings")
|
name: globalize.translate("TabNfoSettings")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu) {
|
define(["jQuery", "loading", "libraryMenu", "globalize"], function ($, loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadPage(page, config) {
|
function loadPage(page, config) {
|
||||||
|
@ -25,13 +25,13 @@ define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu)
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
href: "encodingsettings.html",
|
href: "encodingsettings.html",
|
||||||
name: Globalize.translate("Transcoding")
|
name: globalize.translate("Transcoding")
|
||||||
}, {
|
}, {
|
||||||
href: "playbackconfiguration.html",
|
href: "playbackconfiguration.html",
|
||||||
name: Globalize.translate("TabResumeSettings")
|
name: globalize.translate("TabResumeSettings")
|
||||||
}, {
|
}, {
|
||||||
href: "streamingsettings.html",
|
href: "streamingsettings.html",
|
||||||
name: Globalize.translate("TabStreaming")
|
name: globalize.translate("TabStreaming")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "libraryMenu", "loading"], function ($, libraryMenu, loading) {
|
define(["jQuery", "libraryMenu", "loading", "globalize"], function ($, libraryMenu, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadPage(page, config) {
|
function loadPage(page, config) {
|
||||||
|
@ -20,13 +20,13 @@ define(["jQuery", "libraryMenu", "loading"], function ($, libraryMenu, loading)
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
href: "encodingsettings.html",
|
href: "encodingsettings.html",
|
||||||
name: Globalize.translate("Transcoding")
|
name: globalize.translate("Transcoding")
|
||||||
}, {
|
}, {
|
||||||
href: "playbackconfiguration.html",
|
href: "playbackconfiguration.html",
|
||||||
name: Globalize.translate("TabResumeSettings")
|
name: globalize.translate("TabResumeSettings")
|
||||||
}, {
|
}, {
|
||||||
href: "streamingsettings.html",
|
href: "streamingsettings.html",
|
||||||
name: Globalize.translate("TabStreaming")
|
name: globalize.translate("TabStreaming")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -554,7 +554,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti
|
||||||
renderTimerEditor(page, item, apiClient, user);
|
renderTimerEditor(page, item, apiClient, user);
|
||||||
renderImage(page, item, apiClient, user);
|
renderImage(page, item, apiClient, user);
|
||||||
renderLogo(page, item, apiClient);
|
renderLogo(page, item, apiClient);
|
||||||
setTitle(item, apiClient);
|
Emby.Page.setTitle('');
|
||||||
setInitialCollapsibleState(page, item, apiClient, context, user);
|
setInitialCollapsibleState(page, item, apiClient, context, user);
|
||||||
renderDetails(page, item, apiClient, context);
|
renderDetails(page, item, apiClient, context);
|
||||||
renderTrackSelections(page, instance, item);
|
renderTrackSelections(page, instance, item);
|
||||||
|
@ -666,19 +666,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTitle(item, apiClient) {
|
|
||||||
var url = logoImageUrl(item, apiClient, {});
|
|
||||||
|
|
||||||
if (url != null) {
|
|
||||||
var pageTitle = document.querySelector(".pageTitle");
|
|
||||||
pageTitle.style.backgroundImage = "url('" + url + "')";
|
|
||||||
pageTitle.classList.add("pageTitleWithLogo");
|
|
||||||
pageTitle.innerHTML = "";
|
|
||||||
} else {
|
|
||||||
Emby.Page.setTitle("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderLogo(page, item, apiClient) {
|
function renderLogo(page, item, apiClient) {
|
||||||
var url = logoImageUrl(item, apiClient, {
|
var url = logoImageUrl(item, apiClient, {
|
||||||
maxWidth: 400
|
maxWidth: 400
|
||||||
|
@ -2116,7 +2103,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti
|
||||||
|
|
||||||
if (e.detail.isRestored) {
|
if (e.detail.isRestored) {
|
||||||
if (currentItem) {
|
if (currentItem) {
|
||||||
setTitle(currentItem, connectionManager.getApiClient(currentItem.ServerId));
|
Emby.Page.setTitle('');
|
||||||
renderTrackSelections(page, self, currentItem, true);
|
renderTrackSelections(page, self, currentItem, true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["events", "loading"], function (events, loading) {
|
define(["events", "loading", "globalize"], function (events, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function onListingsSubmitted() {
|
function onListingsSubmitted() {
|
||||||
|
@ -17,7 +17,7 @@ define(["events", "loading"], function (events, loading) {
|
||||||
|
|
||||||
function loadTemplate(page, type, providerId) {
|
function loadTemplate(page, type, providerId) {
|
||||||
require(["text!./components/tvproviders/" + type + ".template.html"], function (html) {
|
require(["text!./components/tvproviders/" + type + ".template.html"], function (html) {
|
||||||
page.querySelector(".providerTemplate").innerHTML = Globalize.translateDocument(html);
|
page.querySelector(".providerTemplate").innerHTML = globalize.translateDocument(html);
|
||||||
init(page, type, providerId);
|
init(page, type, providerId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "fnchecked", "emby-button"], function ($, loading) {
|
define(["jQuery", "loading", "globalize", "fnchecked", "emby-button"], function ($, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadPage(page, config) {
|
function loadPage(page, config) {
|
||||||
|
@ -44,7 +44,7 @@ define(["jQuery", "loading", "fnchecked", "emby-button"], function ($, loading)
|
||||||
var msg = "";
|
var msg = "";
|
||||||
|
|
||||||
if (recordingPathChanged) {
|
if (recordingPathChanged) {
|
||||||
msg += Globalize.translate("RecordingPathChangeMessage");
|
msg += globalize.translate("RecordingPathChangeMessage");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg) {
|
if (msg) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings) {
|
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
@ -171,7 +171,7 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!result.Items.length) {
|
if (!result.Items.length) {
|
||||||
html = '<p style="text-align:center;">' + Globalize.translate("MessageNoCollectionsAvailable") + "</p>";
|
html = '<p style="text-align:center;">' + globalize.translate("MessageNoCollectionsAvailable") + "</p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||||
|
@ -199,19 +199,19 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||||
libraryBrowser.showSortMenu({
|
libraryBrowser.showSortMenu({
|
||||||
items: [{
|
items: [{
|
||||||
name: Globalize.translate("OptionNameSort"),
|
name: globalize.translate("OptionNameSort"),
|
||||||
id: "SortName"
|
id: "SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionImdbRating"),
|
name: globalize.translate("OptionImdbRating"),
|
||||||
id: "CommunityRating,SortName"
|
id: "CommunityRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDateAdded"),
|
name: globalize.translate("OptionDateAdded"),
|
||||||
id: "DateCreated,SortName"
|
id: "DateCreated,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionParentalRating"),
|
name: globalize.translate("OptionParentalRating"),
|
||||||
id: "OfficialRating,SortName"
|
id: "OfficialRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionReleaseDate"),
|
name: globalize.translate("OptionReleaseDate"),
|
||||||
id: "PremiereDate,SortName"
|
id: "PremiereDate,SortName"
|
||||||
}],
|
}],
|
||||||
callback: function () {
|
callback: function () {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser", "alphaPicker", "listView", "cardBuilder", "emby-itemscontainer"], function (loading, layoutManager, userSettings, events, libraryBrowser, alphaPicker, listView, cardBuilder) {
|
define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser", "alphaPicker", "listView", "cardBuilder", "globalize", "emby-itemscontainer"], function (loading, layoutManager, userSettings, events, libraryBrowser, alphaPicker, listView, cardBuilder, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (view, params, tabContent, options) {
|
return function (view, params, tabContent, options) {
|
||||||
|
@ -191,31 +191,31 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||||
btnSort.addEventListener("click", function (e) {
|
btnSort.addEventListener("click", function (e) {
|
||||||
libraryBrowser.showSortMenu({
|
libraryBrowser.showSortMenu({
|
||||||
items: [{
|
items: [{
|
||||||
name: Globalize.translate("OptionNameSort"),
|
name: globalize.translate("OptionNameSort"),
|
||||||
id: "SortName,ProductionYear"
|
id: "SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionImdbRating"),
|
name: globalize.translate("OptionImdbRating"),
|
||||||
id: "CommunityRating,SortName,ProductionYear"
|
id: "CommunityRating,SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionCriticRating"),
|
name: globalize.translate("OptionCriticRating"),
|
||||||
id: "CriticRating,SortName,ProductionYear"
|
id: "CriticRating,SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDateAdded"),
|
name: globalize.translate("OptionDateAdded"),
|
||||||
id: "DateCreated,SortName,ProductionYear"
|
id: "DateCreated,SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDatePlayed"),
|
name: globalize.translate("OptionDatePlayed"),
|
||||||
id: "DatePlayed,SortName,ProductionYear"
|
id: "DatePlayed,SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionParentalRating"),
|
name: globalize.translate("OptionParentalRating"),
|
||||||
id: "OfficialRating,SortName,ProductionYear"
|
id: "OfficialRating,SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionPlayCount"),
|
name: globalize.translate("OptionPlayCount"),
|
||||||
id: "PlayCount,SortName,ProductionYear"
|
id: "PlayCount,SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionReleaseDate"),
|
name: globalize.translate("OptionReleaseDate"),
|
||||||
id: "PremiereDate,SortName,ProductionYear"
|
id: "PremiereDate,SortName,ProductionYear"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionRuntime"),
|
name: globalize.translate("OptionRuntime"),
|
||||||
id: "Runtime,SortName,ProductionYear"
|
id: "Runtime,SortName,ProductionYear"
|
||||||
}],
|
}],
|
||||||
callback: function () {
|
callback: function () {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "emby-scroller", "emby-itemscontainer", "emby-tabs", "emby-button"], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager) {
|
define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "globalize", "emby-scroller", "emby-itemscontainer", "emby-tabs", "emby-button"], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
|
@ -91,21 +91,21 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||||
|
|
||||||
switch (recommendation.RecommendationType) {
|
switch (recommendation.RecommendationType) {
|
||||||
case "SimilarToRecentlyPlayed":
|
case "SimilarToRecentlyPlayed":
|
||||||
title = Globalize.translate("RecommendationBecauseYouWatched", recommendation.BaselineItemName);
|
title = globalize.translate("RecommendationBecauseYouWatched", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "SimilarToLikedItem":
|
case "SimilarToLikedItem":
|
||||||
title = Globalize.translate("RecommendationBecauseYouLike", recommendation.BaselineItemName);
|
title = globalize.translate("RecommendationBecauseYouLike", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "HasDirectorFromRecentlyPlayed":
|
case "HasDirectorFromRecentlyPlayed":
|
||||||
case "HasLikedDirector":
|
case "HasLikedDirector":
|
||||||
title = Globalize.translate("RecommendationDirectedBy", recommendation.BaselineItemName);
|
title = globalize.translate("RecommendationDirectedBy", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "HasActorFromRecentlyPlayed":
|
case "HasActorFromRecentlyPlayed":
|
||||||
case "HasLikedActor":
|
case "HasLikedActor":
|
||||||
title = Globalize.translate("RecommendationStarring", recommendation.BaselineItemName);
|
title = globalize.translate("RecommendationStarring", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,19 +211,19 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||||
|
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
name: Globalize.translate("Movies")
|
name: globalize.translate("Movies")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabSuggestions")
|
name: globalize.translate("TabSuggestions")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabTrailers")
|
name: globalize.translate("TabTrailers")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabFavorites")
|
name: globalize.translate("TabFavorites")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabCollections")
|
name: globalize.translate("TabCollections")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabGenres")
|
name: globalize.translate("TabGenres")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("ButtonSearch"),
|
name: globalize.translate("ButtonSearch"),
|
||||||
cssClass: "searchTabButton"
|
cssClass: "searchTabButton"
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -398,8 +398,8 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||||
libraryMenu.setTitle(item.Name);
|
libraryMenu.setTitle(item.Name);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
view.setAttribute("data-title", Globalize.translate("TabMovies"));
|
view.setAttribute("data-title", globalize.translate("TabMovies"));
|
||||||
libraryMenu.setTitle(Globalize.translate("TabMovies"));
|
libraryMenu.setTitle(globalize.translate("TabMovies"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings) {
|
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
@ -158,7 +158,7 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!result.Items.length) {
|
if (!result.Items.length) {
|
||||||
html = '<p style="text-align:center;">' + Globalize.translate("MessageNoTrailersFound") + "</p>";
|
html = '<p style="text-align:center;">' + globalize.translate("MessageNoTrailersFound") + "</p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||||
|
@ -223,25 +223,25 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||||
libraryBrowser.showSortMenu({
|
libraryBrowser.showSortMenu({
|
||||||
items: [{
|
items: [{
|
||||||
name: Globalize.translate("OptionNameSort"),
|
name: globalize.translate("OptionNameSort"),
|
||||||
id: "SortName"
|
id: "SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionImdbRating"),
|
name: globalize.translate("OptionImdbRating"),
|
||||||
id: "CommunityRating,SortName"
|
id: "CommunityRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDateAdded"),
|
name: globalize.translate("OptionDateAdded"),
|
||||||
id: "DateCreated,SortName"
|
id: "DateCreated,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDatePlayed"),
|
name: globalize.translate("OptionDatePlayed"),
|
||||||
id: "DatePlayed,SortName"
|
id: "DatePlayed,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionParentalRating"),
|
name: globalize.translate("OptionParentalRating"),
|
||||||
id: "OfficialRating,SortName"
|
id: "OfficialRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionPlayCount"),
|
name: globalize.translate("OptionPlayCount"),
|
||||||
id: "PlayCount,SortName"
|
id: "PlayCount,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionReleaseDate"),
|
name: globalize.translate("OptionReleaseDate"),
|
||||||
id: "PremiereDate,SortName"
|
id: "PremiereDate,SortName"
|
||||||
}],
|
}],
|
||||||
callback: function () {
|
callback: function () {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings) {
|
define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
@ -230,25 +230,25 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||||
libraryBrowser.showSortMenu({
|
libraryBrowser.showSortMenu({
|
||||||
items: [{
|
items: [{
|
||||||
name: Globalize.translate("OptionNameSort"),
|
name: globalize.translate("OptionNameSort"),
|
||||||
id: "SortName"
|
id: "SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionAlbumArtist"),
|
name: globalize.translate("OptionAlbumArtist"),
|
||||||
id: "AlbumArtist,SortName"
|
id: "AlbumArtist,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionCommunityRating"),
|
name: globalize.translate("OptionCommunityRating"),
|
||||||
id: "CommunityRating,SortName"
|
id: "CommunityRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionCriticRating"),
|
name: globalize.translate("OptionCriticRating"),
|
||||||
id: "CriticRating,SortName"
|
id: "CriticRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDateAdded"),
|
name: globalize.translate("OptionDateAdded"),
|
||||||
id: "DateCreated,SortName"
|
id: "DateCreated,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionReleaseDate"),
|
name: globalize.translate("OptionReleaseDate"),
|
||||||
id: "ProductionYear,PremiereDate,SortName"
|
id: "ProductionYear,PremiereDate,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionRandom"),
|
name: globalize.translate("OptionRandom"),
|
||||||
id: "Random,SortName"
|
id: "Random,SortName"
|
||||||
}],
|
}],
|
||||||
callback: function () {
|
callback: function () {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "cardBuilder", "dom", "apphost", "imageLoader", "libraryMenu", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button", "flexStyles"], function (browser, layoutManager, userSettings, inputManager, loading, cardBuilder, dom, appHost, imageLoader, libraryMenu, playbackManager, mainTabsManager) {
|
define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "cardBuilder", "dom", "apphost", "imageLoader", "libraryMenu", "playbackManager", "mainTabsManager", "globalize", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button", "flexStyles"], function (browser, layoutManager, userSettings, inputManager, loading, cardBuilder, dom, appHost, imageLoader, libraryMenu, playbackManager, mainTabsManager, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function itemsPerRow() {
|
function itemsPerRow() {
|
||||||
|
@ -167,21 +167,21 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||||
|
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
name: Globalize.translate("TabSuggestions")
|
name: globalize.translate("TabSuggestions")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabAlbums")
|
name: globalize.translate("TabAlbums")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabAlbumArtists")
|
name: globalize.translate("TabAlbumArtists")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabArtists")
|
name: globalize.translate("TabArtists")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabPlaylists")
|
name: globalize.translate("TabPlaylists")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabSongs")
|
name: globalize.translate("TabSongs")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabGenres")
|
name: globalize.translate("TabGenres")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("ButtonSearch"),
|
name: globalize.translate("ButtonSearch"),
|
||||||
cssClass: "searchTabButton"
|
cssClass: "searchTabButton"
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -388,8 +388,8 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||||
libraryMenu.setTitle(item.Name);
|
libraryMenu.setTitle(item.Name);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
view.setAttribute("data-title", Globalize.translate("TabMusic"));
|
view.setAttribute("data-title", globalize.translate("TabMusic"));
|
||||||
libraryMenu.setTitle(Globalize.translate("TabMusic"));
|
libraryMenu.setTitle(globalize.translate("TabMusic"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userSettings", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading, userSettings) {
|
define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userSettings", "globalize", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading, userSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
@ -149,31 +149,31 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userS
|
||||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||||
libraryBrowser.showSortMenu({
|
libraryBrowser.showSortMenu({
|
||||||
items: [{
|
items: [{
|
||||||
name: Globalize.translate("OptionTrackName"),
|
name: globalize.translate("OptionTrackName"),
|
||||||
id: "Name"
|
id: "Name"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionAlbum"),
|
name: globalize.translate("OptionAlbum"),
|
||||||
id: "Album,SortName"
|
id: "Album,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionAlbumArtist"),
|
name: globalize.translate("OptionAlbumArtist"),
|
||||||
id: "AlbumArtist,Album,SortName"
|
id: "AlbumArtist,Album,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionArtist"),
|
name: globalize.translate("OptionArtist"),
|
||||||
id: "Artist,Album,SortName"
|
id: "Artist,Album,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDateAdded"),
|
name: globalize.translate("OptionDateAdded"),
|
||||||
id: "DateCreated,SortName"
|
id: "DateCreated,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDatePlayed"),
|
name: globalize.translate("OptionDatePlayed"),
|
||||||
id: "DatePlayed,SortName"
|
id: "DatePlayed,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionPlayCount"),
|
name: globalize.translate("OptionPlayCount"),
|
||||||
id: "PlayCount,SortName"
|
id: "PlayCount,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionReleaseDate"),
|
name: globalize.translate("OptionReleaseDate"),
|
||||||
id: "PremiereDate,AlbumArtist,Album,SortName"
|
id: "PremiereDate,AlbumArtist,Album,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionRuntime"),
|
name: globalize.translate("OptionRuntime"),
|
||||||
id: "Runtime,AlbumArtist,Album,SortName"
|
id: "Runtime,AlbumArtist,Album,SortName"
|
||||||
}],
|
}],
|
||||||
callback: function () {
|
callback: function () {
|
||||||
|
|
|
@ -45,23 +45,6 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function logoImageUrl(item, apiClient, options) {
|
|
||||||
options = options || {};
|
|
||||||
options.type = "Logo";
|
|
||||||
|
|
||||||
if (item.ImageTags && item.ImageTags.Logo) {
|
|
||||||
options.tag = item.ImageTags.Logo;
|
|
||||||
return apiClient.getScaledImageUrl(item.Id, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.ParentLogoImageTag) {
|
|
||||||
options.tag = item.ParentLogoImageTag;
|
|
||||||
return apiClient.getScaledImageUrl(item.ParentLogoItemId, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return function (view, params) {
|
return function (view, params) {
|
||||||
function onVerticalSwipe(e, elem, data) {
|
function onVerticalSwipe(e, elem, data) {
|
||||||
var player = currentPlayer;
|
var player = currentPlayer;
|
||||||
|
@ -309,18 +292,7 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTitle(item, parentName) {
|
function setTitle(item, parentName) {
|
||||||
var url = logoImageUrl(item, connectionManager.getApiClient(item.ServerId), {});
|
Emby.Page.setTitle(parentName || '');
|
||||||
|
|
||||||
if (url) {
|
|
||||||
Emby.Page.setTitle("");
|
|
||||||
var pageTitle = document.querySelector(".pageTitle");
|
|
||||||
pageTitle.style.backgroundImage = "url('" + url + "')";
|
|
||||||
pageTitle.classList.add("pageTitleWithLogo");
|
|
||||||
pageTitle.classList.remove("pageTitleWithDefaultLogo");
|
|
||||||
pageTitle.innerHTML = "";
|
|
||||||
} else {
|
|
||||||
Emby.Page.setTitle(parentName || "");
|
|
||||||
}
|
|
||||||
|
|
||||||
var documentTitle = parentName || (item ? item.Name : null);
|
var documentTitle = parentName || (item ? item.Name : null);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings) {
|
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
@ -188,28 +188,28 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||||
libraryBrowser.showSortMenu({
|
libraryBrowser.showSortMenu({
|
||||||
items: [{
|
items: [{
|
||||||
name: Globalize.translate("OptionNameSort"),
|
name: globalize.translate("OptionNameSort"),
|
||||||
id: "SeriesSortName,SortName"
|
id: "SeriesSortName,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionTvdbRating"),
|
name: globalize.translate("OptionTvdbRating"),
|
||||||
id: "CommunityRating,SeriesSortName,SortName"
|
id: "CommunityRating,SeriesSortName,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDateAdded"),
|
name: globalize.translate("OptionDateAdded"),
|
||||||
id: "DateCreated,SeriesSortName,SortName"
|
id: "DateCreated,SeriesSortName,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionPremiereDate"),
|
name: globalize.translate("OptionPremiereDate"),
|
||||||
id: "PremiereDate,SeriesSortName,SortName"
|
id: "PremiereDate,SeriesSortName,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDatePlayed"),
|
name: globalize.translate("OptionDatePlayed"),
|
||||||
id: "DatePlayed,SeriesSortName,SortName"
|
id: "DatePlayed,SeriesSortName,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionParentalRating"),
|
name: globalize.translate("OptionParentalRating"),
|
||||||
id: "OfficialRating,SeriesSortName,SortName"
|
id: "OfficialRating,SeriesSortName,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionPlayCount"),
|
name: globalize.translate("OptionPlayCount"),
|
||||||
id: "PlayCount,SeriesSortName,SortName"
|
id: "PlayCount,SeriesSortName,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionRuntime"),
|
name: globalize.translate("OptionRuntime"),
|
||||||
id: "Runtime,SeriesSortName,SortName"
|
id: "Runtime,SeriesSortName,SortName"
|
||||||
}],
|
}],
|
||||||
callback: function () {
|
callback: function () {
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-button"], function (events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager) {
|
define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "globalize", "scrollStyles", "emby-itemscontainer", "emby-button"], function (events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getTabs() {
|
function getTabs() {
|
||||||
return [{
|
return [{
|
||||||
name: Globalize.translate("TabShows")
|
name: globalize.translate("TabShows")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabSuggestions")
|
name: globalize.translate("TabSuggestions")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabLatest")
|
name: globalize.translate("TabLatest")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabUpcoming")
|
name: globalize.translate("TabUpcoming")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabGenres")
|
name: globalize.translate("TabGenres")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabNetworks")
|
name: globalize.translate("TabNetworks")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("TabEpisodes")
|
name: globalize.translate("TabEpisodes")
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("ButtonSearch"),
|
name: globalize.translate("ButtonSearch"),
|
||||||
cssClass: "searchTabButton"
|
cssClass: "searchTabButton"
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -314,8 +314,8 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||||
libraryMenu.setTitle(item.Name);
|
libraryMenu.setTitle(item.Name);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
view.setAttribute("data-title", Globalize.translate("TabShows"));
|
view.setAttribute("data-title", globalize.translate("TabShows"));
|
||||||
libraryMenu.setTitle(Globalize.translate("TabShows"));
|
libraryMenu.setTitle(globalize.translate("TabShows"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker, userSettings) {
|
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "userSettings", "globalize", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker, userSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
@ -241,22 +241,22 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||||
libraryBrowser.showSortMenu({
|
libraryBrowser.showSortMenu({
|
||||||
items: [{
|
items: [{
|
||||||
name: Globalize.translate("OptionNameSort"),
|
name: globalize.translate("OptionNameSort"),
|
||||||
id: "SortName"
|
id: "SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionImdbRating"),
|
name: globalize.translate("OptionImdbRating"),
|
||||||
id: "CommunityRating,SortName"
|
id: "CommunityRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDateAdded"),
|
name: globalize.translate("OptionDateAdded"),
|
||||||
id: "DateCreated,SortName"
|
id: "DateCreated,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionDatePlayed"),
|
name: globalize.translate("OptionDatePlayed"),
|
||||||
id: "DatePlayed,SortName"
|
id: "DatePlayed,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionParentalRating"),
|
name: globalize.translate("OptionParentalRating"),
|
||||||
id: "OfficialRating,SortName"
|
id: "OfficialRating,SortName"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionReleaseDate"),
|
name: globalize.translate("OptionReleaseDate"),
|
||||||
id: "PremiereDate,SortName"
|
id: "PremiereDate,SortName"
|
||||||
}],
|
}],
|
||||||
callback: function () {
|
callback: function () {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer"], function (layoutManager, loading, datetime, libraryBrowser, cardBuilder, appHost, imageLoader) {
|
define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder", "apphost", "imageLoader", "globalize", "scrollStyles", "emby-itemscontainer"], function (layoutManager, loading, datetime, libraryBrowser, cardBuilder, appHost, imageLoader, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getUpcomingPromise(context, params) {
|
function getUpcomingPromise(context, params) {
|
||||||
|
@ -52,7 +52,7 @@ define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder",
|
||||||
if (item.PremiereDate) {
|
if (item.PremiereDate) {
|
||||||
try {
|
try {
|
||||||
var premiereDate = datetime.parseISO8601Date(item.PremiereDate, true);
|
var premiereDate = datetime.parseISO8601Date(item.PremiereDate, true);
|
||||||
dateText = datetime.isRelativeDay(premiereDate, -1) ? Globalize.translate("Yesterday") : datetime.toLocaleDateString(premiereDate, {
|
dateText = datetime.isRelativeDay(premiereDate, -1) ? globalize.translate("Yesterday") : datetime.toLocaleDateString(premiereDate, {
|
||||||
weekday: "long",
|
weekday: "long",
|
||||||
month: "short",
|
month: "short",
|
||||||
day: "numeric"
|
day: "numeric"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "emby-button"], function (UserPasswordPage, loading, libraryMenu, appHost) {
|
define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "globalize", "emby-button"], function (UserPasswordPage, loading, libraryMenu, appHost, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function reloadUser(page) {
|
function reloadUser(page) {
|
||||||
|
@ -37,7 +37,7 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "em
|
||||||
switch (evt.target.error.code) {
|
switch (evt.target.error.code) {
|
||||||
case evt.target.error.NOT_FOUND_ERR:
|
case evt.target.error.NOT_FOUND_ERR:
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("FileNotFound"));
|
toast(globalize.translate("FileNotFound"));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case evt.target.error.ABORT_ERR:
|
case evt.target.error.ABORT_ERR:
|
||||||
|
@ -46,7 +46,7 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "em
|
||||||
case evt.target.error.NOT_READABLE_ERR:
|
case evt.target.error.NOT_READABLE_ERR:
|
||||||
default:
|
default:
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("FileReadError"));
|
toast(globalize.translate("FileReadError"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "em
|
||||||
function onFileReaderAbort(evt) {
|
function onFileReaderAbort(evt) {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("FileReadCancelled"));
|
toast(globalize.translate("FileReadCancelled"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "em
|
||||||
new UserPasswordPage(view, params);
|
new UserPasswordPage(view, params);
|
||||||
view.querySelector("#btnDeleteImage").addEventListener("click", function () {
|
view.querySelector("#btnDeleteImage").addEventListener("click", function () {
|
||||||
require(["confirm"], function (confirm) {
|
require(["confirm"], function (confirm) {
|
||||||
confirm(Globalize.translate("DeleteImageConfirmation"), Globalize.translate("DeleteImage")).then(function () {
|
confirm(globalize.translate("DeleteImageConfirmation"), globalize.translate("DeleteImage")).then(function () {
|
||||||
loading.show();
|
loading.show();
|
||||||
var userId = getParameterByName("userId");
|
var userId = getParameterByName("userId");
|
||||||
ApiClient.deleteUserImage(userId, "primary").then(function () {
|
ApiClient.deleteUserImage(userId, "primary").then(function () {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading, libraryMenu) {
|
define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function ($, loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadDeleteFolders(page, user, mediaFolders) {
|
function loadDeleteFolders(page, user, mediaFolders) {
|
||||||
|
@ -112,7 +112,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("SettingsSaved"));
|
toast(globalize.translate("SettingsSaved"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
|
||||||
var currentUser;
|
var currentUser;
|
||||||
$(document).on("pageinit", "#editUserPage", function () {
|
$(document).on("pageinit", "#editUserPage", function () {
|
||||||
$(".editUserProfileForm").off("submit", onSubmit).on("submit", onSubmit);
|
$(".editUserProfileForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||||
this.querySelector(".sharingHelp").innerHTML = Globalize.translate("OptionAllowLinkSharingHelp", 30);
|
this.querySelector(".sharingHelp").innerHTML = globalize.translate("OptionAllowLinkSharingHelp", 30);
|
||||||
var page = this;
|
var page = this;
|
||||||
$("#chkEnableDeleteAllFolders", this).on("change", function () {
|
$("#chkEnableDeleteAllFolders", this).on("change", function () {
|
||||||
if (this.checked) {
|
if (this.checked) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading, libraryMenu) {
|
define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function ($, loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function triggerChange(select) {
|
function triggerChange(select) {
|
||||||
|
@ -9,7 +9,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
|
||||||
|
|
||||||
function loadMediaFolders(page, user, mediaFolders) {
|
function loadMediaFolders(page, user, mediaFolders) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<h3 class="checkboxListLabel">' + Globalize.translate("HeaderLibraries") + "</h3>";
|
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderLibraries") + "</h3>";
|
||||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||||
|
|
||||||
for (var i = 0, length = mediaFolders.length; i < length; i++) {
|
for (var i = 0, length = mediaFolders.length; i < length; i++) {
|
||||||
|
@ -28,7 +28,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
|
||||||
|
|
||||||
function loadChannels(page, user, channels) {
|
function loadChannels(page, user, channels) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<h3 class="checkboxListLabel">' + Globalize.translate("HeaderChannels") + "</h3>";
|
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderChannels") + "</h3>";
|
||||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||||
|
|
||||||
for (var i = 0, length = channels.length; i < length; i++) {
|
for (var i = 0, length = channels.length; i < length; i++) {
|
||||||
|
@ -52,7 +52,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
|
||||||
|
|
||||||
function loadDevices(page, user, devices) {
|
function loadDevices(page, user, devices) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<h3 class="checkboxListLabel">' + Globalize.translate("HeaderDevices") + "</h3>";
|
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderDevices") + "</h3>";
|
||||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||||
|
|
||||||
for (var i = 0, length = devices.length; i < length; i++) {
|
for (var i = 0, length = devices.length; i < length; i++) {
|
||||||
|
@ -85,7 +85,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("SettingsSaved"));
|
toast(globalize.translate("SettingsSaved"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function ($, loading) {
|
define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox"], function ($, loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadMediaFolders(page, mediaFolders) {
|
function loadMediaFolders(page, mediaFolders) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<h3 class="checkboxListLabel">' + Globalize.translate("HeaderLibraries") + "</h3>";
|
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderLibraries") + "</h3>";
|
||||||
html += '<div class="checkboxList paperList" style="padding:.5em 1em;">';
|
html += '<div class="checkboxList paperList" style="padding:.5em 1em;">';
|
||||||
|
|
||||||
for (var i = 0; i < mediaFolders.length; i++) {
|
for (var i = 0; i < mediaFolders.length; i++) {
|
||||||
|
@ -18,7 +18,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function ($, loading
|
||||||
|
|
||||||
function loadChannels(page, channels) {
|
function loadChannels(page, channels) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<h3 class="checkboxListLabel">' + Globalize.translate("HeaderChannels") + "</h3>";
|
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderChannels") + "</h3>";
|
||||||
html += '<div class="checkboxList paperList" style="padding:.5em 1em;">';
|
html += '<div class="checkboxList paperList" style="padding:.5em 1em;">';
|
||||||
|
|
||||||
for (var i = 0; i < channels.length; i++) {
|
for (var i = 0; i < channels.length; i++) {
|
||||||
|
@ -85,7 +85,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function ($, loading
|
||||||
});
|
});
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("DefaultErrorMessage"));
|
toast(globalize.translate("DefaultErrorMessage"));
|
||||||
});
|
});
|
||||||
|
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "datetime", "loading", "libraryMenu", "listViewStyle", "paper-icon-button-light"], function ($, datetime, loading, libraryMenu) {
|
define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewStyle", "paper-icon-button-light"], function ($, datetime, loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function populateRatings(allParentalRatings, page) {
|
function populateRatings(allParentalRatings, page) {
|
||||||
|
@ -35,29 +35,29 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "listViewStyle", "paper-
|
||||||
|
|
||||||
function loadUnratedItems(page, user) {
|
function loadUnratedItems(page, user) {
|
||||||
var items = [{
|
var items = [{
|
||||||
name: Globalize.translate("OptionBlockBooks"),
|
name: globalize.translate("OptionBlockBooks"),
|
||||||
value: "Book"
|
value: "Book"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionBlockChannelContent"),
|
name: globalize.translate("OptionBlockChannelContent"),
|
||||||
value: "ChannelContent"
|
value: "ChannelContent"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionBlockLiveTvChannels"),
|
name: globalize.translate("OptionBlockLiveTvChannels"),
|
||||||
value: "LiveTvChannel"
|
value: "LiveTvChannel"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionBlockMovies"),
|
name: globalize.translate("OptionBlockMovies"),
|
||||||
value: "Movie"
|
value: "Movie"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionBlockMusic"),
|
name: globalize.translate("OptionBlockMusic"),
|
||||||
value: "Music"
|
value: "Music"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionBlockTrailers"),
|
name: globalize.translate("OptionBlockTrailers"),
|
||||||
value: "Trailer"
|
value: "Trailer"
|
||||||
}, {
|
}, {
|
||||||
name: Globalize.translate("OptionBlockTvShows"),
|
name: globalize.translate("OptionBlockTvShows"),
|
||||||
value: "Series"
|
value: "Series"
|
||||||
}];
|
}];
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<h3 class="checkboxListLabel">' + Globalize.translate("HeaderBlockItemsWithNoRating") + "</h3>";
|
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderBlockItemsWithNoRating") + "</h3>";
|
||||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||||
|
|
||||||
for (var i = 0, length = items.length; i < length; i++) {
|
for (var i = 0, length = items.length; i < length; i++) {
|
||||||
|
@ -139,7 +139,7 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "listViewStyle", "paper-
|
||||||
itemHtml += '<div class="liSchedule listItem" data-day="' + a.DayOfWeek + '" data-start="' + a.StartHour + '" data-end="' + a.EndHour + '">';
|
itemHtml += '<div class="liSchedule listItem" data-day="' + a.DayOfWeek + '" data-start="' + a.StartHour + '" data-end="' + a.EndHour + '">';
|
||||||
itemHtml += '<div class="listItemBody two-line">';
|
itemHtml += '<div class="listItemBody two-line">';
|
||||||
itemHtml += '<h3 class="listItemBodyText">';
|
itemHtml += '<h3 class="listItemBodyText">';
|
||||||
itemHtml += Globalize.translate("Option" + a.DayOfWeek);
|
itemHtml += globalize.translate("Option" + a.DayOfWeek);
|
||||||
itemHtml += "</h3>";
|
itemHtml += "</h3>";
|
||||||
itemHtml += '<div class="listItemBodyText secondary">' + getDisplayTime(a.StartHour) + " - " + getDisplayTime(a.EndHour) + "</div>";
|
itemHtml += '<div class="listItemBodyText secondary">' + getDisplayTime(a.StartHour) + " - " + getDisplayTime(a.EndHour) + "</div>";
|
||||||
itemHtml += "</div>";
|
itemHtml += "</div>";
|
||||||
|
@ -159,7 +159,7 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "listViewStyle", "paper-
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("SettingsSaved"));
|
toast(globalize.translate("SettingsSaved"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "listViewStyle", "paper-
|
||||||
function showBlockedTagPopup(page) {
|
function showBlockedTagPopup(page) {
|
||||||
require(["prompt"], function (prompt) {
|
require(["prompt"], function (prompt) {
|
||||||
prompt({
|
prompt({
|
||||||
label: Globalize.translate("LabelTag")
|
label: globalize.translate("LabelTag")
|
||||||
}).then(function (value) {
|
}).then(function (value) {
|
||||||
var tags = getBlockedTagsFromPage(page);
|
var tags = getBlockedTagsFromPage(page);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "libraryMenu", "emby-button"], function (loading, libraryMenu) {
|
define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading, libraryMenu, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadUser(page, params) {
|
function loadUser(page, params) {
|
||||||
|
@ -79,7 +79,7 @@ define(["loading", "libraryMenu", "emby-button"], function (loading, libraryMenu
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("MessageSettingsSaved"));
|
toast(globalize.translate("MessageSettingsSaved"));
|
||||||
});
|
});
|
||||||
|
|
||||||
loadUser(view, params);
|
loadUser(view, params);
|
||||||
|
@ -102,15 +102,15 @@ define(["loading", "libraryMenu", "emby-button"], function (loading, libraryMenu
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("PasswordSaved"));
|
toast(globalize.translate("PasswordSaved"));
|
||||||
});
|
});
|
||||||
|
|
||||||
loadUser(view, params);
|
loadUser(view, params);
|
||||||
}, function () {
|
}, function () {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
title: Globalize.translate("HeaderLoginFailure"),
|
title: globalize.translate("HeaderLoginFailure"),
|
||||||
message: Globalize.translate("MessageInvalidUser")
|
message: globalize.translate("MessageInvalidUser")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,7 @@ define(["loading", "libraryMenu", "emby-button"], function (loading, libraryMenu
|
||||||
|
|
||||||
if (form.querySelector("#txtNewPassword").value != form.querySelector("#txtNewPasswordConfirm").value) {
|
if (form.querySelector("#txtNewPassword").value != form.querySelector("#txtNewPasswordConfirm").value) {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("PasswordMatchError"));
|
toast(globalize.translate("PasswordMatchError"));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
loading.show();
|
loading.show();
|
||||||
|
@ -139,17 +139,17 @@ define(["loading", "libraryMenu", "emby-button"], function (loading, libraryMenu
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetPassword() {
|
function resetPassword() {
|
||||||
var msg = Globalize.translate("PasswordResetConfirmation");
|
var msg = globalize.translate("PasswordResetConfirmation");
|
||||||
|
|
||||||
require(["confirm"], function (confirm) {
|
require(["confirm"], function (confirm) {
|
||||||
confirm(msg, Globalize.translate("PasswordResetHeader")).then(function () {
|
confirm(msg, globalize.translate("PasswordResetHeader")).then(function () {
|
||||||
var userId = params.userId;
|
var userId = params.userId;
|
||||||
loading.show();
|
loading.show();
|
||||||
ApiClient.resetUserPassword(userId).then(function () {
|
ApiClient.resetUserPassword(userId).then(function () {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("PasswordResetComplete"),
|
message: globalize.translate("PasswordResetComplete"),
|
||||||
title: Globalize.translate("PasswordResetHeader")
|
title: globalize.translate("PasswordResetHeader")
|
||||||
});
|
});
|
||||||
loadUser(view, params);
|
loadUser(view, params);
|
||||||
});
|
});
|
||||||
|
@ -158,17 +158,17 @@ define(["loading", "libraryMenu", "emby-button"], function (loading, libraryMenu
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetEasyPassword() {
|
function resetEasyPassword() {
|
||||||
var msg = Globalize.translate("PinCodeResetConfirmation");
|
var msg = globalize.translate("PinCodeResetConfirmation");
|
||||||
|
|
||||||
require(["confirm"], function (confirm) {
|
require(["confirm"], function (confirm) {
|
||||||
confirm(msg, Globalize.translate("HeaderPinCodeReset")).then(function () {
|
confirm(msg, globalize.translate("HeaderPinCodeReset")).then(function () {
|
||||||
var userId = params.userId;
|
var userId = params.userId;
|
||||||
loading.show();
|
loading.show();
|
||||||
ApiClient.resetEasyPassword(userId).then(function () {
|
ApiClient.resetEasyPassword(userId).then(function () {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate("PinCodeResetComplete"),
|
message: globalize.translate("PinCodeResetComplete"),
|
||||||
title: Globalize.translate("HeaderPinCodeReset")
|
title: globalize.translate("HeaderPinCodeReset")
|
||||||
});
|
});
|
||||||
loadUser(view, params);
|
loadUser(view, params);
|
||||||
});
|
});
|
||||||
|
|
|
@ -33,7 +33,7 @@ define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "em
|
||||||
|
|
||||||
if (form.querySelector("#txtManualPassword").value != form.querySelector("#txtPasswordConfirm").value) {
|
if (form.querySelector("#txtManualPassword").value != form.querySelector("#txtPasswordConfirm").value) {
|
||||||
require(["toast"], function (toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("PasswordMatchError"));
|
toast(globalize.translate("PasswordMatchError"));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
submit(form);
|
submit(form);
|
||||||
|
|
|
@ -22,7 +22,7 @@ define([], function () {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userAgent.indexOf('webos') !== -1) {
|
if (userAgent.indexOf('web0s') !== -1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -887,6 +887,16 @@ define(['browser'], function (browser) {
|
||||||
Method: 'External'
|
Method: 'External'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (options.enableSsaRender) {
|
||||||
|
profile.SubtitleProfiles.push({
|
||||||
|
Format: 'ass',
|
||||||
|
Method: 'External'
|
||||||
|
});
|
||||||
|
profile.SubtitleProfiles.push({
|
||||||
|
Format: 'ssa',
|
||||||
|
Method: 'External'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
profile.ResponseProfiles = [];
|
profile.ResponseProfiles = [];
|
||||||
profile.ResponseProfiles.push({
|
profile.ResponseProfiles.push({
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["datetime", "jQuery", "material-icons"], function (datetime, $) {
|
define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime, $, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getNode(item, folderState, selected) {
|
function getNode(item, folderState, selected) {
|
||||||
|
@ -70,7 +70,7 @@ define(["datetime", "jQuery", "material-icons"], function (datetime, $) {
|
||||||
var nodes = [];
|
var nodes = [];
|
||||||
nodes.push({
|
nodes.push({
|
||||||
id: "MediaFolders",
|
id: "MediaFolders",
|
||||||
text: Globalize.translate("HeaderMediaFolders"),
|
text: globalize.translate("HeaderMediaFolders"),
|
||||||
state: {
|
state: {
|
||||||
opened: true
|
opened: true
|
||||||
},
|
},
|
||||||
|
@ -83,7 +83,7 @@ define(["datetime", "jQuery", "material-icons"], function (datetime, $) {
|
||||||
if (result.TotalRecordCount) {
|
if (result.TotalRecordCount) {
|
||||||
nodes.push({
|
nodes.push({
|
||||||
id: "livetv",
|
id: "livetv",
|
||||||
text: Globalize.translate("HeaderLiveTV"),
|
text: globalize.translate("HeaderLiveTV"),
|
||||||
state: {
|
state: {
|
||||||
opened: false
|
opened: false
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryBrowser", "emby-itemscontainer", "emby-button"], function (connectionManager, listView, cardBuilder, imageLoader, libraryBrowser) {
|
define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryBrowser", "globalize", "emby-itemscontainer", "emby-button"], function (connectionManager, listView, cardBuilder, imageLoader, libraryBrowser, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function renderItems(page, item) {
|
function renderItems(page, item) {
|
||||||
|
@ -6,56 +6,56 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
|
|
||||||
if (item.ArtistCount) {
|
if (item.ArtistCount) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabArtists"),
|
name: globalize.translate("TabArtists"),
|
||||||
type: "MusicArtist"
|
type: "MusicArtist"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.ProgramCount && "Person" == item.Type) {
|
if (item.ProgramCount && "Person" == item.Type) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("HeaderUpcomingOnTV"),
|
name: globalize.translate("HeaderUpcomingOnTV"),
|
||||||
type: "Program"
|
type: "Program"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.MovieCount) {
|
if (item.MovieCount) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabMovies"),
|
name: globalize.translate("TabMovies"),
|
||||||
type: "Movie"
|
type: "Movie"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.SeriesCount) {
|
if (item.SeriesCount) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabShows"),
|
name: globalize.translate("TabShows"),
|
||||||
type: "Series"
|
type: "Series"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.EpisodeCount) {
|
if (item.EpisodeCount) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabEpisodes"),
|
name: globalize.translate("TabEpisodes"),
|
||||||
type: "Episode"
|
type: "Episode"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.TrailerCount) {
|
if (item.TrailerCount) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabTrailers"),
|
name: globalize.translate("TabTrailers"),
|
||||||
type: "Trailer"
|
type: "Trailer"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.AlbumCount) {
|
if (item.AlbumCount) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabAlbums"),
|
name: globalize.translate("TabAlbums"),
|
||||||
type: "MusicAlbum"
|
type: "MusicAlbum"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.MusicVideoCount) {
|
if (item.MusicVideoCount) {
|
||||||
sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabMusicVideos"),
|
name: globalize.translate("TabMusicVideos"),
|
||||||
type: "MusicVideo"
|
type: "MusicVideo"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">';
|
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">';
|
||||||
html += section.name;
|
html += section.name;
|
||||||
html += "</h2>";
|
html += "</h2>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + Globalize.translate("ButtonMore") + "</button></a>";
|
html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + globalize.translate("ButtonMore") + "</button></a>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right">';
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["userSettings"], function (userSettings) {
|
define(["userSettings", "globalize"], function (userSettings, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var libraryBrowser = {
|
var libraryBrowser = {
|
||||||
|
@ -45,7 +45,7 @@ define(["userSettings"], function (userSettings) {
|
||||||
|
|
||||||
var menuItems = views.map(function (v) {
|
var menuItems = views.map(function (v) {
|
||||||
return {
|
return {
|
||||||
name: Globalize.translate("Option" + v),
|
name: globalize.translate("Option" + v),
|
||||||
id: v,
|
id: v,
|
||||||
selected: currentLayout == v
|
selected: currentLayout == v
|
||||||
};
|
};
|
||||||
|
@ -83,7 +83,7 @@ define(["userSettings"], function (userSettings) {
|
||||||
|
|
||||||
if (html += '<div class="listPaging">', showControls) {
|
if (html += '<div class="listPaging">', showControls) {
|
||||||
html += '<span style="vertical-align:middle;">';
|
html += '<span style="vertical-align:middle;">';
|
||||||
html += Globalize.translate("ListPaging", (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount);
|
html += globalize.translate("ListPaging", (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount);
|
||||||
html += "</span>";
|
html += "</span>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,15 +96,15 @@ define(["userSettings"], function (userSettings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.addLayoutButton) {
|
if (options.addLayoutButton) {
|
||||||
html += '<button is="paper-icon-button-light" title="' + Globalize.translate("ButtonSelectView") + '" class="btnChangeLayout autoSize" data-layouts="' + (options.layouts || "") + '" onclick="LibraryBrowser.showLayoutMenu(this, \'' + (options.currentLayout || "") + '\');"><i class="material-icons view_comfy"></i></button>';
|
html += '<button is="paper-icon-button-light" title="' + globalize.translate("ButtonSelectView") + '" class="btnChangeLayout autoSize" data-layouts="' + (options.layouts || "") + '" onclick="LibraryBrowser.showLayoutMenu(this, \'' + (options.currentLayout || "") + '\');"><i class="material-icons view_comfy"></i></button>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.sortButton) {
|
if (options.sortButton) {
|
||||||
html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + Globalize.translate("ButtonSort") + '"><i class="material-icons sort_by_alpha"></i></button>';
|
html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + globalize.translate("ButtonSort") + '"><i class="material-icons sort_by_alpha"></i></button>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.filterButton) {
|
if (options.filterButton) {
|
||||||
html += '<button is="paper-icon-button-light" class="btnFilter autoSize" title="' + Globalize.translate("ButtonFilter") + '"><i class="material-icons filter_list"></i></button>';
|
html += '<button is="paper-icon-button-light" class="btnFilter autoSize" title="' + globalize.translate("ButtonFilter") + '"><i class="material-icons filter_list"></i></button>';
|
||||||
}
|
}
|
||||||
|
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
|
@ -154,7 +154,7 @@ define(["userSettings"], function (userSettings) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<div style="margin:0;padding:1.25em 1.5em 1.5em;">';
|
html += '<div style="margin:0;padding:1.25em 1.5em 1.5em;">';
|
||||||
html += '<h2 style="margin:0 0 .5em;">';
|
html += '<h2 style="margin:0 0 .5em;">';
|
||||||
html += Globalize.translate("HeaderSortBy");
|
html += globalize.translate("HeaderSortBy");
|
||||||
html += "</h2>";
|
html += "</h2>";
|
||||||
var i;
|
var i;
|
||||||
var length;
|
var length;
|
||||||
|
@ -169,13 +169,13 @@ define(["userSettings"], function (userSettings) {
|
||||||
|
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += '<h2 style="margin: 1em 0 .5em;">';
|
html += '<h2 style="margin: 1em 0 .5em;">';
|
||||||
html += Globalize.translate("HeaderSortOrder");
|
html += globalize.translate("HeaderSortOrder");
|
||||||
html += "</h2>";
|
html += "</h2>";
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
isChecked = "Ascending" == options.query.SortOrder ? " checked" : "";
|
isChecked = "Ascending" == options.query.SortOrder ? " checked" : "";
|
||||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Ascending" class="menuSortOrder" ' + isChecked + " /><span>" + Globalize.translate("OptionAscending") + "</span></label>";
|
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Ascending" class="menuSortOrder" ' + isChecked + " /><span>" + globalize.translate("OptionAscending") + "</span></label>";
|
||||||
isChecked = "Descending" == options.query.SortOrder ? " checked" : "";
|
isChecked = "Descending" == options.query.SortOrder ? " checked" : "";
|
||||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Descending" class="menuSortOrder" ' + isChecked + " /><span>" + Globalize.translate("OptionDescending") + "</span></label>";
|
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Descending" class="menuSortOrder" ' + isChecked + " /><span>" + globalize.translate("OptionDescending") + "</span></label>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
dlg.innerHTML = html;
|
dlg.innerHTML = html;
|
||||||
|
|
|
@ -12,7 +12,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableAutoLogin(val) {
|
export function enableAutoLogin(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
this.set('enableAutoLogin', val.toString());
|
this.set('enableAutoLogin', val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableSystemExternalPlayers(val) {
|
export function enableSystemExternalPlayers(val) {
|
||||||
if (val !== null) {
|
if (val !== undefined) {
|
||||||
this.set('enableSystemExternalPlayers', val.toString());
|
this.set('enableSystemExternalPlayers', val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ import events from 'events';
|
||||||
|
|
||||||
export function enableAutomaticBitrateDetection(isInNetwork, mediaType, val) {
|
export function enableAutomaticBitrateDetection(isInNetwork, mediaType, val) {
|
||||||
var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork;
|
var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork;
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
if (isInNetwork && mediaType === 'Audio') {
|
if (isInNetwork && mediaType === 'Audio') {
|
||||||
val = true;
|
val = true;
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ import events from 'events';
|
||||||
|
|
||||||
export function maxStreamingBitrate(isInNetwork, mediaType, val) {
|
export function maxStreamingBitrate(isInNetwork, mediaType, val) {
|
||||||
var key = 'maxbitrate-' + mediaType + '-' + isInNetwork;
|
var key = 'maxbitrate-' + mediaType + '-' + isInNetwork;
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
if (isInNetwork && mediaType === 'Audio') {
|
if (isInNetwork && mediaType === 'Audio') {
|
||||||
// nothing to do, this is always a max value
|
// nothing to do, this is always a max value
|
||||||
} else {
|
} else {
|
||||||
|
@ -72,7 +72,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function maxChromecastBitrate(val) {
|
export function maxChromecastBitrate(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
this.set('chromecastBitrate1', val);
|
this.set('chromecastBitrate1', val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function syncOnlyOnWifi(val) {
|
export function syncOnlyOnWifi(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
this.set('syncOnlyOnWifi', val.toString());
|
this.set('syncOnlyOnWifi', val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function syncPath(val) {
|
export function syncPath(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
this.set('syncPath', val);
|
this.set('syncPath', val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function cameraUploadServers(val) {
|
export function cameraUploadServers(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
this.set('cameraUploadServers', val.join(','));
|
this.set('cameraUploadServers', val.join(','));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function runAtStartup(val) {
|
export function runAtStartup(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
this.set('runatstartup', val.toString());
|
this.set('runatstartup', val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableCinemaMode(val) {
|
export function enableCinemaMode(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('enableCinemaMode', val.toString(), false);
|
return this.set('enableCinemaMode', val.toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableNextVideoInfoOverlay(val) {
|
export function enableNextVideoInfoOverlay(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('enableNextVideoInfoOverlay', val.toString());
|
return this.set('enableNextVideoInfoOverlay', val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableThemeSongs(val) {
|
export function enableThemeSongs(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('enableThemeSongs', val.toString(), false);
|
return this.set('enableThemeSongs', val.toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableThemeVideos(val) {
|
export function enableThemeVideos(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('enableThemeVideos', val.toString(), false);
|
return this.set('enableThemeVideos', val.toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableFastFadein(val) {
|
export function enableFastFadein(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('fastFadein', val.toString(), false);
|
return this.set('fastFadein', val.toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableBackdrops(val) {
|
export function enableBackdrops(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('enableBackdrops', val.toString(), false);
|
return this.set('enableBackdrops', val.toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function language(val) {
|
export function language(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('language', val.toString(), false);
|
return this.set('language', val.toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function dateTimeLocale(val) {
|
export function dateTimeLocale(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('datetimelocale', val.toString(), false);
|
return this.set('datetimelocale', val.toString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function skipBackLength(val) {
|
export function skipBackLength(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('skipBackLength', val.toString());
|
return this.set('skipBackLength', val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function skipForwardLength(val) {
|
export function skipForwardLength(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('skipForwardLength', val.toString());
|
return this.set('skipForwardLength', val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function dashboardTheme(val) {
|
export function dashboardTheme(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('dashboardTheme', val);
|
return this.set('dashboardTheme', val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function skin(val) {
|
export function skin(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('skin', val, false);
|
return this.set('skin', val, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function theme(val) {
|
export function theme(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('appTheme', val, false);
|
return this.set('appTheme', val, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function screensaver(val) {
|
export function screensaver(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('screensaver', val, false);
|
return this.set('screensaver', val, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function libraryPageSize(val) {
|
export function libraryPageSize(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('libraryPageSize', parseInt(val, 10), false);
|
return this.set('libraryPageSize', parseInt(val, 10), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function soundEffects(val) {
|
export function soundEffects(val) {
|
||||||
if (val != null) {
|
if (val !== undefined) {
|
||||||
return this.set('soundeffects', val, false);
|
return this.set('soundeffects', val, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,5 +11,8 @@ function getConfig() {
|
||||||
export function enableMultiServer() {
|
export function enableMultiServer() {
|
||||||
return getConfig().then(config => {
|
return getConfig().then(config => {
|
||||||
return config.multiserver;
|
return config.multiserver;
|
||||||
|
}).catch(error => {
|
||||||
|
console.log("cannot get web config:", error);
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -709,6 +709,7 @@ var AppInfo = {};
|
||||||
onError: onRequireJsError
|
onError: onRequireJsError
|
||||||
});
|
});
|
||||||
|
|
||||||
|
require(["fetch"]);
|
||||||
require(["polyfill"]);
|
require(["polyfill"]);
|
||||||
require(["fast-text-encoding"]);
|
require(["fast-text-encoding"]);
|
||||||
require(["intersection-observer"]);
|
require(["intersection-observer"]);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["events", "userSettings", "serverNotifications", "connectionManager", "emby-button"], function (events, userSettings, serverNotifications, connectionManager) {
|
define(["events", "userSettings", "serverNotifications", "connectionManager", "globalize", "emby-button"], function (events, userSettings, serverNotifications, connectionManager, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
return function (options) {
|
return function (options) {
|
||||||
|
@ -48,11 +48,11 @@ define(["events", "userSettings", "serverNotifications", "connectionManager", "e
|
||||||
var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : '';
|
var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : '';
|
||||||
|
|
||||||
if (lastResult == "Failed") {
|
if (lastResult == "Failed") {
|
||||||
options.lastResultElem.html('<span style="color:#FF0000;">(' + Globalize.translate('LabelFailed') + ')</span>');
|
options.lastResultElem.html('<span style="color:#FF0000;">(' + globalize.translate('LabelFailed') + ')</span>');
|
||||||
} else if (lastResult == "Cancelled") {
|
} else if (lastResult == "Cancelled") {
|
||||||
options.lastResultElem.html('<span style="color:#0026FF;">(' + Globalize.translate('LabelCancelled') + ')</span>');
|
options.lastResultElem.html('<span style="color:#0026FF;">(' + globalize.translate('LabelCancelled') + ')</span>');
|
||||||
} else if (lastResult == "Aborted") {
|
} else if (lastResult == "Aborted") {
|
||||||
options.lastResultElem.html('<span style="color:#FF0000;">' + Globalize.translate('LabelAbortedByServerShutdown') + '</span>');
|
options.lastResultElem.html('<span style="color:#FF0000;">' + globalize.translate('LabelAbortedByServerShutdown') + '</span>');
|
||||||
} else {
|
} else {
|
||||||
options.lastResultElem.html(lastResult);
|
options.lastResultElem.html(lastResult);
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,17 +86,17 @@
|
||||||
"ChannelAccessHelp": "Изберете каналите, които да споделите с потребителя. Администраторите ще могат да редактират всички канали, използвайки управлението на метаданни.",
|
"ChannelAccessHelp": "Изберете каналите, които да споделите с потребителя. Администраторите ще могат да редактират всички канали, използвайки управлението на метаданни.",
|
||||||
"Collections": "Колекции",
|
"Collections": "Колекции",
|
||||||
"ColorSpace": "Цветово пространство",
|
"ColorSpace": "Цветово пространство",
|
||||||
"CommunityRating": "Обществена ощенка",
|
"CommunityRating": "Рейтинг на общността",
|
||||||
"Composer": "Съчинител",
|
"Composer": "Съчинител",
|
||||||
"ConfirmDeleteImage": "Изтриване на изображението?",
|
"ConfirmDeleteImage": "Изтриване на изображението?",
|
||||||
"ContinueWatching": "Продължаване на гледането",
|
"ContinueWatching": "Продължи гледането",
|
||||||
"Continuing": "Продължаващо",
|
"Continuing": "Продължаващо",
|
||||||
"CriticRating": "Оценка на критиците",
|
"CriticRating": "Оценка на критиците",
|
||||||
"DateAdded": "Дата на добавяне",
|
"DateAdded": "Дата на добавяне",
|
||||||
"DatePlayed": "Дата на пускане",
|
"DatePlayed": "Дата на пускане",
|
||||||
"DeathDateValue": "Починал/а на: {0}",
|
"DeathDateValue": "Починал/а на: {0}",
|
||||||
"Default": "По подразбиране",
|
"Default": "По подразбиране",
|
||||||
"Delete": "Изтриване",
|
"Delete": "Премахване",
|
||||||
"DeleteMedia": "Изтриване на медията",
|
"DeleteMedia": "Изтриване на медията",
|
||||||
"Desktop": "Работен плот",
|
"Desktop": "Работен плот",
|
||||||
"DeviceAccessHelp": "Това се отнася само за устройства, които могат да бъдат различени и няма да попречи на достъп от мрежов четец. Филтрирането на потребителски устройства ще предотврати използването им докато не бъдат одобрени тук.",
|
"DeviceAccessHelp": "Това се отнася само за устройства, които могат да бъдат различени и няма да попречи на достъп от мрежов четец. Филтрирането на потребителски устройства ще предотврати използването им докато не бъдат одобрени тук.",
|
||||||
|
@ -305,7 +305,7 @@
|
||||||
"LabelCustomCertificatePath": "Път към потребителския сертификат:",
|
"LabelCustomCertificatePath": "Път към потребителския сертификат:",
|
||||||
"LabelCustomCertificatePathHelp": "Път до файл с шифровъчен стандарт №12 (PKCS #12), съдържащ сертификат и частен ключ за поддръжка на протокол TLS на собствен домейн.",
|
"LabelCustomCertificatePathHelp": "Път до файл с шифровъчен стандарт №12 (PKCS #12), съдържащ сертификат и частен ключ за поддръжка на протокол TLS на собствен домейн.",
|
||||||
"LabelCustomCss": "CSS по избор:",
|
"LabelCustomCss": "CSS по избор:",
|
||||||
"LabelCustomCssHelp": "Добавете собствен стил за Уеб-интерфейса.",
|
"LabelCustomCssHelp": "Добавете собствен стил към уеб-интерфейса.",
|
||||||
"LabelCustomDeviceDisplayName": "Показвано име:",
|
"LabelCustomDeviceDisplayName": "Показвано име:",
|
||||||
"LabelCustomRating": "Оценка по избор:",
|
"LabelCustomRating": "Оценка по избор:",
|
||||||
"LabelDashboardTheme": "Облик на сървърното табло:",
|
"LabelDashboardTheme": "Облик на сървърното табло:",
|
||||||
|
@ -836,7 +836,7 @@
|
||||||
"AddItemToCollectionHelp": "Добавяне към колекция чрез търсенето им и използване на дясно-щракване с мишката или контекстното меню.",
|
"AddItemToCollectionHelp": "Добавяне към колекция чрез търсенето им и използване на дясно-щракване с мишката или контекстното меню.",
|
||||||
"Absolute": "Aбсолютен",
|
"Absolute": "Aбсолютен",
|
||||||
"LabelLanNetworks": "Локални мрежи:",
|
"LabelLanNetworks": "Локални мрежи:",
|
||||||
"LabelKodiMetadataSaveImagePathsHelp": "Това е препоръчително ако имате изображения, пътят към които не е съобразен с изискванията на Kodi",
|
"LabelKodiMetadataSaveImagePathsHelp": "Това е препоръчително, ако наименованието на изображенията не са съобразени с изискванията на Kodi.",
|
||||||
"LabelKodiMetadataSaveImagePaths": "Записване на пътеките към изображенията в nfo файловете",
|
"LabelKodiMetadataSaveImagePaths": "Записване на пътеките към изображенията в nfo файловете",
|
||||||
"LabelChannels": "Канали:",
|
"LabelChannels": "Канали:",
|
||||||
"DropShadow": "Сянка",
|
"DropShadow": "Сянка",
|
||||||
|
@ -882,6 +882,26 @@
|
||||||
"BurnSubtitlesHelp": "Определя дали сървърът трябва да записва субтитри във видеоклиповете припрекодиране. Избягването на това значително ще подобри производителността. Изберете Auto, за да запишете формати, базирани на изображения (VOBSUB, PGS, SUB, IDX) и някои ASS или SSA субтитри.",
|
"BurnSubtitlesHelp": "Определя дали сървърът трябва да записва субтитри във видеоклиповете припрекодиране. Избягването на това значително ще подобри производителността. Изберете Auto, за да запишете формати, базирани на изображения (VOBSUB, PGS, SUB, IDX) и някои ASS или SSA субтитри.",
|
||||||
"AllowFfmpegThrottlingHelp": "Когато прекодирането или запазването на видео стигне достатъчно далеч напред от текущата позиция за възпроизвеждане, поставете на пауза процеса, така ще се изразходват по-малко ресурси. Това е най-полезно, когато се гледа, без да се търси често из видеото. Изключете това, ако имате проблеми с възпроизвеждането.",
|
"AllowFfmpegThrottlingHelp": "Когато прекодирането или запазването на видео стигне достатъчно далеч напред от текущата позиция за възпроизвеждане, поставете на пауза процеса, така ще се изразходват по-малко ресурси. Това е най-полезно, когато се гледа, без да се търси често из видеото. Изключете това, ако имате проблеми с възпроизвеждането.",
|
||||||
"AllowOnTheFlySubtitleExtractionHelp": "Вградените субтитри могат да бъдат извлечени от видеоклиповете и прехвърлени към клиентите като обикновен текст, за да се предотврати транскодирането на видеото. В някои системи това може да отнеме много време и да спре възпроизвеждането на видео по време на процеса на извличане. Деактивирайте това, за да има вградени субтитри, записани с видео кодиране, когато те не се поддържат от клиентското устройство.",
|
"AllowOnTheFlySubtitleExtractionHelp": "Вградените субтитри могат да бъдат извлечени от видеоклиповете и прехвърлени към клиентите като обикновен текст, за да се предотврати транскодирането на видеото. В някои системи това може да отнеме много време и да спре възпроизвеждането на видео по време на процеса на извличане. Деактивирайте това, за да има вградени субтитри, записани с видео кодиране, когато те не се поддържат от клиентското устройство.",
|
||||||
"CinemaModeConfigurationHelp": "Режимът на кино носи театрално изживяване направо във вашата всекидневна с възможност за пускане на трейлъри и персонализирани интродукции преди основния видеоклип.",
|
"CinemaModeConfigurationHelp": "Режимът на кино носи театрално изживяване направо във вашата всекидневна с възможност за пускане на трейлъри и персонализирани интродукции преди основния филм.",
|
||||||
"ChangingMetadataImageSettingsNewContent": "Промените в настройките за изтегляне на метаданни или изображения ще се прилагат само за ново съдържание, добавено към вашата библиотека. За да приложите промените към съществуващите заглавия, ще трябва да обновите метаданните им ръчно."
|
"ChangingMetadataImageSettingsNewContent": "Промените в настройките за изтегляне на метаданни или изображения ще се прилагат само за ново съдържание, добавено към вашата библиотека. За да приложите промените към съществуващите заглавия, ще трябва да обновите метаданните им ръчно.",
|
||||||
|
"DefaultMetadataLangaugeDescription": "Това са настройки по подразбиране и могат да се променят на база библиотека.",
|
||||||
|
"DefaultErrorMessage": "Възникна грешка при изпълнение на заявката. Моля опитайте по-късно.",
|
||||||
|
"CustomDlnaProfilesHelp": "Създаване на персонализиран профил за целево устройство или заменяне на системния профил.",
|
||||||
|
"CopyStreamURL": "Копиране URL на стрийма",
|
||||||
|
"CopyStreamURLError": "Възникна грешка при копиране на URL.",
|
||||||
|
"CopyStreamURLSuccess": "URL се копира успешно.",
|
||||||
|
"Connect": "Свързване",
|
||||||
|
"ConfirmEndPlayerSession": "Искате ли да изключите Jellyfin на {0}?",
|
||||||
|
"ConfirmDeletion": "Потвърждаване на изтриването",
|
||||||
|
"ConfirmDeleteItem": "Изтриването на елемента ще го премахне едновременно от файловата система и библиотеката. Сигурни ли сте, че искате да продължите?",
|
||||||
|
"ConfigureDateAdded": "Конфигурацията на добавянето на датата се определя в панела на Jellyfin сървъра в секцията за настройка на библиотека",
|
||||||
|
"ConfirmDeleteItems": "Изтриването на елементите ще ги премахне едновременно от файловата система и библиотеката. Сигурни ли сте, че искате да продължите?",
|
||||||
|
"ColorTransfer": "Предаване на цвета",
|
||||||
|
"ColorPrimaries": "Основни цветове",
|
||||||
|
"DeleteUserConfirmation": "Сигурнили сте че искате да премахнете този потребител?",
|
||||||
|
"DeleteUser": "Премахване на потребител",
|
||||||
|
"DeleteImageConfirmation": "Сигурнили сте че искате да премахнете това Изображение?",
|
||||||
|
"DeleteImage": "Премахване на Исображение",
|
||||||
|
"ButtonTogglePlaylist": "Списък с изпълнения",
|
||||||
|
"ButtonToggleContextMenu": "Повече"
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
"AllChannels": "Alle kanaler",
|
"AllChannels": "Alle kanaler",
|
||||||
"AllEpisodes": "Alle episoder",
|
"AllEpisodes": "Alle episoder",
|
||||||
"AllLibraries": "Alle biblioteker",
|
"AllLibraries": "Alle biblioteker",
|
||||||
"AllowHWTranscodingHelp": "Lader tuneren omkode streams on-the-fly. Dette kan hjælpe med at reducere omkodning der kræves af serveren.",
|
"AllowHWTranscodingHelp": "Tillader tuneren at omkode streaming on-the-fly. Dette kan hjælpe med at reducere belastning af serveren på grund af yderligere omkodning.",
|
||||||
"AllowMediaConversion": "Tillad media konvertering",
|
"AllowMediaConversion": "Tillad media konvertering",
|
||||||
"AllowMediaConversionHelp": "Giv eller nægt adgang til Konvertér Media featuren.",
|
"AllowMediaConversionHelp": "Giv eller nægt adgang til Konvertér Media featuren.",
|
||||||
"AllowOnTheFlySubtitleExtraction": "Tillad udtræk af undertekster on-the-fly",
|
"AllowOnTheFlySubtitleExtraction": "Tillad udtræk af undertekster on-the-fly",
|
||||||
|
@ -1539,7 +1539,7 @@
|
||||||
"Album": "Album",
|
"Album": "Album",
|
||||||
"EveryHour": "Hver time",
|
"EveryHour": "Hver time",
|
||||||
"EveryXMinutes": "Hvert {0} minut",
|
"EveryXMinutes": "Hvert {0} minut",
|
||||||
"OnWakeFromSleep": "Når du vågner fra søvn",
|
"OnWakeFromSleep": "Ved vækning fra dvale",
|
||||||
"WeeklyAt": "{0}s ved {1}",
|
"WeeklyAt": "{0}s ved {1}",
|
||||||
"DailyAt": "Dagligt kl. {0}",
|
"DailyAt": "Dagligt kl. {0}",
|
||||||
"LastSeen": "Sidst set {0}",
|
"LastSeen": "Sidst set {0}",
|
||||||
|
@ -1633,9 +1633,11 @@
|
||||||
"ClientSettings": "Klient Indstillinger",
|
"ClientSettings": "Klient Indstillinger",
|
||||||
"ButtonSplit": "Opdel",
|
"ButtonSplit": "Opdel",
|
||||||
"BoxSet": "Box Set",
|
"BoxSet": "Box Set",
|
||||||
"AuthProviderHelp": "Vælg en godkendelse udbyder, der skal bruges til at godkende denne brugers adgangskode.",
|
"AuthProviderHelp": "Vælg en godkendelses udbyder, der kan bruges til at godkende denne brugers adgangskode.",
|
||||||
"AskAdminToCreateLibrary": "Spørg en administrator om at oprette et bibliotek.",
|
"AskAdminToCreateLibrary": "Spørg en administrator om at oprette et bibliotek.",
|
||||||
"Artist": "Artist",
|
"Artist": "Artist",
|
||||||
"EveryXHours": "Hver {0} time",
|
"EveryXHours": "Hver {0} time",
|
||||||
"OnApplicationStartup": "Ved programstart"
|
"OnApplicationStartup": "Ved programstart",
|
||||||
|
"UnsupportedPlayback": "Jellyfin kan ikke dekryptere indhold, der er beskyttet af DRM, men alt indhold vil blive forsøgt afspillet uanset, inklusive beskyttede titler. Nogle filer kan eventuelt vises med sort skærm på grund af kryptering eller andre funktioner, der ikke understøttes, såsom interaktive titler.",
|
||||||
|
"MessageUnauthorizedUser": "Du har ikke tilladelse til at tilgå serveren på dette tidspunkt. Kontakt din serveradministrator for mere information."
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
"AllLibraries": "Όλες οι βιβλιοθήκες",
|
"AllLibraries": "Όλες οι βιβλιοθήκες",
|
||||||
"AllowRemoteAccess": "Να επιτρέπονται οι απομακρυσμένες συνδέσεις σε αυτόν το διακομιστή Jellyfin.",
|
"AllowRemoteAccess": "Να επιτρέπονται οι απομακρυσμένες συνδέσεις σε αυτόν το διακομιστή Jellyfin.",
|
||||||
"AllowRemoteAccessHelp": "Εάν δεν επιλεχθεί, όλες οι απομακρυσμένες συνδέσεις θα αποκλειστούν.",
|
"AllowRemoteAccessHelp": "Εάν δεν επιλεχθεί, όλες οι απομακρυσμένες συνδέσεις θα αποκλειστούν.",
|
||||||
"AlwaysPlaySubtitles": "Πάντα αναπαραγωγή Υποτίτλων",
|
"AlwaysPlaySubtitles": "Παίξτε πάντα",
|
||||||
"AlwaysPlaySubtitlesHelp": "Οι υπότιτλοι που ταιριάζουν με τις προτιμήσεις γλώσσας θα φορτωθούν ανεξάρτητα από τη γλώσσα του ήχου.",
|
"AlwaysPlaySubtitlesHelp": "Οι υπότιτλοι που ταιριάζουν με τις προτιμήσεις γλώσσας θα φορτωθούν ανεξάρτητα από τη γλώσσα του ήχου.",
|
||||||
"AnyLanguage": "Οποιαδήποτε γλώσσα",
|
"AnyLanguage": "Οποιαδήποτε γλώσσα",
|
||||||
"Anytime": "Οποτεδήποτε",
|
"Anytime": "Οποτεδήποτε",
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
"Artists": "Καλλιτέχνες",
|
"Artists": "Καλλιτέχνες",
|
||||||
"AsManyAsPossible": "Οσο το δυνατον περισσοτερα",
|
"AsManyAsPossible": "Οσο το δυνατον περισσοτερα",
|
||||||
"Ascending": "Αύξουσα",
|
"Ascending": "Αύξουσα",
|
||||||
"AspectRatio": "Αρχικός λόγος διαστάσεων",
|
"AspectRatio": "Αναλογία απεικόνισης",
|
||||||
"AttributeNew": "Νέο",
|
"AttributeNew": "Νέο",
|
||||||
"Audio": "Ήχος",
|
"Audio": "Ήχος",
|
||||||
"Auto": "Αυτόματο",
|
"Auto": "Αυτόματο",
|
||||||
|
@ -1224,6 +1224,14 @@
|
||||||
"LabelServerName": "Όνομα Διακομιστή:",
|
"LabelServerName": "Όνομα Διακομιστή:",
|
||||||
"ButtonAddImage": "Προσθήκη Εικόνας",
|
"ButtonAddImage": "Προσθήκη Εικόνας",
|
||||||
"BoxRear": "Κουτί(πίσω)",
|
"BoxRear": "Κουτί(πίσω)",
|
||||||
"BookLibraryHelp": "Ήχος και βιβλία υποστηρίζονται.Ελέγξτε τον {0}ονομαστικό οδηγό βιβλίων{1}.",
|
"BookLibraryHelp": "Υποστήριξη ήχου και βιβλίων κειμένου. Εξετάστε τον {0}οδηγό ονομάτων βιβλίου{1}.",
|
||||||
"AuthProviderHelp": "Επιλέξτε ένα Πάροχο Επαλήθευσης για να επαληθεύσετε το κωδικό αυτού του χρήστη."
|
"AuthProviderHelp": "Επιλέξτε ένα Πάροχο Επαλήθευσης για να επαληθεύσετε το κωδικό αυτού του χρήστη.",
|
||||||
|
"AllowFfmpegThrottling": "Επιτάχυνση Διακωδικοποιησής",
|
||||||
|
"AlbumArtist": "Άλμπουμ Καλλιτέχνη",
|
||||||
|
"Album": "Άλμπουμ",
|
||||||
|
"BoxSet": "Σετ Κουτιού",
|
||||||
|
"AskAdminToCreateLibrary": "Ζητήστε από έναν διαχειριστή να δημιουργήσει μια βιβλιοθήκη.",
|
||||||
|
"Artist": "Καλλιτέχνης",
|
||||||
|
"AllowedRemoteAddressesHelp": "Λίστα διαχωρισμένων διευθύνσεων IP ή καταχωρίσεων IP / netmask για δίκτυα που θα επιτρέπεται η σύνδεση εξ αποστάσεως. Εάν αφεθεί κενό, όλες οι απομακρυσμένες διευθύνσεις θα επιτρέπονται.",
|
||||||
|
"AllowFfmpegThrottlingHelp": "Όταν ένας διακωδικοποιητής ή remux φτάσει αρκετά μπροστά από την τρέχουσα θέση αναπαραγωγής, διακόψτε τη διαδικασία ώστε να καταναλώσει λιγότερους πόρους. Αυτό είναι πιο χρήσιμο όταν παρακολουθείτε χωρίς να αναζητάτε συχνά. Απενεργοποιήστε το εάν αντιμετωπίζετε προβλήματα αναπαραγωγής."
|
||||||
}
|
}
|
||||||
|
|
|
@ -385,6 +385,7 @@
|
||||||
"HeaderFavoriteArtists": "Favourite Artists",
|
"HeaderFavoriteArtists": "Favourite Artists",
|
||||||
"HeaderFavoriteSongs": "Favourite Songs",
|
"HeaderFavoriteSongs": "Favourite Songs",
|
||||||
"HeaderFavoriteVideos": "Favourite Videos",
|
"HeaderFavoriteVideos": "Favourite Videos",
|
||||||
|
"HeaderFavoritePlaylists": "Favourite Playlists",
|
||||||
"HeaderFeatureAccess": "Feature Access",
|
"HeaderFeatureAccess": "Feature Access",
|
||||||
"HeaderFeatures": "Features",
|
"HeaderFeatures": "Features",
|
||||||
"HeaderFetchImages": "Fetch Images:",
|
"HeaderFetchImages": "Fetch Images:",
|
||||||
|
@ -527,6 +528,8 @@
|
||||||
"Smart": "Smart",
|
"Smart": "Smart",
|
||||||
"SimultaneousConnectionLimitHelp": "The maximum number of allowed simultaneous streams. Enter 0 for no limit.",
|
"SimultaneousConnectionLimitHelp": "The maximum number of allowed simultaneous streams. Enter 0 for no limit.",
|
||||||
"Shuffle": "Shuffle",
|
"Shuffle": "Shuffle",
|
||||||
|
"New": "New",
|
||||||
|
"Filter": "Filter",
|
||||||
"ShowYear": "Show year",
|
"ShowYear": "Show year",
|
||||||
"ShowIndicatorsFor": "Show indicators for:",
|
"ShowIndicatorsFor": "Show indicators for:",
|
||||||
"ShowAdvancedSettings": "Show advanced settings",
|
"ShowAdvancedSettings": "Show advanced settings",
|
||||||
|
|
|
@ -137,6 +137,8 @@
|
||||||
"ButtonSplit": "Split",
|
"ButtonSplit": "Split",
|
||||||
"ButtonSubmit": "Submit",
|
"ButtonSubmit": "Submit",
|
||||||
"ButtonSubtitles": "Subtitles",
|
"ButtonSubtitles": "Subtitles",
|
||||||
|
"ButtonToggleContextMenu": "More",
|
||||||
|
"ButtonTogglePlaylist": "Playlist",
|
||||||
"ButtonTrailer": "Trailer",
|
"ButtonTrailer": "Trailer",
|
||||||
"ButtonUninstall": "Uninstall",
|
"ButtonUninstall": "Uninstall",
|
||||||
"ButtonUp": "Up",
|
"ButtonUp": "Up",
|
||||||
|
@ -368,6 +370,7 @@
|
||||||
"HeaderFavoriteArtists": "Favorite Artists",
|
"HeaderFavoriteArtists": "Favorite Artists",
|
||||||
"HeaderFavoriteSongs": "Favorite Songs",
|
"HeaderFavoriteSongs": "Favorite Songs",
|
||||||
"HeaderFavoriteVideos": "Favorite Videos",
|
"HeaderFavoriteVideos": "Favorite Videos",
|
||||||
|
"HeaderFavoritePlaylists": "Favorite Playlists",
|
||||||
"HeaderFeatureAccess": "Feature Access",
|
"HeaderFeatureAccess": "Feature Access",
|
||||||
"HeaderFeatures": "Features",
|
"HeaderFeatures": "Features",
|
||||||
"HeaderFetchImages": "Fetch Images:",
|
"HeaderFetchImages": "Fetch Images:",
|
||||||
|
@ -1335,6 +1338,8 @@
|
||||||
"ShowYear": "Show year",
|
"ShowYear": "Show year",
|
||||||
"Shows": "Shows",
|
"Shows": "Shows",
|
||||||
"Shuffle": "Shuffle",
|
"Shuffle": "Shuffle",
|
||||||
|
"New": "New",
|
||||||
|
"Filter": "Filter",
|
||||||
"SimultaneousConnectionLimitHelp": "The maximum number of allowed simultaneous streams. Enter 0 for no limit.",
|
"SimultaneousConnectionLimitHelp": "The maximum number of allowed simultaneous streams. Enter 0 for no limit.",
|
||||||
"SkipEpisodesAlreadyInMyLibrary": "Don't record episodes that are already in my library",
|
"SkipEpisodesAlreadyInMyLibrary": "Don't record episodes that are already in my library",
|
||||||
"SkipEpisodesAlreadyInMyLibraryHelp": "Episodes will be compared using season and episode numbers, when available.",
|
"SkipEpisodesAlreadyInMyLibraryHelp": "Episodes will be compared using season and episode numbers, when available.",
|
||||||
|
|
|
@ -499,5 +499,6 @@
|
||||||
"HeaderDeleteItems": "Eliminar ítems",
|
"HeaderDeleteItems": "Eliminar ítems",
|
||||||
"HeaderDeleteItem": "Eliminar ítem",
|
"HeaderDeleteItem": "Eliminar ítem",
|
||||||
"HeaderDeleteDevice": "Eliminar dispositivo",
|
"HeaderDeleteDevice": "Eliminar dispositivo",
|
||||||
"HeaderDefaultRecordingSettings": "Ajustes de grabación por defecto"
|
"HeaderDefaultRecordingSettings": "Ajustes de grabación por defecto",
|
||||||
|
"UnsupportedPlayback": "Jellyfin no puede descifrar contenido protegido por DRM pero a pesar de esto lo intentará con todo el contenido, incluyendo títulos protegidos. Algunos archivos pueden aparecer completamente en negro por estar cifrados o por otras características no soportadas, como títulos interactivos."
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue