1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge remote-tracking branch 'upstream/master' into exit_on_back2

Conflicts:
	src/components/apphost.js
This commit is contained in:
Dmitry Lyzo 2020-01-27 17:47:19 +03:00
commit ddf7eae55b
136 changed files with 4985 additions and 2523 deletions

View file

@ -57,3 +57,7 @@ jobs:
- script: 'yarn run lint' - script: 'yarn run lint'
displayName: 'Run ESLint' displayName: 'Run ESLint'
- script: |
yarn run stylelint
displayName: 'Run stylelint'

143
.stylelintrc Normal file
View file

@ -0,0 +1,143 @@
{
"plugins": [
"stylelint-no-browser-hacks/lib",
],
"rules": {
"at-rule-empty-line-before": [ "always", {
except: [
"blockless-after-same-name-blockless",
"first-nested",
],
ignore: ["after-comment"],
} ],
"at-rule-name-case": "lower",
"at-rule-name-space-after": "always-single-line",
"at-rule-no-unknown": true,
"at-rule-semicolon-newline-after": "always",
"block-closing-brace-empty-line-before": "never",
"block-closing-brace-newline-after": "always",
"block-closing-brace-newline-before": "always-multi-line",
"block-closing-brace-space-before": "always-single-line",
"block-no-empty": true,
"block-opening-brace-newline-after": "always-multi-line",
"block-opening-brace-space-after": "always-single-line",
"block-opening-brace-space-before": "always",
"color-hex-case": "lower",
"color-hex-length": "short",
"color-no-invalid-hex": true,
"comment-empty-line-before": [ "always", {
except: ["first-nested"],
ignore: ["stylelint-commands"],
} ],
"comment-no-empty": true,
"comment-whitespace-inside": "always",
"custom-property-empty-line-before": [ "always", {
except: [
"after-custom-property",
"first-nested",
],
ignore: [
"after-comment",
"inside-single-line-block",
],
} ],
"declaration-bang-space-after": "never",
"declaration-bang-space-before": "always",
"declaration-block-no-duplicate-properties": [
true,
{
ignore: ["consecutive-duplicates-with-different-values"]
}
],
"declaration-block-no-shorthand-property-overrides": true,
"declaration-block-semicolon-newline-after": "always-multi-line",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-block-semicolon-space-before": "never",
"declaration-block-single-line-max-declarations": 1,
"declaration-block-trailing-semicolon": "always",
"declaration-colon-newline-after": "always-multi-line",
"declaration-colon-space-after": "always-single-line",
"declaration-colon-space-before": "never",
"font-family-no-duplicate-names": true,
"function-calc-no-invalid": true,
"function-calc-no-unspaced-operator": true,
"function-comma-newline-after": "always-multi-line",
"function-comma-space-after": "always-single-line",
"function-comma-space-before": "never",
"function-linear-gradient-no-nonstandard-direction": true,
"function-max-empty-lines": 0,
"function-name-case": "lower",
"function-parentheses-newline-inside": "always-multi-line",
"function-parentheses-space-inside": "never-single-line",
"function-whitespace-after": "always",
"indentation": 4,
"keyframe-declaration-no-important": true,
"length-zero-no-unit": true,
"max-empty-lines": 1,
"media-feature-colon-space-after": "always",
"media-feature-colon-space-before": "never",
"media-feature-name-case": "lower",
"media-feature-name-no-unknown": true,
"media-feature-parentheses-space-inside": "never",
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "always",
"media-query-list-comma-newline-after": "always-multi-line",
"media-query-list-comma-space-after": "always-single-line",
"media-query-list-comma-space-before": "never",
"no-descending-specificity": true,
"no-duplicate-at-import-rules": true,
"no-duplicate-selectors": true,
"no-empty-source": true,
"no-eol-whitespace": true,
"no-extra-semicolons": true,
"no-invalid-double-slash-comments": true,
"no-missing-end-of-source-newline": true,
"number-leading-zero": "always",
"number-no-trailing-zeros": true,
"plugin/no-browser-hacks": true,
"property-case": "lower",
"property-no-unknown": [
true,
{
"ignoreProperties": [
"user-drag"
]
}
],
"rule-empty-line-before": [ "always-multi-line", {
except: ["first-nested"],
ignore: ["after-comment"],
} ],
"selector-attribute-brackets-space-inside": "never",
"selector-attribute-operator-space-after": "never",
"selector-attribute-operator-space-before": "never",
"selector-combinator-space-after": "always",
"selector-combinator-space-before": "always",
"selector-descendant-combinator-no-non-space": true,
"selector-list-comma-newline-after": "always",
"selector-list-comma-space-before": "never",
"selector-max-empty-lines": 0,
"selector-pseudo-class-case": "lower",
"selector-pseudo-class-no-unknown": true,
"selector-pseudo-class-parentheses-space-inside": "never",
"selector-pseudo-element-case": "lower",
"selector-pseudo-element-colon-notation": "double",
"selector-pseudo-element-no-unknown": [
true,
{
"ignorePseudoElements": [
"cue"
]
}
],
"selector-type-case": "lower",
"selector-type-no-unknown": true,
"string-no-newline": true,
"unit-case": "lower",
"unit-no-unknown": true,
"value-list-comma-newline-after": "always-multi-line",
"value-list-comma-space-after": "always-single-line",
"value-list-comma-space-before": "never",
"value-list-max-empty-lines": 0,
}
}

View file

@ -5,15 +5,17 @@
"repository": "https://github.com/jellyfin/jellyfin-web", "repository": "https://github.com/jellyfin/jellyfin-web",
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"devDependencies": { "devDependencies": {
"autoprefixer": "^9.7.3",
"clean-webpack-plugin": "^3.0.0", "clean-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^5.1.1", "copy-webpack-plugin": "^5.1.1",
"css-loader": "^2.1.0", "css-loader": "^2.1.0",
"eslint": "^5.16.0", "eslint": "^5.16.0",
"file-loader": "^3.0.1", "file-loader": "^3.0.1",
"html-webpack-plugin": "^3.2.0", "html-webpack-plugin": "^3.2.0",
"postcss-loader": "^3.0.0",
"style-loader": "^0.23.1", "style-loader": "^0.23.1",
"stylelint": "^13.0.0",
"stylelint-config-rational-order": "^0.1.2",
"stylelint-no-browser-hacks": "^1.2.1",
"stylelint-order": "^4.0.0",
"webpack": "^4.41.0", "webpack": "^4.41.0",
"webpack-cli": "^3.3.9", "webpack-cli": "^3.3.9",
"webpack-concat-plugin": "^3.0.0", "webpack-concat-plugin": "^3.0.0",
@ -28,6 +30,7 @@
"howler": "^2.1.2", "howler": "^2.1.2",
"jquery": "^3.4.1", "jquery": "^3.4.1",
"jstree": "^3.3.7", "jstree": "^3.3.7",
"libass-wasm": "^2.1.1",
"libjass": "^0.11.0", "libjass": "^0.11.0",
"native-promise-only": "^0.8.0-a", "native-promise-only": "^0.8.0-a",
"requirejs": "^2.3.5", "requirejs": "^2.3.5",
@ -35,7 +38,6 @@
"shaka-player": "^2.5.5", "shaka-player": "^2.5.5",
"sortablejs": "^1.9.0", "sortablejs": "^1.9.0",
"swiper": "^3.4.2", "swiper": "^3.4.2",
"libass-wasm": "^2.1.1",
"webcomponents.js": "^0.7.24", "webcomponents.js": "^0.7.24",
"whatwg-fetch": "^1.1.1" "whatwg-fetch": "^1.1.1"
}, },
@ -51,13 +53,13 @@
"Chrome 53", "Chrome 53",
"Chrome 56", "Chrome 56",
"Chrome 63", "Chrome 63",
"Explorer 11",
"Firefox ESR" "Firefox ESR"
], ],
"scripts": { "scripts": {
"serve": "webpack-dev-server --config webpack.dev.js --open", "serve": "webpack-dev-server --config webpack.dev.js --open",
"build": "webpack --config webpack.prod.js", "build": "webpack --config webpack.prod.js",
"lint": "eslint \"src\"", "lint": "eslint \"src\"",
"stylelint": "stylelint src/**/*.css",
"prepare": "webpack --config webpack.prod.js" "prepare": "webpack --config webpack.prod.js"
} }
} }

View file

@ -1,5 +0,0 @@
module.exports = {
plugins: [
require('autoprefixer')
]
}

View file

@ -1,262 +1,314 @@
.dashboardColumn, .dashboardColumn,
.dashboardSections { .dashboardSections {
flex-direction: column; flex-direction: column;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
} }
.dashboardFooter { .dashboardFooter {
margin-top: 3.5em; margin-top: 3.5em;
text-align: center text-align: center;
} }
.dashboardFooter a { .dashboardFooter a {
margin: 0 .7em margin: 0 0.7em;
} }
progress { progress {
appearance: none; appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
margin: 0; margin: 0;
background: #ccc !important background: #ccc !important;
} }
progress[role]:after { progress[role]::after {
background-image: none background-image: none;
} }
progress::-webkit-progress-bar { progress::-webkit-progress-bar {
background: #ccc background: #ccc;
} }
progress::-moz-progress-bar { progress::-moz-progress-bar {
background-color: #00a4dc background-color: #00a4dc;
} }
progress::-webkit-progress-value { progress::-webkit-progress-value {
background-color: #00a4dc background-color: #00a4dc;
} }
progress[aria-valuenow]:before { progress[aria-valuenow]::before {
border-radius: .4em; border-radius: 0.4em;
background-color: #00a4dc background-color: #00a4dc;
} }
.localnav { .localnav {
margin-bottom: 2.2em !important margin-bottom: 2.2em !important;
} }
@media all and (min-width:50em) { @media all and (min-width: 50em) {
.type-interior > div[data-role=content],
.type-interior>.ui-panel-content-wrap>div[data-role=content], .type-interior > .ui-panel-content-wrap > div[data-role=content] {
.type-interior>div[data-role=content] {
padding-right: 0; padding-right: 0;
padding-left: 0; padding-left: 0;
padding-top: 0; padding-top: 0;
overflow: hidden overflow: hidden;
} }
} }
.dashboardDocument .dashboardEntryHeaderButton, .dashboardDocument .dashboardEntryHeaderButton,
.dashboardDocument .lnkManageServer { .dashboardDocument .lnkManageServer {
display: none !important display: none !important;
} }
.adminDrawerLogo { .adminDrawerLogo {
padding: 1.5em 1em 1.2em; padding: 1.5em 1em 1.2em;
border-bottom: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0;
margin-bottom: 1em; margin-bottom: 1em;
display: block display: block;
} }
.adminDrawerLogo img { .adminDrawerLogo img {
height: 4em height: 4em;
}
a[data-role=button] {
background: #292929 !important;
background-clip: padding-box;
-webkit-font-smoothing: antialiased;
-webkit-user-select: none;
-webkit-background-clip: padding-box;
cursor: pointer !important;
font-family: inherit !important;
font-weight: 500 !important;
margin: 0 0.25em !important;
display: inline-block;
padding: 0.8em 1em;
text-align: center;
text-decoration: none !important;
} }
div[data-role=controlgroup] a[data-role=button] { div[data-role=controlgroup] a[data-role=button] {
display: inline-block !important; display: inline-block !important;
margin: 0 !important; margin: 0 !important;
-webkit-box-shadow: none !important;
box-shadow: none !important; box-shadow: none !important;
border-radius: 0 -webkit-border-radius: 0;
border-radius: 0;
} }
div[data-role=controlgroup] a[data-role=button]:first-child { div[data-role=controlgroup] a[data-role=button]:first-child {
border-bottom-left-radius: .3125em; -webkit-border-bottom-left-radius: 0.3125em;
border-top-left-radius: .3125em border-bottom-left-radius: 0.3125em;
-webkit-border-top-left-radius: 0.3125em;
border-top-left-radius: 0.3125em;
} }
div[data-role=controlgroup] a[data-role=button]:last-child { div[data-role=controlgroup] a[data-role=button]:last-child {
border-bottom-right-radius: .3125em; -webkit-border-bottom-right-radius: 0.3125em;
border-top-right-radius: .3125em border-bottom-right-radius: 0.3125em;
-webkit-border-top-right-radius: 0.3125em;
border-top-right-radius: 0.3125em;
} }
div[data-role=controlgroup] a[data-role=button]+a[data-role=button] { div[data-role=controlgroup] a[data-role=button] + a[data-role=button] {
border-left-width: 0 !important; border-left-width: 0 !important;
margin: 0 0 0 -.4em !important margin: 0 0 0 -0.4em !important;
} }
div[data-role=controlgroup] a.ui-btn-active { div[data-role=controlgroup] a.ui-btn-active {
background: #00a4dc !important; background: #00a4dc !important;
color: #292929 !important color: #292929 !important;
} }
.header .imageLink { .sessionAppInfo img {
display: inline-block max-width: 40px;
max-height: 40px;
margin-right: 8px;
} }
.header .imageLink img { .appLinks img {
height: 2.1em; height: 36px;
vertical-align: middle
}
.content-primary {
padding-top: 6em;
padding-right: 1em;
padding-left: 1em
}
.withTabs .content-primary {
padding-top: 9em !important
}
@media all and (min-width:40em) {
.content-primary {
padding-top: 7em
}
.withTabs .content-primary {
padding-top: 10em !important
}
}
@media all and (min-width:84em) {
.withTabs .content-primary {
padding-top: 7em !important
}
}
.content-primary ul:first-child {
margin-top: 0
}
.dashboardSections {
display: flex;
flex-direction: column
}
.dashboardColumn {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 1
}
.activeSession:not(.playingSession) .sessionNowPlayingContent {
display: none
}
.dashboardSection {
flex-shrink: 0;
margin: 0 0 2em
}
.dashboardSection h3 {
margin-top: .5em;
margin-bottom: .5em
}
.activeRecordingItems>.card {
width: 50%
}
@media all and (min-width:70em) {
.dashboardSections {
flex-wrap: wrap;
flex-direction: row
}
.dashboardColumn-2-60 {
width: 46%
}
.dashboardColumn-2-40 {
width: 27%
}
.dashboardSection {
padding: 0 1.5em
}
.activeRecordingItems>.card {
width: 25%
}
}
.premiumBanner img {
position: absolute;
text-align: right;
top: 0;
right: 0;
width: 4.4em;
height: 4.4em
}
.wizardContent {
max-width: 62em;
padding: .5em 2em 1em;
margin: 0 auto;
background: #fff
}
.wizardNavigation {
text-align: right
}
.wizardContent form {
max-width: 100%
} }
.wizardContent h2 img { .wizardContent h2 img {
height: 2.5em; height: 2.5em;
vertical-align: middle; vertical-align: middle;
margin-right: .5em; margin-right: 0.5em;
position: relative; position: relative;
top: -.3em top: -0.3em;
} }
.scheduledTaskPaperIconItem { .header .imageLink {
outline: 0 !important display: inline-block;
} }
.activeSession { .header .imageLink img {
width: 100% !important height: 2.1em;
vertical-align: middle;
} }
.activitylogUserPhoto { .content-primary {
height:1.71em; padding-top: 6em;
width:1.71em; padding-right: 1em;
border-radius:100%; padding-left: 1em;
margin-right:.5em;
background-size:cover;
background-repeat:no-repeat;
background-position:center;
} }
@media all and (min-width:40em) { .withTabs .content-primary {
.activeSession { padding-top: 9em !important;
width: 100% !important }
@media all and (min-width: 40em) {
.content-primary {
padding-top: 7em;
}
.withTabs .content-primary {
padding-top: 10em !important;
} }
} }
@media all and (min-width:50em) { @media all and (min-width: 84em) {
.withTabs .content-primary {
padding-top: 7em !important;
}
}
.content-primary ul:first-child {
margin-top: 0;
}
.dashboardSections {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
flex-direction: column;
}
.dashboardColumn {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
flex-direction: column;
-webkit-flex-shrink: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
}
.sessionNowPlayingContent {
-webkit-background-size: cover;
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.activeSession:not(.playingSession) .sessionNowPlayingContent {
display: none;
}
.dashboardSection {
-webkit-flex-shrink: 0;
flex-shrink: 0;
margin: 0 0 2em;
}
.dashboardSection h3 {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.activeRecordingItems > .card {
width: 50%;
}
@media all and (min-width: 70em) {
.dashboardSections {
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
flex-direction: row;
}
.dashboardColumn-2-60 {
width: 46%;
}
.dashboardColumn-2-40 {
width: 27%;
}
.dashboardSection {
padding: 0 1.5em;
}
.activeRecordingItems > .card {
width: 25%;
}
}
.wizardContent {
max-width: 62em;
padding: 0.5em 2em 1em;
margin: 0 auto;
background: #fff;
}
.wizardNavigation {
text-align: right;
}
.wizardContent form {
max-width: 100%;
}
.scheduledTaskPaperIconItem {
outline: 0 !important;
}
.activeSession {
width: 100% !important;
}
.activitylogUserPhoto {
height: 1.71em;
width: 1.71em;
border-radius: 100%;
margin-right: 0.5em;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
@media all and (min-width: 40em) {
.activeSession { .activeSession {
width: 50% !important width: 100% !important;
}
}
@media all and (min-width: 50em) {
.activeSession {
width: 50% !important;
} }
} }
.sessionCardFooter { .sessionCardFooter {
padding-top: .5em !important; padding-top: 0.5em !important;
padding-bottom: 1em !important; padding-bottom: 1em !important;
border-top: 1px solid #eee; border-top: 1px solid #eee;
text-align: center; text-align: center;
position: relative position: relative;
} }
.sessionAppInfo { .sessionAppInfo {
@ -265,22 +317,11 @@ div[data-role=controlgroup] a.ui-btn-active {
} }
.sessionCardButtons { .sessionCardButtons {
min-height: 2.7em min-height: 2.7em;
} }
.sessionCardButton { .sessionCardButton {
margin: 0 margin: 0;
}
.sessionNowPlayingContent {
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0
} }
.sessionNowPlayingInnerContent { .sessionNowPlayingInnerContent {
@ -289,23 +330,23 @@ div[data-role=controlgroup] a.ui-btn-active {
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
font-weight: 400 font-weight: 400;
} }
.sessionNowPlayingContent-withbackground+.sessionNowPlayingInnerContent { .sessionNowPlayingContent-withbackground + .sessionNowPlayingInnerContent {
color: #fff !important; color: #fff !important;
background: rgba(0, 0, 0, .7) background: rgba(0, 0, 0, 0.7);
} }
.sessionAppName { .sessionAppName {
vertical-align: top; vertical-align: top;
max-width: 200px max-width: 200px;
} }
.sessionNowPlayingDetails { .sessionNowPlayingDetails {
display: flex; display: flex;
position: absolute; position: absolute;
bottom: 0px; bottom: 0;
width: 100%; width: 100%;
} }
@ -315,12 +356,6 @@ div[data-role=controlgroup] a.ui-btn-active {
padding: 0.8em 0.5em; padding: 0.8em 0.5em;
} }
.sessionAppInfo img {
max-width: 40px;
max-height: 40px;
margin-right: 8px;
}
.sessionNowPlayingTime { .sessionNowPlayingTime {
flex-shrink: 0; flex-shrink: 0;
align-self: flex-end; align-self: flex-end;
@ -332,6 +367,13 @@ div[data-role=controlgroup] a.ui-btn-active {
white-space: nowrap; white-space: nowrap;
} }
.playbackProgress,
.transcodingProgress {
margin: 0;
width: 100%;
background: transparent !important;
}
.activeSession .playbackProgress, .activeSession .playbackProgress,
.activeSession .transcodingProgress { .activeSession .transcodingProgress {
position: absolute; position: absolute;
@ -342,13 +384,6 @@ div[data-role=controlgroup] a.ui-btn-active {
width: 100%; width: 100%;
} }
.playbackProgress,
.transcodingProgress {
margin: 0px;
width: 100%;
background: transparent !important;
}
.playbackProgress > div { .playbackProgress > div {
z-index: 1000; z-index: 1000;
background-color: #00a4dc; background-color: #00a4dc;
@ -358,70 +393,70 @@ div[data-role=controlgroup] a.ui-btn-active {
background-color: #dd4919; background-color: #dd4919;
} }
@media all and (max-width:34.375em) { @media all and (max-width: 34.375em) {
.sessionAppName { .sessionAppName {
max-width: 160px max-width: 160px;
} }
} }
@media all and (max-width:31.25em) { @media all and (max-width: 31.25em) {
.sessionAppName { .sessionAppName {
max-width: 150px max-width: 150px;
} }
} }
.disabledUser { .disabledUser {
filter: grayscale(100%) -webkit-filter: grayscale(100%);
filter: grayscale(100%);
} }
.disabledUserBanner { .disabledUserBanner {
margin: 0 0 2em margin: 0 0 2em;
} }
.appLinks a { .appLinks a {
text-decoration: none !important
}
.appLinks a+a {
margin-left: 5px
}
.appLinks img {
height: 36px
}
a[data-role=button] {
background-clip: padding-box;
cursor: pointer !important;
font-family: inherit !important;
font-weight: 500 !important;
margin: 0 .25em !important;
display: inline-block;
padding: .8em 1em;
text-align: center;
text-decoration: none !important; text-decoration: none !important;
background: #292929 !important; }
.appLinks a + a {
margin-left: 5px;
}
@-webkit-keyframes rotating {
from {
-webkit-transform: rotate(0);
transform: rotate(0);
}
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
} }
@keyframes rotating { @keyframes rotating {
from { from {
transform: rotate(0) -webkit-transform: rotate(0);
transform: rotate(0);
} }
to { to {
transform: rotate(360deg) -webkit-transform: rotate(360deg);
transform: rotate(360deg);
} }
} }
.rotatingCircle { .rotatingCircle {
animation: rotating 2s linear infinite -webkit-animation: rotating 2s linear infinite;
animation: rotating 2s linear infinite;
} }
.pluginPreviewImg { .pluginPreviewImg {
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37) -webkit-box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
} }
.ui-bar-a{ .ui-bar-a {
text-align: center; text-align: center;
padding: 0 20px; padding: 0 20px;
} }

View file

@ -1,7 +1,7 @@
.detailTableBodyCell, .detailTableBodyCell,
.detailTableHeaderCell { .detailTableHeaderCell {
border-spacing: 0; border-spacing: 0;
padding: .4em padding: 0.4em;
} }
.detailTable { .detailTable {
@ -9,11 +9,11 @@
border-spacing: 0; border-spacing: 0;
text-align: left; text-align: left;
width: 100%; width: 100%;
margin: 0 auto margin: 0 auto;
} }
.detailTableHeaderCell { .detailTableHeaderCell {
font-weight: 700; font-weight: 700;
text-align: left; text-align: left;
vertical-align: top vertical-align: top;
} }

View file

@ -1,13 +1,13 @@
html { html {
font-family: -apple-system, "Helvetica", system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", 'Open Sans', sans-serif; font-family: -apple-system, "Helvetica", system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", 'Open Sans', sans-serif;
}
html {
font-size: 93%; font-size: 93%;
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%; text-size-adjust: 100%;
} }
h1, h2, h3 { h1,
h2,
h3 {
/* For better bolding, since Helvetica does not support 500 weight, and 600 is too thick */ /* For better bolding, since Helvetica does not support 500 weight, and 600 is too thick */
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", 'Open Sans', sans-serif; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", 'Open Sans', sans-serif;
} }

View file

@ -1,8 +1,8 @@
html { html {
font-size: 82% !important font-size: 82% !important;
} }
.formDialogFooter { .formDialogFooter {
position: static !important; position: static !important;
margin: 0 -1em !important margin: 0 -1em !important;
} }

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,9 @@
.guideVerticalScroller { .guideVerticalScroller {
padding-bottom: 15em padding-bottom: 15em;
} }
@media all and (min-width:62.5em) { @media all and (min-width: 62.5em) {
#guideTab { #guideTab {
padding-left: .5em padding-left: 0.5em;
} }
} }

View file

@ -1,53 +1,57 @@
.editPageSidebar { .editPageSidebar {
display: block display: block;
} }
.editPageSidebar-withcontent { .editPageSidebar-withcontent {
display: none display: none;
} }
.libraryTree { .libraryTree {
margin-left: .25em margin-left: 0.25em;
} }
.offlineEditorNode { .offlineEditorNode {
color: #c33 color: #c33;
} }
.editorNode img { .editorNode img {
height: 18px; height: 18px;
margin: 0 .35em; margin: 0 0.35em;
vertical-align: middle; vertical-align: middle;
position: relative; position: relative;
top: -2px top: -2px;
} }
.jstree-anchor { .jstree-anchor {
font-weight: 400 !important font-weight: 400 !important;
} }
.jstree-wholerow-hovered { .jstree-wholerow-hovered {
background: #38c !important; background: #38c !important;
-webkit-border-radius: 0 !important;
border-radius: 0 !important; border-radius: 0 !important;
box-shadow: none !important -webkit-box-shadow: none !important;
box-shadow: none !important;
} }
.jstree-default .jstree-hovered { .jstree-default .jstree-hovered {
background: 0 0 !important; background: 0 0 !important;
-webkit-border-radius: 0 !important;
border-radius: 0 !important; border-radius: 0 !important;
-webkit-box-shadow: none !important;
box-shadow: none !important; box-shadow: none !important;
color: #fff !important color: #fff !important;
} }
.jstree-default .jstree-wholerow-clicked { .jstree-default .jstree-wholerow-clicked {
background: #00a4dc !important background: #00a4dc !important;
} }
.metadataSidebarIcon { .metadataSidebarIcon {
margin-right: .4em margin-right: 0.4em;
} }
@media all and (min-width:50em) { @media all and (min-width: 50em) {
.editPageSidebar { .editPageSidebar {
position: fixed; position: fixed;
top: 5.2em; top: 5.2em;
@ -55,21 +59,21 @@
left: 0; left: 0;
width: 30%; width: 30%;
border-right: 1px solid #555; border-right: 1px solid #555;
display: block display: block;
} }
.editPageInnerContent { .editPageInnerContent {
float: right; float: right;
width: 68.5% width: 68.5%;
} }
} }
@media all and (min-width:112.5em) { @media all and (min-width: 112.5em) {
.editPageSidebar { .editPageSidebar {
width: 25% width: 25%;
} }
.editPageInnerContent { .editPageInnerContent {
width: 73.5% width: 73.5%;
} }
} }

View file

@ -1,5 +1,6 @@
.scrollX { .scrollX {
overflow-x: auto; overflow-x: auto;
-webkit-overflow-scrolling: touch;
overflow-y: hidden; overflow-y: hidden;
white-space: nowrap; white-space: nowrap;
} }
@ -8,39 +9,50 @@
scroll-behavior: smooth; scroll-behavior: smooth;
} }
.hiddenScrollX, .layout-tv .scrollX { .hiddenScrollX,
scrollbar-width: none; .layout-tv .scrollX {
-ms-overflow-style: none;
} }
.hiddenScrollX-forced { .hiddenScrollX-forced {
scrollbar-width: none; overflow: -moz-scrollbars-none;
} }
.hiddenScrollX::-webkit-scrollbar, .layout-tv .scrollX::-webkit-scrollbar { .hiddenScrollX::-webkit-scrollbar,
.layout-tv .scrollX::-webkit-scrollbar {
height: 0 !important; height: 0 !important;
display: none; display: none;
} }
.scrollY { .scrollY {
overflow-y: auto; overflow-y: auto;
-webkit-overflow-scrolling: touch;
overflow-x: hidden; overflow-x: hidden;
} }
.smoothScrollY { .smoothScrollY {
overflow-y: auto; overflow-y: auto;
-webkit-overflow-scrolling: touch;
overflow-x: hidden; overflow-x: hidden;
scroll-behavior: smooth; scroll-behavior: smooth;
} }
.hiddenScrollY, .layout-tv .smoothScrollY { .hiddenScrollY,
scrollbar-width: none; .layout-tv .smoothScrollY {
-ms-overflow-style: none;
/* Can't do this because it not only hides the scrollbar, but also prevents scrolling */
/* overflow: -moz-scrollbars-none; */
} }
.hiddenScrollY-forced { .hiddenScrollY-forced {
scrollbar-width: none; overflow: -moz-scrollbars-none;
} }
.hiddenScrollY::-webkit-scrollbar, .layout-tv .smoothScrollY::-webkit-scrollbar, .layout-tv .scrollY::-webkit-scrollbar { .hiddenScrollY::-webkit-scrollbar,
.layout-tv .smoothScrollY::-webkit-scrollbar,
.layout-tv .scrollY::-webkit-scrollbar {
width: 0 !important; width: 0 !important;
display: none; display: none;
} }

View file

@ -2,7 +2,7 @@ body,
html { html {
margin: 0; margin: 0;
padding: 0; padding: 0;
height: 100% height: 100%;
} }
.backgroundContainer { .backgroundContainer {
@ -11,52 +11,58 @@ html {
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
contain: strict contain: strict;
} }
html { html {
line-height: 1.35 line-height: 1.35;
} }
.layout-mobile, .layout-mobile,
.layout-tv { .layout-tv {
user-select: none -webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
} }
body { body {
overflow-x: hidden; overflow-x: hidden;
background-color: transparent !important; background-color: transparent !important;
-webkit-font-smoothing: antialiased;
} }
.mainAnimatedPage { .mainAnimatedPage {
contain: style size !important contain: style size !important;
} }
.pageContainer { .pageContainer {
overflow-x: visible !important overflow-x: visible !important;
} }
.bodyWithPopupOpen { .bodyWithPopupOpen {
overflow-y: hidden !important overflow-y: hidden !important;
} }
div[data-role=page] { div[data-role=page] {
outline: 0 outline: 0;
} }
.pageTitle { .pageTitle {
margin-top: 0; margin-top: 0;
font-family: inherit font-family: inherit;
} }
.fieldDescription { .fieldDescription {
padding-left: .15em; padding-left: 0.15em;
font-weight: 400; font-weight: 400;
white-space: normal !important white-space: normal !important;
} }
.fieldDescription+.fieldDescription { .fieldDescription + .fieldDescription {
margin-top: .3em margin-top: 0.3em;
} }
.content-primary, .content-primary,
@ -67,21 +73,21 @@ div[data-role=page] {
padding-bottom: 5em !important; padding-bottom: 5em !important;
} }
@media all and (min-width:50em) { @media all and (min-width: 50em) {
.readOnlyContent, .readOnlyContent,
form { form {
max-width: 54em max-width: 54em;
} }
} }
.headerHelpButton { .headerHelpButton {
margin-left: 1.25em !important; margin-left: 1.25em !important;
padding-bottom: .4em !important; padding-bottom: 0.4em !important;
padding-top: .4em !important padding-top: 0.4em !important;
} }
.mediaInfoContent { .mediaInfoContent {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
width: 85% width: 85%;
} }

View file

@ -1,6 +1,9 @@
.chapterThumbTextContainer, .chapterThumbTextContainer,
.videoOsdBottom { .videoOsdBottom {
user-select: none; user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
} }
.osdPoster img, .osdPoster img,
@ -8,52 +11,59 @@
.videoOsdBottom { .videoOsdBottom {
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0 right: 0;
} }
.osdHeader { .osdHeader {
transition: opacity .3s ease-out; -webkit-transition: opacity 0.3s ease-out;
-o-transition: opacity 0.3s ease-out;
transition: opacity 0.3s ease-out;
position: relative; position: relative;
z-index: 1; z-index: 1;
background: rgba(0, 0, 0, 0.7) !important; background: rgba(0, 0, 0, 0.7) !important;
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important; backdrop-filter: none !important;
color: #eee !important; color: #eee !important;
} }
.osdHeader-hidden { .osdHeader-hidden {
opacity: 0 opacity: 0;
} }
.osdHeader .headerButton:not(.headerBackButton):not(.headerCastButton) { .osdHeader .headerButton:not(.headerBackButton):not(.headerCastButton) {
display: none display: none;
} }
.chapterThumbContainer { .chapterThumbContainer {
-webkit-box-shadow: 0 0 1.9vh #000;
box-shadow: 0 0 1.9vh #000; box-shadow: 0 0 1.9vh #000;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1; flex-grow: 1;
position: relative position: relative;
} }
.chapterThumb { .chapterThumb {
background-position: center center; background-position: center center;
-webkit-background-size: contain;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
border: 0; border: 0;
height: 20vh; height: 20vh;
min-width: 20vh min-width: 20vh;
} }
@media all and (orientation:portrait) { @media all and (orientation: portrait) {
.chapterThumb { .chapterThumb {
height: 30vw; height: 30vw;
min-width: 30vw min-width: 30vw;
} }
} }
@media all and (max-height:50em) and (orientation:landscape) { @media all and (max-height: 50em) and (orientation: landscape) {
.chapterThumb { .chapterThumb {
height: 30vh; height: 30vh;
min-width: 30vh min-width: 30vh;
} }
} }
@ -62,161 +72,218 @@
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
background: rgba(0, 0, 0, .7); background: rgba(0, 0, 0, 0.7);
padding: .25em .5em; padding: 0.25em 0.5em;
user-select: none user-select: none;
} }
.chapterThumbText { .chapterThumbText {
padding: .25em 0; padding: 0.25em 0;
margin: 0; margin: 0;
opacity: 1 opacity: 1;
} }
.chapterThumbText-dim { .chapterThumbText-dim {
opacity: .6 opacity: 0.6;
} }
.videoOsdBottom { .videoOsdBottom {
position: fixed; position: fixed;
background-color: rgba(0, 0, 0, 0.7); background-color: rgba(0, 0, 0, 0.7);
padding: 1%; padding: 1%;
display: -webkit-box;
display: -webkit-flex;
display: flex; display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
flex-direction: row; flex-direction: row;
will-change: opacity; will-change: opacity;
-webkit-transition: opacity 0.3s ease-out;
-o-transition: opacity 0.3s ease-out;
transition: opacity 0.3s ease-out; transition: opacity 0.3s ease-out;
color: #fff; color: #fff;
user-select: none user-select: none;
-webkit-touch-callout: none;
} }
.videoOsdBottom-hidden { .videoOsdBottom-hidden {
opacity: 0 opacity: 0;
} }
.osdControls { .osdControls {
flex-grow: 1 -webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
} }
.videoOsdBottom .buttons { .videoOsdBottom .buttons {
padding: .25em 0 0; padding: 0.25em 0 0;
display: -webkit-box;
display: -webkit-flex;
display: flex; display: flex;
-webkit-flex-wrap: wrap;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center -webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
} }
.osdVolumeSliderContainer { .osdVolumeSliderContainer {
width: 9em; width: 9em;
flex-grow: 1 -webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
} }
.osdMediaInfo, .osdMediaInfo,
.volumeButtons { .volumeButtons {
display: flex; display: flex;
display: -webkit-box;
display: -webkit-flex;
align-items: center; align-items: center;
-webkit-box-align: center;
} }
.volumeButtons { .volumeButtons {
margin: 0 .5em 0 auto; margin: 0 0.5em 0 auto;
display: flex; display: flex;
align-items: center -webkit-align-items: center;
align-items: center;
} }
.osdTimeText { .osdTimeText {
margin-left: 1em; margin-left: 1em;
user-select: none -webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
} }
.osdPoster { .osdPoster {
width: 10%; width: 10%;
position: relative; position: relative;
margin-right: .5em margin-right: 0.5em;
} }
.osdPoster img { .osdPoster img {
position: absolute; position: absolute;
height: auto; height: auto;
width: 100%; width: 100%;
-webkit-box-shadow: 0 0 1.9vh #000;
box-shadow: 0 0 1.9vh #000; box-shadow: 0 0 1.9vh #000;
border: .08em solid #222; border: 0.08em solid #222;
user-drag: none; user-drag: none;
user-select: none user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
} }
.osdTitle, .osdTitle,
.osdTitleSmall { .osdTitleSmall {
margin: 0 1em 0 0 margin: 0 1em 0 0;
} }
.osdMediaInfo { .osdMediaInfo {
display: flex; display: flex;
align-items: center -webkit-align-items: center;
align-items: center;
} }
.osdSecondaryMediaInfo { .osdSecondaryMediaInfo {
padding-left: .6em !important padding-left: 0.6em !important;
} }
.osdTextContainer { .osdTextContainer {
display: -webkit-box;
display: -webkit-flex;
display: flex; display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center; align-items: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; user-select: none;
margin-bottom: .7em; margin-bottom: 0.7em;
padding-left: .5em padding-left: 0.5em;
} }
.osdMainTextContainer { .osdMainTextContainer {
align-items: baseline -webkit-box-align: baseline;
-webkit-align-items: baseline;
align-items: baseline;
} }
.osdMediaStatus { .osdMediaStatus {
margin-left: auto; margin-left: auto;
} }
@-moz-keyframes spin {
100% {
-moz-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-webkit-keyframes spin {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spin { @keyframes spin {
100% { 100% {
transform:rotate(360deg); -webkit-transform: rotate(360deg);
transform: rotate(360deg);
} }
} }
.osdMediaStatus .animate { .osdMediaStatus .animate {
animation:spin 4s linear infinite; -webkit-animation: spin 4s linear infinite;
-moz-animation: spin 4s linear infinite;
animation: spin 4s linear infinite;
} }
.pageContainer { .pageContainer {
top: 0; top: 0;
position: fixed position: fixed;
} }
@media all and (max-width:30em) { @media all and (max-width: 30em) {
.btnFastForward, .btnFastForward,
.btnRewind, .btnRewind,
.osdMediaInfo, .osdMediaInfo,
.osdPoster { .osdPoster {
display: none !important display: none !important;
} }
} }
@media all and (max-width:33.75em) { @media all and (max-width: 33.75em) {
.videoOsdBottom .paper-icon-button-light { .videoOsdBottom .paper-icon-button-light {
margin: 0 margin: 0;
} }
} }
@media all and (max-width:43em) { @media all and (max-width: 43em) {
.videoOsdBottom .volumeButtons, .videoOsdBottom .volumeButtons,
.osdMediaStatus span { .osdMediaStatus span {
display: none !important display: none !important;
}
}
@media all and (max-width:50em) {
.videoOsdBottom .btnFastForward, .videoOsdBottom .btnRewind {
display: none !important
} }
} }
@media all and (max-width:75em) { @media all and (max-width: 50em) {
.videoOsdBottom .endsAtText { .videoOsdBottom .btnFastForward,
display: none !important .videoOsdBottom .btnRewind {
display: none !important;
}
}
@media all and (max-width: 75em) {
.videoOsdBottom .endsAtText {
display: none !important;
} }
} }

View file

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Before After
Before After

View file

@ -17,7 +17,7 @@ _define("fetch", function() {
}); });
// flvjs // flvjs
var flvjs = require("flv.js").default; var flvjs = require("flv.js/dist/flv").default;
_define("flvjs", function() { _define("flvjs", function() {
return flvjs; return flvjs;
}); });

View file

@ -4,7 +4,7 @@
padding: 0; padding: 0;
border: none; border: none;
max-height: 84%; max-height: 84%;
border-radius: .1em !important; border-radius: 0.1em !important;
} }
.actionsheet-not-fullscreen { .actionsheet-not-fullscreen {
@ -24,7 +24,7 @@
.actionSheetContent { .actionSheetContent {
margin: 0 !important; margin: 0 !important;
padding: .4em 0 !important; padding: 0.4em 0 !important;
flex-direction: column; flex-direction: column;
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -45,7 +45,7 @@
} }
.actionsheetListItemBody { .actionsheetListItemBody {
padding: .4em 1em .4em .6em !important; padding: 0.4em 1em 0.4em 0.6em !important;
} }
.actionSheetItemText { .actionSheetItemText {
@ -59,13 +59,13 @@
} }
.actionSheetItemAsideText { .actionSheetItemAsideText {
opacity: .7; opacity: 0.7;
font-size: 90%; font-size: 90%;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
flex-shrink: 0; flex-shrink: 0;
margin-left: 5em; margin-left: 5em;
margin-right: .5em; margin-right: 0.5em;
} }
.actionSheetScroller { .actionSheetScroller {
@ -83,14 +83,14 @@
} }
.actionsheetDivider { .actionsheetDivider {
height: .07em; height: 0.07em;
margin: .25em 0; margin: 0.25em 0;
flex-shrink: 0; flex-shrink: 0;
} }
.actionSheetTitle { .actionSheetTitle {
margin: .6em 0 .7em !important; margin: 0.6em 0 0.7em !important;
padding: 0 .9em; padding: 0 0.9em;
flex-grow: 0; flex-grow: 0;
} }
@ -100,7 +100,7 @@
} }
.actionsheetMenuItemIcon { .actionsheetMenuItemIcon {
margin: 0 .85em 0 .45em !important; margin: 0 0.85em 0 0.45em !important;
padding: 0 !important; padding: 0 !important;
} }
@ -110,6 +110,6 @@
.btnCloseActionSheet { .btnCloseActionSheet {
position: fixed; position: fixed;
top: .75em; top: 0.75em;
left: .5em; left: 0.5em;
} }

View file

@ -35,16 +35,15 @@
font-size: inherit; font-size: inherit;
min-width: initial; min-width: initial;
margin: 0; margin: 0;
padding: .1em .4em; padding: 0.1em 0.4em;
width: auto; width: auto;
border-radius: .1em; border-radius: 0.1em;
font-weight: normal; font-weight: normal;
flex-shrink: 0; flex-shrink: 0;
flex-grow: 1; flex-grow: 1;
} }
@media all and (max-height: 50em) { @media all and (max-height: 50em) {
.alphaPicker-fixed { .alphaPicker-fixed {
bottom: 5em; bottom: 5em;
} }
@ -56,14 +55,12 @@
} }
@media all and (max-height: 49em) { @media all and (max-height: 49em) {
.alphaPicker-vertical { .alphaPicker-vertical {
font-size: 94%; font-size: 94%;
} }
} }
@media all and (max-height: 44em) { @media all and (max-height: 44em) {
.alphaPicker-vertical { .alphaPicker-vertical {
font-size: 90%; font-size: 90%;
} }
@ -75,14 +72,12 @@
} }
@media all and (max-height: 37em) { @media all and (max-height: 37em) {
.alphaPicker-vertical { .alphaPicker-vertical {
font-size: 82%; font-size: 82%;
} }
} }
@media all and (max-height: 32em) { @media all and (max-height: 32em) {
.alphaPicker-vertical { .alphaPicker-vertical {
font-size: 74%; font-size: 74%;
} }
@ -113,15 +108,14 @@
} }
.alphaPicker-fixed-left { .alphaPicker-fixed-left {
left: .4em; left: 0.4em;
} }
.alphaPicker-fixed-right { .alphaPicker-fixed-right {
right: .4em; right: 0.4em;
} }
@media all and (min-width: 62.5em) { @media all and (min-width: 62.5em) {
.alphaPicker-fixed-left { .alphaPicker-fixed-left {
left: 1em; left: 1em;
} }
@ -132,7 +126,6 @@
} }
@media all and (max-height: 31.25em) { @media all and (max-height: 31.25em) {
.alphaPicker-fixed { .alphaPicker-fixed {
display: none !important; display: none !important;
} }

View file

@ -8,6 +8,6 @@
contain: layout style; contain: layout style;
} }
.appfooter.headroom--unpinned { .appfooter.headroom--unpinned {
transform: translateY(100%)!important; transform: translateY(100%) !important;
} }

View file

@ -168,23 +168,25 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
return false; return false;
} }
var savedResult = appSettings.get(htmlMediaAutoplayAppStorageKey); return true;
return "true" === savedResult || "false" !== savedResult && null;
} }
function cueSupported() { function supportsCue() {
try { try {
var video = document.createElement("video"); var video = document.createElement("video");
var style = document.createElement("style"); var style = document.createElement("style");
style.textContent = "video::cue {background: inherit}"; style.textContent = "video::cue {background: inherit}";
document.body.appendChild(style); document.body.appendChild(style);
document.body.appendChild(video); document.body.appendChild(video);
var cue = window.getComputedStyle(video, "::cue").background; var cue = window.getComputedStyle(video, "::cue").background;
document.body.removeChild(style); document.body.removeChild(style);
document.body.removeChild(video); document.body.removeChild(video);
return !!cue.length; return !!cue.length;
} catch (err) { } catch (err) {
console.log("Error detecting cue support:" + err); console.log("error detecting cue support: " + err);
return false; return false;
} }
} }
@ -204,8 +206,6 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
} }
} }
var htmlMediaAutoplayAppStorageKey = "supportshtmlmediaautoplay0";
var supportedFeatures = function () { var supportedFeatures = function () {
var features = []; var features = [];
@ -280,7 +280,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
//features.push("multiserver"); //features.push("multiserver");
features.push("screensaver"); features.push("screensaver");
if (!browser.orsay && !browser.tizen && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || cueSupported())) { if (!browser.orsay && !browser.tizen && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || supportsCue())) {
features.push("subtitleappearancesettings"); features.push("subtitleappearancesettings");
} }
@ -299,18 +299,6 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
return features; return features;
}(); }();
if (supportedFeatures.indexOf("htmlvideoautoplay") === -1 && supportsHtmlMediaAutoplay() !== false) {
require(["autoPlayDetect"], function (autoPlayDetect) {
autoPlayDetect.supportsHtmlMediaAutoplay().then(function () {
appSettings.set(htmlMediaAutoplayAppStorageKey, "true");
supportedFeatures.push("htmlvideoautoplay");
supportedFeatures.push("htmlaudioautoplay");
}, function () {
appSettings.set(htmlMediaAutoplayAppStorageKey, "false");
});
});
}
/** /**
* Do exit according to platform * Do exit according to platform
*/ */
@ -435,7 +423,9 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
} }
} }
}; };
var doc = self.document; var doc = self.document;
var isHidden = false;
if (doc) { if (doc) {
if (void 0 !== doc.visibilityState) { if (void 0 !== doc.visibilityState) {
@ -459,8 +449,6 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
} }
} }
var isHidden = false;
if (doc) { if (doc) {
doc.addEventListener(visibilityChange, function () { doc.addEventListener(visibilityChange, function () {
if (document[visibilityState]) { if (document[visibilityState]) {

View file

@ -1,23 +1,24 @@
button {
-webkit-border-fit: border !important;
}
button::-moz-focus-inner { button::-moz-focus-inner {
padding: 0; padding: 0;
border: 0; border: 0;
} }
button {
-webkit-border-fit: border !important;
}
.card { .card {
border: 0; border: 0;
font-size: inherit !important; font-size: inherit !important;
font-family: inherit !important; font-family: inherit !important;
text-transform: none; text-transform: none;
background-color: transparent !important;
background: none !important; background: none !important;
background-color: transparent !important;
margin: 0; margin: 0;
padding: 0; padding: 0;
display: block; display: block;
color: inherit !important; color: inherit !important;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important; outline: none !important;
cursor: pointer; cursor: pointer;
contain: layout style; contain: layout style;
@ -54,17 +55,27 @@ button {
contain: layout style; contain: layout style;
} }
.cardPadder-backdrop, .cardPadder-mixedBackdrop, .cardPadder-smallBackdrop, .cardPadder-overflowBackdrop, .cardPadder-overflowSmallBackdrop { .cardPadder-backdrop,
.cardPadder-mixedBackdrop,
.cardPadder-smallBackdrop,
.cardPadder-overflowBackdrop,
.cardPadder-overflowSmallBackdrop {
padding-bottom: 56.25%; padding-bottom: 56.25%;
contain: strict; contain: strict;
} }
.cardPadder-square, .cardPadder-mixedSquare, .cardPadder-overflowSquare, .overflowSquareCard-textCardPadder { .cardPadder-square,
.cardPadder-mixedSquare,
.cardPadder-overflowSquare,
.overflowSquareCard-textCardPadder {
padding-bottom: 100%; padding-bottom: 100%;
contain: strict; contain: strict;
} }
.cardPadder-portrait, .cardPadder-mixedPortrait, .cardPadder-overflowPortrait, .overflowPortraitCard-textCardPadder { .cardPadder-portrait,
.cardPadder-mixedPortrait,
.cardPadder-overflowPortrait,
.overflowPortraitCard-textCardPadder {
padding-bottom: 150%; padding-bottom: 150%;
contain: strict; contain: strict;
} }
@ -79,23 +90,26 @@ button {
margin: 0.6em; margin: 0.6em;
transition: none; transition: none;
border: 0 solid transparent; border: 0 solid transparent;
/* These both are needed in case cardBox is a button */
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important; outline: none !important;
contain: layout; contain: layout;
contain: style; contain: style;
} }
.card.show-animation .cardBox {
will-change: transform;
transition: transform 200ms ease-out;
}
.card.show-focus:not(.show-animation) .cardBox { .card.show-focus:not(.show-animation) .cardBox {
margin: .4em; margin: 0.4em;
} }
.card.show-focus:not(.show-animation) .cardBox.visualCardBox, .card.show-focus:not(.show-animation) .cardBox.visualCardBox,
.card.show-focus:not(.show-animation) .cardBox:not(.visualCardBox) .cardScalable { .card.show-focus:not(.show-animation) .cardBox:not(.visualCardBox) .cardScalable {
border: .5em solid transparent; border: 0.5em solid transparent;
}
.card.show-animation .cardBox {
will-change: transform;
transition: transform 200ms ease-out;
} }
.card.show-animation:focus > .cardBox { .card.show-animation:focus > .cardBox {
@ -120,7 +134,7 @@ button {
.btnCardOptions { .btnCardOptions {
position: absolute; position: absolute;
bottom: .25em; bottom: 0.25em;
right: 0; right: 0;
margin: 0 !important; margin: 0 !important;
z-index: 1; z-index: 1;
@ -131,8 +145,8 @@ button {
position: absolute; position: absolute;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
top: .3em; top: 0.3em;
left: .3em; left: 0.3em;
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
width: 1.6em; width: 1.6em;
@ -146,12 +160,14 @@ button {
background-size: cover; background-size: cover;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center center; background-position: center center;
display: -webkit-flex;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: relative; position: relative;
background-clip: content-box !important; background-clip: content-box !important;
color: inherit; color: inherit;
/* This is only needed for scalable cards */ /* This is only needed for scalable cards */
height: 100%; height: 100%;
contain: strict; contain: strict;
@ -173,12 +189,16 @@ button {
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
/* Needed in case this is a button */ /* Needed in case this is a button */
display: block; display: block;
/* Needed in case this is a button */ /* Needed in case this is a button */
margin: 0 !important; margin: 0 !important;
/* Needed in safari */ /* Needed in safari */
height: 100%; height: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important; outline: none !important;
contain: strict; contain: strict;
} }
@ -207,10 +227,6 @@ button {
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37); box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
} }
.cardImageContainer {
display: flex;
}
.cardImage { .cardImage {
position: absolute; position: absolute;
top: 0; top: 0;
@ -226,6 +242,7 @@ button {
.cardImage-img { .cardImage-img {
max-height: 100%; max-height: 100%;
max-width: 100%; max-width: 100%;
/* This is simply for lazy image purposes, to ensure the image is visible sooner when scrolling */ /* This is simply for lazy image purposes, to ensure the image is visible sooner when scrolling */
min-height: 70%; min-height: 70%;
min-width: 70%; min-width: 70%;
@ -252,17 +269,17 @@ button {
} }
.cardFooter { .cardFooter {
padding: .3em .3em .5em .3em; padding: 0.3em 0.3em 0.5em 0.3em;
position: relative; position: relative;
} }
.visualCardBox { .visualCardBox {
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37); box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
border-radius: .145em; border-radius: 0.145em;
} }
.innerCardFooter { .innerCardFooter {
background: rgba(0,0,0,.7); background: rgba(0, 0, 0, 0.7);
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 0; left: 0;
@ -282,7 +299,7 @@ button {
} }
.cardText { .cardText {
padding: .06em .5em; padding: 0.06em 0.5em;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -294,7 +311,24 @@ button {
} }
.cardText-first { .cardText-first {
padding-top: .24em; padding-top: 0.24em;
}
.textActionButton {
border: 0 !important;
background: transparent;
padding: 0 !important;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important;
color: inherit;
vertical-align: middle;
font-family: inherit;
font-size: inherit;
}
.textActionButton:hover {
text-decoration: underline;
} }
.cardText > .textActionButton { .cardText > .textActionButton {
@ -304,7 +338,7 @@ button {
} }
.innerCardFooter > .cardText { .innerCardFooter > .cardText {
padding: .3em .5em; padding: 0.3em 0.5em;
} }
.cardFooter-withlogo { .cardFooter-withlogo {
@ -336,23 +370,6 @@ button {
text-align: center; text-align: center;
} }
.textActionButton {
border: 0 !important;
background: transparent;
border: 0 !important;
padding: 0 !important;
cursor: pointer;
outline: none !important;
color: inherit;
vertical-align: middle;
font-family: inherit;
font-size: inherit;
}
.textActionButton:hover {
text-decoration: underline;
}
.cardImageIcon { .cardImageIcon {
font-size: 5em; font-size: 5em;
color: inherit; color: inherit;
@ -360,12 +377,12 @@ button {
.cardImageIcon-small { .cardImageIcon-small {
font-size: 3em; font-size: 3em;
margin-bottom: .1em; margin-bottom: 0.1em;
} }
.cardIndicators { .cardIndicators {
right: .225em; right: 0.225em;
top: .225em; top: 0.225em;
position: absolute; position: absolute;
display: flex; display: flex;
align-items: center; align-items: center;
@ -382,16 +399,16 @@ button {
} }
.programAttributeIndicator { .programAttributeIndicator {
padding: .18em .5em; padding: 0.18em 0.5em;
color: #fff; color: #fff;
font-weight: 500; font-weight: 500;
} }
.cardOverlayButton { .cardOverlayButton {
color: rgba(255, 255, 255, .76); color: rgba(255, 255, 255, 0.76);
margin: 0; margin: 0;
z-index: 1; z-index: 1;
padding: .75em; padding: 0.75em;
font-size: 88%; font-size: 88%;
} }
@ -402,7 +419,7 @@ button {
} }
.cardOverlayButtonIcon { .cardOverlayButtonIcon {
background-color: rgba(0,0,0,.7) !important; background-color: rgba(0, 0, 0, 0.7) !important;
border-radius: 100em; border-radius: 100em;
width: 1.5em !important; width: 1.5em !important;
height: 1.5em !important; height: 1.5em !important;
@ -424,10 +441,10 @@ button {
height: 2.6em; height: 2.6em;
top: 50%; top: 50%;
left: 50%; left: 50%;
background-color: rgba(0,0,0,.5) !important; background-color: rgba(0, 0, 0, 0.5) !important;
border: .06em solid rgba(255,255,255,.6); border: 0.06em solid rgba(255, 255, 255, 0.6);
padding: .38em !important; padding: 0.38em !important;
color: rgba(255, 255, 255, .76); color: rgba(255, 255, 255, 0.76);
transition: transform 200ms ease-out; transition: transform 200ms ease-out;
} }
@ -474,13 +491,15 @@ button {
width: 33.333333333333333333333333333333%; width: 33.333333333333333333333333333333%;
} }
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 33.333333333333333333333333333333%; width: 33.333333333333333333333333333333%;
} }
} }
@media (min-width: 43.75em) { @media (min-width: 43.75em) {
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 25%; width: 25%;
} }
} }
@ -496,7 +515,8 @@ button {
width: 50%; width: 50%;
} }
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 20%; width: 20%;
} }
@ -516,7 +536,8 @@ button {
width: 25%; width: 25%;
} }
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 16.666666666666666666666666666667%; width: 16.666666666666666666666666666667%;
} }
@ -529,9 +550,9 @@ button {
} }
} }
@media (min-width: 87.5em) { @media (min-width: 87.5em) {
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 14.285714285714285714285714285714%; width: 14.285714285714285714285714285714%;
} }
@ -549,13 +570,15 @@ button {
width: 20%; width: 20%;
} }
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 12.5%; width: 12.5%;
} }
} }
@media (min-width: 120em) { @media (min-width: 120em) {
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 11.111111111111111111111111111111%; width: 11.111111111111111111111111111111%;
} }
} }
@ -565,7 +588,8 @@ button {
width: 25%; width: 25%;
} }
.squareCard, .portraitCard { .squareCard,
.portraitCard {
width: 10%; width: 10%;
} }
} }
@ -596,7 +620,8 @@ button {
width: 72vw; width: 72vw;
} }
.overflowSquareCard, .overflowPortraitCard { .overflowSquareCard,
.overflowPortraitCard {
width: 40vw; width: 40vw;
} }
@ -621,29 +646,34 @@ button {
} }
@media (min-width: 43.75em) { @media (min-width: 43.75em) {
.overflowSquareCard, .overflowPortraitCard { .overflowSquareCard,
.overflowPortraitCard {
width: 23.1vw; width: 23.1vw;
} }
} }
@media (min-width: 48.125em) { @media (min-width: 48.125em) {
.overflowBackdropCard, .overflowSmallBackdropCard { .overflowBackdropCard,
.overflowSmallBackdropCard {
width: 30vw; width: 30vw;
} }
} }
@media (orientation: landscape) { @media (orientation: landscape) {
.overflowBackdropCard, .overflowSmallBackdropCard { .overflowBackdropCard,
.overflowSmallBackdropCard {
width: 30vw; width: 30vw;
} }
.overflowSquareCard, .overflowPortraitCard { .overflowSquareCard,
.overflowPortraitCard {
width: 23.1vw; width: 23.1vw;
} }
} }
@media (orientation: landscape) and (min-width: 48.125em) { @media (orientation: landscape) and (min-width: 48.125em) {
.overflowBackdropCard, .overflowSmallBackdropCard { .overflowBackdropCard,
.overflowSmallBackdropCard {
width: 23.1vw; width: 23.1vw;
} }
} }
@ -655,55 +685,60 @@ button {
} }
@media (min-width: 50em) { @media (min-width: 50em) {
.overflowSquareCard, .overflowPortraitCard { .overflowSquareCard,
.overflowPortraitCard {
width: 18.5vw; width: 18.5vw;
} }
} }
@media (min-width: 75em) { @media (min-width: 75em) {
.overflowBackdropCard, .overflowSmallBackdropCard { .overflowBackdropCard,
.overflowSmallBackdropCard {
width: 23.1vw; width: 23.1vw;
} }
.overflowSquareCard, .overflowPortraitCard { .overflowSquareCard,
.overflowPortraitCard {
width: 15.5vw; width: 15.5vw;
} }
} }
@media (min-width: 87.5em) { @media (min-width: 87.5em) {
.overflowSquareCard, .overflowPortraitCard { .overflowSquareCard,
.overflowPortraitCard {
width: 13.3vw; width: 13.3vw;
} }
} }
@media (min-width: 100em) { @media (min-width: 100em) {
.overflowBackdropCard,
.overflowBackdropCard, .overflowSmallBackdropCard { .overflowSmallBackdropCard {
width: 18.7vw; width: 18.7vw;
} }
.overflowSquareCard, .overflowPortraitCard { .overflowSquareCard,
.overflowPortraitCard {
width: 11.6vw; width: 11.6vw;
} }
} }
@media (min-width: 120em) { @media (min-width: 120em) {
.overflowSquareCard,
.overflowSquareCard, .overflowPortraitCard { .overflowPortraitCard {
width: 10.3vw; width: 10.3vw;
} }
} }
@media (min-width: 131.25em) { @media (min-width: 131.25em) {
.overflowSquareCard,
.overflowSquareCard, .overflowPortraitCard { .overflowPortraitCard {
width: 9.3vw; width: 9.3vw;
} }
} }
@media (min-width: 156.25em) { @media (min-width: 156.25em) {
.overflowBackdropCard,
.overflowBackdropCard, .overflowSmallBackdropCard { .overflowSmallBackdropCard {
width: 15.6vw; width: 15.6vw;
} }
} }
@ -720,7 +755,8 @@ button {
padding-bottom: 87.75%; padding-bottom: 87.75%;
} }
.itemsContainer-tv > .overflowSquareCard, .itemsContainer-tv > .overflowPortraitCard { .itemsContainer-tv > .overflowSquareCard,
.itemsContainer-tv > .overflowPortraitCard {
width: 15.6vw; width: 15.6vw;
} }
@ -729,9 +765,9 @@ button {
} }
.cardOverlayContainer { .cardOverlayContainer {
background: rgba(0,0,0,0.5); background: rgba(0, 0, 0, 0.5);
opacity: 0; opacity: 0;
transition: opacity .2s; transition: opacity 0.2s;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@ -760,7 +796,7 @@ button {
} }
.cardOverlayFab-primary { .cardOverlayFab-primary {
background-color: rgba(0,0,0,0.7); background-color: rgba(0, 0, 0, 0.7);
font-size: 130%; font-size: 130%;
padding: 0; padding: 0;
width: 3em; width: 3em;

View file

@ -1018,7 +1018,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
return text; return text;
} }
var html = '<button ' + itemShortcuts.getShortcutAttributesHtml(item, serverId) + ' type="button" class="itemAction textActionButton" data-action="link">'; var html = '<button ' + itemShortcuts.getShortcutAttributesHtml(item, serverId) + ' type="button" class="itemAction textActionButton" title="' + text + '" data-action="link">';
html += text; html += text;
html += '</button>'; html += '</button>';

View file

@ -15,10 +15,12 @@
.dialog { .dialog {
margin: 0; margin: 0;
border-radius: .2em; border-radius: 0.2em;
-webkit-font-smoothing: antialiased;
border: 0; border: 0;
padding: 0; padding: 0;
will-change: transform, opacity; will-change: transform, opacity;
/* Strict does not work well with actionsheet */ /* Strict does not work well with actionsheet */
contain: style paint; contain: style paint;
box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.4); box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.4);
@ -50,13 +52,13 @@
to { to {
opacity: 0; opacity: 0;
transform: scale(.5); transform: scale(0.5);
} }
} }
@keyframes scaleup { @keyframes scaleup {
from { from {
transform: scale(.5); transform: scale(0.5);
opacity: 0; opacity: 0;
} }
@ -77,7 +79,6 @@
} }
@keyframes fadeout { @keyframes fadeout {
from { from {
opacity: 1; opacity: 1;
} }
@ -100,7 +101,6 @@
} }
@keyframes slidedown { @keyframes slidedown {
from { from {
opacity: 1; opacity: 1;
transform: none; transform: none;
@ -113,8 +113,8 @@
} }
@media all and (max-width: 80em), all and (max-height: 45em) { @media all and (max-width: 80em), all and (max-height: 45em) {
.dialog-fixedSize,
.dialog-fixedSize, .dialog-fullscreen-lowres { .dialog-fullscreen-lowres {
position: fixed !important; position: fixed !important;
top: 0 !important; top: 0 !important;
bottom: 0 !important; bottom: 0 !important;
@ -126,7 +126,6 @@
} }
@media all and (min-width: 80em) and (min-height: 45em) { @media all and (min-width: 80em) and (min-height: 45em) {
.dialog-medium { .dialog-medium {
width: 80%; width: 80%;
height: 80%; height: 80%;
@ -168,5 +167,5 @@
} }
.dialogBackdropOpened { .dialogBackdropOpened {
opacity: .5; opacity: 0.5;
} }

View file

@ -1,8 +1,8 @@
#ulDirectoryPickerList a { #ulDirectoryPickerList a {
padding-top: .4em; padding-top: 0.4em;
padding-bottom: .4em padding-bottom: 0.4em;
} }
.lblDirectoryPickerPath { .lblDirectoryPickerPath {
white-space: nowrap white-space: nowrap;
} }

View file

@ -4,11 +4,11 @@
right: 0; right: 0;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
min-width:104px; min-width: 104px;
min-height:24px; min-height: 24px;
padding-top: 1.25em; padding-top: 1.25em;
z-index: 1; z-index: 1;
color: #ffffff; color: #fff;
display: flex; display: flex;
} }

View file

@ -155,7 +155,7 @@ define(['scroller', 'dom', 'layoutManager', 'inputManager', 'focusManager', 'bro
initCenterFocus(this, this.scroller); initCenterFocus(this, this.scroller);
} }
if (bindHeader) { if (bindHeader && layoutManager.mobile) {
initHeadroom(this); initHeadroom(this);
} }

View file

@ -5,31 +5,32 @@
margin-top: 0 !important; margin-top: 0 !important;
margin-bottom: 0 !important; margin-bottom: 0 !important;
margin-right: 0 !important; margin-right: 0 !important;
-webkit-border-radius: 0 !important;
border-radius: 0 !important; border-radius: 0 !important;
max-height: none !important; max-height: none !important;
max-width: none !important max-width: none !important;
} }
@media all and (min-height:600px) { @media all and (min-height: 600px) {
.dynamicFilterDialog { .dynamicFilterDialog {
top: 10% !important; top: 10% !important;
bottom: 25% !important bottom: 25% !important;
} }
} }
@media all and (max-width:400px) { @media all and (max-width: 400px) {
.dynamicFilterDialog { .dynamicFilterDialog {
width: auto; width: auto;
left: 10vw !important; left: 10vw !important;
right: 10vw !important; right: 10vw !important;
margin-left: 0 !important margin-left: 0 !important;
} }
} }
@media all and (min-width:400px) { @media all and (min-width: 400px) {
.dynamicFilterDialog { .dynamicFilterDialog {
width: 20.16em; width: 20.16em;
margin-left: -10.08em !important; margin-left: -10.08em !important;
left: 50% !important left: 50% !important;
} }
} }

View file

@ -5,14 +5,15 @@
} }
.formDialogHeader { .formDialogHeader {
padding: 1em .5em; padding: 1em 0.5em;
display: flex; display: flex;
align-items: center; align-items: center;
flex-shrink: 0; flex-shrink: 0;
} }
.formDialogHeaderTitle { .formDialogHeaderTitle {
margin-left: .25em; margin-left: 0.25em;
/* In case of h1, h2, h3 */ /* In case of h1, h2, h3 */
margin-top: 0; margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
@ -23,7 +24,7 @@
} }
.dialogContentInner { .dialogContentInner {
padding: .5em 1em 20em 1em; padding: 0.5em 1em 20em 1em;
} }
.dialogContentInner-mini { .dialogContentInner-mini {
@ -46,6 +47,7 @@
display: flex; display: flex;
position: absolute; position: absolute;
padding: 1.25em 1em; padding: 1.25em 1em;
/* Without this emby-checkbox is able to appear on top */ /* Without this emby-checkbox is able to appear on top */
z-index: 1; z-index: 1;
align-items: center; align-items: center;
@ -62,11 +64,11 @@
padding-bottom: 1.5em; padding-bottom: 1.5em;
flex-direction: column; flex-direction: column;
width: 80% !important; width: 80% !important;
padding-top: .5em; padding-top: 0.5em;
} }
.formDialogFooterItem { .formDialogFooterItem {
margin: .5em !important; margin: 0.5em !important;
flex-grow: 1; flex-grow: 1;
text-align: center; text-align: center;
flex-basis: 0; flex-basis: 0;
@ -91,7 +93,6 @@
} }
@media all and (min-width: 50em) { @media all and (min-width: 50em) {
.formDialogFooterItem { .formDialogFooterItem {
max-width: 80%; max-width: 80%;
} }
@ -103,7 +104,6 @@
} }
@media all and (min-width: 80em) { @media all and (min-width: 80em) {
.formDialogFooterItem { .formDialogFooterItem {
max-width: 70%; max-width: 70%;
} }

View file

@ -14,12 +14,12 @@
} }
.layout-desktop .tvGuideHeader { .layout-desktop .tvGuideHeader {
margin-bottom: .5em; margin-bottom: 0.5em;
} }
.guideHeaderDateSelection { .guideHeaderDateSelection {
font-size: 86%; font-size: 86%;
padding: .4em 0; padding: 0.4em 0;
} }
.guide-headerTimeslots { .guide-headerTimeslots {
@ -39,10 +39,10 @@
.guideProgramIndicator { .guideProgramIndicator {
text-transform: uppercase; text-transform: uppercase;
border-radius: .25em; border-radius: 0.25em;
margin-right: .5em; margin-right: 0.5em;
font-size: 82%; font-size: 82%;
padding: .2em .25em; padding: 0.2em 0.25em;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -51,6 +51,8 @@
} }
.guide-channelTimeslotHeader { .guide-channelTimeslotHeader {
border: 0 !important;
border-right-color: transparent;
flex-shrink: 0; flex-shrink: 0;
justify-content: center; justify-content: center;
} }
@ -69,9 +71,14 @@
} }
.channelPrograms { .channelPrograms {
height: 4.42em;
contain: strict;
display: flex;
flex-direction: column;
border-style: solid;
border-width: 1px 0 1px 0;
white-space: nowrap; white-space: nowrap;
position: relative; position: relative;
contain: strict;
box-sizing: border-box; box-sizing: border-box;
} }
@ -80,31 +87,32 @@
} }
.guideSpacer { .guideSpacer {
width: .3em; width: 0.3em;
flex-shrink: 0; flex-shrink: 0;
} }
.channelPrograms, .timeslotHeadersInner { .channelPrograms,
.timeslotHeadersInner {
width: 1800vw; width: 1800vw;
} }
@media all and (min-width: 37.5em) { @media all and (min-width: 37.5em) {
.channelPrograms,
.channelPrograms, .timeslotHeadersInner { .timeslotHeadersInner {
width: 1400vw; width: 1400vw;
} }
} }
@media all and (min-width: 50em) { @media all and (min-width: 50em) {
.channelPrograms,
.channelPrograms, .timeslotHeadersInner { .timeslotHeadersInner {
width: 1200vw; width: 1200vw;
} }
} }
@media all and (min-width: 80em) { @media all and (min-width: 80em) {
.channelPrograms,
.channelPrograms, .timeslotHeadersInner { .timeslotHeadersInner {
width: 810vw; width: 810vw;
} }
} }
@ -112,11 +120,17 @@
.timeslotHeader { .timeslotHeader {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
text-indent: .25em; text-indent: 0.25em;
width: 2.0833333333333333333333333333333%; width: 2.0833333333333333333333333333333%;
} }
.guide-channelHeaderCell, .guide-channelTimeslotHeader { .programCell,
.guide-channelHeaderCell {
outline: none !important;
}
.guide-channelHeaderCell,
.guide-channelTimeslotHeader {
padding: 0 !important; padding: 0 !important;
cursor: pointer; cursor: pointer;
outline: none !important; outline: none !important;
@ -130,11 +144,12 @@
display: flex; display: flex;
align-items: center; align-items: center;
text-decoration: none; text-decoration: none;
/* Needed in firefox */ /* Needed in firefox */
text-align: left; text-align: left;
contain: strict; contain: strict;
flex-shrink: 0; flex-shrink: 0;
border-radius: .12em; border-radius: 0.12em;
color: inherit; color: inherit;
} }
@ -148,37 +163,38 @@
background: transparent; background: transparent;
} }
.guide-channelTimeslotHeader {
border: 0 !important;
}
/* Important - have to put the fixed width on channelsContainer, not the individual channelHeaderCell /* Important - have to put the fixed width on channelsContainer, not the individual channelHeaderCell
This was causing channelsContainer to extend beyond the fixed width on ps4, tizen, lg and opera tv. This was causing channelsContainer to extend beyond the fixed width on ps4, tizen, lg and opera tv.
*/ */
.channelsContainer, .guide-channelTimeslotHeader { .channelsContainer,
.guide-channelTimeslotHeader {
width: 24vw; width: 24vw;
} }
@media all and (min-width:31.25em) { @media all and (min-width: 31.25em) {
.channelsContainer, .guide-channelTimeslotHeader { .channelsContainer,
.guide-channelTimeslotHeader {
width: 16vw; width: 16vw;
} }
} }
@media all and (min-width:37.5em) { @media all and (min-width: 37.5em) {
.channelsContainer, .guide-channelTimeslotHeader { .channelsContainer,
.guide-channelTimeslotHeader {
width: 16vw; width: 16vw;
} }
} }
@media all and (min-width:50em) { @media all and (min-width: 50em) {
.channelsContainer, .guide-channelTimeslotHeader { .channelsContainer,
.guide-channelTimeslotHeader {
width: 14vw; width: 14vw;
} }
} }
@media all and (min-width:80em) { @media all and (min-width: 80em) {
.channelsContainer, .guide-channelTimeslotHeader { .channelsContainer,
.guide-channelTimeslotHeader {
width: 12vw; width: 12vw;
} }
} }
@ -197,34 +213,26 @@
} }
@media all and (max-width: 50em) { @media all and (max-width: 50em) {
.newTvProgram,
.newTvProgram, .liveTvProgram, .premiereTvProgram, .guideHdIcon { .liveTvProgram,
.premiereTvProgram,
.guideHdIcon {
display: none; display: none;
} }
} }
.channelPrograms { .channelPrograms + .channelPrograms,
height: 4.42em; .guide-channelHeaderCell + .guide-channelHeaderCell {
contain: strict; margin-top: -1px;
display: flex;
flex-direction: column;
border-style: solid;
border-width: 1px 0 1px 0;
} }
.channelPrograms + .channelPrograms, .guide-channelHeaderCell + .guide-channelHeaderCell { .channelPrograms-tv,
margin-top: -1px; .guide-channelHeaderCell-tv {
}
.channelPrograms-tv, .guide-channelHeaderCell-tv {
height: 3em; height: 3em;
} }
.guide-channelTimeslotHeader { .guide-channelTimeslotHeader,
border-right-color: transparent; .timeslotHeader {
}
.guide-channelTimeslotHeader, .timeslotHeader {
background: transparent !important; background: transparent !important;
height: 2.8em; height: 2.8em;
} }
@ -253,6 +261,7 @@
text-decoration: none; text-decoration: none;
overflow: hidden; overflow: hidden;
align-items: center; align-items: center;
/* Needed for Firefox */ /* Needed for Firefox */
text-align: left; text-align: left;
contain: strict; contain: strict;
@ -261,7 +270,7 @@
} }
.guideProgramName { .guideProgramName {
padding: 0 .7em 0; padding: 0 0.7em 0;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
align-items: center; align-items: center;
@ -269,7 +278,8 @@
position: relative; position: relative;
flex-grow: 1; flex-grow: 1;
contain: layout style paint; contain: layout style paint;
/*transition: transform 60ms ease-out;*/
/* transition: transform 60ms ease-out; */
} }
.guide-programNameCaret { .guide-programNameCaret {
@ -289,11 +299,11 @@
.guideProgramSecondaryInfo { .guideProgramSecondaryInfo {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: .1em; margin-top: 0.1em;
} }
.programIcon { .programIcon {
margin-left: .5em; margin-left: 0.5em;
height: 1em; height: 1em;
width: 1em; width: 1em;
font-size: 1.6em; font-size: 1.6em;
@ -304,16 +314,16 @@
.guide-programTextIcon { .guide-programTextIcon {
font-weight: bold; font-weight: bold;
font-size: .9em; font-size: 0.9em;
padding: .16em .3em; padding: 0.16em 0.3em;
border-radius: .25em; border-radius: 0.25em;
margin-right: .35em; margin-right: 0.35em;
width: auto; width: auto;
height: auto; height: auto;
} }
.guide-programTextIcon-tv { .guide-programTextIcon-tv {
font-size: .74em; font-size: 0.74em;
} }
.guideChannelNumber { .guideChannelNumber {
@ -345,14 +355,12 @@
} }
@media all and (min-width: 62.5em) { @media all and (min-width: 62.5em) {
.guideChannelName { .guideChannelName {
max-width: 40%; max-width: 40%;
} }
} }
@media all and (max-width: 62.5em) { @media all and (max-width: 62.5em) {
.guideChannelNumber { .guideChannelNumber {
display: none; display: none;
} }
@ -368,21 +376,19 @@
flex-direction: column; flex-direction: column;
} }
.channelsContainer, .programGrid { .channelsContainer,
.programGrid {
contain: layout style paint; contain: layout style paint;
} }
.programCell, .guide-channelHeaderCell { .timerIcon,
outline: none !important; .seriesTimerIcon {
} color: #c33 !important;
.timerIcon, .seriesTimerIcon {
color: #cc3333 !important;
} }
.seriesTimerIcon-inactive { .seriesTimerIcon-inactive {
color: inherit !important; color: inherit !important;
opacity: .7; opacity: 0.7;
} }
.guideOptions { .guideOptions {
@ -392,7 +398,6 @@
} }
@media all and (max-width: 50em), all and (max-height: 37.5em) { @media all and (max-width: 50em), all and (max-height: 37.5em) {
.tvGuideHeader { .tvGuideHeader {
padding-left: 0; padding-left: 0;
} }
@ -415,16 +420,16 @@
} }
.guide-date-tab-button { .guide-date-tab-button {
padding: .3em .7em !important; padding: 0.3em 0.7em !important;
margin: 0 .3em !important; margin: 0 0.3em !important;
font-weight: normal; font-weight: normal;
} }
.guide-date-tab-button.emby-tab-button-active { .guide-date-tab-button.emby-tab-button-active {
border-color: transparent !important; border-color: transparent !important;
} }
.guide-date-tab-button.show-focus:focus { .guide-date-tab-button.show-focus:focus {
border-radius: .15em !important; border-radius: 0.15em !important;
transform: none !important; transform: none !important;
} }

View file

@ -1,15 +1,15 @@
.newTvProgram { .newTvProgram {
background: #3388cc; background: #38c;
color: #fff; color: #fff;
} }
.liveTvProgram { .liveTvProgram {
background: #cc3333; background: #c33;
color: #fff; color: #fff;
} }
.premiereTvProgram { .premiereTvProgram {
background: #EF6C00; background: #ef6c00;
color: #fff; color: #fff;
} }

View file

@ -1,23 +1,24 @@
.homeLibraryButton { .homeLibraryButton {
min-width: 18%; min-width: 18%;
margin: .5em !important; margin: 0.5em !important;
} }
@media all and (max-width: 50em) { @media all and (max-width: 50em) {
.homeLibraryButton { .homeLibraryButton {
width: 46% !important; width: 46% !important;
} }
} }
.homeLibraryIcon { .homeLibraryIcon {
margin-left: .5em; margin-left: 0.5em;
margin-right: .5em; margin-right: 0.5em;
flex-shrink: 0 -webkit-flex-shrink: 0;
flex-shrink: 0;
} }
.homeLibraryText { .homeLibraryText {
white-space: nowrap; white-space: nowrap;
-o-text-overflow: ellipsis;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden overflow: hidden;
} }

View file

@ -1054,7 +1054,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
var options = { var options = {
video: videoElement, video: videoElement,
subUrl: getTextTrackUrl(track, item), subUrl: getTextTrackUrl(track, item),
fonts: attachments.map(i => i.DeliveryUrl), fonts: attachments.map(function (i) {
return i.DeliveryUrl;
}),
workerUrl: appRouter.baseUrl() + "/libraries/subtitles-octopus-worker.js", workerUrl: appRouter.baseUrl() + "/libraries/subtitles-octopus-worker.js",
onError: function() { onError: function() {
htmlMediaHelper.onErrorInternal(self, 'mediadecodeerror') htmlMediaHelper.onErrorInternal(self, 'mediadecodeerror')
@ -1401,7 +1403,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
dlg.classList.add('videoPlayerContainer'); dlg.classList.add('videoPlayerContainer');
if (options.backdropUrl) { if (options.backdropUrl) {
dlg.classList.add('videoPlayerContainer-withBackdrop'); dlg.classList.add('videoPlayerContainer-withBackdrop');
dlg.style.backgroundImage = "url('" + options.backdropUrl + "')"; dlg.style.backgroundImage = "url('" + options.backdropUrl + "')";
} }
@ -1410,11 +1411,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
dlg.classList.add('videoPlayerContainer-onTop'); dlg.classList.add('videoPlayerContainer-onTop');
} }
// playsinline new for iOS 10
// https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_0.html
var html = ''; var html = '';
var cssClass = 'htmlvideoplayer'; var cssClass = 'htmlvideoplayer';
if (!browser.chromecast) { if (!browser.chromecast) {
@ -1449,7 +1446,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
self._mediaElement = videoElement; self._mediaElement = videoElement;
if (mediaManager) { if (mediaManager) {
if (!mediaManager.embyInit) { if (!mediaManager.embyInit) {
initMediaManager(); initMediaManager();
mediaManager.embyInit = true; mediaManager.embyInit = true;
@ -1465,9 +1461,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
} else { } else {
resolve(videoElement); resolve(videoElement);
} }
}); });
} else { } else {
if (options.backdropUrl) { if (options.backdropUrl) {
dlg.classList.add('videoPlayerContainer-withBackdrop'); dlg.classList.add('videoPlayerContainer-withBackdrop');

View file

@ -42,6 +42,7 @@ video::-webkit-media-controls {
.htmlvideoplayer::cue { .htmlvideoplayer::cue {
background-color: transparent; background-color: transparent;
text-shadow: 0.14em 0.14em 0.14em rgba(0, 0, 0, 1); text-shadow: 0.14em 0.14em 0.14em rgba(0, 0, 0, 1);
-webkit-font-smoothing: antialiased;
font-family: inherit; font-family: inherit;
} }
@ -71,7 +72,7 @@ video::-webkit-media-controls {
@keyframes htmlvideoplayer-zoomin { @keyframes htmlvideoplayer-zoomin {
from { from {
transform: scale3d(0.2, 0.2, 0.2); transform: scale3d(0.2, 0.2, 0.2);
opacity: .6; opacity: 0.6;
} }
to { to {

View file

@ -1,5 +1,22 @@
.lazy-image-fadein { .lazy-image-fadein {
opacity: 0;
animation: lazy-image-fadein 330ms ease-in normal both; animation: lazy-image-fadein 330ms ease-in normal both;
-webkit-animation-duration: 0.8s;
-moz-animation-duration: 0.8s;
-o-animation-duration: 0.8s;
animation-duration: 0.8s;
-webkit-animation-name: popInAnimation;
-moz-animation-name: popInAnimation;
-o-animation-name: popInAnimation;
animation-name: popInAnimation;
-webkit-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: cubic-bezier(0, 0, 0.5, 1);
-moz-animation-timing-function: cubic-bezier(0, 0, 0.5, 1);
-o-animation-timing-function: cubic-bezier(0, 0, 0.5, 1);
animation-timing-function: cubic-bezier(0, 0, 0.5, 1);
} }
.lazy-image-fadein-fast { .lazy-image-fadein-fast {
@ -16,14 +33,6 @@
} }
} }
.lazy-image-fadein {
opacity: 0;
animation-duration: .8s;
animation-name: popInAnimation;
animation-fill-mode: forwards;
animation-timing-function: cubic-bezier(0,0,.5,1);
}
@keyframes popInAnimation { @keyframes popInAnimation {
0% { 0% {
opacity: 0; opacity: 0;

View file

@ -1,6 +1,7 @@
.imageEditor-dropZone { .imageEditor-dropZone {
border: .2em dashed currentcolor; border: 0.2em dashed currentcolor;
border-radius: .25em; border-radius: 0.25em;
/* padding: 1.6em; */ /* padding: 1.6em; */
text-align: center; text-align: center;
position: relative; position: relative;

View file

@ -1,8 +1,8 @@
.itemProgressBar { .itemProgressBar {
background: #333; background: #333;
background: rgba(51,51,51,.8); background: rgba(51, 51, 51, 0.8);
position: relative; position: relative;
height: .28em; height: 0.28em;
} }
.itemProgressBarForeground { .itemProgressBarForeground {
@ -14,6 +14,7 @@
.indicator { .indicator {
border-radius: 100em; border-radius: 100em;
display: -webkit-flex;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -23,7 +24,7 @@
} }
.timerIndicator { .timerIndicator {
color: #CB272A; color: #cb272a;
} }
.timerIndicator-inactive { .timerIndicator-inactive {
@ -31,7 +32,7 @@
} }
.indicator + .indicator { .indicator + .indicator {
margin-left: .25em; margin-left: 0.25em;
} }
.indicatorIcon { .indicatorIcon {
@ -42,6 +43,7 @@
.countIndicator { .countIndicator {
border-radius: 100em; border-radius: 100em;
display: -webkit-flex;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -53,6 +55,7 @@
.playedIndicator { .playedIndicator {
border-radius: 100em; border-radius: 100em;
display: -webkit-flex;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -64,6 +67,7 @@
.videoIndicator { .videoIndicator {
background: #444; background: #444;
border-radius: 100em; border-radius: 100em;
display: -webkit-flex;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -81,12 +85,13 @@
color: #333; color: #333;
} }
.missingIndicator, .unairedIndicator { .missingIndicator,
background: #cc3333; .unairedIndicator {
padding: .25em .5em; background: #c33;
padding: 0.25em 0.5em;
border-radius: 100em; border-radius: 100em;
color: #fff; color: #fff;
font-size: 84%; font-size: 84%;
font-weight: 500; font-weight: 500;
margin: 0 .25em; margin: 0 0.25em;
} }

View file

@ -1,36 +1,133 @@
define(['inputManager', 'focusManager'], function(inputManager, focusManager) { define(["inputManager", "layoutManager"], function (inputManager, layoutManager) {
'use strict'; "use strict";
console.log("keyboardnavigation"); console.log("keyboardnavigation");
/**
* Key name mapping.
*/
// Add more to support old browsers
var KeyNames = {
13: "Enter",
19: "Pause",
27: "Escape",
32: "Space",
37: "ArrowLeft",
38: "ArrowUp",
39: "ArrowRight",
40: "ArrowDown",
// MediaRewind (Tizen/WebOS)
412: "MediaRewind",
// MediaStop (Tizen/WebOS)
413: "MediaStop",
// MediaPlay (Tizen/WebOS)
415: "MediaPlay",
// MediaFastForward (Tizen/WebOS)
417: "MediaFastForward",
// Back (WebOS)
461: "Back",
// Back (Tizen)
10009: "Back",
// MediaTrackPrevious (Tizen)
10232: "MediaTrackPrevious",
// MediaTrackNext (Tizen)
10233: "MediaTrackNext",
// MediaPlayPause (Tizen)
10252: "MediaPlayPause"
};
var hasFieldKey = false;
try {
hasFieldKey = "key" in new KeyboardEvent("keydown");
} catch (e) {
console.log("error checking 'key' field");
}
if (!hasFieldKey) {
// Add [a..z]
for (var i = 65; i <= 90; i++) {
KeyNames[i] = String.fromCharCode(i).toLowerCase();
}
}
/**
* Returns key name from event.
*
* @param {KeyboardEvent} keyboard event
* @return {string} key name
*/
function getKeyName(event) {
return KeyNames[event.keyCode] || event.key;
}
function enable() { function enable() {
document.addEventListener('keydown', function(e) { document.addEventListener("keydown", function (e) {
var capture = true; var capture = true;
switch (e.keyCode) { switch (getKeyName(e)) {
case 37: // ArrowLeft case "ArrowLeft":
inputManager.handle('left'); inputManager.handle("left");
break; break;
case 38: // ArrowUp case "ArrowUp":
inputManager.handle('up'); inputManager.handle("up");
break; break;
case 39: // ArrowRight case "ArrowRight":
inputManager.handle('right'); inputManager.handle("right");
break; break;
case 40: // ArrowDown case "ArrowDown":
inputManager.handle('down'); inputManager.handle("down");
break; break;
case "Back":
inputManager.handle("back");
break;
case "Escape":
if (layoutManager.tv) {
inputManager.handle("back");
} else {
capture = false;
}
break;
case "MediaPlay":
inputManager.handle("play");
break;
case "Pause":
inputManager.handle("pause");
break;
case "MediaPlayPause":
inputManager.handle("playpause");
break;
case "MediaRewind":
inputManager.handle("rewind");
break;
case "MediaFastForward":
inputManager.handle("fastforward");
break;
case "MediaStop":
inputManager.handle("stop");
break;
case "MediaTrackPrevious":
inputManager.handle("previoustrack");
break;
case "MediaTrackNext":
inputManager.handle("nexttrack");
break;
default: default:
capture = false; capture = false;
} }
if (capture) { if (capture) {
console.log("Disabling default event handling"); console.log("Disabling default event handling");
e.preventDefault(); e.preventDefault();
} }
}); });
} }
return { return {
enable: enable enable: enable,
getKeyName: getKeyName
}; };
}); });

View file

@ -2,7 +2,6 @@ define(['browser', 'appSettings', 'events'], function (browser, appSettings, eve
'use strict'; 'use strict';
function setLayout(instance, layout, selectedLayout) { function setLayout(instance, layout, selectedLayout) {
if (layout === selectedLayout) { if (layout === selectedLayout) {
instance[layout] = true; instance[layout] = true;
document.documentElement.classList.add('layout-' + layout); document.documentElement.classList.add('layout-' + layout);
@ -38,7 +37,6 @@ define(['browser', 'appSettings', 'events'], function (browser, appSettings, eve
}; };
LayoutManager.prototype.getSavedLayout = function (layout) { LayoutManager.prototype.getSavedLayout = function (layout) {
return appSettings.get('layout'); return appSettings.get('layout');
}; };

View file

@ -1,5 +1,5 @@
.lazy { .lazy {
/* In edge, intersection observer will not fire on 0px sized elements */ /* In edge, intersection observer will not fire on 0px sized elements */
min-width: .1em; min-width: 0.1em;
min-height: .1em; min-height: 0.1em;
} }

View file

@ -10,7 +10,7 @@
display: block; display: block;
align-items: center; align-items: center;
text-align: left; text-align: left;
padding: .25em .25em .25em .5em; padding: 0.25em 0.25em 0.25em 0.5em;
cursor: pointer; cursor: pointer;
overflow: hidden; overflow: hidden;
} }
@ -50,14 +50,18 @@
} }
.listItem-border.show-focus:focus { .listItem-border.show-focus:focus {
transform: scale(1.0) !important; transform: scale(1) !important;
} }
.listItemImage, .listItemIcon, .listItemAside { .listItemImage,
.listItemIcon,
.listItemAside {
flex-shrink: 0; flex-shrink: 0;
} }
.listItemBody, .listItemImage, .listItemIcon { .listItemBody,
.listItemImage,
.listItemIcon {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
} }
@ -71,13 +75,13 @@
} }
.listViewDragHandle { .listViewDragHandle {
margin-left: -.25em !important; margin-left: -0.25em !important;
touch-action: none; touch-action: none;
} }
.listItemBody { .listItemBody {
flex-grow: 1; flex-grow: 1;
padding: .85em .75em; padding: 0.85em 0.75em;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
flex-direction: column; flex-direction: column;
@ -85,8 +89,15 @@
justify-content: center; justify-content: center;
} }
.listItem,
.listItemBody,
.listItemMediaInfo {
display: flex;
contain: layout style;
}
.layout-tv .listItemBody { .layout-tv .listItemBody {
padding: .35em .75em; padding: 0.35em 0.75em;
} }
.listItemBody-noleftpadding { .listItemBody-noleftpadding {
@ -95,7 +106,7 @@
.listItemBodyText { .listItemBodyText {
margin: 0; margin: 0;
padding: .1em 0; padding: 0.1em 0;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
@ -121,7 +132,7 @@
width: 19.5vw; width: 19.5vw;
height: 13vw; height: 13vw;
background-position: center center; background-position: center center;
margin-right: .75em; margin-right: 0.75em;
} }
.listItemImageButton { .listItemImageButton {
@ -161,13 +172,13 @@
} }
.listItemBody { .listItemBody {
padding-left: .75em; padding-left: 0.75em;
} }
} }
@media all and (max-width: 50em) { @media all and (max-width: 50em) {
.listItemBody { .listItemBody {
padding-right: .5em; padding-right: 0.5em;
} }
} }
@ -180,15 +191,15 @@
width: 1em !important; width: 1em !important;
height: 1em !important; height: 1em !important;
font-size: 143%; font-size: 143%;
padding: 0 .25em 0 0; padding: 0 0.25em 0 0;
} }
.listItemIcon:not(.listItemIcon-transparent) { .listItemIcon:not(.listItemIcon-transparent) {
background-color: #00a4dc; background-color: #00a4dc;
color: #fff; color: #fff;
padding: .5em; padding: 0.5em;
border-radius: 100em; border-radius: 100em;
margin: 0 .2em 0 .4em; margin: 0 0.2em 0 0.4em;
} }
.listItemProgressBar { .listItemProgressBar {
@ -199,7 +210,7 @@
} }
.listItem:focus { .listItem:focus {
border-radius: .2em; border-radius: 0.2em;
} }
.listItem:focus .secondary { .listItem:focus .secondary {
@ -207,7 +218,7 @@
} }
.listItem-focusscale { .listItem-focusscale {
transition: transform .2s ease-out; transition: transform 0.2s ease-out;
} }
.listItem-focusscale:focus { .listItem-focusscale:focus {
@ -215,7 +226,7 @@
} }
.paperList { .paperList {
margin: .5em auto; margin: 0.5em auto;
} }
.paperList-clear { .paperList-clear {
@ -234,26 +245,23 @@
} }
.listItemIndicators { .listItemIndicators {
right: .324em; right: 0.324em;
top: .324em; top: 0.324em;
position: absolute; position: absolute;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.listItem, .listItemBody, .listItemMediaInfo {
display: flex;
contain: layout style;
}
.listItem-bottomoverview { .listItem-bottomoverview {
font-size: 88%; font-size: 88%;
margin-bottom: 1em; margin-bottom: 1em;
margin-top: .2em; margin-top: 0.2em;
} }
@media all and (max-width: 50em) { @media all and (max-width: 50em) {
.listItem .endsAt, .listItem .criticRating, .listItem-overview { .listItem .endsAt,
.listItem .criticRating,
.listItem-overview {
display: none !important; display: none !important;
} }
} }

View file

@ -7,11 +7,20 @@
.mdlSpinnerActive { .mdlSpinnerActive {
display: inline-block; display: inline-block;
-webkit-animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite;
animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite; animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite;
} }
@-webkit-keyframes mdl-spinner__container-rotate {
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes mdl-spinner__container-rotate { @keyframes mdl-spinner__container-rotate {
to { to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
@ -24,67 +33,121 @@
} }
.mdl-spinner__layer-1 { .mdl-spinner__layer-1 {
border-color: rgb(66,165,245); border-color: rgb(66, 165, 245);
} }
.mdl-spinner__layer-1-active { .mdl-spinner__layer-1-active {
-webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
} }
.mdl-spinner__layer-2 { .mdl-spinner__layer-2 {
border-color: rgb(244,67,54); border-color: rgb(244, 67, 54);
} }
.mdl-spinner__layer-2-active { .mdl-spinner__layer-2-active {
-webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
} }
.mdl-spinner__layer-3 { .mdl-spinner__layer-3 {
border-color: rgb(253,216,53); border-color: rgb(253, 216, 53);
} }
.mdl-spinner__layer-3-active { .mdl-spinner__layer-3-active {
-webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
} }
.mdl-spinner__layer-4 { .mdl-spinner__layer-4 {
border-color: rgb(76,175,80); border-color: rgb(76, 175, 80);
} }
.mdl-spinner__layer-4-active { .mdl-spinner__layer-4-active {
-webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
} }
@keyframes mdl-spinner__fill-unfill-rotate { @-webkit-keyframes mdl-spinner__fill-unfill-rotate {
12.5% { 12.5% {
-webkit-transform: rotate(135deg);
transform: rotate(135deg); transform: rotate(135deg);
} }
25% { 25% {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); transform: rotate(270deg);
} }
37.5% { 37.5% {
-webkit-transform: rotate(405deg);
transform: rotate(405deg); transform: rotate(405deg);
} }
50% { 50% {
-webkit-transform: rotate(540deg);
transform: rotate(540deg); transform: rotate(540deg);
} }
62.5% { 62.5% {
-webkit-transform: rotate(675deg);
transform: rotate(675deg); transform: rotate(675deg);
} }
75% { 75% {
-webkit-transform: rotate(810deg);
transform: rotate(810deg); transform: rotate(810deg);
} }
87.5% { 87.5% {
-webkit-transform: rotate(945deg);
transform: rotate(945deg); transform: rotate(945deg);
} }
to { to {
-webkit-transform: rotate(1080deg);
transform: rotate(1080deg);
}
}
@keyframes mdl-spinner__fill-unfill-rotate {
12.5% {
-webkit-transform: rotate(135deg);
transform: rotate(135deg);
}
25% {
-webkit-transform: rotate(270deg);
transform: rotate(270deg);
}
37.5% {
-webkit-transform: rotate(405deg);
transform: rotate(405deg);
}
50% {
-webkit-transform: rotate(540deg);
transform: rotate(540deg);
}
62.5% {
-webkit-transform: rotate(675deg);
transform: rotate(675deg);
}
75% {
-webkit-transform: rotate(810deg);
transform: rotate(810deg);
}
87.5% {
-webkit-transform: rotate(945deg);
transform: rotate(945deg);
}
to {
-webkit-transform: rotate(1080deg);
transform: rotate(1080deg); transform: rotate(1080deg);
} }
} }
@ -98,6 +161,32 @@
* - https://github.com/Polymer/paper-spinner/issues/9 * - https://github.com/Polymer/paper-spinner/issues/9
* - https://code.google.com/p/chromium/issues/detail?id=436255 * - https://code.google.com/p/chromium/issues/detail?id=436255
*/ */
@-webkit-keyframes mdl-spinner__layer-1-fade-in-out {
from {
opacity: 0.99;
}
25% {
opacity: 0.99;
}
26% {
opacity: 0;
}
89% {
opacity: 0;
}
90% {
opacity: 0.99;
}
100% {
opacity: 0.99;
}
}
@keyframes mdl-spinner__layer-1-fade-in-out { @keyframes mdl-spinner__layer-1-fade-in-out {
from { from {
opacity: 0.99; opacity: 0.99;
@ -124,6 +213,28 @@
} }
} }
@-webkit-keyframes mdl-spinner__layer-2-fade-in-out {
from {
opacity: 0;
}
15% {
opacity: 0;
}
25% {
opacity: 0.99;
}
50% {
opacity: 0.99;
}
51% {
opacity: 0;
}
}
@keyframes mdl-spinner__layer-2-fade-in-out { @keyframes mdl-spinner__layer-2-fade-in-out {
from { from {
opacity: 0; opacity: 0;
@ -146,6 +257,28 @@
} }
} }
@-webkit-keyframes mdl-spinner__layer-3-fade-in-out {
from {
opacity: 0;
}
40% {
opacity: 0;
}
50% {
opacity: 0.99;
}
75% {
opacity: 0.99;
}
76% {
opacity: 0;
}
}
@keyframes mdl-spinner__layer-3-fade-in-out { @keyframes mdl-spinner__layer-3-fade-in-out {
from { from {
opacity: 0; opacity: 0;
@ -168,6 +301,28 @@
} }
} }
@-webkit-keyframes mdl-spinner__layer-4-fade-in-out {
from {
opacity: 0;
}
65% {
opacity: 0;
}
75% {
opacity: 0.99;
}
90% {
opacity: 0.99;
}
100% {
opacity: 0;
}
}
@keyframes mdl-spinner__layer-4-fade-in-out { @keyframes mdl-spinner__layer-4-fade-in-out {
from { from {
opacity: 0; opacity: 0;
@ -190,6 +345,23 @@
} }
} }
.mdl-spinner__circle {
box-sizing: border-box;
height: 100%;
border-width: 0.21em;
border-style: solid;
border-color: inherit;
border-bottom-color: transparent !important;
border-radius: 50%;
-webkit-animation: none;
animation: none;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.mdl-spinner__circle-clipper { .mdl-spinner__circle-clipper {
display: inline-block; display: inline-block;
position: relative; position: relative;
@ -199,69 +371,97 @@
border-color: inherit; border-color: inherit;
} }
.mdl-spinner__circle-clipper .mdl-spinner__circle { .mdl-spinner__circle-clipper .mdl-spinner__circle {
width: 200%; width: 200%;
}
.mdl-spinner__circle {
box-sizing: border-box;
height: 100%;
border-width: .21em;
border-style: solid;
border-color: inherit;
border-bottom-color: transparent !important;
border-radius: 50%;
animation: none;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
} }
.mdl-spinner__circleLeft { .mdl-spinner__circleLeft {
border-right-color: transparent !important; border-right-color: transparent !important;
-webkit-transform: rotate(129deg);
transform: rotate(129deg); transform: rotate(129deg);
} }
.mdl-spinner__circleLeft-active { .mdl-spinner__circleLeft-active {
-webkit-animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
} }
.mdl-spinner__circleRight { .mdl-spinner__circleRight {
left: -100%; left: -100%;
border-left-color: transparent !important; border-left-color: transparent !important;
-webkit-transform: rotate(-129deg);
transform: rotate(-129deg); transform: rotate(-129deg);
} }
.mdl-spinner__circleRight-active { .mdl-spinner__circleRight-active {
-webkit-animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
} }
@keyframes mdl-spinner__left-spin { @-webkit-keyframes mdl-spinner__left-spin {
from { from {
-webkit-transform: rotate(130deg);
transform: rotate(130deg); transform: rotate(130deg);
} }
50% { 50% {
-webkit-transform: rotate(-5deg);
transform: rotate(-5deg); transform: rotate(-5deg);
} }
to { to {
-webkit-transform: rotate(130deg);
transform: rotate(130deg); transform: rotate(130deg);
} }
} }
@keyframes mdl-spinner__left-spin {
from {
-webkit-transform: rotate(130deg);
transform: rotate(130deg);
}
50% {
-webkit-transform: rotate(-5deg);
transform: rotate(-5deg);
}
to {
-webkit-transform: rotate(130deg);
transform: rotate(130deg);
}
}
@-webkit-keyframes mdl-spinner__right-spin {
from {
-webkit-transform: rotate(-130deg);
transform: rotate(-130deg);
}
50% {
-webkit-transform: rotate(5deg);
transform: rotate(5deg);
}
to {
-webkit-transform: rotate(-130deg);
transform: rotate(-130deg);
}
}
@keyframes mdl-spinner__right-spin { @keyframes mdl-spinner__right-spin {
from { from {
-webkit-transform: rotate(-130deg);
transform: rotate(-130deg); transform: rotate(-130deg);
} }
50% { 50% {
-webkit-transform: rotate(5deg);
transform: rotate(5deg); transform: rotate(5deg);
} }
to { to {
-webkit-transform: rotate(-130deg);
transform: rotate(-130deg); transform: rotate(-130deg);
} }
} }

View file

@ -160,7 +160,7 @@ define(["pluginManager"], function (pluginManager) {
elem.classList.add("logoScreenSaver"); elem.classList.add("logoScreenSaver");
document.body.appendChild(elem); document.body.appendChild(elem);
elem.innerHTML = '<img class="logoScreenSaverImage" src="' + pluginManager.mapPath(self, "logowhite.png") + '" />'; elem.innerHTML = '<img class="logoScreenSaverImage" src="' + pluginManager.mapPath(self, "assets/img/banner-light.png") + '" />';
} }
stopInterval(); stopInterval();

View file

@ -4,13 +4,13 @@
} }
.mediaInfoText { .mediaInfoText {
padding: .22em .5em; padding: 0.22em 0.5em;
border-radius: .25em; border-radius: 0.25em;
font-size: 92%; font-size: 92%;
display: flex; display: flex;
align-items: center; align-items: center;
white-space: nowrap; white-space: nowrap;
margin: 0 .5em 0 0; margin: 0 0.5em 0 0;
} }
.mediaInfoText-upper { .mediaInfoText-upper {
@ -21,7 +21,7 @@
width: auto; width: auto;
height: auto; height: auto;
font-size: 1.6em; font-size: 1.6em;
margin-right: .6em; margin-right: 0.6em;
} }
.mediaInfoItem:last-child { .mediaInfoItem:last-child {
@ -63,8 +63,8 @@
.mediaInfoProgramAttribute { .mediaInfoProgramAttribute {
text-transform: uppercase; text-transform: uppercase;
padding: .16em .6em; padding: 0.16em 0.6em;
border-radius: .15em; border-radius: 0.15em;
font-size: 80%; font-size: 80%;
} }
@ -73,13 +73,13 @@
} }
.mediaInfoOfficialRating { .mediaInfoOfficialRating {
border: .09em solid currentColor; border: 0.09em solid currentColor;
padding: 0 .6em; padding: 0 0.6em;
height: 1.3em; height: 1.3em;
line-height: 1.8em; line-height: 1.8em;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
border-radius: .1em; border-radius: 0.1em;
font-size: 96%; font-size: 96%;
} }

View file

@ -4,7 +4,7 @@
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
background-color: rgba(0, 0, 0, .3); background-color: rgba(0, 0, 0, 0.3);
z-index: 99998; z-index: 99998;
} }
@ -13,7 +13,7 @@
top: 0; top: 0;
left: 0; left: 0;
right: 0; right: 0;
padding: 1em .5em; padding: 1em 0.5em;
display: flex; display: flex;
align-items: center; align-items: center;
z-index: 99999; z-index: 99999;

View file

@ -3,40 +3,50 @@
position: fixed; position: fixed;
top: 0; top: 0;
bottom: 0; bottom: 0;
contain: strict contain: strict;
} }
.touch-menu-la { .touch-menu-la {
background-color: #FFF; background-color: #fff;
will-change: transform; will-change: transform;
display: -webkit-box;
display: -webkit-flex;
display: flex; display: flex;
-webkit-transition: -webkit-transform ease-out 40ms, left ease-out 260ms;
-o-transition: transform ease-out 40ms, left ease-out 260ms;
transition: transform ease-out 40ms, left ease-out 260ms; transition: transform ease-out 40ms, left ease-out 260ms;
z-index: 1099 z-index: 1099;
} }
.touch-menu-la.transition { .touch-menu-la.transition {
transition: transform ease-out 240ms, left ease-out 260ms -webkit-transition: -webkit-transform ease-out 240ms, left ease-out 260ms;
-o-transition: transform ease-out 240ms, left ease-out 260ms;
transition: transform ease-out 240ms, left ease-out 260ms;
} }
.drawer-open { .drawer-open {
box-shadow: 2px 0 12px rgba(0, 0, 0, .4) -webkit-box-shadow: 2px 0 12px rgba(0, 0, 0, 0.4);
box-shadow: 2px 0 12px rgba(0, 0, 0, 0.4);
} }
.scrollContainer { .scrollContainer {
flex-grow: 1 -webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
} }
.tmla-mask { .tmla-mask {
left: 0; left: 0;
right: 0; right: 0;
background-color: #000;
opacity: 0; opacity: 0;
z-index: 1098; z-index: 1098;
transition: opacity ease-in-out .38s, visibility ease-in-out .38s; -webkit-transition: opacity ease-in-out 0.38s, visibility ease-in-out 0.38s;
-o-transition: opacity ease-in-out 0.38s, visibility ease-in-out 0.38s;
transition: opacity ease-in-out 0.38s, visibility ease-in-out 0.38s;
will-change: opacity; will-change: opacity;
background-color: rgba(0, 0, 0, .3) background-color: rgba(0, 0, 0, 0.3);
} }
.tmla-mask.backdrop { .tmla-mask.backdrop {
opacity: 1 opacity: 1;
} }

View file

@ -16,7 +16,7 @@
} }
.nowPlayingBar-hidden { .nowPlayingBar-hidden {
transform: translate3d(0,100%,0); transform: translate3d(0, 100%, 0);
} }
.nowPlayingBarTop { .nowPlayingBarTop {
@ -28,7 +28,8 @@
justify-content: center; justify-content: center;
} }
.mediaButton, .nowPlayingBarUserDataButtons .btnUserItemRating { .mediaButton,
.nowPlayingBarUserDataButtons .btnUserItemRating {
vertical-align: middle; vertical-align: middle;
margin: 0; margin: 0;
text-align: center; text-align: center;
@ -62,6 +63,7 @@
.nowPlayingBarCenter { .nowPlayingBarCenter {
vertical-align: middle; vertical-align: middle;
text-align: center; text-align: center;
/* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */ /* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */
z-index: 2; z-index: 2;
flex-grow: 1; flex-grow: 1;
@ -74,7 +76,7 @@
.nowPlayingBarPositionContainer { .nowPlayingBarPositionContainer {
position: absolute !important; position: absolute !important;
left: 0; left: 0;
top: -.56em; top: -0.56em;
right: 0; right: 0;
z-index: 1; z-index: 1;
} }
@ -89,7 +91,8 @@
.nowPlayingBarRight { .nowPlayingBarRight {
position: relative; position: relative;
margin: 0 .5em 0 auto; margin: 0 0.5em 0 auto;
/* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */ /* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */
z-index: 2; z-index: 2;
display: flex; display: flex;
@ -121,7 +124,6 @@
} }
@media all and (max-width: 70em) { @media all and (max-width: 70em) {
.nowPlayingBarRight .nowPlayingBarUserDataButtons { .nowPlayingBarRight .nowPlayingBarUserDataButtons {
display: none; display: none;
} }
@ -155,13 +157,15 @@
.nowPlayingBarRight .nowPlayingBarVolumeSliderContainer { .nowPlayingBarRight .nowPlayingBarVolumeSliderContainer {
display: none !important; display: none !important;
} }
.nowPlayingBarInfoContainer { .nowPlayingBarInfoContainer {
width: 70%; width: 70%;
} }
} }
@media all and (max-width: 24em) { @media all and (max-width: 24em) {
.nowPlayingBar .muteButton, .nowPlayingBar .unmuteButton { .nowPlayingBar .muteButton,
.nowPlayingBar .unmuteButton {
display: none; display: none;
} }
} }

View file

@ -1,61 +0,0 @@
define([], function () {
'use strict';
function supportsHtmlMediaAutoplay() {
return new Promise(function (resolve, reject) {
var timeout;
var elem = document.createElement('video');
var elemStyle = elem.style;
//skip the test if video itself, or the autoplay
//element on it isn't supported
if (!('autoplay' in elem)) {
reject();
return;
}
elemStyle.position = 'absolute';
elemStyle.height = 0;
elemStyle.width = 0;
elem.setAttribute('autoplay', 'autoplay');
elem.style.display = 'none';
document.body.appendChild(elem);
var testAutoplay = function (arg) {
clearTimeout(timeout);
elem.removeEventListener('playing', testAutoplay);
elem.removeEventListener('play', testAutoplay);
var supported = (arg && arg.type === 'playing') || (arg && arg.type === 'play') || elem.currentTime !== 0;
elem.parentNode.removeChild(elem);
if (supported) {
resolve();
} else {
reject();
}
};
// play needed for firefox
elem.addEventListener('play', testAutoplay);
elem.addEventListener('playing', testAutoplay);
try {
elem.src = 'data:video/mp4;base64,AAAAHGZ0eXBtcDQyAAAAAG1wNDJpc29tYXZjMQAAAz5tb292AAAAbG12aGQAAAAAzaNacc2jWnEAAV+QAAFfkAABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGGlvZHMAAAAAEICAgAcAT////3//AAACQ3RyYWsAAABcdGtoZAAAAAHNo1pxzaNacQAAAAEAAAAAAAFfkAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAEAAAABAAAAAAAd9tZGlhAAAAIG1kaGQAAAAAzaNacc2jWnEAAV+QAAFfkFXEAAAAAAAhaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAAAAAAGWbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAABVnN0YmwAAACpc3RzZAAAAAAAAAABAAAAmWF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAQAEgAAABIAAAAAAAAAAEOSlZUL0FWQyBDb2RpbmcAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAxYXZjQwH0AAr/4QAZZ/QACq609NQYBBkAAAMAAQAAAwAKjxImoAEABWjOAa8gAAAAEmNvbHJuY2xjAAYAAQAGAAAAGHN0dHMAAAAAAAAAAQAAAAUAAEZQAAAAKHN0c3oAAAAAAAAAAAAAAAUAAAIqAAAACAAAAAgAAAAIAAAACAAAAChzdHNjAAAAAAAAAAIAAAABAAAABAAAAAEAAAACAAAAAQAAAAEAAAAYc3RjbwAAAAAAAAACAAADYgAABaQAAAAUc3RzcwAAAAAAAAABAAAAAQAAABFzZHRwAAAAAAREREREAAAAb3VkdGEAAABnbWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcgAAAAAAAAAAAAAAAAAAAAA6aWxzdAAAADKpdG9vAAAAKmRhdGEAAAABAAAAAEhhbmRCcmFrZSAwLjkuOCAyMDEyMDcxODAwAAACUm1kYXQAAAHkBgX/4NxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxMjAgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDExIC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MCByZWY9MSBkZWJsb2NrPTE6MDowIGFuYWx5c2U9MHgxOjAgbWU9ZXNhIHN1Ym1lPTkgcHN5PTAgbWl4ZWRfcmVmPTAgbWVfcmFuZ2U9NCBjaHJvbWFfbWU9MSB0cmVsbGlzPTAgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0wIGNocm9tYV9xcF9vZmZzZXQ9MCB0aHJlYWRzPTYgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTUwIGtleWludF9taW49NSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmM9Y3FwIG1idHJlZT0wIHFwPTAAgAAAAD5liISscR8A+E4ACAACFoAAITAAAgsAAPgYCoKgoC+L4vi+KAvi+L4YfAEAACMzgABF9AAEUGUgABDJiXnf4AAAAARBmiKUAAAABEGaQpQAAAAEQZpilAAAAARBmoKU';
var promise = elem.play();
if (promise && promise.catch) {
promise.catch(reject);
}
timeout = setTimeout(testAutoplay, 500);
} catch (e) {
reject();
return;
}
});
}
return {
supportsHtmlMediaAutoplay: supportsHtmlMediaAutoplay
};
});

View file

@ -4,11 +4,11 @@
right: 3%; right: 3%;
z-index: 100000; z-index: 100000;
background: #222; background: #222;
background: rgba(0, 0, 0, .8); background: rgba(0, 0, 0, 0.8);
padding: 1em; padding: 1em;
color: #fff; color: #fff;
backdrop-filter: blur(5px); backdrop-filter: blur(5px);
border-radius: .25em; border-radius: 0.25em;
transition: opacity 200ms ease-out; transition: opacity 200ms ease-out;
} }
@ -19,22 +19,22 @@
.iconOsdIcon { .iconOsdIcon {
font-size: 320%; font-size: 320%;
display: block; display: block;
margin: .25em .7em; margin: 0.25em 0.7em;
} }
.iconOsdProgressOuter { .iconOsdProgressOuter {
margin: 1.5em .25em 1em; margin: 1.5em 0.25em 1em;
height: .35em; height: 0.35em;
background: #222; background: #222;
border-radius: .25em; border-radius: 0.25em;
} }
.iconOsdProgressInner { .iconOsdProgressInner {
background: #00a4dc; background: #00a4dc;
height: 100%; height: 100%;
border-radius: .25em; border-radius: 0.25em;
} }
.brightnessOsdProgressInner { .brightnessOsdProgressInner {
background: #FF9800; background: #ff9800;
} }

View file

@ -1,11 +1,10 @@
.playerStats { .playerStats {
background: rgba(28,28,28,0.8); background: rgba(28, 28, 28, 0.8);
border-radius: .3em; border-radius: 0.3em;
color: #fff; color: #fff;
left: 1.5em; left: 1.5em;
position: absolute; position: absolute;
top: 5em; top: 5em;
color: #fff;
} }
.playerStats-tv { .playerStats-tv {
@ -23,8 +22,8 @@
.playerStats-closeButton { .playerStats-closeButton {
position: absolute; position: absolute;
top: .25em; top: 0.25em;
right: .25em; right: 0.25em;
color: #ccc; color: #ccc;
z-index: 1; z-index: 1;
} }
@ -44,7 +43,7 @@
.playerStats-stat-label { .playerStats-stat-label {
font-weight: 500; font-weight: 500;
margin: 0 .5em 0 0; margin: 0 0.5em 0 0;
} }
.playerStats-stat-header { .playerStats-stat-header {

View file

@ -9,7 +9,7 @@
} }
.recordingDialog-itemName { .recordingDialog-itemName {
margin-top: .7em; margin-top: 0.7em;
} }
.recordingDetailsContainer { .recordingDetailsContainer {

View file

@ -4,9 +4,9 @@
} }
.recordingIcon-active { .recordingIcon-active {
color: #cc3333; color: #c33;
} }
.recordSeriesContainer { .recordSeriesContainer {
margin-bottom: .8em; margin-bottom: 0.8em;
} }

View file

@ -1,49 +1,89 @@
.nowPlayingInfoContainer { .nowPlayingInfoContainer {
display: -webkit-box;
display: -webkit-flex;
display: flex; display: flex;
flex-direction: row -webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
flex-direction: row;
} }
.navigationSection { .navigationSection {
text-align: center text-align: center;
}
.btnArrowUp {
border-radius: 40% 40% 10% 10%;
}
.btnArrowLeft {
border-radius: 40% 10% 10% 40%;
}
.btnArrowRight {
border-radius: 10% 40% 40% 10%;
}
.btnArrowDown {
border-radius: 10% 10% 40% 40%;
}
.btnOk {
border-radius: 10%;
} }
.nowPlayingPageTitle { .nowPlayingPageTitle {
margin: 0 0 .5em .5em margin: 0 0 0.5em 0.5em;
} }
.nowPlayingPositionSliderContainer { .nowPlayingPositionSliderContainer {
margin: .7em 0 .7em 1em margin: 0.7em 0 0.7em 1em;
} }
.nowPlayingInfoButtons { .nowPlayingInfoButtons {
display: -webkit-box;
display: -webkit-flex;
display: flex; display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center; align-items: center;
flex-wrap: wrap -webkit-flex-wrap: wrap;
flex-wrap: wrap;
} }
.nowPlayingInfoControls, .nowPlayingInfoControls,
.nowPlayingTime { .nowPlayingTime {
display: flex; display: flex;
display: -webkit-box;
display: -webkit-flex;
} }
.nowPlayingPageImageContainer { .nowPlayingPageImageContainer {
width: 20%; width: 20%;
margin-right: .25em; margin-right: 0.25em;
position: relative; position: relative;
flex-shrink: 0 -webkit-flex-shrink: 0;
flex-shrink: 0;
} }
@media all and (min-width:50em) { @media all and (min-width: 50em) {
.nowPlayingPageImageContainer { .nowPlayingPageImageContainer {
width: 16% width: 16%;
} }
} }
.nowPlayingInfoControls { .nowPlayingInfoControls {
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1; flex-grow: 1;
display: flex; display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column; flex-direction: column;
justify-content: center -webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
} }
.nowPlayingPageImage { .nowPlayingPageImage {
@ -51,118 +91,149 @@
left: 0; left: 0;
right: 0; right: 0;
width: 100%; width: 100%;
-webkit-box-shadow: 0 0 1.9vh #000;
box-shadow: 0 0 1.9vh #000; box-shadow: 0 0 1.9vh #000;
border: .1em solid #222; border: 0.1em solid #222;
user-drag: none; user-drag: none;
user-select: none; user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
} }
@media all and (orientation:portrait) and (max-width:50em) { @media all and (orientation: portrait) and (max-width: 50em) {
.nowPlayingInfoContainer { .nowPlayingInfoContainer {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-webkit-flex-direction: column !important;
flex-direction: column !important; flex-direction: column !important;
align-items: center -webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
} }
.nowPlayingPageTitle { .nowPlayingPageTitle {
text-align: center; text-align: center;
margin: .5em 0 .75em margin: 0.5em 0 0.75em;
} }
.nowPlayingPositionSliderContainer { .nowPlayingPositionSliderContainer {
margin: .7em 1em margin: 0.7em 1em;
} }
.nowPlayingInfoButtons { .nowPlayingInfoButtons {
justify-content: center -webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
} }
.nowPlayingPageImageContainer { .nowPlayingPageImageContainer {
width: auto; width: auto;
margin-right: 0 margin-right: 0;
} }
.nowPlayingInfoControls { .nowPlayingInfoControls {
margin-top: 1em; margin-top: 1em;
max-width: 100% max-width: 100%;
} }
.nowPlayingPageImage { .nowPlayingPageImage {
width: auto; width: auto;
height: 36vh height: 36vh;
} }
} }
@media all and (orientation:portrait) and (max-width:40em) { @media all and (orientation: portrait) and (max-width: 40em) {
.nowPlayingPageImage { .nowPlayingPageImage {
height: 30vh height: 30vh;
} }
} }
.nowPlayingTime { .nowPlayingTime {
display: flex; display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center; align-items: center;
margin: 0 1em margin: 0 1em;
} }
.nowPlayingSecondaryButtons { .nowPlayingSecondaryButtons {
display: -webkit-box;
display: -webkit-flex;
display: flex; display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center; align-items: center;
-webkit-flex-wrap: wrap;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center -webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
} }
@media all and (min-width:50em) { @media all and (min-width: 50em) {
.nowPlayingSecondaryButtons { .nowPlayingSecondaryButtons {
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1; flex-grow: 1;
justify-content: flex-end -webkit-box-pack: end;
-webkit-justify-content: flex-end;
justify-content: flex-end;
} }
} }
@media all and (min-width:80em) { @media all and (min-width: 80em) {
.nowPlayingPageImageContainer { .nowPlayingPageImageContainer {
margin-right: .75em margin-right: 0.75em;
} }
} }
.nowPlayingNavButtonContainer { .nowPlayingNavButtonContainer {
width: 30em width: 30em;
} }
.smallBackdropPosterItem .cardOverlayInner>div { .smallBackdropPosterItem .cardOverlayInner > div {
white-space: nowrap; white-space: nowrap;
-o-text-overflow: ellipsis;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden overflow: hidden;
} }
.playlistIndexIndicatorImage { .playlistIndexIndicatorImage {
-webkit-background-size: initial initial !important;
background-size: initial !important; background-size: initial !important;
background-image: url(assets/img/equalizer.gif) !important; background-image: url(../../assets/img/equalizer.gif) !important;
} }
.hideVideoButtons .videoButton { .hideVideoButtons .videoButton {
display: none display: none;
} }
.nowPlayingVolumeSliderContainer { .nowPlayingVolumeSliderContainer {
width: 9em width: 9em;
} }
@media all and (max-width:50em) { @media all and (max-width: 50em) {
.nowPlayingInfoButtons .nowPlayingPageUserDataButtons { .nowPlayingInfoButtons .nowPlayingPageUserDataButtons {
display: none !important display: none !important;
}
.navigationSection .collapseContent i {
font-size: 4em;
} }
} }
@media all and (max-width:47em) { @media all and (max-width: 47em) {
.nowPlayingInfoButtons .repeatToggleButton { .nowPlayingInfoButtons .repeatToggleButton {
display: none !important display: none !important;
} }
} }
@media all and (max-width:34em) { @media all and (max-width: 34em) {
.nowPlayingInfoButtons .btnNowPlayingFastForward, .nowPlayingInfoButtons .btnNowPlayingFastForward,
.nowPlayingInfoButtons .btnNowPlayingRewind, .nowPlayingInfoButtons .btnNowPlayingRewind,
.nowPlayingInfoButtons .playlist .listItemMediaInfo { .nowPlayingInfoButtons .playlist .listItemMediaInfo {
display: none !important display: none !important;
} }
} }

View file

@ -215,23 +215,12 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
context.querySelector(".sendTextSection").classList.add("hide"); context.querySelector(".sendTextSection").classList.add("hide");
} }
if (!currentPlayer.isLocalPlayer) { if (-1 != supportedCommands.indexOf("Select") && !currentPlayer.isLocalPlayer) {
context.querySelector(".navigationSection").classList.remove("hide"); context.querySelector(".navigationSection").classList.remove("hide");
} else { } else {
context.querySelector(".navigationSection").classList.add("hide"); context.querySelector(".navigationSection").classList.add("hide");
} }
buttonVisible(context.querySelector(".btnArrowUp"), -1 != supportedCommands.indexOf("MoveUp"));
buttonVisible(context.querySelector(".btnArrowLeft"), -1 != supportedCommands.indexOf("MoveDown"));
buttonVisible(context.querySelector(".btnArrowRight"), -1 != supportedCommands.indexOf("MoveRight"));
buttonVisible(context.querySelector(".btnArrowDown"), -1 != supportedCommands.indexOf("MoveLeft"));
buttonVisible(context.querySelector(".btnOk"), -1 != supportedCommands.indexOf("Select"));
buttonVisible(context.querySelector(".btnBack"), -1 != supportedCommands.indexOf("Back"));
buttonVisible(context.querySelector(".btnContextMenu"), -1 != supportedCommands.indexOf("ToggleContextMenu"));
buttonVisible(context.querySelector(".btnShowSearch"), -1 != supportedCommands.indexOf("GoToSearch"));
buttonVisible(context.querySelector(".bthShowSettings"), -1 != supportedCommands.indexOf("GoToSettings"));
buttonVisible(context.querySelector(".btnGoHome"), -1 != supportedCommands.indexOf("GoHome"));
buttonVisible(context.querySelector(".btnStop"), null != item); buttonVisible(context.querySelector(".btnStop"), null != item);
buttonVisible(context.querySelector(".btnNextTrack"), null != item); buttonVisible(context.querySelector(".btnNextTrack"), null != item);
buttonVisible(context.querySelector(".btnPreviousTrack"), null != item); buttonVisible(context.querySelector(".btnPreviousTrack"), null != item);

View file

@ -4,8 +4,8 @@
} }
.searchfields-icon { .searchfields-icon {
margin-bottom: .1em; margin-bottom: 0.1em;
margin-right: .25em; margin-right: 0.25em;
font-size: 2em; font-size: 2em;
align-self: flex-end; align-self: flex-end;
} }

View file

@ -34,15 +34,12 @@ define(['apphost', 'userSettings', 'browser', 'events', 'pluginManager', 'backdr
id: "dark", id: "dark",
isDefault: true, isDefault: true,
isDefaultServerDashboard: true isDefaultServerDashboard: true
}, {
name: "Emby",
id: "emby"
}, { }, {
name: "Light", name: "Light",
id: "light" id: "light"
}, { }, {
name: "Purple Haze", name: "Purple Haze",
id: "purple-haze" id: "purplehaze"
}, { }, {
name: "Windows Media Center", name: "Windows Media Center",
id: "wmc" id: "wmc"

View file

@ -3,11 +3,14 @@
background: #000; background: #000;
} }
.slideshowSwiperContainer, .swiper-wrapper, .swiper-slide { .slideshowSwiperContainer,
.swiper-wrapper,
.swiper-slide {
background: #000; background: #000;
} }
.slideshowImage, .slideshowSwiperContainer { .slideshowImage,
.slideshowSwiperContainer {
position: fixed; position: fixed;
top: 0; top: 0;
right: 0; right: 0;
@ -27,11 +30,12 @@
.slideshowImageText { .slideshowImageText {
position: fixed; position: fixed;
bottom: .25em; bottom: 0.25em;
right: .5em; right: 0.5em;
color: #fff; color: #fff;
z-index: 1002; z-index: 1002;
font-weight: normal; font-weight: normal;
/* Add an outline */ /* Add an outline */
text-shadow: 3px 3px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; text-shadow: 3px 3px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
} }
@ -41,6 +45,9 @@
height: auto; height: auto;
max-width: 100%; max-width: 100%;
max-height: 100%; max-height: 100%;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
position: absolute; position: absolute;
left: 50%; left: 50%;
@ -49,26 +56,26 @@
.slideshowButtonIcon { .slideshowButtonIcon {
color: #fff; color: #fff;
opacity: .7; opacity: 0.7;
} }
.btnSlideshowPrevious { .btnSlideshowPrevious {
left: .5vh; left: 0.5vh;
top: 45vh; top: 45vh;
z-index: 1002; z-index: 1002;
position: absolute; position: absolute;
} }
.btnSlideshowNext { .btnSlideshowNext {
right: .5vh; right: 0.5vh;
top: 45vh; top: 45vh;
z-index: 1002; z-index: 1002;
position: absolute; position: absolute;
} }
.topActionButtons { .topActionButtons {
right: .5vh; right: 0.5vh;
top: .5vh; top: 0.5vh;
z-index: 1002; z-index: 1002;
position: absolute; position: absolute;
} }
@ -78,9 +85,9 @@
left: 0; left: 0;
bottom: 0; bottom: 0;
right: 0; right: 0;
background-color: rgba(0, 0, 0, .7); background-color: rgba(0, 0, 0, 0.7);
color: #fff; color: #fff;
padding: .5%; padding: 0.5%;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
@ -92,9 +99,9 @@
left: 0; left: 0;
top: 0; top: 0;
right: 0; right: 0;
background-color: rgba(0, 0, 0, .7); background-color: rgba(0, 0, 0, 0.7);
color: #fff; color: #fff;
padding: .5%; padding: 0.5%;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
@ -118,14 +125,14 @@
.slideTextInner { .slideTextInner {
margin: 0 auto; margin: 0 auto;
max-width: 60%; max-width: 60%;
background: rgba(0,0,0,.8); background: rgba(0, 0, 0, 0.8);
display: inline-block; display: inline-block;
padding: .5em 1em; padding: 0.5em 1em;
border-radius: .25em; border-radius: 0.25em;
} }
.slideTitle { .slideTitle {
margin: 0 0 .25em; margin: 0 0 0.25em;
} }
.slideSubtitle { .slideSubtitle {

View file

@ -3,8 +3,8 @@
margin-left: 30%; margin-left: 30%;
margin-right: 30%; margin-right: 30%;
height: 4.2em; height: 4.2em;
background: rgba(28,28,28,0.8); background: rgba(28, 28, 28, 0.8);
border-radius: .3em; border-radius: 0.3em;
color: #fff; color: #fff;
position: absolute; position: absolute;
} }
@ -40,7 +40,9 @@
margin-right: 1%; margin-right: 1%;
top: 2.5em; top: 2.5em;
height: 1.4em; height: 1.4em;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1; flex-grow: 1;
border-radius: .3em; border-radius: 0.3em;
z-index: 1; z-index: 1;
} }

View file

@ -3,9 +3,9 @@
min-width: 20em; min-width: 20em;
box-sizing: border-box; box-sizing: border-box;
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37); box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
border-radius: .15em; border-radius: 0.15em;
cursor: default; cursor: default;
transition: transform .3s ease-out; transition: transform 0.3s ease-out;
min-height: initial; min-height: initial;
padding: 1em 1.5em; padding: 1em 1.5em;
bottom: 1em; bottom: 1em;

View file

@ -11,6 +11,7 @@
background-color: rgba(0, 0, 0, 0.7); background-color: rgba(0, 0, 0, 0.7);
color: #fff; color: #fff;
user-select: none; user-select: none;
-webkit-touch-callout: none;
} }
.upNextDialog-hidden { .upNextDialog-hidden {
@ -27,7 +28,7 @@
position: relative; position: relative;
margin-right: 1em; margin-right: 1em;
flex-shrink: 0; flex-shrink: 0;
margin-bottom: .5em; margin-bottom: 0.5em;
} }
.upNextDialog-button { .upNextDialog-button {
@ -36,7 +37,6 @@
} }
@media all and (orientation: landscape) { @media all and (orientation: landscape) {
.upNextDialog { .upNextDialog {
flex-direction: row; flex-direction: row;
} }
@ -66,4 +66,8 @@
border: 0; border: 0;
user-drag: none; user-drag: none;
user-select: none; user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
} }

View file

@ -1,3 +1,3 @@
.btnUserDataOn { .btnUserDataOn {
color: #cc3333 !important; color: #c33 !important;
} }

View file

@ -1,5 +0,0 @@
define(['userSettingsBuilder'], function (userSettingsBuilder) {
'use strict';
return new userSettingsBuilder();
});

View file

@ -5,8 +5,10 @@
right: 0; right: 0;
bottom: 0; bottom: 0;
contain: layout style size; contain: layout style size;
/* Can't use will-change because it causes the alpha picker to move when the page scrolls*/
/*will-change: transform;*/ /* Can't use will-change because it causes the alpha picker to move when the page scrolls */
/* will-change: transform; */
} }
@keyframes view-fadeout { @keyframes view-fadeout {
@ -18,6 +20,7 @@
opacity: 0; opacity: 0;
} }
} }
@keyframes view-fadein { @keyframes view-fadein {
from { from {
opacity: 0; opacity: 0;

View file

@ -9,13 +9,13 @@
align-items: center; align-items: center;
} }
.youtubePlayerContainer.onTop { .youtubePlayerContainer.onTop {
z-index: 1000; z-index: 1000;
} }
.youtubePlayerContainer video { .youtubePlayerContainer video {
margin: 0 !important; margin: 0 !important;
padding: 0 !important; padding: 0 !important;
width: 100%; width: 100%;
height: 100%; height: 100%;
} }

View file

@ -16,18 +16,6 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
return '<option value="' + language.Value + '">' + language.Name + "</option>" return '<option value="' + language.Value + '">' + language.Name + "</option>"
})).val(config.UICulture); })).val(config.UICulture);
currentLanguage = config.UICulture; currentLanguage = config.UICulture;
if (systemInfo.CanSelfUpdate) {
page.querySelector(".fldAutomaticUpdates").classList.remove("hide");
} else {
page.querySelector(".fldAutomaticUpdates").classList.add("hide");
}
$("#chkEnableAutomaticServerUpdates", page).checked(config.EnableAutoUpdate);
$("#chkEnableAutomaticRestart", page).checked(config.EnableAutomaticRestart);
if (systemInfo.CanSelfRestart) {
page.querySelector("#fldEnableAutomaticRestart").classList.remove("hide");
} else {
page.querySelector("#fldEnableAutomaticRestart").classList.add("hide");
}
if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) { if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) {
$(".autoUpdatesContainer", page).removeClass("hide"); $(".autoUpdatesContainer", page).removeClass("hide");
} else { } else {
@ -48,8 +36,6 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val(); config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val();
var requiresReload = (config.UICulture !== currentLanguage); var requiresReload = (config.UICulture !== currentLanguage);
config.AutoRunWebApp = $("#chkAutoRunWebApp", form).checked(); config.AutoRunWebApp = $("#chkAutoRunWebApp", form).checked();
config.EnableAutomaticRestart = $("#chkEnableAutomaticRestart", form).checked();
config.EnableAutoUpdate = $("#chkEnableAutomaticServerUpdates", form).checked();
ApiClient.updateServerConfiguration(config).then(function() { ApiClient.updateServerConfiguration(config).then(function() {
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) { ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) {
brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value; brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value;

View file

@ -114,7 +114,10 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
shape: getPortraitShape(), shape: getPortraitShape(),
scalable: true, scalable: true,
overlayMoreButton: true, overlayMoreButton: true,
allowBottomPadding: false allowBottomPadding: true,
showTitle: true,
centerText: true,
showYear: true
}); });
} }
if (result.Items.length >= query.Limit) { if (result.Items.length >= query.Limit) {

View file

@ -1,4 +1,4 @@
define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "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", "emby-scroller", "emby-itemscontainer", "emby-tabs", "emby-button"], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager) {
"use strict"; "use strict";
function enableScrollX() { function enableScrollX() {
@ -114,18 +114,25 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
var allowBottomPadding = true; var allowBottomPadding = true;
if (enableScrollX()) { if (enableScrollX()) {
allowBottomPadding = false; html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-mousewheel="false" data-centerfocus="true">';
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX padded-left padded-right">'; html += '<div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x">';
} else { } else {
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">'; html += '<div is="emby-itemscontainer" class="itemsContainer focuscontainer-x padded-left padded-right vertical-wrap">';
} }
html += cardBuilder.getCardsHtml(recommendation.Items, { html += cardBuilder.getCardsHtml(recommendation.Items, {
shape: getPortraitShape(), shape: getPortraitShape(),
scalable: true, scalable: true,
overlayPlayButton: true, overlayPlayButton: true,
allowBottomPadding: allowBottomPadding allowBottomPadding: allowBottomPadding,
showTitle: true,
showYear: true,
centerText: true
}); });
if (enableScrollX()) {
html += '</div>';
}
html += "</div>"; html += "</div>";
html += "</div>"; html += "</div>";
return html; return html;

View file

@ -1,4 +1,4 @@
define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "mediaInfo", "focusManager", "imageLoader", "scrollHelper", "events", "connectionManager", "browser", "globalize", "apphost", "layoutManager", "userSettings", "scrollStyles", "emby-slider", "paper-icon-button-light", "css!assets/css/videoosd"], function (playbackManager, dom, inputManager, datetime, itemHelper, mediaInfo, focusManager, imageLoader, scrollHelper, events, connectionManager, browser, globalize, appHost, layoutManager, userSettings) { define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "mediaInfo", "focusManager", "imageLoader", "scrollHelper", "events", "connectionManager", "browser", "globalize", "apphost", "layoutManager", "userSettings", "keyboardnavigation", "scrollStyles", "emby-slider", "paper-icon-button-light", "css!assets/css/videoosd"], function (playbackManager, dom, inputManager, datetime, itemHelper, mediaInfo, focusManager, imageLoader, scrollHelper, events, connectionManager, browser, globalize, appHost, layoutManager, userSettings, keyboardnavigation) {
"use strict"; "use strict";
function seriesImageUrl(item, options) { function seriesImageUrl(item, options) {
@ -437,6 +437,11 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
}); });
currentVisibleMenu = null; currentVisibleMenu = null;
toggleSubtitleSync("hide"); toggleSubtitleSync("hide");
// Firefox does not blur by itself
if (document.activeElement) {
document.activeElement.blur();
}
} }
} }
@ -1087,64 +1092,79 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
*/ */
var NavigationKeys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"]; var NavigationKeys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"];
/**
* Clicked element.
* To skip 'click' handling on Firefox/Edge.
*/
var clickedElement;
function onWindowKeyDown(e) { function onWindowKeyDown(e) {
clickedElement = e.srcElement;
var key = keyboardnavigation.getKeyName(e);
if (!currentVisibleMenu && 32 === e.keyCode) { if (!currentVisibleMenu && 32 === e.keyCode) {
playbackManager.playPause(currentPlayer); playbackManager.playPause(currentPlayer);
showOsd(); showOsd();
return; return;
} }
if (layoutManager.tv && NavigationKeys.indexOf(e.key) != -1) { if (layoutManager.tv && NavigationKeys.indexOf(key) != -1) {
showOsd(); showOsd();
return; return;
} }
switch (e.key) { switch (key) {
case "Enter":
showOsd();
break;
case "Escape":
case "Back":
// Ignore key when some dialog is opened
if (currentVisibleMenu === "osd" && !document.querySelector(".dialogContainer")) {
hideOsd();
e.stopPropagation();
}
break;
case "k": case "k":
playbackManager.playPause(currentPlayer); playbackManager.playPause(currentPlayer);
showOsd(); showOsd();
break; break;
case "l": case "l":
case "ArrowRight": case "ArrowRight":
case "Right": case "Right":
playbackManager.fastForward(currentPlayer); playbackManager.fastForward(currentPlayer);
showOsd(); showOsd();
break; break;
case "j": case "j":
case "ArrowLeft": case "ArrowLeft":
case "Left": case "Left":
playbackManager.rewind(currentPlayer); playbackManager.rewind(currentPlayer);
showOsd(); showOsd();
break; break;
case "f": case "f":
if (!e.ctrlKey && !e.metaKey) { if (!e.ctrlKey && !e.metaKey) {
playbackManager.toggleFullscreen(currentPlayer); playbackManager.toggleFullscreen(currentPlayer);
showOsd(); showOsd();
} }
break; break;
case "m": case "m":
playbackManager.toggleMute(currentPlayer); playbackManager.toggleMute(currentPlayer);
showOsd(); showOsd();
break; break;
case "NavigationLeft": case "NavigationLeft":
case "GamepadDPadLeft": case "GamepadDPadLeft":
case "GamepadLeftThumbstickLeft": case "GamepadLeftThumbstickLeft":
// Ignores gamepad events that are always triggered, even when not focused. // Ignores gamepad events that are always triggered, even when not focused.
if (document.hasFocus()) { if (document.hasFocus()) {
playbackManager.rewind(currentPlayer); playbackManager.rewind(currentPlayer);
showOsd(); showOsd();
} }
break; break;
case "NavigationRight": case "NavigationRight":
case "GamepadDPadRight": case "GamepadDPadRight":
case "GamepadLeftThumbstickRight": case "GamepadLeftThumbstickRight":
// Ignores gamepad events that are always triggered, even when not focused. // Ignores gamepad events that are always triggered, even when not focused.
if (document.hasFocus()) { if (document.hasFocus()) {
playbackManager.fastForward(currentPlayer); playbackManager.fastForward(currentPlayer);
showOsd(); showOsd();
@ -1152,6 +1172,14 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
} }
} }
function onWindowMouseDown(e) {
clickedElement = e.srcElement;
}
function onWindowTouchStart(e) {
clickedElement = e.srcElement;
}
function getImgUrl(item, chapter, index, maxWidth, apiClient) { function getImgUrl(item, chapter, index, maxWidth, apiClient) {
if (chapter.ImageTag) { if (chapter.ImageTag) {
return apiClient.getScaledImageUrl(item.Id, { return apiClient.getScaledImageUrl(item.Id, {
@ -1280,6 +1308,12 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
showOsd(); showOsd();
inputManager.on(window, onInputCommand); inputManager.on(window, onInputCommand);
dom.addEventListener(window, "keydown", onWindowKeyDown, { dom.addEventListener(window, "keydown", onWindowKeyDown, {
capture: true
});
dom.addEventListener(window, window.PointerEvent ? "pointerdown" : "mousedown", onWindowMouseDown, {
passive: true
});
dom.addEventListener(window, "touchstart", onWindowTouchStart, {
passive: true passive: true
}); });
} catch (e) { } catch (e) {
@ -1294,6 +1328,12 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
} }
dom.removeEventListener(window, "keydown", onWindowKeyDown, { dom.removeEventListener(window, "keydown", onWindowKeyDown, {
capture: true
});
dom.removeEventListener(window, window.PointerEvent ? "pointerdown" : "mousedown", onWindowMouseDown, {
passive: true
});
dom.removeEventListener(window, "touchstart", onWindowTouchStart, {
passive: true passive: true
}); });
stopOsdHideTimer(); stopOsdHideTimer();
@ -1465,7 +1505,10 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med
playbackManager.previousTrack(currentPlayer); playbackManager.previousTrack(currentPlayer);
}); });
view.querySelector(".btnPause").addEventListener("click", function () { view.querySelector(".btnPause").addEventListener("click", function () {
playbackManager.playPause(currentPlayer); // Ignore 'click' if another element was originally clicked (Firefox/Edge issue)
if (this.contains(clickedElement)) {
playbackManager.playPause(currentPlayer);
}
}); });
view.querySelector(".btnNextTrack").addEventListener("click", function () { view.querySelector(".btnNextTrack").addEventListener("click", function () {
playbackManager.nextTrack(currentPlayer); playbackManager.nextTrack(currentPlayer);

View file

@ -56,21 +56,6 @@
</div> </div>
</div> </div>
<div class="verticalSection autoUpdatesContainer hide">
<h2>${HeaderAutomaticUpdates}</h2>
<label class="fldAutomaticUpdates checkboxContainer">
<input is="emby-checkbox" type="checkbox" id="chkEnableAutomaticServerUpdates" />
<span>${OptionEnableAutomaticServerUpdates}</span>
</label>
<div id="fldEnableAutomaticRestart" class="checkboxContainer checkboxContainer-withDescription hide">
<label>
<input is="emby-checkbox" type="checkbox" id="chkEnableAutomaticRestart" />
<span>${LabelAllowServerAutoRestart}</span>
</label>
<div class="fieldDescription checkboxFieldDescription">${LabelAllowServerAutoRestartHelp}</div>
</div>
</div>
<div class="verticalSection"> <div class="verticalSection">
<h2>${HeaderBranding}</h2> <h2>${HeaderBranding}</h2>
<div class="inputContainer"> <div class="inputContainer">

View file

@ -8,20 +8,26 @@
font-size: inherit; font-size: inherit;
font-family: inherit; font-family: inherit;
color: inherit; color: inherit;
/* These are getting an outline in opera tv browsers, which run chrome 30 */
outline: none !important;
outline-width: 0; outline-width: 0;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none; user-select: none;
cursor: pointer; cursor: pointer;
z-index: 0; z-index: 0;
padding: 0.9em 1em; padding: 0.9em 1em;
vertical-align: middle; vertical-align: middle;
border: 0; border: 0;
vertical-align: middle;
border-radius: 0.2em; border-radius: 0.2em;
/* These are getting an outline in opera tv browsers, which run chrome 30 */
outline: none !important;
position: relative;
font-weight: 600; font-weight: 600;
/* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
text-decoration: none; text-decoration: none;
/* Not crazy about this but it normalizes heights between anchors and buttons */ /* Not crazy about this but it normalizes heights between anchors and buttons */
line-height: 1.35; line-height: 1.35;
transform-origin: center; transform-origin: center;
@ -42,7 +48,7 @@
} }
.button-flat:hover { .button-flat:hover {
opacity: .5; opacity: 0.5;
} }
.button-link { .button-link {
@ -79,7 +85,7 @@
display: block; display: block;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin: .25em 0; margin: 0.25em 0;
width: 100%; width: 100%;
} }
@ -88,12 +94,15 @@
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
box-sizing: border-box; box-sizing: border-box;
margin: 0 .29em; margin: 0 0.29em;
background: transparent; background: transparent;
text-align: center; text-align: center;
font-size: inherit; font-size: inherit;
font-family: inherit; font-family: inherit;
color: inherit; color: inherit;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none; user-select: none;
cursor: pointer; cursor: pointer;
z-index: 0; z-index: 0;
@ -101,15 +110,17 @@
min-height: initial; min-height: initial;
width: auto; width: auto;
height: auto; height: auto;
padding: .556em; padding: 0.556em;
vertical-align: middle; vertical-align: middle;
border: 0; border: 0;
vertical-align: middle;
/* These are getting an outline in opera tv browsers, which run chrome 30 */ /* These are getting an outline in opera tv browsers, which run chrome 30 */
outline: none !important; outline: none !important;
position: relative;
overflow: hidden; overflow: hidden;
border-radius: 50%; border-radius: 50%;
/* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
justify-content: center; justify-content: center;
transform-origin: center; transform-origin: center;
transition: 0.2s; transition: 0.2s;
@ -120,32 +131,33 @@
z-index: 1; z-index: 1;
} }
.paper-icon-button-light::-moz-focus-inner { .paper-icon-button-light::-moz-focus-inner {
border: 0; border: 0;
} }
.paper-icon-button-light:disabled { .paper-icon-button-light:disabled {
opacity: 0.3; opacity: 0.3;
cursor: default; cursor: default;
} }
.paper-icon-button-light > i { .paper-icon-button-light > i {
font-size: 1.66956521739130434em; font-size: 1.66956521739130434em;
/* Make sure its on top of the ripple */
position: relative;
z-index: 1;
vertical-align: middle;
}
.paper-icon-button-light > div { /* Make sure its on top of the ripple */
max-height: 100%; position: relative;
transform: scale(1.8); z-index: 1;
position: relative; vertical-align: middle;
z-index: 1; }
vertical-align: middle;
display: inline; .paper-icon-button-light > div {
margin: 0 auto; max-height: 100%;
} transform: scale(1.8);
position: relative;
z-index: 1;
vertical-align: middle;
display: inline;
margin: 0 auto;
}
.emby-button-foreground { .emby-button-foreground {
position: relative; position: relative;
@ -159,7 +171,6 @@
.filterButtonBubble { .filterButtonBubble {
color: #fff; color: #fff;
position: absolute; position: absolute;
background: #444;
top: 0; top: 0;
right: 0; right: 0;
width: 1.6em; width: 1.6em;
@ -170,7 +181,7 @@
justify-content: center; justify-content: center;
font-size: 82%; font-size: 82%;
border-radius: 100em; border-radius: 100em;
box-shadow: 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12), 0px 2px 4px -1px rgba(0, 0, 0, 0.2); box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
background: #03A9F4; background: #03a9f4;
font-weight: bold; font-weight: bold;
} }

View file

@ -32,12 +32,16 @@
.emby-checkbox { .emby-checkbox {
position: absolute; position: absolute;
/* This is for focusing purposes, so the focusManager doesn't skip over it */ /* This is for focusing purposes, so the focusManager doesn't skip over it */
width: 1px; width: 1px;
height: 1px; height: 1px;
margin: 0; margin: 0;
padding: 0; padding: 0;
opacity: 0; opacity: 0;
-ms-appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
appearance: none; appearance: none;
border: none; border: none;
} }
@ -46,14 +50,13 @@
position: absolute; position: absolute;
top: 3px; top: 3px;
left: 0; left: 0;
display: inline-block;
box-sizing: border-box; box-sizing: border-box;
width: 1.83em; width: 1.83em;
height: 1.83em; height: 1.83em;
margin: 0; margin: 0;
overflow: hidden; overflow: hidden;
border: 2px solid currentcolor; border: 2px solid currentcolor;
border-radius: .14em; border-radius: 0.14em;
z-index: 2; z-index: 2;
display: flex; display: flex;
align-items: center; align-items: center;
@ -98,18 +101,18 @@
flex-wrap: wrap; flex-wrap: wrap;
} }
.checkboxList-verticalwrap > .emby-checkbox-label { .checkboxList-verticalwrap > .emby-checkbox-label {
display: inline-flex; display: inline-flex;
margin: .3em 0 .3em 0; margin: 0.3em 0 0.3em 0;
width: 12em; width: 12em;
} }
.checkboxList-paperList { .checkboxList-paperList {
padding: 1em !important; padding: 1em !important;
} }
.checkboxListLabel { .checkboxListLabel {
margin-bottom: .25em; margin-bottom: 0.25em;
} }
@keyframes repaintChrome { @keyframes repaintChrome {
@ -121,3 +124,13 @@
padding: 0; padding: 0;
} }
} }
@-webkit-keyframes repaintChrome {
from {
padding: 0;
}
to {
padding: 0;
}
}

View file

@ -1,5 +1,5 @@
.emby-collapse { .emby-collapse {
margin: .5em 0; margin: 0.5em 0;
} }
.collapseContent { .collapseContent {
@ -18,10 +18,9 @@
text-transform: none; text-transform: none;
width: 100%; width: 100%;
text-align: left; text-align: left;
text-transform: none; border-width: 0 0 0.1em 0;
border-width: 0 0 .1em 0;
border-style: solid; border-style: solid;
padding-left: .1em; padding-left: 0.1em;
background: transparent; background: transparent;
box-shadow: none; box-shadow: none;
} }
@ -30,7 +29,7 @@
transform-origin: 50% 50%; transform-origin: 50% 50%;
transition: transform 180ms ease-out; transition: transform 180ms ease-out;
position: absolute; position: absolute;
right: .5em; right: 0.5em;
font-size: 1.5em; font-size: 1.5em;
} }

View file

@ -2,22 +2,24 @@
display: block; display: block;
margin: 0; margin: 0;
margin-bottom: 0 !important; margin-bottom: 0 !important;
/* Remove select styling */
/* Font size must the 16px or larger to prevent iOS page zoom on focus */
font-size: 110%;
/* General select styles: change as needed */
font-family: inherit; font-family: inherit;
font-weight: inherit; font-weight: inherit;
padding: .4em .25em; padding: 0.4em 0.25em;
/* Prevent padding from causing width overflow */
/* must the 16px or larger to prevent iOS page zoom on focus */
font-size: 110%;
/* prevent padding from causing width overflow */
-webkit-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
outline: none !important; outline: none !important;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
width: 100%; width: 100%;
} }
.emby-input::-moz-focus-inner { .emby-input::-moz-focus-inner {
border: 0; border: 0;
} }
.inputContainer { .inputContainer {
margin-bottom: 1.8em; margin-bottom: 1.8em;
@ -25,13 +27,14 @@
.inputLabel { .inputLabel {
display: inline-block; display: inline-block;
margin-bottom: .25em; margin-bottom: 0.25em;
} }
.emby-input + .fieldDescription { .emby-input + .fieldDescription {
margin-top: .25em; margin-top: 0.25em;
} }
.emby-input-iconbutton { .emby-input-iconbutton {
-webkit-align-self: flex-end;
align-self: flex-end; align-self: flex-end;
} }

View file

@ -11,9 +11,9 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 50%; border-radius: 50%;
border: .25em solid rgba(0, 0, 0, 1); border: 0.25em solid rgba(0, 0, 0, 1);
box-sizing: border-box; box-sizing: border-box;
background: rgba(0, 0, 0, .9); background: rgba(0, 0, 0, 0.9);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -51,7 +51,7 @@
width: 200%; width: 200%;
height: 200%; height: 200%;
border-radius: 50%; border-radius: 50%;
border-width: .25em; border-width: 0.25em;
border-style: solid; border-style: solid;
box-sizing: border-box; box-sizing: border-box;
} }

View file

@ -4,29 +4,29 @@
display: inline-block; display: inline-block;
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
padding-left: 0; padding-left: 24px;
} }
.radio-label-block { .radio-label-block {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: .5em; margin-top: 0.5em;
margin-bottom: .5em; margin-bottom: 0.5em;
}
.mdl-radio {
padding-left: 24px;
} }
.mdl-radio__button { .mdl-radio__button {
line-height: 24px; line-height: 24px;
position: absolute; position: absolute;
/* 1px is for focusing purposes, so the focusManager doesn't skip over it */ /* 1px is for focusing purposes, so the focusManager doesn't skip over it */
width: 1px; width: 1px;
height: 1px; height: 1px;
margin: 0; margin: 0;
padding: 0; padding: 0;
opacity: 0; opacity: 0;
-ms-appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
appearance: none; appearance: none;
border: none; border: none;
} }
@ -51,7 +51,7 @@
} }
.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle { .mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle {
border: 2px solid rgba(0,0,0, 0.26); border: 2px solid rgba(0, 0, 0, 0.26);
cursor: auto; cursor: auto;
} }
@ -67,27 +67,31 @@
cursor: pointer; cursor: pointer;
transition-duration: 0.28s; transition-duration: 0.28s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: -webkit-transform;
transition-property: transform; transition-property: transform;
transition-property: transform, -webkit-transform;
-webkit-transform: scale3d(0, 0, 0);
transform: scale3d(0, 0, 0); transform: scale3d(0, 0, 0);
border-radius: 50%; border-radius: 50%;
background: #00a4dc; background: #00a4dc;
} }
.mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { .mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1);
} }
.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { .mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
background: rgba(0,0,0, 0.26); background: rgba(0, 0, 0, 0.26);
cursor: auto; cursor: auto;
} }
.mdl-radio__button:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { .mdl-radio__button:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
box-shadow: 0 0 0px 10px rgba(255, 255, 255, 0.76); box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.76);
} }
.mdl-radio__button:checked:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { .mdl-radio__button:checked:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
box-shadow: 0 0 0 10px rgba(0, 164, 220, 0.26) box-shadow: 0 0 0 10px rgba(0, 164, 220, 0.26);
} }
.mdl-radio__label { .mdl-radio__label {
@ -95,6 +99,6 @@
} }
.mdl-radio__button:disabled + .mdl-radio__label { .mdl-radio__button:disabled + .mdl-radio__label {
color: rgba(0,0,0, 0.26); color: rgba(0, 0, 0, 0.26);
cursor: auto; cursor: auto;
} }

View file

@ -2,52 +2,60 @@
display: block; display: block;
margin: 0; margin: 0;
margin-bottom: 0 !important; margin-bottom: 0 !important;
/* Remove select styling */ /* Remove select styling */
/* Font size must the 16px or larger to prevent iOS page zoom on focus */ /* Font size must the 16px or larger to prevent iOS page zoom on focus */
font-size: 110%; font-size: 110%;
/* General select styles: change as needed */ /* General select styles: change as needed */
font-family: inherit; font-family: inherit;
font-weight: inherit; font-weight: inherit;
padding: .5em 1.9em .5em .5em; padding: 0.5em 1.9em 0.5em 0.5em;
/* Prevent padding from causing width overflow */ /* Prevent padding from causing width overflow */
box-sizing: border-box; box-sizing: border-box;
outline: none !important; outline: none !important;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
width: 100%; width: 100%;
} }
.emby-select[disabled] { .emby-select[disabled] {
background: none !important; background: none !important;
border-color: transparent !important; border-color: transparent !important;
color: inherit !important; color: inherit !important;
appearance: none; -webkit-appearance: none;
} -moz-appearance: none;
appearance: none;
.selectContainer-inline > .emby-select {
padding: .3em 1.9em .3em .5em;
font-size: inherit;
} }
.selectContainer-inline > .emby-select[disabled] {
padding-left: 0;
padding-right: 0;
}
.emby-select::-moz-focus-inner { .emby-select::-moz-focus-inner {
border: 0; border: 0;
} }
.selectContainer-inline > .emby-select {
padding: 0.3em 1.9em 0.3em 0.5em;
font-size: inherit;
}
.selectContainer-inline > .emby-select[disabled] {
padding-left: 0;
padding-right: 0;
}
.emby-select-focusscale { .emby-select-focusscale {
transition: transform 180ms ease-out !important; transition: transform 180ms ease-out !important;
-webkit-transform-origin: center center;
transform-origin: center center; transform-origin: center center;
} }
.emby-select-focusscale:focus { .emby-select-focusscale:focus {
transform: scale(1.04); transform: scale(1.04);
z-index: 1; z-index: 1;
} }
.emby-select + .fieldDescription { .emby-select + .fieldDescription {
margin-top: .25em; margin-top: 0.25em;
} }
.selectContainer { .selectContainer {
@ -63,31 +71,32 @@
.selectLabel { .selectLabel {
display: block; display: block;
margin-bottom: .25em; margin-bottom: 0.25em;
} }
.selectContainer-inline > .selectLabel { .selectContainer-inline > .selectLabel {
margin-bottom: 0; margin-bottom: 0;
margin-right: .5em; margin-right: 0.5em;
flex-shrink: 0; flex-shrink: 0;
} }
.emby-select-withcolor { .emby-select-withcolor {
-webkit-appearance: none;
appearance: none; appearance: none;
border-radius: .2em; border-radius: 0.2em;
} }
.selectArrowContainer { .selectArrowContainer {
position: absolute; position: absolute;
right: .3em; right: 0.3em;
top: .2em; top: 0.2em;
color: inherit; color: inherit;
pointer-events: none; pointer-events: none;
} }
.selectContainer-inline > .selectArrowContainer { .selectContainer-inline > .selectArrowContainer {
top: initial; top: initial;
bottom: .24em; bottom: 0.24em;
font-size: 90%; font-size: 90%;
} }
@ -96,7 +105,7 @@
} }
.selectArrow { .selectArrow {
margin-top: .35em; margin-top: 0.35em;
font-size: 1.7em; font-size: 1.7em;
} }

View file

@ -1,73 +1,85 @@
_:-ms-input-placeholder { :-ms-input-placeholder {
appearance: none; appearance: none;
-ms-appearance: none;
height: 2.223em; height: 2.223em;
margin: 0; margin: 0;
} }
.mdl-slider { .mdl-slider {
width: 100%; width: 100%;
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
appearance: none; appearance: none;
height: 150%;/*150% is needed, else ie and edge won't display the thumb properly*/ height: 150%;/* 150% is needed, else ie and edge won't display the thumb properly */
background: transparent; background: transparent;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; user-select: none;
outline: 0; outline: 0;
color: #00a4dc; color: #00a4dc;
-webkit-align-self: center;
-ms-flex-item-align: center;
align-self: center; align-self: center;
z-index: 1; z-index: 1;
cursor: pointer; cursor: pointer;
margin: 0; margin: 0;
/* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
display: block; display: block;
} }
.mdl-slider::-moz-focus-outer { .mdl-slider::-moz-focus-outer {
border: 0; border: 0;
} }
.mdl-slider::-ms-tooltip { .mdl-slider::-ms-tooltip {
display: none; display: none;
} }
.mdl-slider::-webkit-slider-runnable-track { .mdl-slider::-webkit-slider-runnable-track {
background: transparent; background: transparent;
} }
.mdl-slider::-moz-range-track { .mdl-slider::-moz-range-track {
background: #444; background: #444;
border: none; border: none;
width: calc(100% - 20px); width: calc(100% - 20px);
} }
.mdl-slider::-moz-range-progress { .mdl-slider::-moz-range-progress {
background: #00a4dc; background: #00a4dc;
width: calc(100% - 20px); width: calc(100% - 20px);
} }
.mdl-slider::-ms-track { .mdl-slider::-ms-track {
background: none; background: none;
color: transparent; color: transparent;
height: .2em; height: 0.2em;
width: 100%; width: 100%;
border: none; border: none;
} }
.mdl-slider::-ms-fill-lower { .mdl-slider::-ms-fill-lower {
display: none; display: none;
} }
.mdl-slider::-ms-fill-upper { .mdl-slider::-ms-fill-upper {
display: none; display: none;
} }
.mdl-slider::-webkit-slider-thumb { .mdl-slider::-webkit-slider-thumb {
appearance: none; -webkit-appearance: none;
width: 1.2em; width: 1.2em;
height: 1.2em; height: 1.2em;
box-sizing: border-box; box-sizing: border-box;
border-radius: 50%; border-radius: 50%;
background: #00a4dc; background: #00a4dc;
border: none; border: none;
transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1);
} }
.mdl-slider-hoverthumb::-webkit-slider-thumb { .mdl-slider-hoverthumb::-webkit-slider-thumb {
transform: none; transform: none;
@ -91,27 +103,27 @@ _:-ms-input-placeholder {
height: 0.9em; height: 0.9em;
box-sizing: border-box; box-sizing: border-box;
border-radius: 50%; border-radius: 50%;
background-image: none;
background: #00a4dc; background: #00a4dc;
background-image: none;
border: none; border: none;
transform: Scale(1.4, 1.4); transform: scale(1.4, 1.4);
} }
.mdl-slider::-ms-thumb { .mdl-slider::-ms-thumb {
appearance: none; -webkit-appearance: none;
width: 1.8em; width: 1.8em;
height: 1.8em; height: 1.8em;
box-sizing: border-box; box-sizing: border-box;
border-radius: 50%; border-radius: 50%;
background: #00a4dc; background: #00a4dc;
border: none; border: none;
transform: scale(.9, .9); transform: scale(0.9, 0.9);
transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1);
} }
.mdl-slider-hoverthumb::-ms-thumb { .mdl-slider-hoverthumb::-ms-thumb {
margin-left: -.4em; margin-left: -0.4em;
transform: scale(.5, .5); transform: scale(0.5, 0.5);
} }
.mdl-slider:hover::-ms-thumb { .mdl-slider:hover::-ms-thumb {
@ -149,15 +161,15 @@ _:-ms-input-placeholder {
.mdl-slider-background-flex-container { .mdl-slider-background-flex-container {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
margin-top: -.05em; margin-top: -0.05em;
top: 50%; top: 50%;
position: absolute; position: absolute;
} }
.mdl-slider-background-flex { .mdl-slider-background-flex {
background: #333; background: #333;
height: .2em; height: 0.2em;
margin-top: -.08em; margin-top: -0.08em;
width: 100%; width: 100%;
top: 50%; top: 50%;
left: 0; left: 0;
@ -173,7 +185,7 @@ _:-ms-input-placeholder {
} }
.mdl-slider-background-lower { .mdl-slider-background-lower {
/*transition: width 0.18s cubic-bezier(0.4, 0, 0.2, 1);*/ /* transition: width 0.18s cubic-bezier(0.4, 0, 0.2, 1); */
position: absolute; position: absolute;
left: 0; left: 0;
width: 0; width: 0;
@ -188,15 +200,16 @@ _:-ms-input-placeholder {
.mdl-slider-background-lower-withtransform { .mdl-slider-background-lower-withtransform {
width: 100%; width: 100%;
/*transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1);*/
/* transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1); */
transform-origin: left center; transform-origin: left center;
transform: scaleX(0); transform: scaleX(0);
} }
.mdl-slider-background-upper { .mdl-slider-background-upper {
/*transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1), width 0.18s cubic-bezier(0.4, 0, 0.2, 1);*/ /* transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1), width 0.18s cubic-bezier(0.4, 0, 0.2, 1); */
background: #666; background: #666;
background: rgba(255, 255, 255, .4); background: rgba(255, 255, 255, 0.4);
position: absolute; position: absolute;
left: 0; left: 0;
width: 0; width: 0;
@ -218,5 +231,5 @@ _:-ms-input-placeholder {
.sliderBubbleText { .sliderBubbleText {
margin: 0; margin: 0;
padding: .5em .75em; padding: 0.5em 0.75em;
} }

View file

@ -1,4 +1,4 @@
define(['browser', 'dom', 'layoutManager', 'css!./emby-slider', 'registerElement', 'emby-input'], function (browser, dom, layoutManager) { define(['browser', 'dom', 'layoutManager', 'keyboardnavigation', 'css!./emby-slider', 'registerElement', 'emby-input'], function (browser, dom, layoutManager, keyboardnavigation) {
'use strict'; 'use strict';
var EmbySliderPrototype = Object.create(HTMLInputElement.prototype); var EmbySliderPrototype = Object.create(HTMLInputElement.prototype);
@ -250,7 +250,7 @@ define(['browser', 'dom', 'layoutManager', 'css!./emby-slider', 'registerElement
* Handle KeyDown event * Handle KeyDown event
*/ */
function onKeyDown(e) { function onKeyDown(e) {
switch (e.key) { switch (keyboardnavigation.getKeyName(e)) {
case 'ArrowLeft': case 'ArrowLeft':
case 'Left': case 'Left':
stepKeyboard(this, -this.keyboardStepDown || -1); stepKeyboard(this, -this.keyboardStepDown || -1);

View file

@ -2,30 +2,35 @@
display: block; display: block;
margin: 0; margin: 0;
margin-bottom: 0 !important; margin-bottom: 0 !important;
/* Remove select styling */ /* Remove select styling */
/* Font size must the 16px or larger to prevent iOS page zoom on focus */ /* Font size must the 16px or larger to prevent iOS page zoom on focus */
font-size: inherit; font-size: inherit;
/* General select styles: change as needed */ /* General select styles: change as needed */
font-family: inherit; font-family: inherit;
font-weight: inherit; font-weight: inherit;
color: inherit; color: inherit;
padding: .35em .25em; padding: 0.35em 0.25em;
/* Prevent padding from causing width overflow */ /* Prevent padding from causing width overflow */
box-sizing: border-box; box-sizing: border-box;
outline: none !important; outline: none !important;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
width: 100%; width: 100%;
} }
.emby-textarea::-moz-focus-inner { .emby-textarea::-moz-focus-inner {
border: 0; border: 0;
} }
.textareaLabel { .textareaLabel {
display: inline-block; display: inline-block;
transition: all .2s ease-out; transition: all 0.2s ease-out;
margin-bottom: .25em; margin-bottom: 0.25em;
} }
.emby-textarea + .fieldDescription { .emby-textarea + .fieldDescription {
margin-top: .25em; margin-top: 0.25em;
} }

View file

@ -9,6 +9,10 @@
margin: 0; margin: 0;
padding: 0; padding: 0;
overflow: visible; overflow: visible;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; user-select: none;
flex-direction: row-reverse; flex-direction: row-reverse;
justify-content: flex-end; justify-content: flex-end;
@ -24,6 +28,9 @@
margin: 0; margin: 0;
padding: 0; padding: 0;
opacity: 0; opacity: 0;
-ms-appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
appearance: none; appearance: none;
border: none; border: none;
} }
@ -34,7 +41,7 @@
} }
.mdl-switch__track { .mdl-switch__track {
background: rgba(128,128,128, 0.5); background: rgba(128, 128, 128, 0.5);
height: 1em; height: 1em;
border-radius: 1em; border-radius: 1em;
cursor: pointer; cursor: pointer;
@ -45,7 +52,7 @@
} }
.mdl-switch__input[disabled] + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__track { .mdl-switch__input[disabled] + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__track {
background: rgba(0,0,0, 0.12); background: rgba(0, 0, 0, 0.12);
cursor: auto; cursor: auto;
} }
@ -53,7 +60,7 @@
background: #999; background: #999;
position: absolute; position: absolute;
left: 0; left: 0;
top: -.25em; top: -0.25em;
height: 1.44em; height: 1.44em;
width: 1.44em; width: 1.44em;
border-radius: 50%; border-radius: 50%;
@ -70,11 +77,11 @@
.mdl-switch__input:checked + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__thumb { .mdl-switch__input:checked + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__thumb {
background: #00a4dc; background: #00a4dc;
left: 1.466em; left: 1.466em;
box-shadow: 0 3px 0.28em 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px .56em 0 rgba(0, 0, 0, 0.12); box-shadow: 0 3px 0.28em 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 0.56em 0 rgba(0, 0, 0, 0.12);
} }
.mdl-switch__input[disabled] + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__thumb { .mdl-switch__input[disabled] + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__thumb {
background: rgb(189,189,189); background: rgb(189, 189, 189);
cursor: auto; cursor: auto;
} }
@ -82,17 +89,18 @@
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
display: inline-block; display: inline-block;
box-sizing: border-box; box-sizing: border-box;
width: .6em; width: 0.6em;
height: .6em; height: 0.6em;
border-radius: 50%; border-radius: 50%;
background-color: transparent; background-color: transparent;
} }
.mdl-switch__input:focus + .mdl-switch__label + .mdl-switch__trackContainer .mdl-switch__focus-helper { .mdl-switch__input:focus + .mdl-switch__label + .mdl-switch__trackContainer .mdl-switch__focus-helper {
box-shadow: 0 0 0 1.39em rgba(0, 0, 0, .05); box-shadow: 0 0 0 1.39em rgba(0, 0, 0, 0.05);
} }
.mdl-switch__input:checked:focus + .mdl-switch__label + .mdl-switch__trackContainer .mdl-switch__focus-helper { .mdl-switch__input:checked:focus + .mdl-switch__label + .mdl-switch__trackContainer .mdl-switch__focus-helper {
@ -105,10 +113,10 @@
margin: 0; margin: 0;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
margin-left: .7em; margin-left: 0.7em;
} }
.mdl-switch__input[disabled] .mdl-switch__label { .mdl-switch__input[disabled] .mdl-switch__label {
color: rgb(189,189,189); color: rgb(189, 189, 189);
cursor: auto; cursor: auto;
} }

View file

@ -72,67 +72,72 @@
</div> </div>
</div> </div>
</div> </div>
<div class="navigationSection"> <div>
<br /> <div class="navigationSection">
<div> <div is="emby-collapse" title="${HeaderNavigation}">
<button is="paper-icon-button-light" class="btnArrowUp btnCommand autoSize raised" title="${ButtonArrowUp}" data-command="MoveUp"> <div class="collapseContent">
<i class="md-icon">keyboard_arrow_up</i> <div>
</button> <button is="paper-icon-button-light" class="btnArrowUp btnCommand autoSize button-submit" title="${ButtonArrowUp}" data-command="MoveUp">
</div> <i class="md-icon">keyboard_arrow_up</i>
<br /> </button>
<div> </div>
<button is="paper-icon-button-light" class="btnArrowLeft btnCommand autoSize raised" title="${ButtonArrowLeft}" data-command="MoveLeft"> <br />
<i class="md-icon">keyboard_arrow_left</i> <div>
</button> <button is="paper-icon-button-light" class="btnArrowLeft btnCommand autoSize button-submit" title="${ButtonArrowLeft}" data-command="MoveLeft">
<button is="paper-icon-button-light" class="btnOk btnCommand autoSize raised" title="${ButtonOk}" data-command="Select"> <i class="md-icon">keyboard_arrow_left</i>
<i class="md-icon">keyboard_return</i> </button>
</button> <button is="paper-icon-button-light" class="btnOk btnCommand autoSize button-submit" title="${ButtonOk}" data-command="Select">
<button is="paper-icon-button-light" class="btnArrowRight btnCommand autoSize raised" title="${ButtonArrowRight}" data-command="MoveRight"> <i class="md-icon">keyboard_return</i>
<i class="md-icon">keyboard_arrow_right</i> </button>
</button> <button is="paper-icon-button-light" class="btnArrowRight btnCommand autoSize button-submit" title="${ButtonArrowRight}" data-command="MoveRight">
</div> <i class="md-icon">keyboard_arrow_right</i>
<br /> </button>
<div> </div>
<button is="paper-icon-button-light" class="btnBack btnCommand autoSize" title="${ButtonBack}" data-command="Back"> <br />
<i class="md-icon">arrow_back</i> <div>
</button> <button is="paper-icon-button-light" class="btnBack btnCommand autoSize" title="${ButtonBack}" data-command="Back">
<button is="paper-icon-button-light" class="btnArrowDown btnCommand autoSize raised" title="${ButtonArrowDown}" data-command="MoveDown"> <i class="md-icon">arrow_back</i>
<i class="md-icon">keyboard_arrow_down</i> </button>
</button> <button is="paper-icon-button-light" class="btnArrowDown btnCommand autoSize button-submit" title="${ButtonArrowDown}" data-command="MoveDown">
<button is="paper-icon-button-light" class="btnContextMenu btnCommand autoSize" title="${ButtonInfo}" data-command="ToggleContextMenu"> <i class="md-icon">keyboard_arrow_down</i>
<i class="md-icon">menu</i> </button>
</button> <button is="paper-icon-button-light" class="btnContextMenu btnCommand autoSize" title="${ButtonInfo}" data-command="ToggleContextMenu">
</div> <i class="md-icon">menu</i>
<br /> </button>
<div> </div>
<button is="paper-icon-button-light" class="btnGoHome btnCommand autoSize" title="${ButtonHome}" data-command="GoHome"> <br />
<i class="md-icon">home</i> <div>
</button> <button is="paper-icon-button-light" class="btnGoHome btnCommand autoSize" title="${ButtonHome}" data-command="GoHome">
<button is="paper-icon-button-light" class="btnShowSearch btnCommand autoSize" title="${ButtonSearch}" data-command="GoToSearch"> <i class="md-icon">home</i>
<i class="md-icon">search</i> </button>
</button> <button is="paper-icon-button-light" class="btnShowSearch btnCommand autoSize" title="${ButtonSearch}" data-command="GoToSearch">
<button is="paper-icon-button-light" class="bthShowSettings btnCommand autoSize" title="${ButtonSettings}" data-command="GoToSettings"> <i class="md-icon">search</i>
<i class="md-icon">settings</i> </button>
</button> <button is="paper-icon-button-light" class="bthShowSettings btnCommand autoSize" title="${ButtonSettings}" data-command="GoToSettings">
<i class="md-icon">settings</i>
</button>
</div>
</div>
</div>
</div> </div>
</div> </div>
<div> <div>
<div class="sendMessageSection"> <div class="sendMessageSection">
<div is="emby-collapse" title="${HeaderSendMessage}"> <div is="emby-collapse" title="${HeaderSendMessage}">
<div class="collapseContent" style="text-align: left;"> <div class="collapseContent" style="text-align: left;">
<form class="sendMessageForm"> <form class="sendMessageForm">
<div class="inputContainer"> <div class="inputContainer">
<input is="emby-input" class="sendMessageElement" type="text" id="txtMessageTitle" label="${LabelMessageTitle}" required /> <input is="emby-input" class="sendMessageElement" type="text" id="txtMessageTitle" label="${LabelMessageTitle}" required />
</div> </div>
<br /> <br />
<div class="inputContainer"> <div class="inputContainer">
<input is="emby-input" class="sendMessageElement" type="text" id="txtMessageText" label="${LabelMessageText}" required /> <input is="emby-input" class="sendMessageElement" type="text" id="txtMessageText" label="${LabelMessageText}" required />
</div> </div>
<p> <p>
<button is="emby-button" class="sendMessageElement button-submit block raised" type="submit" raised>${ButtonSend}</button> <button is="emby-button" class="sendMessageElement button-submit block raised" type="submit" raised>${ButtonSend}</button>
</p> </p>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<div class="sendTextSection"> <div class="sendTextSection">

View file

@ -77,10 +77,6 @@ define(['browser'], function (browser) {
return true; return true;
} }
if (browser.osx || browser.iOS) {
return false;
}
return videoTestElement.canPlayType('audio/mp4; codecs="ac-3"').replace(/no/, ''); return videoTestElement.canPlayType('audio/mp4; codecs="ac-3"').replace(/no/, '');
} }

View file

@ -22,9 +22,7 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], funct
var eventListenerCount = 0; var eventListenerCount = 0;
function on(scope, fn) { function on(scope, fn) {
if (eventListenerCount) { eventListenerCount++;
eventListenerCount++;
}
dom.addEventListener(scope, 'command', fn, {}); dom.addEventListener(scope, 'command', fn, {});
} }

View file

@ -108,7 +108,9 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
headerCastButton.addEventListener("click", onCastButtonClicked); headerCastButton.addEventListener("click", onCastButtonClicked);
} }
initHeadRoom(skinHeader); if (layoutManager.mobile) {
initHeadRoom(skinHeader);
}
} }
function onCastButtonClicked() { function onCastButtonClicked() {
@ -424,7 +426,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
return getToolsMenuHtml(apiClient).then(function (toolsMenuHtml) { return getToolsMenuHtml(apiClient).then(function (toolsMenuHtml) {
var html = ""; var html = "";
html += '<a class="adminDrawerLogo clearLink" is="emby-linkbutton" href="home.html">'; html += '<a class="adminDrawerLogo clearLink" is="emby-linkbutton" href="home.html">';
html += '<img src="assets/img/logo.png" />'; html += '<img src="assets/img/icon-transparent.png" />';
html += "</a>"; html += "</a>";
html += toolsMenuHtml; html += toolsMenuHtml;
navDrawerScrollContainer.innerHTML = html; navDrawerScrollContainer.innerHTML = html;

View file

@ -10,13 +10,13 @@ define(['appStorage', 'events'], function (appStorage, events) {
} }
function AppSettings() { function AppSettings() {
} }
AppSettings.prototype.enableAutoLogin = function (val) { AppSettings.prototype.enableAutoLogin = function (val) {
if (val != null) { if (val != null) {
this.set('enableAutoLogin', val.toString()); this.set('enableAutoLogin', val.toString());
} }
return this.get('enableAutoLogin') !== 'false'; return this.get('enableAutoLogin') !== 'false';
}; };

View file

@ -242,5 +242,5 @@ define(['appSettings', 'events'], function (appSettings, events) {
return this.get(key, true); return this.get(key, true);
}; };
return UserSettings; return new UserSettings();
}); });

View file

@ -315,6 +315,14 @@ var AppInfo = {};
return "components"; return "components";
} }
function getElementsPath() {
return "elements"
}
function getScriptsPath() {
return "scripts"
}
function getPlaybackManager(playbackManager) { function getPlaybackManager(playbackManager) {
window.addEventListener("beforeunload", function () { window.addEventListener("beforeunload", function () {
try { try {
@ -650,8 +658,12 @@ var AppInfo = {};
(function () { (function () {
var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate()); var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate());
var bowerPath = getBowerPath(); var bowerPath = getBowerPath();
var componentsPath = getComponentsPath(); var componentsPath = getComponentsPath();
var elementsPath = getElementsPath();
var scriptsPath = getScriptsPath();
var paths = { var paths = {
browserdeviceprofile: "scripts/browserdeviceprofile", browserdeviceprofile: "scripts/browserdeviceprofile",
browser: "scripts/browser", browser: "scripts/browser",
@ -672,7 +684,6 @@ var AppInfo = {};
itemHelper: componentsPath + "/itemhelper", itemHelper: componentsPath + "/itemhelper",
itemShortcuts: componentsPath + "/shortcuts", itemShortcuts: componentsPath + "/shortcuts",
playQueueManager: componentsPath + "/playback/playqueuemanager", playQueueManager: componentsPath + "/playback/playqueuemanager",
autoPlayDetect: componentsPath + "/playback/autoplaydetect",
nowPlayingHelper: componentsPath + "/playback/nowplayinghelper", nowPlayingHelper: componentsPath + "/playback/nowplayinghelper",
pluginManager: componentsPath + "/pluginManager", pluginManager: componentsPath + "/pluginManager",
packageManager: componentsPath + "/packagemanager", packageManager: componentsPath + "/packagemanager",
@ -765,7 +776,6 @@ var AppInfo = {};
return queryString; return queryString;
}); });
var elementsPath = "elements"
define("emby-button", [elementsPath + "/emby-button/emby-button"], returnFirstDependency); define("emby-button", [elementsPath + "/emby-button/emby-button"], returnFirstDependency);
define("paper-icon-button-light", [elementsPath + "/emby-button/paper-icon-button-light"], returnFirstDependency); define("paper-icon-button-light", [elementsPath + "/emby-button/paper-icon-button-light"], returnFirstDependency);
define("emby-checkbox", [elementsPath + "/emby-checkbox/emby-checkbox"], returnFirstDependency); define("emby-checkbox", [elementsPath + "/emby-checkbox/emby-checkbox"], returnFirstDependency);
@ -778,6 +788,9 @@ var AppInfo = {};
define("emby-textarea", [elementsPath + "/emby-textarea/emby-textarea"], returnFirstDependency); define("emby-textarea", [elementsPath + "/emby-textarea/emby-textarea"], returnFirstDependency);
define("emby-toggle", [elementsPath + "/emby-toggle/emby-toggle"], returnFirstDependency); define("emby-toggle", [elementsPath + "/emby-toggle/emby-toggle"], returnFirstDependency);
define("appSettings", [scriptsPath + "/settings/appSettings"], returnFirstDependency);
define("userSettings", [scriptsPath + "/settings/userSettings"], returnFirstDependency);
define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency); define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency);
define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency); define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency);
define("actionsheet", [componentsPath + "/actionsheet/actionsheet"], returnFirstDependency); define("actionsheet", [componentsPath + "/actionsheet/actionsheet"], returnFirstDependency);
@ -865,9 +878,6 @@ var AppInfo = {};
define("toast", [componentsPath + "/toast/toast"], returnFirstDependency); define("toast", [componentsPath + "/toast/toast"], returnFirstDependency);
define("scrollHelper", [componentsPath + "/scrollhelper"], returnFirstDependency); define("scrollHelper", [componentsPath + "/scrollhelper"], returnFirstDependency);
define("touchHelper", [componentsPath + "/touchhelper"], returnFirstDependency); define("touchHelper", [componentsPath + "/touchhelper"], returnFirstDependency);
define("appSettings", [componentsPath + "/appSettings"], returnFirstDependency);
define("userSettings", [componentsPath + "/usersettings/usersettings"], returnFirstDependency);
define("userSettingsBuilder", [componentsPath + "/usersettings/usersettingsbuilder", "layoutManager", "browser"], returnFirstDependency);
define("imageUploader", [componentsPath + "/imageuploader/imageuploader"], returnFirstDependency); define("imageUploader", [componentsPath + "/imageuploader/imageuploader"], returnFirstDependency);
define("htmlMediaHelper", [componentsPath + "/htmlMediaHelper"], returnFirstDependency); define("htmlMediaHelper", [componentsPath + "/htmlMediaHelper"], returnFirstDependency);
define("viewContainer", [componentsPath + "/viewContainer"], returnFirstDependency); define("viewContainer", [componentsPath + "/viewContainer"], returnFirstDependency);

View file

@ -699,7 +699,6 @@
"OptionEnableAccessFromAllDevices": "تفعيل الدخول على كافة الأجهزة", "OptionEnableAccessFromAllDevices": "تفعيل الدخول على كافة الأجهزة",
"OptionEnableAccessToAllChannels": "تفعيل الدخول على كافة القنوات", "OptionEnableAccessToAllChannels": "تفعيل الدخول على كافة القنوات",
"OptionEnableAccessToAllLibraries": "تمكين الدخول على كافة المكتبات", "OptionEnableAccessToAllLibraries": "تمكين الدخول على كافة المكتبات",
"OptionEnableAutomaticServerUpdates": "تمكين التحديثات الآلية في الخادم",
"OptionEnableExternalContentInSuggestions": "تمكين المحتوى الخارجي في المقترحات", "OptionEnableExternalContentInSuggestions": "تمكين المحتوى الخارجي في المقترحات",
"OptionEnableExternalContentInSuggestionsHelp": "السماح للعروض الإعلانية من الإنترنت وبرامج بث التلفزة الحي لتضمّن في المحتوى المقترح.", "OptionEnableExternalContentInSuggestionsHelp": "السماح للعروض الإعلانية من الإنترنت وبرامج بث التلفزة الحي لتضمّن في المحتوى المقترح.",
"OptionEnableForAllTuners": "تمكين كل أجهزة المولفات", "OptionEnableForAllTuners": "تمكين كل أجهزة المولفات",

View file

@ -565,7 +565,6 @@
"OptionEnableAccessFromAllDevices": "Позволяване на достъпа от всички устройства", "OptionEnableAccessFromAllDevices": "Позволяване на достъпа от всички устройства",
"OptionEnableAccessToAllChannels": "Позволяване на достъпа до всички канали", "OptionEnableAccessToAllChannels": "Позволяване на достъпа до всички канали",
"OptionEnableAccessToAllLibraries": "Позволяване на достъпа до всички библиотеки", "OptionEnableAccessToAllLibraries": "Позволяване на достъпа до всички библиотеки",
"OptionEnableAutomaticServerUpdates": "Разрешаване на автоматичните обновления",
"OptionEnded": "Приключило", "OptionEnded": "Приключило",
"OptionEveryday": "Всеки ден", "OptionEveryday": "Всеки ден",
"OptionExternallyDownloaded": "Външно сваляне", "OptionExternallyDownloaded": "Външно сваляне",

View file

@ -930,7 +930,6 @@
"OptionEnableAccessFromAllDevices": "Povolit přístup ze všech zařízení", "OptionEnableAccessFromAllDevices": "Povolit přístup ze všech zařízení",
"OptionEnableAccessToAllChannels": "Povolit přístup ze všech kanálů", "OptionEnableAccessToAllChannels": "Povolit přístup ze všech kanálů",
"OptionEnableAccessToAllLibraries": "Povolit přístup ke všem knihovnám", "OptionEnableAccessToAllLibraries": "Povolit přístup ke všem knihovnám",
"OptionEnableAutomaticServerUpdates": "Povolit automatickou aktualizaci serveru",
"OptionEnableExternalContentInSuggestions": "Aktivovat externí obsah v návrzích", "OptionEnableExternalContentInSuggestions": "Aktivovat externí obsah v návrzích",
"OptionEnableExternalContentInSuggestionsHelp": "Povolit zahrnutí internetových upoutávek a živých televizních programů do navrhovaného obsahu.", "OptionEnableExternalContentInSuggestionsHelp": "Povolit zahrnutí internetových upoutávek a živých televizních programů do navrhovaného obsahu.",
"OptionEnableForAllTuners": "Povolit pro všechna zařízení tunerů", "OptionEnableForAllTuners": "Povolit pro všechna zařízení tunerů",

View file

@ -825,7 +825,6 @@
"OptionEnableAccessFromAllDevices": "Tillad adgang fra alle enheder", "OptionEnableAccessFromAllDevices": "Tillad adgang fra alle enheder",
"OptionEnableAccessToAllChannels": "Tillad adgang til alle kanaler", "OptionEnableAccessToAllChannels": "Tillad adgang til alle kanaler",
"OptionEnableAccessToAllLibraries": "Tillad adgang til alle biblioteker", "OptionEnableAccessToAllLibraries": "Tillad adgang til alle biblioteker",
"OptionEnableAutomaticServerUpdates": "Aktiver automatiske serveropdateringer",
"OptionEnableExternalContentInSuggestions": "Aktiver eksternt indhold i anbefalinger", "OptionEnableExternalContentInSuggestions": "Aktiver eksternt indhold i anbefalinger",
"OptionEnableExternalContentInSuggestionsHelp": "Tillad at internet-trailers og live-tv-programmer bliver inkluderet i det anbefalede indhold.", "OptionEnableExternalContentInSuggestionsHelp": "Tillad at internet-trailers og live-tv-programmer bliver inkluderet i det anbefalede indhold.",
"OptionEnableForAllTuners": "Aktiver for alle tuner-enheder", "OptionEnableForAllTuners": "Aktiver for alle tuner-enheder",

View file

@ -974,7 +974,6 @@
"OptionEnableAccessFromAllDevices": "Erlaube Zugriff von allen Geräten", "OptionEnableAccessFromAllDevices": "Erlaube Zugriff von allen Geräten",
"OptionEnableAccessToAllChannels": "Erlaube Zugriff auf alle Kanäle", "OptionEnableAccessToAllChannels": "Erlaube Zugriff auf alle Kanäle",
"OptionEnableAccessToAllLibraries": "Erlaube Zugriff auf alle Bibliotheken", "OptionEnableAccessToAllLibraries": "Erlaube Zugriff auf alle Bibliotheken",
"OptionEnableAutomaticServerUpdates": "Aktiviere automatische Server Updates",
"OptionEnableExternalContentInSuggestions": "Aktiviere externe Inhalte in Empfehlungen", "OptionEnableExternalContentInSuggestions": "Aktiviere externe Inhalte in Empfehlungen",
"OptionEnableExternalContentInSuggestionsHelp": "Erlaube Internet Trailer und Live TV Sendungen in Empfehlungen.", "OptionEnableExternalContentInSuggestionsHelp": "Erlaube Internet Trailer und Live TV Sendungen in Empfehlungen.",
"OptionEnableForAllTuners": "Aktiviere für alle Tuner", "OptionEnableForAllTuners": "Aktiviere für alle Tuner",

View file

@ -868,7 +868,6 @@
"OptionEnableAccessFromAllDevices": "Πρόσβαση από όλες τις συσκευές", "OptionEnableAccessFromAllDevices": "Πρόσβαση από όλες τις συσκευές",
"OptionEnableAccessToAllChannels": "Ενεργοποιήστε την πρόσβαση σε όλα τα κανάλια", "OptionEnableAccessToAllChannels": "Ενεργοποιήστε την πρόσβαση σε όλα τα κανάλια",
"OptionEnableAccessToAllLibraries": "Πρόσβαση σε όλες τις Βιβλιοθήκες", "OptionEnableAccessToAllLibraries": "Πρόσβαση σε όλες τις Βιβλιοθήκες",
"OptionEnableAutomaticServerUpdates": "Ενεργοποίηση αυτόματων ενημερώσεων διακομιστή",
"OptionEnableExternalContentInSuggestionsHelp": "Να επιτρέπεται η συμπερίληψη internet trailers και προγράμματα live tv στο προτεινόμενο περιεχόμενο.", "OptionEnableExternalContentInSuggestionsHelp": "Να επιτρέπεται η συμπερίληψη internet trailers και προγράμματα live tv στο προτεινόμενο περιεχόμενο.",
"OptionEnableM2tsMode": "Ενεργοποίηση λειτουργίας M2ts", "OptionEnableM2tsMode": "Ενεργοποίηση λειτουργίας M2ts",
"OptionEnded": "Τέλος", "OptionEnded": "Τέλος",

View file

@ -1303,7 +1303,6 @@
"OptionEnableM2tsModeHelp": "Enable m2ts mode when encoding to mpegts.", "OptionEnableM2tsModeHelp": "Enable m2ts mode when encoding to mpegts.",
"OptionEnableM2tsMode": "Enable M2ts mode", "OptionEnableM2tsMode": "Enable M2ts mode",
"OptionEnableExternalContentInSuggestions": "Enable external content in suggestions", "OptionEnableExternalContentInSuggestions": "Enable external content in suggestions",
"OptionEnableAutomaticServerUpdates": "Enable automatic server updates",
"OptionEnableAccessToAllLibraries": "Enable access to all libraries", "OptionEnableAccessToAllLibraries": "Enable access to all libraries",
"OptionEnableAccessToAllChannels": "Enable access to all channels", "OptionEnableAccessToAllChannels": "Enable access to all channels",
"OptionEnableAccessFromAllDevices": "Enable access from all devices", "OptionEnableAccessFromAllDevices": "Enable access from all devices",
@ -1461,5 +1460,6 @@
"ButtonAddImage": "Add Image", "ButtonAddImage": "Add Image",
"OptionRandom": "Random", "OptionRandom": "Random",
"SelectAdminUsername": "Please select a username for the admin account.", "SelectAdminUsername": "Please select a username for the admin account.",
"ButtonSplit": "Split" "ButtonSplit": "Split",
"HeaderNavigation": "Navigation"
} }

View file

@ -408,6 +408,7 @@
"HeaderMyDevice": "My Device", "HeaderMyDevice": "My Device",
"HeaderMyMedia": "My Media", "HeaderMyMedia": "My Media",
"HeaderMyMediaSmall": "My Media (small)", "HeaderMyMediaSmall": "My Media (small)",
"HeaderNavigation": "Navigation",
"HeaderNewApiKey": "New API Key", "HeaderNewApiKey": "New API Key",
"HeaderNewDevices": "New Devices", "HeaderNewDevices": "New Devices",
"HeaderNextEpisodePlayingInValue": "Next Episode Playing in {0}", "HeaderNextEpisodePlayingInValue": "Next Episode Playing in {0}",
@ -1104,7 +1105,6 @@
"OptionEnableAccessFromAllDevices": "Enable access from all devices", "OptionEnableAccessFromAllDevices": "Enable access from all devices",
"OptionEnableAccessToAllChannels": "Enable access to all channels", "OptionEnableAccessToAllChannels": "Enable access to all channels",
"OptionEnableAccessToAllLibraries": "Enable access to all libraries", "OptionEnableAccessToAllLibraries": "Enable access to all libraries",
"OptionEnableAutomaticServerUpdates": "Enable automatic server updates",
"OptionEnableExternalContentInSuggestions": "Enable external content in suggestions", "OptionEnableExternalContentInSuggestions": "Enable external content in suggestions",
"OptionEnableExternalContentInSuggestionsHelp": "Allow internet trailers and live TV programs to be included within suggested content.", "OptionEnableExternalContentInSuggestionsHelp": "Allow internet trailers and live TV programs to be included within suggested content.",
"OptionEnableForAllTuners": "Enable for all tuner devices", "OptionEnableForAllTuners": "Enable for all tuner devices",

View file

@ -1018,7 +1018,6 @@
"OptionEnableAccessFromAllDevices": "Habilitar acceso desde todos los dispositivos", "OptionEnableAccessFromAllDevices": "Habilitar acceso desde todos los dispositivos",
"OptionEnableAccessToAllChannels": "Habilitar acceso a todos los canales", "OptionEnableAccessToAllChannels": "Habilitar acceso a todos los canales",
"OptionEnableAccessToAllLibraries": "Habilitar el acceso a todas las bibliotecas", "OptionEnableAccessToAllLibraries": "Habilitar el acceso a todas las bibliotecas",
"OptionEnableAutomaticServerUpdates": "Habilitar actualizaciones automáticas del servidor",
"OptionEnableExternalContentInSuggestions": "Habilitar contenido externo en las sugerencias", "OptionEnableExternalContentInSuggestions": "Habilitar contenido externo en las sugerencias",
"OptionEnableExternalContentInSuggestionsHelp": "Permitir que los trailers de Internet y los programas de televisión en vivo se incluyan en el contenido sugerido.", "OptionEnableExternalContentInSuggestionsHelp": "Permitir que los trailers de Internet y los programas de televisión en vivo se incluyan en el contenido sugerido.",
"OptionEnableForAllTuners": "Habilitar para todos los dispositivos sintonizadores", "OptionEnableForAllTuners": "Habilitar para todos los dispositivos sintonizadores",

View file

@ -95,7 +95,7 @@
"ButtonRestart": "Reiniciar", "ButtonRestart": "Reiniciar",
"ButtonResume": "Continuar", "ButtonResume": "Continuar",
"ButtonRevoke": "Revocar", "ButtonRevoke": "Revocar",
"ButtonSave": "Grabar", "ButtonSave": "Guardar",
"ButtonScanAllLibraries": "Escanear todas las bibliotecas", "ButtonScanAllLibraries": "Escanear todas las bibliotecas",
"ButtonSearch": "Buscar", "ButtonSearch": "Buscar",
"ButtonSelectDirectory": "Seleccionar directorio", "ButtonSelectDirectory": "Seleccionar directorio",
@ -120,7 +120,7 @@
"CancelRecording": "Cancelar grabación", "CancelRecording": "Cancelar grabación",
"CancelSeries": "Cancelar series", "CancelSeries": "Cancelar series",
"Categories": "Categorías", "Categories": "Categorías",
"ChannelAccessHelp": "Seleccione los canales para compartir con este usuario. Los administradores podrán editar todos los canales mediante el gestor de metadatos.", "ChannelAccessHelp": "Seleccione los canales para compartir con este usuario. Los administradores podrán editar todos los canales mediante el editor de etiquetas.",
"ChannelNameOnly": "Canal {0} solo", "ChannelNameOnly": "Canal {0} solo",
"ChannelNumber": "Número de canal", "ChannelNumber": "Número de canal",
"Channels": "Canales", "Channels": "Canales",
@ -139,8 +139,8 @@
"DeathDateValue": "Murió: {0}", "DeathDateValue": "Murió: {0}",
"Default": "Por defecto", "Default": "Por defecto",
"DefaultErrorMessage": "Ha habido un error procesando la solicitud. Por favor inténtalo más tarde.", "DefaultErrorMessage": "Ha habido un error procesando la solicitud. Por favor inténtalo más tarde.",
"DefaultMetadataLangaugeDescription": "Estos son tus ajustes y se pueden personalizar para cada librería.", "DefaultMetadataLangaugeDescription": "Estos son tus ajustes y se pueden personalizar para cada biblioteca.",
"DefaultSubtitlesHelp": "Los subtítulos se activan en función de los ajustes por defecto y etiquetas en los metadatos integrados. Los ajustes de idioma se tienen en cuenta cuando hay varias opciones disponibles.", "DefaultSubtitlesHelp": "Los subtítulos que se utilizarán dependerán de como estén etiquetadas las pistas de los archivos (si \"por defecto\" o \"forzado\"). Los ajustes de idioma se tienen en cuenta cuando hay varias opciones disponibles.",
"Delete": "Borrar", "Delete": "Borrar",
"DeleteDeviceConfirmation": "¿Estás seguro de que quieres borrar este dispositivo? Volverá a aparecer la próxima vez que un usuario inicie sesión en él.", "DeleteDeviceConfirmation": "¿Estás seguro de que quieres borrar este dispositivo? Volverá a aparecer la próxima vez que un usuario inicie sesión en él.",
"DeleteImage": "Borrar imagen", "DeleteImage": "Borrar imagen",
@ -304,7 +304,7 @@
"HeaderItems": "Elementos", "HeaderItems": "Elementos",
"HeaderKeepRecording": "Mantener grabación", "HeaderKeepRecording": "Mantener grabación",
"HeaderKeepSeries": "Mantener series", "HeaderKeepSeries": "Mantener series",
"HeaderKodiMetadataHelp": "Para habilitar o deshabilitar metadatos NFO, edite una biblioteca en la configuración de la biblioteca Jellyfin y localice la sección de metadatos.", "HeaderKodiMetadataHelp": "Puedes activar o desactivar las etiquetas en formato NFO abriendo la configuración de una biblioteca y revisando los ajustes en la sección de etiquetas.",
"HeaderLatestEpisodes": "Últimos episodios", "HeaderLatestEpisodes": "Últimos episodios",
"HeaderLatestMedia": "Últimos medios", "HeaderLatestMedia": "Últimos medios",
"HeaderLatestMovies": "Últimas películas", "HeaderLatestMovies": "Últimas películas",
@ -322,7 +322,7 @@
"HeaderMedia": "Medios", "HeaderMedia": "Medios",
"HeaderMediaFolders": "Carpetas de medios", "HeaderMediaFolders": "Carpetas de medios",
"HeaderMediaInfo": "Información multimedia", "HeaderMediaInfo": "Información multimedia",
"HeaderMetadataSettings": "Ajustes de metadatos", "HeaderMetadataSettings": "Ajustes de etiquetas",
"HeaderMoreLikeThis": "Más como este", "HeaderMoreLikeThis": "Más como este",
"HeaderMovies": "Películas", "HeaderMovies": "Películas",
"HeaderMusicVideos": "Vídeos musicales", "HeaderMusicVideos": "Vídeos musicales",
@ -349,7 +349,7 @@
"HeaderPlaybackError": "Error de reproducción", "HeaderPlaybackError": "Error de reproducción",
"HeaderPleaseSignIn": "Por favor, inicie sesión", "HeaderPleaseSignIn": "Por favor, inicie sesión",
"HeaderPluginInstallation": "Instalación del complemento", "HeaderPluginInstallation": "Instalación del complemento",
"HeaderPreferredMetadataLanguage": "Idioma preferido para los metadatos", "HeaderPreferredMetadataLanguage": "Idioma preferido para las etiquetas",
"HeaderProfile": "Perfil", "HeaderProfile": "Perfil",
"HeaderProfileInformation": "Información del perfil", "HeaderProfileInformation": "Información del perfil",
"HeaderProfileServerSettingsHelp": "Estos valores controlan como el servidor Jellyfin se presenta al dispositivo.", "HeaderProfileServerSettingsHelp": "Estos valores controlan como el servidor Jellyfin se presenta al dispositivo.",
@ -369,8 +369,8 @@
"HeaderSeasons": "Temporadas", "HeaderSeasons": "Temporadas",
"HeaderSecondsValue": "{0} segundos", "HeaderSecondsValue": "{0} segundos",
"HeaderSelectCertificatePath": "Elige la ruta del certificado", "HeaderSelectCertificatePath": "Elige la ruta del certificado",
"HeaderSelectMetadataPath": "Seleccione la ruta para Metadatos", "HeaderSelectMetadataPath": "Seleccione la ruta para las etiquetas",
"HeaderSelectMetadataPathHelp": "Busque o escriba la ruta donde desea almacenar los metadatos. La carpeta debe tener permiso de escritura.", "HeaderSelectMetadataPathHelp": "Busque o escriba la ruta donde almacenar las etiquetas. La carpeta debe tener permiso de escritura.",
"HeaderSelectPath": "Elige ruta", "HeaderSelectPath": "Elige ruta",
"HeaderSelectServer": "Selecionar servidor", "HeaderSelectServer": "Selecionar servidor",
"HeaderSelectServerCachePath": "Seleccione la ruta para el caché del servidor", "HeaderSelectServerCachePath": "Seleccione la ruta para el caché del servidor",
@ -459,7 +459,7 @@
"LabelArtists": "Artistas:", "LabelArtists": "Artistas:",
"LabelArtistsHelp": "Separar múltiples artistas usando ;", "LabelArtistsHelp": "Separar múltiples artistas usando ;",
"LabelAudioLanguagePreference": "Idioma de audio preferido:", "LabelAudioLanguagePreference": "Idioma de audio preferido:",
"LabelAutomaticallyRefreshInternetMetadataEvery": "Actualizar los metadatos automáticamente de internet:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Actualizar las etiquetas automáticamente desde Internet:",
"LabelBindToLocalNetworkAddress": "Vincular a la dirección de red local:", "LabelBindToLocalNetworkAddress": "Vincular a la dirección de red local:",
"LabelBindToLocalNetworkAddressHelp": "Opcional. Anule la dirección IP local para enlazar el servidor HTTP. Si se deja vacío, el servidor se enlazará a todas las direcciones disponibles. Para cambiar este valor, debe reiniciar el servidor Jellyfin.", "LabelBindToLocalNetworkAddressHelp": "Opcional. Anule la dirección IP local para enlazar el servidor HTTP. Si se deja vacío, el servidor se enlazará a todas las direcciones disponibles. Para cambiar este valor, debe reiniciar el servidor Jellyfin.",
"LabelBirthDate": "Fecha de nacimiento:", "LabelBirthDate": "Fecha de nacimiento:",
@ -489,7 +489,7 @@
"LabelCustomRating": "Valoración pesonalizada:", "LabelCustomRating": "Valoración pesonalizada:",
"LabelDateAdded": "Fecha de añadido:", "LabelDateAdded": "Fecha de añadido:",
"LabelDateAddedBehavior": "Comportamiento de la fecha añadida para contenido nuevo:", "LabelDateAddedBehavior": "Comportamiento de la fecha añadida para contenido nuevo:",
"LabelDateAddedBehaviorHelp": "Si un valor de metadato está disponible su usará siempre antes que ninguna de esas opciones.", "LabelDateAddedBehaviorHelp": "Si el elemento tiene etiquetas que contengan información sobre la fecha de creación, independientemente de lo seleccionado aquí, se utilizarán para ordenar el contenido.",
"LabelDay": "Día:", "LabelDay": "Día:",
"LabelDeathDate": "Fecha de muerte:", "LabelDeathDate": "Fecha de muerte:",
"LabelDefaultUser": "Usuario por defecto:", "LabelDefaultUser": "Usuario por defecto:",
@ -595,15 +595,15 @@
"LabelMaxStreamingBitrateHelp": "Especifica la tasa de bits máxima de la transmisión.", "LabelMaxStreamingBitrateHelp": "Especifica la tasa de bits máxima de la transmisión.",
"LabelMessageText": "Mensaje de texto:", "LabelMessageText": "Mensaje de texto:",
"LabelMessageTitle": "Título del mensaje:", "LabelMessageTitle": "Título del mensaje:",
"LabelMetadata": "Metadatos:", "LabelMetadata": "Etiquetas:",
"LabelMetadataDownloadLanguage": "Idioma preferido de visualizado:", "LabelMetadataDownloadLanguage": "Idioma preferido de visualizado:",
"LabelMetadataDownloadersHelp": "Activa y ordena tus descargadores de metadatos por prioridad. Los que tengan menor prioridad se sólo se utilizarán para llenar la información faltante.", "LabelMetadataDownloadersHelp": "Activa y ordena estos proveedores de etiquetas por prioridad. Los que tengan menor prioridad sólo se utilizarán para completar la información que falte.",
"LabelMetadataPath": "Ruta de los metadatos:", "LabelMetadataPath": "Ruta de las etiquetas:",
"LabelMetadataPathHelp": "Especifica una ruta para los pósteres y metadatos.", "LabelMetadataPathHelp": "Especifica una ruta para las imágenes y las etiquetas.",
"LabelMetadataReaders": "Lectores de metadatos:", "LabelMetadataReaders": "Lectores de etiquetas:",
"LabelMetadataReadersHelp": "Ordena tus fuentes de metadatos locales por prioridad. Se leerá el primer archivo encontrado.", "LabelMetadataReadersHelp": "Ordena los proveedores de etiquetas locales por prioridad. Se leerá el primer archivo encontrado.",
"LabelMetadataSavers": "Almacenadores de metadatos:", "LabelMetadataSavers": "Formato de etiquetas:",
"LabelMetadataSaversHelp": "Elige el formato de archivo para guardar tus metadatos.", "LabelMetadataSaversHelp": "Elige el formato de archivo para guardar las etiquetas.",
"LabelMethod": "Método:", "LabelMethod": "Método:",
"LabelMinBackdropDownloadWidth": "Anchura mínima de descarga de imágenes de fondo:", "LabelMinBackdropDownloadWidth": "Anchura mínima de descarga de imágenes de fondo:",
"LabelMinResumeDuration": "Duración mínima de reanudación:", "LabelMinResumeDuration": "Duración mínima de reanudación:",
@ -676,8 +676,8 @@
"LabelRemoteClientBitrateLimit": "Límite de la transmisión de tasa de bits por internet (Mbps):", "LabelRemoteClientBitrateLimit": "Límite de la transmisión de tasa de bits por internet (Mbps):",
"LabelRemoteClientBitrateLimitHelp": "Un límite opcional de tasa de bits para todos los dispositivos fuera de la red. Esto es útil para evitar que los dispositivos soliciten una tasa de bits más alta que la que su conexión a Internet puede manejar. Esto puede ocasionar una mayor carga de la CPU en su servidor para transcodificar vídeos sobre la marcha a una tasa de bits más baja.", "LabelRemoteClientBitrateLimitHelp": "Un límite opcional de tasa de bits para todos los dispositivos fuera de la red. Esto es útil para evitar que los dispositivos soliciten una tasa de bits más alta que la que su conexión a Internet puede manejar. Esto puede ocasionar una mayor carga de la CPU en su servidor para transcodificar vídeos sobre la marcha a una tasa de bits más baja.",
"LabelRuntimeMinutes": "Tiempo de ejecución (minutos):", "LabelRuntimeMinutes": "Tiempo de ejecución (minutos):",
"LabelSaveLocalMetadata": "Guardar imágenes y metadatos en las carpetas de medios", "LabelSaveLocalMetadata": "Guardar imágenes y etiquetas en las carpetas de medios",
"LabelSaveLocalMetadataHelp": "Guardar imágenes y metadatos directamente en las carpetas de medios, permitirá colocarlas en un lugar donde se pueden editar fácilmente.", "LabelSaveLocalMetadataHelp": "Guardar imágenes y etiquetas directamente en las carpetas en las que estén los elementos hará que se puedan editar más fácilmente.",
"LabelScheduledTaskLastRan": "Última ejecución {0}, tardando {1}.", "LabelScheduledTaskLastRan": "Última ejecución {0}, tardando {1}.",
"LabelScreensaver": "Salvapantallas:", "LabelScreensaver": "Salvapantallas:",
"LabelSeasonNumber": "Número de temporada:", "LabelSeasonNumber": "Número de temporada:",
@ -729,7 +729,7 @@
"LabelTunerIpAddress": "IP del sintonizador:", "LabelTunerIpAddress": "IP del sintonizador:",
"LabelTunerType": "Tipo de sintonizador:", "LabelTunerType": "Tipo de sintonizador:",
"LabelType": "Tipo:", "LabelType": "Tipo:",
"LabelTypeMetadataDownloaders": "{0} descargadores de metadatos:", "LabelTypeMetadataDownloaders": "Proveedores de etiquetas para {0}:",
"LabelTypeText": "Texto", "LabelTypeText": "Texto",
"LabelUseNotificationServices": "Usar los siguientes servicios:", "LabelUseNotificationServices": "Usar los siguientes servicios:",
"LabelUser": "Usuario:", "LabelUser": "Usuario:",
@ -754,7 +754,7 @@
"LanNetworksHelp": "Lista de direcciones IP separadas por comas o entradas de dirección IP / máscara de red para redes que se considerarán en la red local al imponer restricciones de ancho de banda. Si se establece, todas las demás direcciones IP se considerarán en la red externa y estarán sujetas a las restricciones de ancho de banda externo. Si se deja en blanco, solo se considera que la subred del servidor está en la red local.", "LanNetworksHelp": "Lista de direcciones IP separadas por comas o entradas de dirección IP / máscara de red para redes que se considerarán en la red local al imponer restricciones de ancho de banda. Si se establece, todas las demás direcciones IP se considerarán en la red externa y estarán sujetas a las restricciones de ancho de banda externo. Si se deja en blanco, solo se considera que la subred del servidor está en la red local.",
"Large": "Grande", "Large": "Grande",
"LatestFromLibrary": "Reciente en {0}", "LatestFromLibrary": "Reciente en {0}",
"LibraryAccessHelp": "Seleccione las bibliotecas a compartir con este usuario. Los administradores podrán editar todas las carpetas usando el gestor de metadatos.", "LibraryAccessHelp": "Seleccione las bibliotecas a compartir con este usuario. Los administradores podrán editar todas las carpetas usando el gestor de etiquetas.",
"Like": "Me gusta", "Like": "Me gusta",
"Live": "Directo", "Live": "Directo",
"LiveBroadcasts": "Emisiones en vivo", "LiveBroadcasts": "Emisiones en vivo",
@ -824,7 +824,7 @@
"MessageNoTrailersFound": "No se han encontrado tráilers. Instala el canal de tráilers para mejorar su experiencia añadiendo una biblioteca de tráilers por internet.", "MessageNoTrailersFound": "No se han encontrado tráilers. Instala el canal de tráilers para mejorar su experiencia añadiendo una biblioteca de tráilers por internet.",
"MessageNothingHere": "Nada aquí.", "MessageNothingHere": "Nada aquí.",
"MessagePasswordResetForUsers": "Se ha restablecido las contraseñas a los siguientes usuarios. Ahora pueden iniciar sesión con los códigos PIN que usaron para el restablecimiento.", "MessagePasswordResetForUsers": "Se ha restablecido las contraseñas a los siguientes usuarios. Ahora pueden iniciar sesión con los códigos PIN que usaron para el restablecimiento.",
"MessagePleaseEnsureInternetMetadata": "Por favor, asegúrese que la descarga de metadatos de internet está habilitada.", "MessagePleaseEnsureInternetMetadata": "Asegúrate de que la descarga de etiquetas desde internet está activada.",
"MessagePleaseWait": "Por favor, espere.", "MessagePleaseWait": "Por favor, espere.",
"MessagePluginConfigurationRequiresLocalAccess": "Para configurar este complemento inicia sesión en tu servidor local directamente.", "MessagePluginConfigurationRequiresLocalAccess": "Para configurar este complemento inicia sesión en tu servidor local directamente.",
"MessagePluginInstallDisclaimer": "Los complementos creados por los miembros de la comunidad de Jellyfin son una buena forma de mejorar tu experiencia Jellyfin con características adicionales y otros beneficios. Antes de instalarlos considera los efectos que pueden tener en tu servidor Jellyfin, como escaneos de la biblioteca más largos, procesado en segundo plano adicional y una reducción de la estabilidad del sistema.", "MessagePluginInstallDisclaimer": "Los complementos creados por los miembros de la comunidad de Jellyfin son una buena forma de mejorar tu experiencia Jellyfin con características adicionales y otros beneficios. Antes de instalarlos considera los efectos que pueden tener en tu servidor Jellyfin, como escaneos de la biblioteca más largos, procesado en segundo plano adicional y una reducción de la estabilidad del sistema.",
@ -834,9 +834,9 @@
"MessageUnableToConnectToServer": "No podemos conectar con el servidor seleccionado ahora mismo. Por favor, asegúrate de que esta funcionando e inténtalo otra vez.", "MessageUnableToConnectToServer": "No podemos conectar con el servidor seleccionado ahora mismo. Por favor, asegúrate de que esta funcionando e inténtalo otra vez.",
"MessageUnsetContentHelp": "El contenido se mostrará como carpetas planas. Para tener mejores resultados utiliza el gestor de metadatos para establecer los tipos de contenidos de las sub-carpetas.", "MessageUnsetContentHelp": "El contenido se mostrará como carpetas planas. Para tener mejores resultados utiliza el gestor de metadatos para establecer los tipos de contenidos de las sub-carpetas.",
"MessageYouHaveVersionInstalled": "Actualmente tienes la versión {0} instalada.", "MessageYouHaveVersionInstalled": "Actualmente tienes la versión {0} instalada.",
"Metadata": "Metadatos", "Metadata": "Etiquetas",
"MetadataManager": "Administrador de metadatos", "MetadataManager": "Administrador de etiquetas",
"MetadataSettingChangeHelp": "El cambio de la configuración de metadatos afectará al nuevo contenido que se añada en el futuro. Para actualizar el contenido existente, abra la pantalla de detalles y haga clic en el botón Actualizar o realice actualizaciones masivas utilizando el administrador de metadatos.", "MetadataSettingChangeHelp": "Este cambio afectará al nuevo contenido que se añada en el futuro. Para actualizar el contenido existente abra la pantalla de detalles y haga clic en el botón \"Actualizar\". También se pueden actualizar todas las etiquetas a la vez utilizando el administrador de etiquetas.",
"MinutesAfter": "minutos después", "MinutesAfter": "minutos después",
"MinutesBefore": "minutos antes", "MinutesBefore": "minutos antes",
"Mobile": "Móvil", "Mobile": "Móvil",
@ -928,7 +928,6 @@
"OptionEnableAccessFromAllDevices": "Habilitar acceso desde todos los equipos", "OptionEnableAccessFromAllDevices": "Habilitar acceso desde todos los equipos",
"OptionEnableAccessToAllChannels": "Habilitar acceso a todos los canales", "OptionEnableAccessToAllChannels": "Habilitar acceso a todos los canales",
"OptionEnableAccessToAllLibraries": "Habilitar acceso a todas las bibliotecas", "OptionEnableAccessToAllLibraries": "Habilitar acceso a todas las bibliotecas",
"OptionEnableAutomaticServerUpdates": "Activar actualizaciones automáticas del servidor",
"OptionEnableExternalContentInSuggestions": "Habilitar contenido externo en sugerencias", "OptionEnableExternalContentInSuggestions": "Habilitar contenido externo en sugerencias",
"OptionEnableExternalContentInSuggestionsHelp": "Permite incluir los tráilers de Internet y los programas de TV en vivo en el contenido sugerido.", "OptionEnableExternalContentInSuggestionsHelp": "Permite incluir los tráilers de Internet y los programas de TV en vivo en el contenido sugerido.",
"OptionEnableForAllTuners": "Activar para todos los dispositivos sintonizadores", "OptionEnableForAllTuners": "Activar para todos los dispositivos sintonizadores",
@ -982,8 +981,8 @@
"OptionResumable": "Se puede continuar", "OptionResumable": "Se puede continuar",
"OptionRuntime": "Tiempo", "OptionRuntime": "Tiempo",
"OptionSaturday": "Sábado", "OptionSaturday": "Sábado",
"OptionSaveMetadataAsHidden": "Guardar los metadatos e imágenes como archivos ocultos", "OptionSaveMetadataAsHidden": "Guardar las etiquetas e imágenes como archivos ocultos",
"OptionSaveMetadataAsHiddenHelp": "Cambiar esto se aplicará a los nuevos metadatos guardados en el futuro. Los archivos de metadatos existentes se actualizarán la próxima vez que sean guardados por el servidor Jellyfin.", "OptionSaveMetadataAsHiddenHelp": "La configuración se aplicará a las nuevas etiquetas que se creen. Las etiquetas existentes se actualizarán la próxima vez que sean guardadas por Jellyfin.",
"OptionSpecialEpisode": "Especiales", "OptionSpecialEpisode": "Especiales",
"OptionSunday": "Domingo", "OptionSunday": "Domingo",
"OptionThursday": "Jueves", "OptionThursday": "Jueves",
@ -1025,7 +1024,7 @@
"PleaseSelectTwoItems": "Seleccione al menos dos elementos.", "PleaseSelectTwoItems": "Seleccione al menos dos elementos.",
"PluginInstalledMessage": "El complemento se ha instalado correctamente. El servidor Jellyfin deberá reiniciarse para que los cambios surjan efecto.", "PluginInstalledMessage": "El complemento se ha instalado correctamente. El servidor Jellyfin deberá reiniciarse para que los cambios surjan efecto.",
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados sobre los nombres de archivo", "PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados sobre los nombres de archivo",
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título por defecto cuando no hay ningún metadato de internet o local.", "PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título que se utilizará cuando un elemento no tenga etiquetas ni estas se hayan podido descargar de Internet.",
"PreferredNotRequired": "Preferido, pero no requerido", "PreferredNotRequired": "Preferido, pero no requerido",
"Premieres": "Estrenos", "Premieres": "Estrenos",
"Previous": "Anterior", "Previous": "Anterior",
@ -1048,7 +1047,7 @@
"RecordingScheduled": "Grabación programada.", "RecordingScheduled": "Grabación programada.",
"Recordings": "Grabaciones", "Recordings": "Grabaciones",
"Refresh": "Refrescar", "Refresh": "Refrescar",
"RefreshMetadata": "Actualizar metadatos", "RefreshMetadata": "Actualizar etiquetas",
"RefreshQueued": "Actualización programada.", "RefreshQueued": "Actualización programada.",
"ReleaseDate": "Fecha de lanzamiento", "ReleaseDate": "Fecha de lanzamiento",
"RememberMe": "Recuérdame", "RememberMe": "Recuérdame",
@ -1059,7 +1058,7 @@
"RepeatEpisodes": "Repetir episodios", "RepeatEpisodes": "Repetir episodios",
"RepeatMode": "Modo de repetición", "RepeatMode": "Modo de repetición",
"RepeatOne": "Repetir uno", "RepeatOne": "Repetir uno",
"ReplaceAllMetadata": "Reemplazar todos los metadatos", "ReplaceAllMetadata": "Reemplazar todas las etiquetas",
"ReplaceExistingImages": "Reemplazar imágenes existentes", "ReplaceExistingImages": "Reemplazar imágenes existentes",
"RequiredForAllRemoteConnections": "Requerido para todas las conexiones remotas", "RequiredForAllRemoteConnections": "Requerido para todas las conexiones remotas",
"ResumeAt": "Continuar desde {0}", "ResumeAt": "Continuar desde {0}",
@ -1075,8 +1074,8 @@
"Screenshot": "Captura de pantalla", "Screenshot": "Captura de pantalla",
"Screenshots": "Capturas de pantalla", "Screenshots": "Capturas de pantalla",
"Search": "Buscar", "Search": "Buscar",
"SearchForCollectionInternetMetadata": "Buscar en internet ilustraciones y metadatos", "SearchForCollectionInternetMetadata": "Buscar en internet imágenes y etiquetas",
"SearchForMissingMetadata": "Buscar metadatos faltantes", "SearchForMissingMetadata": "Buscar etiquetas que falten",
"SearchForSubtitles": "Búsqueda de subtítulos", "SearchForSubtitles": "Búsqueda de subtítulos",
"SearchResults": "Resultados de la búsqueda", "SearchResults": "Resultados de la búsqueda",
"SendMessage": "Enviar mensaje", "SendMessage": "Enviar mensaje",
@ -1097,7 +1096,7 @@
"Shows": "Series", "Shows": "Series",
"Shuffle": "Mezclar", "Shuffle": "Mezclar",
"SimultaneousConnectionLimitHelp": "Número máximo de transmisiones simultáneas permitidas. Pon 0 para no tener límite.", "SimultaneousConnectionLimitHelp": "Número máximo de transmisiones simultáneas permitidas. Pon 0 para no tener límite.",
"SkipEpisodesAlreadyInMyLibrary": "No grabar episodios que ya están en mi librería", "SkipEpisodesAlreadyInMyLibrary": "No grabar episodios que ya están en mi biblioteca",
"SkipEpisodesAlreadyInMyLibraryHelp": "Los episodios serán comparados usando el número de temporada y de episodio, cuando estén disponibles.", "SkipEpisodesAlreadyInMyLibraryHelp": "Los episodios serán comparados usando el número de temporada y de episodio, cuando estén disponibles.",
"Small": "Pequeño", "Small": "Pequeño",
"Smart": "Inteligente", "Smart": "Inteligente",
@ -1135,7 +1134,7 @@
"TabLatest": "Novedades", "TabLatest": "Novedades",
"TabLibrary": "Biblioteca", "TabLibrary": "Biblioteca",
"TabLiveTV": "Televisión en directo", "TabLiveTV": "Televisión en directo",
"TabMetadata": "Metadatos", "TabMetadata": "Etiquetas",
"TabMovies": "Películas", "TabMovies": "Películas",
"TabMusic": "Música", "TabMusic": "Música",
"TabMusicVideos": "Videos musicales", "TabMusicVideos": "Videos musicales",
@ -1237,7 +1236,7 @@
"Banner": "Pancarta", "Banner": "Pancarta",
"BurnSubtitlesHelp": "Determina si el servidor debería incrustar los subtítulos al convertir el vídeo dependiendo del formato de los subtítulos. Evitar incrustar los subtítulos mejorará el rendimiento del servidor. Selecciona Auto para incrustar subtítulos basados en imágenes (VOBSUB, PGS, SUB/IDX, etc.) y algunos subtítulos de tipo ASS/SSA.", "BurnSubtitlesHelp": "Determina si el servidor debería incrustar los subtítulos al convertir el vídeo dependiendo del formato de los subtítulos. Evitar incrustar los subtítulos mejorará el rendimiento del servidor. Selecciona Auto para incrustar subtítulos basados en imágenes (VOBSUB, PGS, SUB/IDX, etc.) y algunos subtítulos de tipo ASS/SSA.",
"ButtonInfo": "Información", "ButtonInfo": "Información",
"ChangingMetadataImageSettingsNewContent": "Los cambios a la configuración de descarga de metadatos o arte sólo se aplicará al nuevo contenido añadido a la biblioteca. Para aplicar los cambios a los títulos existentes, necesitarás actualizar los metadatos manualmente.", "ChangingMetadataImageSettingsNewContent": "Los cambios a la configuración de descarga de etiquetas e imágenes sólo se aplicará al nuevo contenido que se añada a la biblioteca. Para aplicar los cambios a los elementos existentes necesitarás actualizar las etiquetas manualmente.",
"ColorPrimaries": "Colores primarios", "ColorPrimaries": "Colores primarios",
"ColorSpace": "Espacio de color", "ColorSpace": "Espacio de color",
"ColorTransfer": "Transferencia de color", "ColorTransfer": "Transferencia de color",
@ -1258,7 +1257,7 @@
"DisplayMissingEpisodesWithinSeasons": "Mostrar episodios ausentes en las temporadas", "DisplayMissingEpisodesWithinSeasons": "Mostrar episodios ausentes en las temporadas",
"DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe ser habilitado para la biblioteca de TV en la configuración del servidor.", "DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe ser habilitado para la biblioteca de TV en la configuración del servidor.",
"DropShadow": "Sombra", "DropShadow": "Sombra",
"EditMetadata": "Editar metadatos", "EditMetadata": "Editar etiquetas",
"EnableBackdrops": "Imágenes de fondo", "EnableBackdrops": "Imágenes de fondo",
"EnableBackdropsHelp": "Mostrar imágenes de fondo en algunas páginas mientras se explora la biblioteca.", "EnableBackdropsHelp": "Mostrar imágenes de fondo en algunas páginas mientras se explora la biblioteca.",
"EnableColorCodedBackgrounds": "Fondos con código de colores", "EnableColorCodedBackgrounds": "Fondos con código de colores",
@ -1402,7 +1401,7 @@
"PlayCount": "Reproducciones", "PlayCount": "Reproducciones",
"Premiere": "Estreno", "Premiere": "Estreno",
"Raised": "Elevación", "Raised": "Elevación",
"RefreshDialogHelp": "Los metadatos se actualizan basados en las configuraciones y los servicios de internet habilitados en el panel del servidor Jellyfin.", "RefreshDialogHelp": "Las etiquetas se actualizan basándose en las configuraciones y los servicios de internet activados desde el panel de control de Jellyfin.",
"RestartPleaseWaitMessage": "Por favor, espera mientras el servidor Jellyfin se reinicia. Esto puede tardar un minuto o dos.", "RestartPleaseWaitMessage": "Por favor, espera mientras el servidor Jellyfin se reinicia. Esto puede tardar un minuto o dos.",
"RunAtStartup": "Ejecutar al iniciar", "RunAtStartup": "Ejecutar al iniciar",
"Series": "Series", "Series": "Series",
@ -1461,5 +1460,6 @@
"HeaderFavoritePeople": "Personas favoritas", "HeaderFavoritePeople": "Personas favoritas",
"OptionRandom": "Aleatorio", "OptionRandom": "Aleatorio",
"SelectAdminUsername": "Por favor seleccione un nombre de usuario para la cuenta de administrador.", "SelectAdminUsername": "Por favor seleccione un nombre de usuario para la cuenta de administrador.",
"ButtonSplit": "Dividir" "ButtonSplit": "Dividir",
"HeaderNavigation": "Navegación"
} }

View file

@ -1009,7 +1009,6 @@
"OptionEnableAccessFromAllDevices": "Autoriser l'accès depuis tous les appareils", "OptionEnableAccessFromAllDevices": "Autoriser l'accès depuis tous les appareils",
"OptionEnableAccessToAllChannels": "Activer l'accès à toutes les chaînes", "OptionEnableAccessToAllChannels": "Activer l'accès à toutes les chaînes",
"OptionEnableAccessToAllLibraries": "Activer l'accès à toutes les librairies", "OptionEnableAccessToAllLibraries": "Activer l'accès à toutes les librairies",
"OptionEnableAutomaticServerUpdates": "Activer les mises à jour automatiques du serveur",
"OptionEnableExternalContentInSuggestions": "Activer le contenu externe dans les suggestions", "OptionEnableExternalContentInSuggestions": "Activer le contenu externe dans les suggestions",
"OptionEnableExternalContentInSuggestionsHelp": "Autoriser les bandes-annonces sur internet et les programmes TV en direct à être inclus dans le contenu suggéré.", "OptionEnableExternalContentInSuggestionsHelp": "Autoriser les bandes-annonces sur internet et les programmes TV en direct à être inclus dans le contenu suggéré.",
"OptionEnableForAllTuners": "Autoriser pour tous les tuners", "OptionEnableForAllTuners": "Autoriser pour tous les tuners",
@ -1455,5 +1454,6 @@
"HeaderFavoritePeople": "Personnes préférées", "HeaderFavoritePeople": "Personnes préférées",
"OptionRandom": "Aléatoire", "OptionRandom": "Aléatoire",
"ButtonSplit": "Séparer", "ButtonSplit": "Séparer",
"SelectAdminUsername": "Veuillez choisir un nom d'utilisateur pour le compte administrateur." "SelectAdminUsername": "Veuillez choisir un nom d'utilisateur pour le compte administrateur.",
"HeaderNavigation": "Navigation"
} }

Some files were not shown because too many files have changed in this diff Show more