Merge remote-tracking branch 'upstream/master' into vertical-menu
This commit is contained in:
commit
6b79bd4921
132 changed files with 1513 additions and 767 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
|
||||||
|
|
3
.github/CODEOWNERS
vendored
Normal file
3
.github/CODEOWNERS
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Joshua must review all changes to deployment and build.sh
|
||||||
|
deployment/* @joshuaboniface
|
||||||
|
build.sh @joshuaboniface
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -3,8 +3,9 @@ config.json
|
||||||
|
|
||||||
# npm
|
# npm
|
||||||
dist
|
dist
|
||||||
|
web
|
||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
# ide
|
# ide
|
||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
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",
|
||||||
|
@ -90,10 +90,10 @@
|
||||||
"test": [
|
"test": [
|
||||||
"src/components/autoFocuser.js",
|
"src/components/autoFocuser.js",
|
||||||
"src/components/cardbuilder/cardBuilder.js",
|
"src/components/cardbuilder/cardBuilder.js",
|
||||||
"src/components/dom.js",
|
"src/scripts/dom.js",
|
||||||
"src/components/filedownloader.js",
|
"src/components/filedownloader.js",
|
||||||
"src/components/filesystem.js",
|
"src/components/filesystem.js",
|
||||||
"src/components/input/keyboardnavigation.js",
|
"src/scripts/keyboardnavigation.js",
|
||||||
"src/components/sanatizefilename.js",
|
"src/components/sanatizefilename.js",
|
||||||
"src/components/scrollManager.js",
|
"src/components/scrollManager.js",
|
||||||
"src/scripts/settings/appSettings.js",
|
"src/scripts/settings/appSettings.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(),
|
||||||
cssnano()
|
autoprefixer(),
|
||||||
]
|
cssnano()
|
||||||
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = config
|
module.exports = config;
|
||||||
|
|
|
@ -8,9 +8,8 @@
|
||||||
<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/plugins/index.html">${Help}</a>
|
<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/plugins/index.html">${Help}</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p id="tagline" style="font-style: italic;"></p>
|
<p id="overview" style="font-style: italic;"></p>
|
||||||
<p id="pPreviewImage"></p>
|
<p id="description"></p>
|
||||||
<p id="overview"></p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="verticalSection">
|
<div class="verticalSection">
|
||||||
|
@ -28,7 +27,6 @@
|
||||||
</button>
|
</button>
|
||||||
<div class="fieldDescription">${ServerRestartNeededAfterPluginInstall}</div>
|
<div class="fieldDescription">${ServerRestartNeededAfterPluginInstall}</div>
|
||||||
</div>
|
</div>
|
||||||
<p id="nonServerMsg"></p>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,9 +35,6 @@
|
||||||
<div is="emby-collapse" title="${HeaderDeveloperInfo}">
|
<div is="emby-collapse" title="${HeaderDeveloperInfo}">
|
||||||
<div class="collapseContent">
|
<div class="collapseContent">
|
||||||
<p id="developer"></p>
|
<p id="developer"></p>
|
||||||
<p id="pViewWebsite" style="display: none;">
|
|
||||||
<a is="emby-linkbutton" class="button-link" href="#" target="_blank">${ButtonViewWebsite}</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
@ -328,10 +328,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 +346,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", '<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;
|
||||||
|
@ -243,9 +243,9 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
|
||||||
return function (items) {
|
return function (items) {
|
||||||
var cardLayout = false;
|
var cardLayout = false;
|
||||||
var shape;
|
var shape;
|
||||||
if (itemType === 'Channel' || viewType === 'movies' || viewType === 'books') {
|
if (itemType === 'Channel' || viewType === 'movies' || viewType === 'books' || viewType === 'tvshows') {
|
||||||
shape = getPortraitShape();
|
shape = getPortraitShape();
|
||||||
} else if (viewType === 'music') {
|
} else if (viewType === 'music' || viewType === 'homevideos') {
|
||||||
shape = getSquareShape();
|
shape = getSquareShape();
|
||||||
} else {
|
} else {
|
||||||
shape = getThumbShape();
|
shape = getThumbShape();
|
||||||
|
|
|
@ -795,7 +795,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
dlg.parentNode.removeChild(dlg);
|
dlg.parentNode.removeChild(dlg);
|
||||||
}
|
}
|
||||||
|
|
||||||
screenfull.exit();
|
if (screenfull.isEnabled) {
|
||||||
|
screenfull.exit();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function onEnded() {
|
function onEnded() {
|
||||||
|
|
|
@ -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"
|
||||||
});
|
});
|
||||||
|
|
|
@ -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"
|
||||||
});
|
});
|
||||||
|
|
|
@ -20,9 +20,11 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
|
||||||
}
|
}
|
||||||
|
|
||||||
function bindToFullscreenChange(player) {
|
function bindToFullscreenChange(player) {
|
||||||
screenfull.on('change', function () {
|
if (screenfull.isEnabled) {
|
||||||
events.trigger(player, 'fullscreenchange');
|
screenfull.on('change', function () {
|
||||||
});
|
events.trigger(player, 'fullscreenchange');
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function triggerPlayerChange(playbackManagerInstance, newPlayer, newTarget, previousPlayer, previousTargetInfo) {
|
function triggerPlayerChange(playbackManagerInstance, newPlayer, newTarget, previousPlayer, previousTargetInfo) {
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
if (typeof Object.assign != 'function') {
|
|
||||||
(function () {
|
|
||||||
Object.assign = function (target) {
|
|
||||||
'use strict';
|
|
||||||
if (target === undefined || target === null) {
|
|
||||||
throw new TypeError('Cannot convert undefined or null to object');
|
|
||||||
}
|
|
||||||
|
|
||||||
var output = Object(target);
|
|
||||||
for (var index = 1; index < arguments.length; index++) {
|
|
||||||
var source = arguments[index];
|
|
||||||
if (source !== undefined && source !== null) {
|
|
||||||
for (var nextKey in source) {
|
|
||||||
// eslint-disable-next-line no-prototype-builtins
|
|
||||||
if (source.hasOwnProperty(nextKey)) {
|
|
||||||
output[nextKey] = source[nextKey];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
})();
|
|
||||||
}
|
|
|
@ -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")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,8 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||||
|
|
||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++) {
|
||||||
var version = packageInfo.versions[i];
|
var version = packageInfo.versions[i];
|
||||||
html += '<h2 style="margin:.5em 0;">' + version.versionStr + " (" + version.classification + ")</h2>";
|
html += '<h2 style="margin:.5em 0;">' + version.version + "</h2>";
|
||||||
html += '<div style="margin-bottom:1.5em;">' + version.description + "</div>";
|
html += '<div style="margin-bottom:1.5em;">' + version.changelog + "</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#revisionHistory", page).html(html);
|
$("#revisionHistory", page).html(html);
|
||||||
|
@ -19,7 +19,7 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||||
|
|
||||||
for (var i = 0; i < packageInfo.versions.length; i++) {
|
for (var i = 0; i < packageInfo.versions.length; i++) {
|
||||||
var version = packageInfo.versions[i];
|
var version = packageInfo.versions[i];
|
||||||
html += '<option value="' + version.versionStr + "|" + version.classification + '">' + version.versionStr + " (" + version.classification + ")</option>";
|
html += '<option value="' + version.version + '">' + version.version + "</option>";
|
||||||
}
|
}
|
||||||
|
|
||||||
var selectmenu = $("#selectVersion", page).html(html);
|
var selectmenu = $("#selectVersion", page).html(html);
|
||||||
|
@ -28,16 +28,9 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||||
$("#pCurrentVersion", page).hide().html("");
|
$("#pCurrentVersion", page).hide().html("");
|
||||||
}
|
}
|
||||||
|
|
||||||
var packageVersion = packageInfo.versions.filter(function (current) {
|
var packageVersion = packageInfo.versions[0];
|
||||||
return "Release" == current.classification;
|
|
||||||
})[0];
|
|
||||||
packageVersion = packageVersion || packageInfo.versions.filter(function (current) {
|
|
||||||
return "Beta" == current.classification;
|
|
||||||
})[0];
|
|
||||||
|
|
||||||
if (packageVersion) {
|
if (packageVersion) {
|
||||||
var val = packageVersion.versionStr + "|" + packageVersion.classification;
|
selectmenu.val(packageVersion.version);
|
||||||
selectmenu.val(val);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,44 +38,23 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||||
var installedPlugin = installedPlugins.filter(function (ip) {
|
var installedPlugin = installedPlugins.filter(function (ip) {
|
||||||
return ip.Name == pkg.name;
|
return ip.Name == pkg.name;
|
||||||
})[0];
|
})[0];
|
||||||
|
|
||||||
populateVersions(pkg, page, installedPlugin);
|
populateVersions(pkg, page, installedPlugin);
|
||||||
populateHistory(pkg, page);
|
populateHistory(pkg, page);
|
||||||
|
|
||||||
$(".pluginName", page).html(pkg.name);
|
$(".pluginName", page).html(pkg.name);
|
||||||
|
$("#btnInstallDiv", page).removeClass("hide");
|
||||||
|
$("#pSelectVersion", page).removeClass("hide");
|
||||||
|
|
||||||
if ("Server" == pkg.targetSystem) {
|
if (pkg.overview) {
|
||||||
$("#btnInstallDiv", page).removeClass("hide");
|
$("#overview", page).show().html(pkg.overview);
|
||||||
$("#nonServerMsg", page).hide();
|
|
||||||
$("#pSelectVersion", page).removeClass("hide");
|
|
||||||
} else {
|
} else {
|
||||||
$("#btnInstallDiv", page).addClass("hide");
|
$("#overview", page).hide();
|
||||||
$("#pSelectVersion", page).addClass("hide");
|
|
||||||
var msg = globalize.translate("MessageInstallPluginFromApp");
|
|
||||||
$("#nonServerMsg", page).html(msg).show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pkg.shortDescription) {
|
$("#description", page).html(pkg.description);
|
||||||
$("#tagline", page).show().html(pkg.shortDescription);
|
|
||||||
} else {
|
|
||||||
$("#tagline", page).hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
$("#overview", page).html(pkg.overview || "");
|
|
||||||
$("#developer", page).html(pkg.owner);
|
$("#developer", page).html(pkg.owner);
|
||||||
|
|
||||||
if (pkg.richDescUrl) {
|
|
||||||
$("#pViewWebsite", page).show();
|
|
||||||
$("#pViewWebsite a", page).attr("href", pkg.richDescUrl);
|
|
||||||
} else {
|
|
||||||
$("#pViewWebsite", page).hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pkg.previewImage || pkg.thumbImage) {
|
|
||||||
var img = pkg.previewImage ? pkg.previewImage : pkg.thumbImage;
|
|
||||||
$("#pPreviewImage", page).show().html("<img class='pluginPreviewImg' src='" + img + "' style='max-width: 100%;' />");
|
|
||||||
} else {
|
|
||||||
$("#pPreviewImage", page).hide().html("");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (installedPlugin) {
|
if (installedPlugin) {
|
||||||
var currentVersionText = globalize.translate("MessageYouHaveVersionInstalled", "<strong>" + installedPlugin.Version + "</strong>");
|
var currentVersionText = globalize.translate("MessageYouHaveVersionInstalled", "<strong>" + installedPlugin.Version + "</strong>");
|
||||||
$("#pCurrentVersion", page).show().html(currentVersionText);
|
$("#pCurrentVersion", page).show().html(currentVersionText);
|
||||||
|
|
|
@ -98,21 +98,14 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
||||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
||||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||||
html += '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + href + '"' + target + ">";
|
html += '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + href + '"' + target + ">";
|
||||||
|
html += '<i class="cardImageIcon material-icons">folder</i>';
|
||||||
if (plugin.thumbImage) {
|
|
||||||
html += '<div class="cardImage coveredImage" style="background-image:url(\'' + plugin.thumbImage + "');\">";
|
|
||||||
html += "</div>";
|
|
||||||
} else {
|
|
||||||
html += '<i class="cardImageIcon material-icons">folder</i>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += "</a>";
|
html += "</a>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += '<div class="cardFooter">';
|
html += '<div class="cardFooter">';
|
||||||
html += "<div class='cardText'>";
|
html += "<div class='cardText'>";
|
||||||
html += plugin.name;
|
html += plugin.name;
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) {
|
var installedPlugin = installedPlugins.filter(function (ip) {
|
||||||
return ip.Id == plugin.guid;
|
return ip.Id == plugin.guid;
|
||||||
})[0];
|
})[0];
|
||||||
html += "<div class='cardText cardText-secondary'>";
|
html += "<div class='cardText cardText-secondary'>";
|
||||||
|
|
|
@ -42,14 +42,7 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||||
html += '<div class="cardScalable">';
|
html += '<div class="cardScalable">';
|
||||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||||
html += configPageUrl ? '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + configPageUrl + '">' : '<div class="cardContent noConfigPluginCard noHoverEffect cardImageContainer">';
|
html += configPageUrl ? '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + configPageUrl + '">' : '<div class="cardContent noConfigPluginCard noHoverEffect cardImageContainer">';
|
||||||
|
html += '<i class="cardImageIcon material-icons">folder</i>';
|
||||||
if (plugin.ImageUrl) {
|
|
||||||
html += '<div class="cardImage coveredImage" style="background-image:url(\'' + plugin.ImageUrl + "');\">";
|
|
||||||
html += "</div>";
|
|
||||||
} else {
|
|
||||||
html += '<i class="cardImageIcon material-icons">folder</i>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += configPageUrl ? "</a>" : "</div>";
|
html += configPageUrl ? "</a>" : "</div>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += '<div class="cardFooter">';
|
html += '<div class="cardFooter">';
|
||||||
|
@ -57,7 +50,7 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||||
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><i class="material-icons more_vert"></i></button>';
|
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><i class="material-icons more_vert"></i></button>';
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += "<div class='cardText'>";
|
html += "<div class='cardText'>";
|
||||||
html += configPage ? configPage.DisplayName || plugin.Name : plugin.Name;
|
html += configPage.DisplayName || plugin.Name;
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += "<div class='cardText cardText-secondary'>";
|
html += "<div class='cardText cardText-secondary'>";
|
||||||
html += plugin.Version;
|
html += plugin.Version;
|
||||||
|
|
|
@ -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")
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 () {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
|
|
||||||
.button-link {
|
.button-link {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
|
cursor: pointer;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
vertical-align: initial;
|
vertical-align: initial;
|
||||||
|
|
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