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

merge branch master into itemdetailpage-layout

This commit is contained in:
dkanada 2020-01-08 22:02:01 +09:00
commit bd097773b0
221 changed files with 6930 additions and 2952 deletions

View file

@ -37,11 +37,12 @@
box-shadow: none;
flex-shrink: 0;
border-radius: 0;
margin: 0;
}
.actionSheetMenuItem:focus {
transform: none !important;
}
.actionSheetMenuItem:focus {
transform: none !important;
}
.actionsheetListItemBody {
padding: .4em 1em .4em .6em !important;
@ -104,7 +105,7 @@
}
.actionsheet-xlargeFont {
font-size: 112%!important;
font-size: 112% !important;
}
.btnCloseActionSheet {

View file

@ -1,3 +0,0 @@
{
"main": "actionsheet.js"
}

View file

@ -278,6 +278,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
features.push("targetblank");
// allows users to connect to more than one server
//features.push("multiserver");
features.push("screensaver");
if (!browser.orsay && !browser.tizen && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || cueSupported())) {
features.push("subtitleappearancesettings");

View file

@ -1,4 +1,4 @@
define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style'], function (browser, connectionManager, playbackManager, dom) {
define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./backdrop'], function (browser, connectionManager, playbackManager, dom) {
'use strict';
function enableAnimation(elem) {

View file

@ -1,3 +0,0 @@
{
"main": "backdrop.js"
}

View file

@ -0,0 +1,56 @@
define(["connectionManager"], function (connectionManager) {
return function () {
var self = this;
self.name = "Backdrop ScreenSaver";
self.type = "screensaver";
self.id = "backdropscreensaver";
self.supportsAnonymous = false;
var currentSlideshow;
self.show = function () {
var query = {
ImageTypes: "Backdrop",
EnableImageTypes: "Backdrop",
IncludeItemTypes: "Movie,Series,MusicArtist",
SortBy: "Random",
Recursive: true,
Fields: "Taglines",
ImageTypeLimit: 1,
StartIndex: 0,
Limit: 200
};
var apiClient = connectionManager.currentApiClient();
apiClient.getItems(apiClient.getCurrentUserId(), query).then(function (result) {
if (result.Items.length) {
require(["slideshow"], function (slideshow) {
var newSlideShow = new slideshow({
showTitle: true,
cover: true,
items: result.Items
});
newSlideShow.show();
currentSlideshow = newSlideShow;
});
}
});
};
self.hide = function () {
if (currentSlideshow) {
currentSlideshow.hide();
currentSlideshow = null;
}
};
}
});

View file

@ -18,7 +18,6 @@ button {
padding: 0;
display: block;
color: inherit !important;
-webkit-tap-highlight-color: rgba(0,0,0,0);
outline: none !important;
cursor: pointer;
contain: layout style;
@ -80,10 +79,9 @@ button {
margin: 0.6em;
transition: none;
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;
contain: layout style;
contain: layout;
contain: style;
}
.card.show-focus:not(.show-animation) .cardBox {
@ -148,7 +146,6 @@ button {
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;
@ -182,7 +179,6 @@ button {
margin: 0 !important;
/* Needed in safari */
height: 100%;
-webkit-tap-highlight-color: rgba(0,0,0,0);
outline: none !important;
contain: strict;
}
@ -247,7 +243,7 @@ button {
}
.coveredImage {
background-size: 100% 100%;
background-size: cover;
background-position: center center;
}
@ -346,7 +342,6 @@ button {
border: 0 !important;
padding: 0 !important;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0,0,0,0);
outline: none !important;
color: inherit;
vertical-align: middle;
@ -627,7 +622,7 @@ button {
@media (min-width: 43.75em) {
.overflowSquareCard, .overflowPortraitCard {
width: 23.3vw;
width: 23.1vw;
}
}
@ -643,13 +638,13 @@ button {
}
.overflowSquareCard, .overflowPortraitCard {
width: 23.3vw;
width: 23.1vw;
}
}
@media (orientation: landscape) and (min-width: 48.125em) {
.overflowBackdropCard, .overflowSmallBackdropCard {
width: 23.3vw;
width: 23.1vw;
}
}
@ -661,13 +656,13 @@ button {
@media (min-width: 50em) {
.overflowSquareCard, .overflowPortraitCard {
width: 18.4vw;
width: 18.5vw;
}
}
@media (min-width: 75em) {
.overflowBackdropCard, .overflowSmallBackdropCard {
width: 23.3vw;
width: 23.1vw;
}
.overflowSquareCard, .overflowPortraitCard {
@ -780,4 +775,4 @@ button {
.cardOverlayFab-primary:hover {
transform: scale(1.4, 1.4);
transition: 0.2s;
}
}

View file

@ -892,7 +892,8 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
} else {
if (item.EndDate && item.ProductionYear) {
lines.push(item.ProductionYear + ' - ' + datetime.parseISO8601Date(item.EndDate).getFullYear());
var endYear = datetime.parseISO8601Date(item.EndDate).getFullYear();
lines.push(item.ProductionYear + ((endYear === item.ProductionYear) ? '' : (' - ' + endYear)));
} else {
lines.push(item.ProductionYear || '');
}

View file

@ -1,12 +0,0 @@
.clearButton {
background: transparent;
border: 0 !important;
padding: 0 !important;
cursor: pointer;
outline: none !important;
color: inherit;
width: 100%;
vertical-align: middle;
font-family: inherit;
font-size: inherit;
}

View file

@ -1,3 +0,0 @@
{
"main": "dialog.js"
}

View file

@ -16,7 +16,6 @@
.dialog {
margin: 0;
border-radius: .2em;
-webkit-font-smoothing: antialiased;
border: 0;
padding: 0;
will-change: transform, opacity;

View file

@ -1,3 +0,0 @@
{
"main": "dialogHelper.js"
}

View file

@ -223,9 +223,9 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
function getDefaultPath(options) {
if (options.path) {
Promise.resolve(options.path);
return Promise.resolve(options.path);
} else {
ApiClient.getJSON(ApiClient.getUrl("Environment/DefaultDirectoryBrowser")).then(
return ApiClient.getJSON(ApiClient.getUrl("Environment/DefaultDirectoryBrowser")).then(
function(result) {
return result.Path || "";
}, function() {

View file

@ -1,186 +0,0 @@
.emby-button {
position: relative;
display: inline-flex;
align-items: center;
box-sizing: border-box;
margin: 0 0.3em;
text-align: center;
font-size: inherit;
font-family: inherit;
color: inherit;
outline-width: 0;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none;
cursor: pointer;
z-index: 0;
padding: 0.9em 1em;
vertical-align: middle;
border: 0;
vertical-align: middle;
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;
/* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0,0,0,0);
text-decoration: none;
/* Not crazy about this but it normalizes heights between anchors and buttons */
line-height: 1.35;
transform-origin: center;
transition: 0.2s;
}
.emby-button.show-focus:focus {
transform: scale(1.2);
z-index: 1;
}
.emby-button::-moz-focus-inner {
border: 0;
}
.button-flat {
background: transparent;
}
.button-flat:hover {
opacity: .5;
}
.button-link {
background: transparent;
margin: 0;
padding: 0;
vertical-align: initial;
}
.button-link:hover {
text-decoration: underline;
}
.emby-button > i {
/* For non-fab buttons that have icons */
font-size: 1.36em;
}
.button-link > i {
font-size: 1em;
}
.fab {
display: inline-flex;
border-radius: 50%;
padding: 0.6em;
box-sizing: border-box;
align-items: center;
justify-content: center;
text-align: center;
}
.emby-button.block {
display: block;
align-items: center;
justify-content: center;
margin: .25em 0;
width: 100%;
}
.paper-icon-button-light {
position: relative;
display: inline-flex;
align-items: center;
box-sizing: border-box;
margin: 0 .29em;
background: transparent;
text-align: center;
font-size: inherit;
font-family: inherit;
color: inherit;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none;
cursor: pointer;
z-index: 0;
min-width: initial;
min-height: initial;
width: auto;
height: auto;
padding: .556em;
vertical-align: middle;
border: 0;
vertical-align: middle;
/* These are getting an outline in opera tv browsers, which run chrome 30 */
outline: none !important;
position: relative;
overflow: hidden;
border-radius: 50%;
/* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0,0,0,0);
justify-content: center;
transform-origin: center;
transition: 0.2s;
}
.paper-icon-button-light.show-focus:focus {
transform: scale(1.3);
z-index: 1;
}
.paper-icon-button-light::-moz-focus-inner {
border: 0;
}
.paper-icon-button-light:disabled {
opacity: 0.3;
cursor: default;
}
.paper-icon-button-light > i {
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 {
max-height: 100%;
transform: scale(1.8);
position: relative;
z-index: 1;
vertical-align: middle;
display: inline;
margin: 0 auto;
}
.emby-button-foreground {
position: relative;
z-index: 1;
}
.btnFilterWithBubble {
position: relative;
}
.filterButtonBubble {
color: #fff;
position: absolute;
background: #444;
top: 0;
right: 0;
width: 1.6em;
height: 1.6em;
z-index: 100000000;
display: flex;
align-items: center;
justify-content: center;
font-size: 82%;
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);
background: #03A9F4;
font-weight: bold;
}

View file

@ -1,70 +0,0 @@
define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css!./emby-button', 'registerElement'], function (browser, dom, layoutManager, shell, appRouter, appHost) {
'use strict';
var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype);
var EmbyLinkButtonPrototype = Object.create(HTMLAnchorElement.prototype);
function onAnchorClick(e) {
var href = this.getAttribute('href') || '';
if (href !== '#') {
if (this.getAttribute('target')) {
if (!appHost.supports('targetblank')) {
e.preventDefault();
shell.openUrl(href);
}
} else {
appRouter.handleAnchorClick(e);
}
} else {
e.preventDefault();
}
}
EmbyButtonPrototype.createdCallback = function () {
if (this.classList.contains('emby-button')) {
return;
}
this.classList.add('emby-button');
// TODO replace all instances of element-showfocus with this method
if (layoutManager.tv) {
// handles all special css for tv layout
// this method utilizes class chaining
this.classList.add('show-focus');
}
};
EmbyButtonPrototype.attachedCallback = function () {
if (this.tagName === 'A') {
dom.removeEventListener(this, 'click', onAnchorClick, {});
dom.addEventListener(this, 'click', onAnchorClick, {});
if (this.getAttribute('data-autohide') === 'true') {
if (appHost.supports('externallinks')) {
this.classList.remove('hide');
} else {
this.classList.add('hide');
}
}
}
};
EmbyButtonPrototype.detachedCallback = function () {
dom.removeEventListener(this, 'click', onAnchorClick, {});
};
EmbyLinkButtonPrototype.createdCallback = EmbyButtonPrototype.createdCallback;
EmbyLinkButtonPrototype.attachedCallback = EmbyButtonPrototype.attachedCallback;
document.registerElement('emby-button', {
prototype: EmbyButtonPrototype,
extends: 'button'
});
document.registerElement('emby-linkbutton', {
prototype: EmbyLinkButtonPrototype,
extends: 'a'
});
return EmbyButtonPrototype;
});

View file

@ -1,18 +0,0 @@
define(['layoutManager', 'css!./emby-button', 'registerElement'], function (layoutManager) {
'use strict';
var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype);
EmbyButtonPrototype.createdCallback = function () {
this.classList.add('paper-icon-button-light');
if (layoutManager.tv) {
this.classList.add('show-focus');
}
};
document.registerElement('paper-icon-button-light', {
prototype: EmbyButtonPrototype,
extends: 'button'
});
});

View file

@ -1,126 +0,0 @@
.emby-checkbox-label {
position: relative;
z-index: 1;
vertical-align: middle;
display: inline-flex;
box-sizing: border-box;
width: 100%;
margin: 0;
padding: 0;
padding-left: 2.4em;
align-items: center;
height: 2.35em;
cursor: pointer;
}
.checkboxFieldDescription {
padding-left: 2.4em;
}
.checkboxContainer {
margin-bottom: 1.8em;
display: flex;
}
.checkboxListContainer {
margin-bottom: 1.8em;
}
.checkboxContainer-withDescription {
flex-direction: column;
}
.emby-checkbox {
position: absolute;
/* This is for focusing purposes, so the focusManager doesn't skip over it */
width: 1px;
height: 1px;
margin: 0;
padding: 0;
opacity: 0;
-ms-appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
appearance: none;
border: none;
}
.checkboxOutline {
position: absolute;
top: 3px;
left: 0;
display: inline-block;
box-sizing: border-box;
width: 1.83em;
height: 1.83em;
margin: 0;
overflow: hidden;
border: 2px solid currentcolor;
border-radius: .14em;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
}
.checkboxIcon {
font-size: 1.6em;
color: #fff;
}
.checkboxIcon-checked {
display: none;
}
.emby-checkbox:checked + span + .checkboxOutline > .checkboxIcon-checked {
/* background color set by theme */
display: flex !important;
}
.emby-checkbox:checked + span + .checkboxOutline > .checkboxIcon-unchecked {
/* background color set by theme */
display: none !important;
}
.emby-checkbox:checked[disabled] + span + .checkboxOutline > .checkboxIcon {
background-color: rgba(0, 0, 0, 0.26);
}
.checkboxLabel {
position: relative;
margin: 0;
}
.checkboxList > .emby-checkbox-label {
display: flex;
margin: 0.5em 0;
}
.checkboxList-verticalwrap {
display: flex;
flex-wrap: wrap;
}
.checkboxList-verticalwrap > .emby-checkbox-label {
display: inline-flex;
margin: .3em 0 .3em 0;
width: 12em;
}
.checkboxList-paperList {
padding: 1em !important;
}
.checkboxListLabel {
margin-bottom: .25em;
}
@-webkit-keyframes repaintChrome {
from {
padding: 0;
}
to {
padding: 0;
}
}

View file

@ -1,105 +0,0 @@
define(['browser', 'dom', 'css!./emby-checkbox', 'registerElement'], function (browser, dom) {
'use strict';
var EmbyCheckboxPrototype = Object.create(HTMLInputElement.prototype);
function onKeyDown(e) {
// Don't submit form on enter
if (e.keyCode === 13) {
e.preventDefault();
this.checked = !this.checked;
this.dispatchEvent(new CustomEvent('change', {
bubbles: true
}));
return false;
}
}
var enableRefreshHack = browser.tizen || browser.orsay || browser.operaTv || browser.web0s ? true : false;
function forceRefresh(loading) {
var elem = this.parentNode;
elem.style.webkitAnimationName = 'repaintChrome';
elem.style.webkitAnimationDelay = (loading === true ? '500ms' : '');
elem.style.webkitAnimationDuration = '10ms';
elem.style.webkitAnimationIterationCount = '1';
setTimeout(function () {
elem.style.webkitAnimationName = '';
}, (loading === true ? 520 : 20));
}
EmbyCheckboxPrototype.attachedCallback = function () {
if (this.getAttribute('data-embycheckbox') === 'true') {
return;
}
this.setAttribute('data-embycheckbox', 'true');
this.classList.add('emby-checkbox');
var labelElement = this.parentNode;
labelElement.classList.add('emby-checkbox-label');
var labelTextElement = labelElement.querySelector('span');
var outlineClass = 'checkboxOutline';
var customClass = this.getAttribute('data-outlineclass');
if (customClass) {
outlineClass += ' ' + customClass;
}
var checkedIcon = this.getAttribute('data-checkedicon') || 'check';
var uncheckedIcon = this.getAttribute('data-uncheckedicon') || '';
var checkHtml = '<i class="md-icon checkboxIcon checkboxIcon-checked">' + checkedIcon + '</i>';
var uncheckedHtml = '<i class="md-icon checkboxIcon checkboxIcon-unchecked">' + uncheckedIcon + '</i>';
labelElement.insertAdjacentHTML('beforeend', '<span class="' + outlineClass + '">' + checkHtml + uncheckedHtml + '</span>');
labelTextElement.classList.add('checkboxLabel');
this.addEventListener('keydown', onKeyDown);
if (enableRefreshHack) {
forceRefresh.call(this, true);
dom.addEventListener(this, 'click', forceRefresh, {
passive: true
});
dom.addEventListener(this, 'blur', forceRefresh, {
passive: true
});
dom.addEventListener(this, 'focus', forceRefresh, {
passive: true
});
dom.addEventListener(this, 'change', forceRefresh, {
passive: true
});
}
};
EmbyCheckboxPrototype.detachedCallback = function () {
this.removeEventListener('keydown', onKeyDown);
dom.removeEventListener(this, 'click', forceRefresh, {
passive: true
});
dom.removeEventListener(this, 'blur', forceRefresh, {
passive: true
});
dom.removeEventListener(this, 'focus', forceRefresh, {
passive: true
});
dom.removeEventListener(this, 'change', forceRefresh, {
passive: true
});
};
document.registerElement('emby-checkbox', {
prototype: EmbyCheckboxPrototype,
extends: 'input'
});
});

View file

@ -1,44 +0,0 @@
.emby-collapse {
margin: .5em 0;
}
.collapseContent {
border-width: 0;
padding: 1.25em 1.25em;
height: 0;
transition-property: height;
transition-duration: 300ms;
overflow: hidden;
}
.emby-collapsible-button {
margin: 0;
display: flex;
align-items: center;
text-transform: none;
width: 100%;
text-align: left;
text-transform: none;
border-width: 0 0 .1em 0;
border-style: solid;
padding-left: .1em;
background: transparent;
box-shadow: none;
}
.emby-collapse-expandIcon {
transform-origin: 50% 50%;
transition: transform 180ms ease-out;
position: absolute;
right: .5em;
font-size: 1.5em;
}
.emby-collapse-expandIconExpanded {
transform: rotate(180deg);
}
.emby-collapsible-title {
margin: 0;
padding: 0;
}

View file

@ -1,100 +0,0 @@
define(['browser', 'css!./emby-collapse', 'registerElement', 'emby-button'], function (browser) {
'use strict';
var EmbyButtonPrototype = Object.create(HTMLDivElement.prototype);
function slideDownToShow(button, elem) {
elem.classList.remove('hide');
elem.classList.add('expanded');
elem.style.height = 'auto';
var height = elem.offsetHeight + 'px';
elem.style.height = '0';
// trigger reflow
var newHeight = elem.offsetHeight;
elem.style.height = height;
setTimeout(function () {
if (elem.classList.contains('expanded')) {
elem.classList.remove('hide');
} else {
elem.classList.add('hide');
}
elem.style.height = 'auto';
}, 300);
var icon = button.querySelector('i');
//icon.innerHTML = 'expand_less';
icon.classList.add('emby-collapse-expandIconExpanded');
}
function slideUpToHide(button, elem) {
elem.style.height = elem.offsetHeight + 'px';
// trigger reflow
var newHeight = elem.offsetHeight;
elem.classList.remove('expanded');
elem.style.height = '0';
setTimeout(function () {
if (elem.classList.contains('expanded')) {
elem.classList.remove('hide');
} else {
elem.classList.add('hide');
}
}, 300);
var icon = button.querySelector('i');
//icon.innerHTML = 'expand_more';
icon.classList.remove('emby-collapse-expandIconExpanded');
}
function onButtonClick(e) {
var button = this;
var collapseContent = button.parentNode.querySelector('.collapseContent');
if (collapseContent.expanded) {
collapseContent.expanded = false;
slideUpToHide(button, collapseContent);
} else {
collapseContent.expanded = true;
slideDownToShow(button, collapseContent);
}
}
EmbyButtonPrototype.attachedCallback = function () {
if (this.classList.contains('emby-collapse')) {
return;
}
this.classList.add('emby-collapse');
var collapseContent = this.querySelector('.collapseContent');
if (collapseContent) {
collapseContent.classList.add('hide');
}
var title = this.getAttribute('title');
var html = '<button is="emby-button" type="button" on-click="toggleExpand" id="expandButton" class="emby-collapsible-button iconRight"><h3 class="emby-collapsible-title" title="' + title + '">' + title + '</h3><i class="md-icon emby-collapse-expandIcon">expand_more</i></button>';
this.insertAdjacentHTML('afterbegin', html);
var button = this.querySelector('.emby-collapsible-button');
button.addEventListener('click', onButtonClick);
if (this.getAttribute('data-expanded') === 'true') {
onButtonClick.call(button);
}
};
document.registerElement('emby-collapse', {
prototype: EmbyButtonPrototype,
extends: 'div'
});
});

View file

@ -1,40 +0,0 @@
.emby-input {
display: block;
margin: 0;
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-weight: inherit;
padding: .4em .25em;
/* Prevent padding from causing width overflow */
-webkit-box-sizing: border-box;
box-sizing: border-box;
outline: none !important;
-webkit-tap-highlight-color: rgba(0,0,0,0);
width: 100%;
}
.emby-input::-moz-focus-inner {
border: 0;
}
.inputContainer {
margin-bottom: 1.8em;
}
.inputLabel {
display: inline-block;
margin-bottom: .25em;
}
.emby-input + .fieldDescription {
margin-top: .25em;
}
.emby-input-iconbutton {
-webkit-align-self: flex-end;
align-self: flex-end;
}

View file

@ -1,126 +0,0 @@
define(['layoutManager', 'browser', 'dom', 'css!./emby-input', 'registerElement'], function (layoutManager, browser, dom) {
'use strict';
var EmbyInputPrototype = Object.create(HTMLInputElement.prototype);
var inputId = 0;
var supportsFloatingLabel = false;
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
// descriptor returning null in webos
if (descriptor && descriptor.configurable) {
var baseSetMethod = descriptor.set;
descriptor.set = function (value) {
baseSetMethod.call(this, value);
this.dispatchEvent(new CustomEvent('valueset', {
bubbles: false,
cancelable: false
}));
};
Object.defineProperty(HTMLInputElement.prototype, 'value', descriptor);
supportsFloatingLabel = true;
}
}
EmbyInputPrototype.createdCallback = function () {
if (!this.id) {
this.id = 'embyinput' + inputId;
inputId++;
}
if (this.classList.contains('emby-input')) {
return;
}
this.classList.add('emby-input');
var parentNode = this.parentNode;
var document = this.ownerDocument;
var label = document.createElement('label');
label.innerHTML = this.getAttribute('label') || '';
label.classList.add('inputLabel');
label.classList.add('inputLabelUnfocused');
label.htmlFor = this.id;
parentNode.insertBefore(label, this);
this.labelElement = label;
dom.addEventListener(this, 'focus', function () {
onChange.call(this);
// For Samsung orsay devices
if (document.attachIME) {
document.attachIME(this);
}
label.classList.add('inputLabelFocused');
label.classList.remove('inputLabelUnfocused');
}, {
passive: true
});
dom.addEventListener(this, 'blur', function () {
onChange.call(this);
label.classList.remove('inputLabelFocused');
label.classList.add('inputLabelUnfocused');
}, {
passive: true
});
dom.addEventListener(this, 'change', onChange, {
passive: true
});
dom.addEventListener(this, 'input', onChange, {
passive: true
});
dom.addEventListener(this, 'valueset', onChange, {
passive: true
});
if (browser.orsay) {
if (this === document.activeElement) {
//Make sure the IME pops up if this is the first/default element on the page
if (document.attachIME) {
document.attachIME(this);
}
}
}
};
function onChange() {
var label = this.labelElement;
if (this.value) {
label.classList.remove('inputLabel-float');
} else {
var instanceSupportsFloat = supportsFloatingLabel && this.type !== 'date' && this.type !== 'time';
if (instanceSupportsFloat) {
label.classList.add('inputLabel-float');
}
}
}
EmbyInputPrototype.attachedCallback = function () {
this.labelElement.htmlFor = this.id;
onChange.call(this);
};
EmbyInputPrototype.label = function (text) {
this.labelElement.innerHTML = text;
};
document.registerElement('emby-input', {
prototype: EmbyInputPrototype,
extends: 'input'
});
});

View file

@ -1,3 +0,0 @@
{
"main": "emby-input.js"
}

View file

@ -1,105 +0,0 @@
.progressring {
position: relative;
width: 2.6em;
height: 2.6em;
float: left;
user-select: none;
box-sizing: border-box;
}
.progressring-bg {
width: 100%;
height: 100%;
border-radius: 50%;
border: .25em solid rgba(0, 0, 0, 1);
box-sizing: border-box;
background: rgba(0, 0, 0, .9);
display: flex;
align-items: center;
justify-content: center;
}
.progressring-text {
text-align: center;
color: #ddd;
font-size: 90%;
}
.spiner-holder-one {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
width: 51%;
height: 51%;
background: transparent;
box-sizing: border-box;
}
.spiner-holder-two {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
width: 100%;
height: 100%;
background: transparent;
box-sizing: border-box;
}
.progressring-spiner {
width: 200%;
height: 200%;
border-radius: 50%;
border-width: .25em;
border-style: solid;
box-sizing: border-box;
}
.animate-0-25-a {
transform: rotate(90deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}
.animate-0-25-b {
transform: rotate(-90deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}
.animate-25-50-a {
transform: rotate(180deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}
.animate-25-50-b {
transform: rotate(-90deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}
.animate-50-75-a {
transform: rotate(270deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}
.animate-50-75-b {
transform: rotate(-90deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}
.animate-75-100-a {
transform: rotate(0deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}
.animate-75-100-b {
transform: rotate(-90deg);
transform-origin: 100% 100%;
transition: transform 180ms ease-out;
}

View file

@ -1,101 +0,0 @@
define(['require', 'css!./emby-progressring', 'registerElement'], function (require) {
'use strict';
var EmbyProgressRing = Object.create(HTMLDivElement.prototype);
EmbyProgressRing.createdCallback = function () {
this.classList.add('progressring');
var instance = this;
require(['text!./emby-progressring.template.html'], function (template) {
instance.innerHTML = template;
//if (window.MutationObserver) {
// // create an observer instance
// var observer = new MutationObserver(function (mutations) {
// mutations.forEach(function (mutation) {
// instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0'));
// });
// });
// // configuration of the observer:
// var config = { attributes: true, childList: false, characterData: false };
// // pass in the target node, as well as the observer options
// observer.observe(instance, config);
// instance.observer = observer;
//}
instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0'));
});
};
EmbyProgressRing.setProgress = function (progress) {
progress = Math.floor(progress);
var angle;
if (progress < 25) {
angle = -90 + (progress / 100) * 360;
this.querySelector('.animate-0-25-b').style.transform = 'rotate(' + angle + 'deg)';
this.querySelector('.animate-25-50-b').style.transform = 'rotate(-90deg)';
this.querySelector('.animate-50-75-b').style.transform = 'rotate(-90deg)';
this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)';
} else if (progress >= 25 && progress < 50) {
angle = -90 + ((progress - 25) / 100) * 360;
this.querySelector('.animate-0-25-b').style.transform = 'none';
this.querySelector('.animate-25-50-b').style.transform = 'rotate(' + angle + 'deg)';
this.querySelector('.animate-50-75-b').style.transform = 'rotate(-90deg)';
this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)';
} else if (progress >= 50 && progress < 75) {
angle = -90 + ((progress - 50) / 100) * 360;
this.querySelector('.animate-0-25-b').style.transform = 'none';
this.querySelector('.animate-25-50-b').style.transform = 'none';
this.querySelector('.animate-50-75-b').style.transform = 'rotate(' + angle + 'deg)';
this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)';
} else if (progress >= 75 && progress <= 100) {
angle = -90 + ((progress - 75) / 100) * 360;
this.querySelector('.animate-0-25-b').style.transform = 'none';
this.querySelector('.animate-25-50-b').style.transform = 'none';
this.querySelector('.animate-50-75-b').style.transform = 'none';
this.querySelector('.animate-75-100-b').style.transform = 'rotate(' + angle + 'deg)';
}
this.querySelector('.progressring-text').innerHTML = progress + '%';
};
EmbyProgressRing.attachedCallback = function () {
};
EmbyProgressRing.detachedCallback = function () {
var observer = this.observer;
if (observer) {
// later, you can stop observing
observer.disconnect();
this.observer = null;
}
};
document.registerElement('emby-progressring', {
prototype: EmbyProgressRing,
extends: 'div'
});
return EmbyProgressRing;
});

View file

@ -1,23 +0,0 @@
<div class="progressring-bg">
<div class="progressring-text"></div>
</div>
<div class="spiner-holder-one animate-0-25-a">
<div class="spiner-holder-two animate-0-25-b">
<div class="progressring-spiner"></div>
</div>
</div>
<div class="spiner-holder-one animate-25-50-a">
<div class="spiner-holder-two animate-25-50-b">
<div class="progressring-spiner"></div>
</div>
</div>
<div class="spiner-holder-one animate-50-75-a">
<div class="spiner-holder-two animate-50-75-b">
<div class="progressring-spiner"></div>
</div>
</div>
<div class="spiner-holder-one animate-75-100-a">
<div class="spiner-holder-two animate-75-100-b">
<div class="progressring-spiner"></div>
</div>
</div>

View file

@ -1,107 +0,0 @@
.mdl-radio {
position: relative;
line-height: 24px;
display: inline-block;
box-sizing: border-box;
margin: 0;
padding-left: 0;
}
.radio-label-block {
display: flex;
align-items: center;
margin-top: .5em;
margin-bottom: .5em;
}
.mdl-radio {
padding-left: 24px;
}
.mdl-radio__button {
line-height: 24px;
position: absolute;
/* 1px is for focusing purposes, so the focusManager doesn't skip over it */
width: 1px;
height: 1px;
margin: 0;
padding: 0;
opacity: 0;
-ms-appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
appearance: none;
border: none;
}
.mdl-radio__outer-circle {
position: absolute;
top: 4px;
left: 0;
display: inline-block;
box-sizing: border-box;
width: 16px;
height: 16px;
margin: 0;
cursor: pointer;
border: 2px solid currentcolor;
border-radius: 50%;
z-index: 2;
}
.mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle {
border: 2px solid #00a4dc;
}
.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle {
border: 2px solid rgba(0,0,0, 0.26);
cursor: auto;
}
.mdl-radio__inner-circle {
position: absolute;
z-index: 1;
margin: 0;
top: 8px;
left: 4px;
box-sizing: border-box;
width: 8px;
height: 8px;
cursor: pointer;
transition-duration: 0.28s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: -webkit-transform;
transition-property: transform;
transition-property: transform, -webkit-transform;
-webkit-transform: scale3d(0, 0, 0);
transform: scale3d(0, 0, 0);
border-radius: 50%;
background: #00a4dc;
}
.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);
}
.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
background: rgba(0,0,0, 0.26);
cursor: auto;
}
.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);
}
.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)
}
.mdl-radio__label {
cursor: pointer;
}
.mdl-radio__button:disabled + .mdl-radio__label {
color: rgba(0,0,0, 0.26);
cursor: auto;
}

View file

@ -1,48 +0,0 @@
define(['css!./emby-radio', 'registerElement'], function () {
'use strict';
var EmbyRadioPrototype = Object.create(HTMLInputElement.prototype);
function onKeyDown(e) {
// Don't submit form on enter
if (e.keyCode === 13) {
e.preventDefault();
this.checked = true;
return false;
}
}
EmbyRadioPrototype.attachedCallback = function () {
if (this.getAttribute('data-radio') === 'true') {
return;
}
this.setAttribute('data-radio', 'true');
this.classList.add('mdl-radio__button');
var labelElement = this.parentNode;
//labelElement.classList.add('"mdl-radio mdl-js-radio mdl-js-ripple-effect');
labelElement.classList.add('mdl-radio');
labelElement.classList.add('mdl-js-radio');
labelElement.classList.add('mdl-js-ripple-effect');
var labelTextElement = labelElement.querySelector('span');
labelTextElement.classList.add('radioButtonLabel');
labelTextElement.classList.add('mdl-radio__label');
labelElement.insertAdjacentHTML('beforeend', '<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span>');
this.addEventListener('keydown', onKeyDown);
};
document.registerElement('emby-radio', {
prototype: EmbyRadioPrototype,
extends: 'input'
});
});

View file

@ -1,3 +0,0 @@
{
"main": "emby-radio.js"
}

View file

@ -6,6 +6,7 @@
justify-content: center;
min-width:104px;
min-height:24px;
padding-top: 1.25em;
z-index: 1;
color: #ffffff;
display: flex;
@ -15,4 +16,4 @@
min-width: 24px;
min-height: 24px;
display: block;
}
}

View file

@ -8,21 +8,15 @@
}
/* align first card in scroller to heading */
.emby-scroller .card:first-of-type > .cardBox {
.itemsContainer > .card > .cardBox {
margin-left: 0;
margin-right: 1.2em;
}
/* align heading for normal item containers */
/* still not ideal solution but better than the last method */
.verticalSection > .itemsContainer .cardBox {
.layout-tv .emby-scroller,
.layout-mobile .emby-scroller {
padding-left: 3.3%;
padding-right: 3.3%;
margin-left: 0;
margin-right: 0;
}
@media all and (max-width:50em) {
.emby-scroller {
padding-left: 3.3%;
padding-right: 3.3%;
margin-left: 0;
margin-right: 0;
}
}

View file

@ -1,110 +0,0 @@
.emby-select {
display: block;
margin: 0;
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-weight: inherit;
padding: .5em 1.9em .5em .5em;
/* Prevent padding from causing width overflow */
box-sizing: border-box;
outline: none !important;
-webkit-tap-highlight-color: rgba(0,0,0,0);
width: 100%;
}
.emby-select[disabled] {
background: none !important;
border-color: transparent !important;
color: inherit !important;
-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 {
border: 0;
}
.emby-select-focusscale {
transition: transform 180ms ease-out !important;
-webkit-transform-origin: center center;
transform-origin: center center;
}
.emby-select-focusscale:focus {
transform: scale(1.04);
z-index: 1;
}
.emby-select + .fieldDescription {
margin-top: .25em;
}
.selectContainer {
margin-bottom: 1.8em;
position: relative;
}
.selectContainer-inline {
display: inline-flex;
margin-bottom: 0;
align-items: center;
}
.selectLabel {
display: block;
margin-bottom: .25em;
}
.selectContainer-inline > .selectLabel {
margin-bottom: 0;
margin-right: .5em;
flex-shrink: 0;
}
.emby-select-withcolor {
-webkit-appearance: none;
appearance: none;
border-radius: .2em;
}
.selectArrowContainer {
position: absolute;
right: .3em;
top: .2em;
color: inherit;
pointer-events: none;
}
.selectContainer-inline > .selectArrowContainer {
top: initial;
bottom: .24em;
font-size: 90%;
}
.emby-select[disabled] + .selectArrowContainer {
display: none;
}
.selectArrow {
margin-top: .35em;
font-size: 1.7em;
}
.emby-select-iconbutton {
align-self: flex-end;
}

View file

@ -1,162 +0,0 @@
define(['layoutManager', 'browser', 'actionsheet', 'css!./emby-select', 'registerElement'], function (layoutManager, browser, actionsheet) {
'use strict';
var EmbySelectPrototype = Object.create(HTMLSelectElement.prototype);
function enableNativeMenu() {
if (browser.edgeUwp || browser.xboxOne) {
return true;
}
// Doesn't seem to work at all
if (browser.tizen || browser.orsay || browser.web0s) {
return false;
}
// Take advantage of the native input methods
if (browser.tv) {
return true;
}
if (layoutManager.tv) {
return false;
}
return true;
}
function triggerChange(select) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
select.dispatchEvent(evt);
}
function setValue(select, value) {
select.value = value;
}
function showActionSheet(select) {
var labelElem = getLabel(select);
var title = labelElem ? (labelElem.textContent || labelElem.innerText) : null;
actionsheet.show({
items: select.options,
positionTo: select,
title: title
}).then(function (value) {
setValue(select, value);
triggerChange(select);
});
}
function getLabel(select) {
var elem = select.previousSibling;
while (elem && elem.tagName !== 'LABEL') {
elem = elem.previousSibling;
}
return elem;
}
function onFocus(e) {
var label = getLabel(this);
if (label) {
label.classList.add('selectLabelFocused');
}
}
function onBlur(e) {
var label = getLabel(this);
if (label) {
label.classList.remove('selectLabelFocused');
}
}
function onMouseDown(e) {
// e.button=0 for primary (left) mouse button click
if (!e.button && !enableNativeMenu()) {
e.preventDefault();
showActionSheet(this);
}
}
function onKeyDown(e) {
switch (e.keyCode) {
case 13:
if (!enableNativeMenu()) {
e.preventDefault();
showActionSheet(this);
}
return;
case 37:
case 38:
case 39:
case 40:
if (layoutManager.tv) {
e.preventDefault();
}
return;
default:
break;
}
}
var inputId = 0;
EmbySelectPrototype.createdCallback = function () {
if (!this.id) {
this.id = 'embyselect' + inputId;
inputId++;
}
this.classList.add('emby-select-withcolor');
if (layoutManager.tv) {
this.classList.add('emby-select-focusscale');
}
this.addEventListener('mousedown', onMouseDown);
this.addEventListener('keydown', onKeyDown);
this.addEventListener('focus', onFocus);
this.addEventListener('blur', onBlur);
};
EmbySelectPrototype.attachedCallback = function () {
if (this.classList.contains('emby-select')) {
return;
}
this.classList.add('emby-select');
var label = this.ownerDocument.createElement('label');
label.innerHTML = this.getAttribute('label') || '';
label.classList.add('selectLabel');
label.htmlFor = this.id;
this.parentNode.insertBefore(label, this);
if (this.classList.contains('emby-select-withcolor')) {
this.parentNode.insertAdjacentHTML('beforeend', '<div class="selectArrowContainer"><div style="visibility:hidden;">0</div><i class="selectArrow md-icon">keyboard_arrow_down</i></div>');
}
};
EmbySelectPrototype.setLabel = function (text) {
var label = this.parentNode.querySelector('label');
label.innerHTML = text;
};
document.registerElement('emby-select', {
prototype: EmbySelectPrototype,
extends: 'select'
});
});

View file

@ -1,232 +0,0 @@
_:-ms-input-placeholder {
-ms-appearance: none;
height: 2.223em;
margin: 0;
}
.mdl-slider {
width: 100%;
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
appearance: none;
height: 150%;/*150% is needed, else ie and edge won't display the thumb properly*/
background: transparent;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
outline: 0;
color: #00a4dc;
-webkit-align-self: center;
-ms-flex-item-align: center;
align-self: center;
z-index: 1;
cursor: pointer;
margin: 0;
/* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0,0,0,0);
display: block;
}
.mdl-slider::-moz-focus-outer {
border: 0;
}
.mdl-slider::-ms-tooltip {
display: none;
}
.mdl-slider::-webkit-slider-runnable-track {
background: transparent;
}
.mdl-slider::-moz-range-track {
background: #444;
border: none;
width: calc(100% - 20px);
}
.mdl-slider::-moz-range-progress {
background: #00a4dc;
width: calc(100% - 20px);
}
.mdl-slider::-ms-track {
background: none;
color: transparent;
height: .2em;
width: 100%;
border: none;
}
.mdl-slider::-ms-fill-lower {
display: none;
}
.mdl-slider::-ms-fill-upper {
display: none;
}
.mdl-slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 1.2em;
height: 1.2em;
box-sizing: border-box;
border-radius: 50%;
background: #00a4dc;
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);
}
.mdl-slider-hoverthumb::-webkit-slider-thumb {
transform: none;
}
.mdl-slider:hover::-webkit-slider-thumb {
transform: scale(1.3);
}
.mdl-slider.show-focus:focus::-webkit-slider-thumb {
transform: scale(1.3);
}
.slider-no-webkit-thumb::-webkit-slider-thumb {
opacity: 0 !important;
}
.mdl-slider::-moz-range-thumb {
-moz-appearance: none;
width: 0.9em;
height: 0.9em;
box-sizing: border-box;
border-radius: 50%;
background-image: none;
background: #00a4dc;
border: none;
transform: Scale(1.4, 1.4);
}
.mdl-slider::-ms-thumb {
-webkit-appearance: none;
width: 1.8em;
height: 1.8em;
box-sizing: border-box;
border-radius: 50%;
background: #00a4dc;
border: none;
transform: scale(.9, .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);
}
.mdl-slider-hoverthumb::-ms-thumb {
margin-left: -.4em;
transform: scale(.5, .5);
}
.mdl-slider:hover::-ms-thumb {
transform: none;
}
.mdl-slider[disabled]::-webkit-slider-thumb {
display: none;
}
.mdl-slider[disabled]::-moz-range-thumb {
display: none;
}
.mdl-slider[disabled]::-ms-thumb {
display: none;
}
.mdl-slider-ie-container {
height: 1.25em;
overflow: visible;
border: none;
margin: 0;
padding: 0;
}
.mdl-slider-container {
height: 1.25em;
position: relative;
background: none;
display: flex;
flex-direction: row;
}
.mdl-slider-background-flex-container {
width: 100%;
box-sizing: border-box;
margin-top: -.05em;
top: 50%;
position: absolute;
}
.mdl-slider-background-flex {
background: #333;
height: .2em;
margin-top: -.08em;
width: 100%;
top: 50%;
left: 0;
display: flex;
overflow: hidden;
border: 0;
padding: 0;
}
.mdl-slider-background-flex-inner {
position: relative;
width: 100%;
}
.mdl-slider-background-lower {
/*transition: width 0.18s cubic-bezier(0.4, 0, 0.2, 1);*/
position: absolute;
left: 0;
width: 0;
top: 0;
bottom: 0;
background-color: #00a4dc;
}
.mdl-slider-background-lower-clear {
background-color: transparent;
}
.mdl-slider-background-lower-withtransform {
width: 100%;
/*transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1);*/
transform-origin: left center;
transform: scaleX(0);
}
.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);*/
background: #666;
background: rgba(255, 255, 255, .4);
position: absolute;
left: 0;
width: 0;
top: 0;
bottom: 0;
}
.sliderBubble {
position: absolute;
top: 0;
left: 0;
transform: translate3d(-48%, -120%, 0);
background: #282828;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
}
.sliderBubbleText {
margin: 0;
padding: .5em .75em;
}

View file

@ -1,379 +0,0 @@
define(['browser', 'dom', 'layoutManager', 'css!./emby-slider', 'registerElement', 'emby-input'], function (browser, dom, layoutManager) {
'use strict';
var EmbySliderPrototype = Object.create(HTMLInputElement.prototype);
var supportsNativeProgressStyle = browser.firefox;
var supportsValueSetOverride = false;
var enableWidthWithTransform;
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
// descriptor returning null in webos
if (descriptor && descriptor.configurable) {
supportsValueSetOverride = true;
}
}
function updateValues() {
// Do not update values when dragging with keyboard to keep current progress for reference
if (!!this.keyboardDragging) {
return;
}
var range = this;
var value = range.value;
// put this on a callback. Doing it within the event sometimes causes the slider to get hung up and not respond
requestAnimationFrame(function () {
var backgroundLower = range.backgroundLower;
if (backgroundLower) {
var fraction = (value - range.min) / (range.max - range.min);
if (enableWidthWithTransform) {
backgroundLower.style.transform = 'scaleX(' + (fraction) + ')';
} else {
fraction *= 100;
backgroundLower.style.width = fraction + '%';
}
}
});
}
function updateBubble(range, value, bubble, bubbleText) {
requestAnimationFrame(function () {
bubble.style.left = value + '%';
if (range.getBubbleHtml) {
value = range.getBubbleHtml(value);
} else {
if (range.getBubbleText) {
value = range.getBubbleText(value);
} else {
value = Math.round(value);
}
value = '<h1 class="sliderBubbleText">' + value + '</h1>';
}
bubble.innerHTML = value;
});
}
EmbySliderPrototype.attachedCallback = function () {
if (this.getAttribute('data-embyslider') === 'true') {
return;
}
if (enableWidthWithTransform == null) {
//enableWidthWithTransform = browser.supportsCssAnimation();
}
this.setAttribute('data-embyslider', 'true');
this.classList.add('mdl-slider');
this.classList.add('mdl-js-slider');
if (browser.noFlex) {
this.classList.add('slider-no-webkit-thumb');
}
if (!layoutManager.mobile) {
this.classList.add('mdl-slider-hoverthumb');
}
if (layoutManager.tv) {
this.classList.add('show-focus');
}
var containerElement = this.parentNode;
containerElement.classList.add('mdl-slider-container');
var htmlToInsert = '';
if (!supportsNativeProgressStyle) {
htmlToInsert += '<div class="mdl-slider-background-flex-container">';
htmlToInsert += '<div class="mdl-slider-background-flex">';
htmlToInsert += '<div class="mdl-slider-background-flex-inner">';
// the more of these, the more ranges we can display
htmlToInsert += '<div class="mdl-slider-background-upper"></div>';
if (enableWidthWithTransform) {
htmlToInsert += '<div class="mdl-slider-background-lower mdl-slider-background-lower-withtransform"></div>';
} else {
htmlToInsert += '<div class="mdl-slider-background-lower"></div>';
}
htmlToInsert += '</div>';
htmlToInsert += '</div>';
htmlToInsert += '</div>';
}
htmlToInsert += '<div class="sliderBubble hide"></div>';
containerElement.insertAdjacentHTML('beforeend', htmlToInsert);
this.backgroundLower = containerElement.querySelector('.mdl-slider-background-lower');
this.backgroundUpper = containerElement.querySelector('.mdl-slider-background-upper');
var sliderBubble = containerElement.querySelector('.sliderBubble');
var hasHideClass = sliderBubble.classList.contains('hide');
dom.addEventListener(this, 'input', function (e) {
this.dragging = true;
updateBubble(this, this.value, sliderBubble);
if (hasHideClass) {
sliderBubble.classList.remove('hide');
hasHideClass = false;
}
}, {
passive: true
});
dom.addEventListener(this, 'change', function () {
this.dragging = false;
updateValues.call(this);
sliderBubble.classList.add('hide');
hasHideClass = true;
}, {
passive: true
});
dom.addEventListener(this, (window.PointerEvent ? 'pointermove' : 'mousemove'), function (e) {
if (!this.dragging) {
var rect = this.getBoundingClientRect();
var clientX = e.clientX;
var bubbleValue = (clientX - rect.left) / rect.width;
bubbleValue *= 100;
updateBubble(this, bubbleValue, sliderBubble);
if (hasHideClass) {
sliderBubble.classList.remove('hide');
hasHideClass = false;
}
}
}, {
passive: true
});
dom.addEventListener(this, (window.PointerEvent ? 'pointerleave' : 'mouseleave'), function () {
sliderBubble.classList.add('hide');
hasHideClass = true;
}, {
passive: true
});
if (!supportsNativeProgressStyle) {
if (supportsValueSetOverride) {
this.addEventListener('valueset', updateValues);
} else {
startInterval(this);
}
}
};
/**
* Keyboard dragging timeout.
* After this delay "change" event will be fired.
*/
var KeyboardDraggingTimeout = 1000;
/**
* Keyboard dragging timer.
*/
var keyboardDraggingTimer;
/**
* Start keyboard dragging.
*
* @param {Object} elem slider itself
*/
function startKeyboardDragging(elem) {
elem.keyboardDragging = true;
clearTimeout(keyboardDraggingTimer);
keyboardDraggingTimer = setTimeout(function () {
finishKeyboardDragging(elem);
}, KeyboardDraggingTimeout);
}
/**
* Finish keyboard dragging.
*
* @param {Object} elem slider itself
*/
function finishKeyboardDragging(elem) {
clearTimeout(keyboardDraggingTimer);
keyboardDraggingTimer = undefined;
elem.keyboardDragging = false;
var event = new Event('change', {
bubbles: true,
cancelable: false
});
elem.dispatchEvent(event);
}
/**
* Do step by delta.
*
* @param {Object} elem slider itself
* @param {number} delta step amount
*/
function stepKeyboard(elem, delta) {
startKeyboardDragging(elem);
elem.value = Math.max(elem.min, Math.min(elem.max, parseFloat(elem.value) + delta));
var event = new Event('input', {
bubbles: true,
cancelable: false
});
elem.dispatchEvent(event);
}
/**
* Handle KeyDown event
*/
function onKeyDown(e) {
switch (e.key) {
case 'ArrowLeft':
case 'Left':
stepKeyboard(this, -this.keyboardStepDown || -1);
e.preventDefault();
e.stopPropagation();
break;
case 'ArrowRight':
case 'Right':
stepKeyboard(this, this.keyboardStepUp || 1);
e.preventDefault();
e.stopPropagation();
break;
}
}
/**
* Enable keyboard dragging.
*/
EmbySliderPrototype.enableKeyboardDragging = function () {
if (!this.keyboardDraggingEnabled) {
this.addEventListener('keydown', onKeyDown);
this.keyboardDraggingEnabled = true;
}
}
/**
* Set steps for keyboard input.
*
* @param {number} stepDown step to reduce
* @param {number} stepUp step to increase
*/
EmbySliderPrototype.setKeyboardSteps = function (stepDown, stepUp) {
this.keyboardStepDown = stepDown || stepUp || 1;
this.keyboardStepUp = stepUp || stepDown || 1;
}
function setRange(elem, startPercent, endPercent) {
var style = elem.style;
style.left = Math.max(startPercent, 0) + '%';
var widthPercent = endPercent - startPercent;
style.width = Math.max(Math.min(widthPercent, 100), 0) + '%';
}
function mapRangesFromRuntimeToPercent(ranges, runtime) {
if (!runtime) {
return [];
}
return ranges.map(function (r) {
return {
start: (r.start / runtime) * 100,
end: (r.end / runtime) * 100
};
});
}
EmbySliderPrototype.setBufferedRanges = function (ranges, runtime, position) {
var elem = this.backgroundUpper;
if (!elem) {
return;
}
if (runtime != null) {
ranges = mapRangesFromRuntimeToPercent(ranges, runtime);
position = (position / runtime) * 100;
}
for (var i = 0, length = ranges.length; i < length; i++) {
var range = ranges[i];
if (position != null) {
if (position >= range.end) {
continue;
}
}
setRange(elem, range.start, range.end);
return;
}
setRange(elem, 0, 0);
};
EmbySliderPrototype.setIsClear = function (isClear) {
var backgroundLower = this.backgroundLower;
if (backgroundLower) {
if (isClear) {
backgroundLower.classList.add('mdl-slider-background-lower-clear');
} else {
backgroundLower.classList.remove('mdl-slider-background-lower-clear');
}
}
};
function startInterval(range) {
var interval = range.interval;
if (interval) {
clearInterval(interval);
}
range.interval = setInterval(updateValues.bind(range), 100);
}
EmbySliderPrototype.detachedCallback = function () {
var interval = this.interval;
if (interval) {
clearInterval(interval);
}
this.interval = null;
this.backgroundUpper = null;
this.backgroundLower = null;
};
document.registerElement('emby-slider', {
prototype: EmbySliderPrototype,
extends: 'input'
});
});

View file

@ -1,3 +0,0 @@
{
"main": "emby-tabs.js"
}

View file

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

View file

@ -1,138 +0,0 @@
define(['layoutManager', 'browser', 'css!./emby-textarea', 'registerElement', 'emby-input'], function (layoutManager, browser) {
'use strict';
function autoGrow(textarea, maxLines) {
var self = this;
if (maxLines === undefined) {
maxLines = 999;
}
/**
* Calculates the vertical padding of the element
* @param textarea
* @returns {number}
*/
self.getOffset = function (textarea) {
var style = window.getComputedStyle(textarea, null);
var props = ['paddingTop', 'paddingBottom'];
var offset = 0;
for (var i = 0; i < props.length; i++) {
offset += parseInt(style[props[i]]);
}
return offset;
};
var offset;
function reset() {
textarea.rows = 1;
offset = self.getOffset(textarea);
self.rows = textarea.rows || 1;
self.lineHeight = (textarea.scrollHeight / self.rows) - (offset / self.rows);
self.maxAllowedHeight = (self.lineHeight * maxLines) - offset;
}
function autogrowFn() {
if (!self.lineHeight || self.lineHeight <= 0) {
reset();
}
if (self.lineHeight <= 0) {
textarea.style.overflowY = 'scroll';
textarea.style.height = 'auto';
textarea.rows = 3;
return;
}
var newHeight = 0;
var hasGrown = false;
if ((textarea.scrollHeight - offset) > self.maxAllowedHeight) {
textarea.style.overflowY = 'scroll';
newHeight = self.maxAllowedHeight;
} else {
textarea.style.overflowY = 'hidden';
textarea.style.height = 'auto';
newHeight = textarea.scrollHeight/* - offset*/;
hasGrown = true;
}
textarea.style.height = newHeight + 'px';
}
// Call autogrowFn() when textarea's value is changed
textarea.addEventListener('input', autogrowFn);
textarea.addEventListener('focus', autogrowFn);
textarea.addEventListener('valueset', autogrowFn);
autogrowFn();
}
var EmbyTextAreaPrototype = Object.create(HTMLTextAreaElement.prototype);
var elementId = 0;
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
var descriptor = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');
// descriptor returning null in webos
if (descriptor && descriptor.configurable) {
var baseSetMethod = descriptor.set;
descriptor.set = function (value) {
baseSetMethod.call(this, value);
this.dispatchEvent(new CustomEvent('valueset', {
bubbles: false,
cancelable: false
}));
};
Object.defineProperty(HTMLTextAreaElement.prototype, 'value', descriptor);
}
}
EmbyTextAreaPrototype.createdCallback = function () {
if (!this.id) {
this.id = 'embytextarea' + elementId;
elementId++;
}
};
EmbyTextAreaPrototype.attachedCallback = function () {
if (this.classList.contains('emby-textarea')) {
return;
}
this.rows = 1;
this.classList.add('emby-textarea');
var parentNode = this.parentNode;
var label = this.ownerDocument.createElement('label');
label.innerHTML = this.getAttribute('label') || '';
label.classList.add('textareaLabel');
label.htmlFor = this.id;
parentNode.insertBefore(label, this);
this.addEventListener('focus', function () {
label.classList.add('textareaLabelFocused');
label.classList.remove('textareaLabelUnfocused');
});
this.addEventListener('blur', function () {
label.classList.remove('textareaLabelFocused');
label.classList.add('textareaLabelUnfocused');
});
this.label = function (text) {
label.innerHTML = text;
};
new autoGrow(this);
};
document.registerElement('emby-textarea', {
prototype: EmbyTextAreaPrototype,
extends: 'textarea'
});
});

View file

@ -1,122 +0,0 @@
.mdl-switch {
position: relative;
z-index: 1;
vertical-align: middle;
display: inline-flex;
align-items: center;
box-sizing: border-box;
width: 100%;
margin: 0;
padding: 0;
overflow: visible;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
flex-direction: row-reverse;
justify-content: flex-end;
}
.toggleContainer {
margin-bottom: 1.8em;
}
.mdl-switch__input {
width: 0;
height: 0;
margin: 0;
padding: 0;
opacity: 0;
-ms-appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
appearance: none;
border: none;
}
.mdl-switch__trackContainer {
position: relative;
width: 2.9em;
}
.mdl-switch__track {
background: rgba(128,128,128, 0.5);
height: 1em;
border-radius: 1em;
cursor: pointer;
}
.mdl-switch__input:checked + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__track {
background: rgba(0, 164, 220, 0.5);
}
.mdl-switch__input[disabled] + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__track {
background: rgba(0,0,0, 0.12);
cursor: auto;
}
.mdl-switch__thumb {
background: #999;
position: absolute;
left: 0;
top: -.25em;
height: 1.44em;
width: 1.44em;
border-radius: 50%;
cursor: pointer;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
transition-duration: 0.28s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: left;
display: flex;
align-items: center;
justify-content: center;
}
.mdl-switch__input:checked + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__thumb {
background: #00a4dc;
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);
}
.mdl-switch__input[disabled] + .mdl-switch__label + .mdl-switch__trackContainer > .mdl-switch__thumb {
background: rgb(189,189,189);
cursor: auto;
}
.mdl-switch__focus-helper {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
display: inline-block;
box-sizing: border-box;
width: .6em;
height: .6em;
border-radius: 50%;
background-color: transparent;
}
.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);
}
.mdl-switch__input:checked:focus + .mdl-switch__label + .mdl-switch__trackContainer .mdl-switch__focus-helper {
box-shadow: 0 0 0 1.39em rgba(0, 164, 220, 0.26);
background-color: rgba(0, 164, 220, 0.26);
}
.mdl-switch__label {
cursor: pointer;
margin: 0;
display: inline-flex;
align-items: center;
margin-left: .7em;
}
.mdl-switch__input[disabled] .mdl-switch__label {
color: rgb(189,189,189);
cursor: auto;
}

View file

@ -1,50 +0,0 @@
define(['css!./emby-toggle', 'registerElement'], function () {
'use strict';
var EmbyTogglePrototype = Object.create(HTMLInputElement.prototype);
function onKeyDown(e) {
// Don't submit form on enter
if (e.keyCode === 13) {
e.preventDefault();
this.checked = !this.checked;
this.dispatchEvent(new CustomEvent('change', {
bubbles: true
}));
return false;
}
}
EmbyTogglePrototype.attachedCallback = function () {
if (this.getAttribute('data-embytoggle') === 'true') {
return;
}
this.setAttribute('data-embytoggle', 'true');
this.classList.add('mdl-switch__input');
var labelElement = this.parentNode;
labelElement.classList.add('mdl-switch');
labelElement.classList.add('mdl-js-switch');
var labelTextElement = labelElement.querySelector('span');
labelElement.insertAdjacentHTML('beforeend', '<div class="mdl-switch__trackContainer"><div class="mdl-switch__track"></div><div class="mdl-switch__thumb"><span class="mdl-switch__focus-helper"></span></div></div>');
labelTextElement.classList.add('toggleButtonLabel');
labelTextElement.classList.add('mdl-switch__label');
this.addEventListener('keydown', onKeyDown);
};
document.registerElement('emby-toggle', {
prototype: EmbyTogglePrototype,
extends: 'input'
});
});

View file

@ -5,7 +5,6 @@
margin-top: 0 !important;
margin-bottom: 0 !important;
margin-right: 0 !important;
-webkit-border-radius: 0 !important;
border-radius: 0 !important;
max-height: none !important;
max-width: none !important

View file

@ -1,47 +0,0 @@
.flex {
display: flex;
}
.inline-flex {
display: inline-flex;
}
.flex-direction-column {
flex-direction: column;
}
.flex-direction-row {
flex-direction: row;
}
.flex-grow {
flex-grow: 1;
}
.flex-shrink-zero {
flex-shrink: 0;
}
.align-items-center {
align-items: center;
}
.align-items-flex-start {
align-items: flex-start;
}
.justify-content-center {
justify-content: center;
}
.justify-content-flex-end {
justify-content: flex-end;
}
.flex-wrap-wrap {
flex-wrap: wrap;
}
.align-self-flex-end {
align-self: flex-end;
}

View file

@ -1,3 +0,0 @@
{
"main": "headroom.js"
}

View file

@ -104,32 +104,21 @@
</div>
<div class="verticalSection verticalSection-extrabottompadding">
<h2 class="sectionTitle">
${HeaderLibraryOrder}
</h2>
<div class="paperList viewOrderList">
</div>
<h2 class="sectionTitle">${HeaderLibraryOrder}</h2>
<div class="paperList viewOrderList"></div>
</div>
<div class="perLibrarySettings">
</div>
<div class="perLibrarySettings"></div>
<div class="verticalSection verticalSection-extrabottompadding">
<label class="checkboxContainer">
<input class="chkHidePlayedFromLatest" type="checkbox" is="emby-checkbox" />
<span>${HideWatchedContentFromLatestMedia}</span>
</label>
</div>
<div class="verticalSection verticalSection-extrabottompadding">
<h2 class="sectionTitle">
${HeaderLibraryFolders}
</h2>
<h2 class="sectionTitle">${HeaderLibraryFolders}</h2>
<div>
<p>${LabelSelectFolderGroups}</p>
<div class="folderGroupList"></div>

View file

@ -13,13 +13,11 @@
.homeLibraryIcon {
margin-left: .5em;
margin-right: .5em;
-webkit-flex-shrink: 0;
flex-shrink: 0
}
.homeLibraryText {
white-space: nowrap;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
overflow: hidden
}

View file

@ -2,11 +2,8 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
"use strict";
function getDefaultProfile() {
return new Promise(function (resolve, reject) {
require(['browserdeviceprofile'], function (profileBuilder) {
resolve(profileBuilder({}));
});
});
@ -14,28 +11,22 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
var fadeTimeout;
function fade(instance, elem, startingVolume) {
instance._isFadingOut = true;
// Need to record the starting volume on each pass rather than querying elem.volume
// This is due to iOS safari not allowing volume changes and always returning the system volume value
var newVolume = Math.max(0, startingVolume - 0.15);
console.log('fading volume to ' + newVolume);
elem.volume = newVolume;
if (newVolume <= 0) {
instance._isFadingOut = false;
return Promise.resolve();
}
return new Promise(function (resolve, reject) {
cancelFadeTimeout();
fadeTimeout = setTimeout(function () {
fade(instance, elem, newVolume).then(resolve, reject);
}, 100);
});
@ -50,7 +41,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
}
function supportsFade() {
if (browser.tv) {
// Not working on tizen.
// We could possibly enable on other tv's, but all smart tv browsers tend to be pretty primitive
@ -68,9 +58,7 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
}
function enableHlsPlayer(url, item, mediaSource, mediaType) {
if (!htmlMediaHelper.enableHlsJsPlayer(mediaSource.RunTimeTicks, mediaType)) {
return Promise.reject();
}
@ -86,21 +74,18 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
url: url,
type: 'HEAD'
}).then(function (response) {
var contentType = (response.headers.get('Content-Type') || '').toLowerCase();
if (contentType === 'application/x-mpegurl') {
resolve();
} else {
reject();
}
}, reject);
});
});
}
function HtmlAudioPlayer() {
var self = this;
self.name = 'Html Audio Player';
@ -114,11 +99,9 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
self._started = false;
self._timeUpdated = false;
self._currentTime = null;
var elem = createMediaElement(options);
return setCurrentSrc(elem, options);
};
@ -511,4 +494,4 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
};
return HtmlAudioPlayer;
});
});

View file

@ -27,6 +27,14 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return _supportsTextTracks;
}
function supportsCanvas() {
return !!document.createElement('canvas').getContext;
}
function supportsWebWorkers() {
return !!window.Worker;
}
function enableNativeTrackSupport(currentSrc, track) {
if (track) {
@ -185,10 +193,11 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
var lastCustomTrackMs = 0;
var currentClock;
var currentSubtitlesOctopus;
var currentAssRenderer;
var customTrackIndex = -1;
var showTrackOffset = false;
var showTrackOffset;
var currentTrackOffset;
var videoSubtitlesElem;
@ -280,6 +289,8 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
self._currentTime = null;
self.resetSubtitleOffset();
return createMediaElement(options).then(function (elem) {
return updateVideoUrl(options, options.mediaSource).then(function () {
@ -556,6 +567,11 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
setCurrentTrackElement(index);
};
self.resetSubtitleOffset = function() {
currentTrackOffset = 0;
showTrackOffset = false;
}
self.enableShowingSubtitleOffset = function() {
showTrackOffset = true;
}
@ -955,6 +971,12 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
currentClock = null;
self._currentAspectRatio = null;
var octopus = currentSubtitlesOctopus;
if (octopus) {
octopus.dispose();
}
currentSubtitlesOctopus = null;
var renderer = currentAssRenderer;
if (renderer) {
renderer.setEnabled(false);
@ -1019,6 +1041,22 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
lastCustomTrackMs = 0;
}
function renderWithSubtitlesOctopus(videoElement, track, item) {
var attachments = self._currentPlayOptions.mediaSource.MediaAttachments || [];
var options = {
video: videoElement,
subUrl: getTextTrackUrl(track, item),
fonts: attachments.map(i => i.DeliveryUrl),
workerUrl: appRouter.baseUrl() + "/libraries/subtitles-octopus-worker.js",
onError: function() {
htmlMediaHelper.onErrorInternal(self, 'mediadecodeerror')
}
};
require(['JavascriptSubtitlesOctopus'], function(SubtitlesOctopus) {
currentSubtitlesOctopus = new SubtitlesOctopus(options);
});
}
function renderWithLibjass(videoElement, track, item) {
var rendererSettings = {};
@ -1065,6 +1103,15 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
});
}
function renderSsaAss(videoElement, track, item) {
if (supportsCanvas() && supportsWebWorkers()) {
renderWithSubtitlesOctopus(videoElement, track, item);
} else {
console.log('rendering subtitles with libjass');
renderWithLibjass(videoElement, track, item);
}
}
function onVideoResize() {
if (browser.iOS) {
// the new sizes will be delayed for about 500ms with wkwebview
@ -1175,7 +1222,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
var format = (track.Codec || '').toLowerCase();
if (format === 'ssa' || format === 'ass') {
// libjass is needed here
renderWithLibjass(videoElement, track, item);
renderSsaAss(videoElement, track, item);
return;
}

View file

@ -24,6 +24,10 @@
z-index: 1000;
}
.videoPlayerContainer .libassjs-canvas-parent {
order: -1;
}
video::-webkit-media-controls {
display: none !important;
}
@ -38,7 +42,6 @@ video::-webkit-media-controls {
.htmlvideoplayer::cue {
background-color: transparent;
text-shadow: 0.14em 0.14em 0.14em rgba(0, 0, 0, 1);
-webkit-font-smoothing: antialiased;
font-family: inherit;
}

View file

@ -18,21 +18,9 @@
.lazy-image-fadein {
opacity: 0;
-webkit-animation-duration: .8s;
-moz-animation-duration: .8s;
-o-animation-duration: .8s;
animation-duration: .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,.5,1);
-moz-animation-timing-function: cubic-bezier(0,0,.5,1);
-o-animation-timing-function: cubic-bezier(0,0,.5,1);
animation-timing-function: cubic-bezier(0,0,.5,1);
}

View file

@ -14,7 +14,6 @@
.indicator {
border-radius: 100em;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;
@ -43,7 +42,6 @@
.countIndicator {
border-radius: 100em;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;
@ -55,7 +53,6 @@
.playedIndicator {
border-radius: 100em;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;
@ -67,7 +64,6 @@
.videoIndicator {
background: #444;
border-radius: 100em;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;

View file

@ -115,7 +115,6 @@ define(['datetime', 'itemHelper', 'css!./indicators.css', 'material-icons'], fun
}
function getTimerIndicator(item) {
var status;
if (item.Type === 'SeriesTimer') {

View file

@ -1,8 +1,8 @@
<div class="formDialogHeader">
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="md-icon">arrow_back</i></button>
<h3 class="formDialogHeaderTitle">
${HeaderMediaInfo}
</h3>
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1">
<i class="md-icon">arrow_back</i>
</button>
<h3 class="formDialogHeaderTitle">${HeaderMediaInfo}</h3>
</div>
<div class="formDialogContent smoothScrollY">

View file

@ -3,10 +3,11 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter",
function getCommands(options) {
var item = options.item;
var user = options.user;
var canPlay = playbackManager.canPlay(item);
var restrictOptions = (browser.operaTv || browser.web0s) && !user.Policy.IsAdministrator;
var user = options.user;
var commands = [];
if (canPlay && item.MediaType !== "Photo") {

View file

@ -2,9 +2,7 @@
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1">
<i class="md-icon">arrow_back</i>
</button>
<h3 class="formDialogHeaderTitle">
${Identify}
</h3>
<h3 class="formDialogHeaderTitle">${Identify}</h3>
</div>
<div class="formDialogContent smoothScrollY">
@ -17,16 +15,13 @@
<div class="txtPath fieldDescription"></div>
</div>
<div class="inputContainer">
<input is="emby-input" type="text" id="txtLookupName" class="identifyField" data-lookup="Name"
label="${LabelName}" />
<input is="emby-input" type="text" id="txtLookupName" class="identifyField" data-lookup="Name" label="${LabelName}" />
</div>
<div class="fldLookupYear inputContainer">
<input is="emby-input" type="number" id="txtLookupYear" class="identifyField" data-lookup="Year"
pattern="[0-9]*" min="1800" label="${LabelYear}" />
<input is="emby-input" type="number" id="txtLookupYear" class="identifyField" data-lookup="Year" pattern="[0-9]*" min="1800" label="${LabelYear}" />
</div>
<div class="identifyProviderIds">
</div>
<div class="identifyProviderIds"></div>
<div class="formDialogFooter">
<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem">
@ -34,14 +29,13 @@
</button>
</div>
</form>
<div class="identificationSearchResults hide">
<div class="identificationSearchResults hide">
<h1>${SearchResults}</h1>
<div class="identificationSearchResultList itemsContainer vertical-wrap"></div>
</div>
<form class="identifyOptionsForm hide" style="margin:auto;">
<br />
<div class="selectedSearchResult"></div>
<br />
@ -51,8 +45,7 @@
</label>
<div class="formDialogFooter">
<button is="emby-button" type="submit"
class="raised button-submit block btnSubmit formDialogFooterItem">
<button is="emby-button" type="submit" class="raised button-submit block btnSubmit formDialogFooterItem">
<span>${ButtonOk}</span>
</button>
</div>

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

@ -7,20 +7,11 @@
.mdlSpinnerActive {
display: inline-block;
-webkit-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 {
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@ -37,7 +28,6 @@
}
.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;
}
@ -46,7 +36,6 @@
}
.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;
}
@ -55,7 +44,6 @@
}
.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;
}
@ -64,90 +52,39 @@
}
.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;
}
@-webkit-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);
}
}
@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);
}
}
@ -161,32 +98,6 @@
* - https://github.com/Polymer/paper-spinner/issues/9
* - 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 {
from {
opacity: 0.99;
@ -213,28 +124,6 @@
}
}
@-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 {
from {
opacity: 0;
@ -257,28 +146,6 @@
}
}
@-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 {
from {
opacity: 0;
@ -301,28 +168,6 @@
}
}
@-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 {
from {
opacity: 0;
@ -366,7 +211,6 @@
border-color: inherit;
border-bottom-color: transparent !important;
border-radius: 50%;
-webkit-animation: none;
animation: none;
position: absolute;
top: 0;
@ -377,91 +221,47 @@
.mdl-spinner__circleLeft {
border-right-color: transparent !important;
-webkit-transform: rotate(129deg);
transform: rotate(129deg);
}
.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;
}
.mdl-spinner__circleRight {
left: -100%;
border-left-color: transparent !important;
-webkit-transform: rotate(-129deg);
transform: rotate(-129deg);
}
.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;
}
@-webkit-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);
}
}
@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 {
from {
-webkit-transform: rotate(-130deg);
transform: rotate(-130deg);
}
50% {
-webkit-transform: rotate(5deg);
transform: rotate(5deg);
}
to {
-webkit-transform: rotate(-130deg);
transform: rotate(-130deg);
}
}

View file

@ -6,14 +6,11 @@ define(['require', 'css!./loadingLegacy'], function (require) {
return {
show: function () {
var elem = loadingElem;
if (!elem) {
elem = document.createElement("img");
elem.src = require.toUrl('.').split('?')[0] + '/loader2.gif';
elem.src = require.toUrl('.').split('?')[0] + '/loader.gif';
loadingElem = elem;
elem.classList.add('loading-spinner');
document.body.appendChild(elem);
@ -23,11 +20,9 @@ define(['require', 'css!./loadingLegacy'], function (require) {
},
hide: function () {
var elem = loadingElem;
if (elem) {
elem.classList.add('hide');
}
}
};
});
});

View file

@ -1,3 +0,0 @@
{
"main": "loading.js"
}

View file

@ -2,14 +2,12 @@ define(['loading', 'events', 'dialogHelper', 'dom', 'layoutManager', 'scrollHelp
'use strict';
function showDialog(instance, options, template) {
var dialogOptions = {
removeOnClose: true,
scrollY: false
};
var enableTvLayout = layoutManager.tv;
if (enableTvLayout) {
dialogOptions.size = 'fullscreen';
}
@ -48,7 +46,6 @@ define(['loading', 'events', 'dialogHelper', 'dom', 'layoutManager', 'scrollHelp
instance.dlg = dlg;
return dialogHelper.open(dlg).then(function () {
if (enableTvLayout) {
scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false);
}
@ -58,12 +55,10 @@ define(['loading', 'events', 'dialogHelper', 'dom', 'layoutManager', 'scrollHelp
}
function LoadingDialog(options) {
this.options = options;
}
LoadingDialog.prototype.show = function () {
var instance = this;
loading.show();
@ -76,15 +71,12 @@ define(['loading', 'events', 'dialogHelper', 'dom', 'layoutManager', 'scrollHelp
};
LoadingDialog.prototype.setTitle = function (title) {
};
LoadingDialog.prototype.setText = function (text) {
};
LoadingDialog.prototype.hide = function () {
if (this.dlg) {
dialogHelper.close(this.dlg);
this.dlg = null;
@ -92,10 +84,9 @@ define(['loading', 'events', 'dialogHelper', 'dom', 'layoutManager', 'scrollHelp
};
LoadingDialog.prototype.destroy = function () {
this.dlg = null;
this.options = null;
};
return LoadingDialog;
});
});

View file

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Before After
Before After

View file

@ -0,0 +1,192 @@
define(["pluginManager"], function (pluginManager) {
return function () {
var self = this;
self.name = "Logo ScreenSaver";
self.type = "screensaver";
self.id = "logoscreensaver";
self.supportsAnonymous = true;
var interval;
function animate() {
var animations = [
bounceInLeft,
bounceInRight,
swing,
tada,
wobble,
rotateIn,
rotateOut
];
var elem = document.querySelector(".logoScreenSaverImage");
if (elem && elem.animate) {
var random = getRandomInt(0, animations.length - 1);
animations[random](elem, 1);
}
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function bounceInLeft(elem, iterations) {
var keyframes = [
{ transform: "translate3d(-3000px, 0, 0)", opacity: "0", offset: 0 },
{ transform: "translate3d(25px, 0, 0)", opacity: "1", offset: 0.6 },
{ transform: "translate3d(-100px, 0, 0)", offset: 0.75 },
{ transform: "translate3d(5px, 0, 0)", offset: 0.9 },
{ transform: "none", opacity: "1", offset: 1 }];
var timing = { duration: 900, iterations: iterations, easing: "cubic-bezier(0.215, 0.610, 0.355, 1.000)" };
return elem.animate(keyframes, timing);
}
function bounceInRight(elem, iterations) {
var keyframes = [
{ transform: "translate3d(3000px, 0, 0)", opacity: "0", offset: 0 },
{ transform: "translate3d(-25px, 0, 0)", opacity: "1", offset: 0.6 },
{ transform: "translate3d(100px, 0, 0)", offset: 0.75 },
{ transform: "translate3d(-5px, 0, 0)", offset: 0.9 },
{ transform: "none", opacity: "1", offset: 1 }];
var timing = { duration: 900, iterations: iterations, easing: "cubic-bezier(0.215, 0.610, 0.355, 1.000)" };
return elem.animate(keyframes, timing);
}
function shake(elem, iterations) {
var keyframes = [
{ transform: "translate3d(0, 0, 0)", offset: 0 },
{ transform: "translate3d(-10px, 0, 0)", offset: 0.1 },
{ transform: "translate3d(10px, 0, 0)", offset: 0.2 },
{ transform: "translate3d(-10px, 0, 0)", offset: 0.3 },
{ transform: "translate3d(10px, 0, 0)", offset: 0.4 },
{ transform: "translate3d(-10px, 0, 0)", offset: 0.5 },
{ transform: "translate3d(10px, 0, 0)", offset: 0.6 },
{ transform: "translate3d(-10px, 0, 0)", offset: 0.7 },
{ transform: "translate3d(10px, 0, 0)", offset: 0.8 },
{ transform: "translate3d(-10px, 0, 0)", offset: 0.9 },
{ transform: "translate3d(0, 0, 0)", offset: 1 }];
var timing = { duration: 900, iterations: iterations };
return elem.animate(keyframes, timing);
}
function swing(elem, iterations) {
var keyframes = [
{ transform: "translate(0%)", offset: 0 },
{ transform: "rotate3d(0, 0, 1, 15deg)", offset: 0.2 },
{ transform: "rotate3d(0, 0, 1, -10deg)", offset: 0.4 },
{ transform: "rotate3d(0, 0, 1, 5deg)", offset: 0.6 },
{ transform: "rotate3d(0, 0, 1, -5deg)", offset: 0.8 },
{ transform: "rotate3d(0, 0, 1, 0deg)", offset: 1 }];
var timing = { duration: 900, iterations: iterations };
return elem.animate(keyframes, timing);
}
function tada(elem, iterations) {
var keyframes = [
{ transform: "scale3d(1, 1, 1)", offset: 0 },
{ transform: "scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)", offset: 0.1 },
{ transform: "scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)", offset: 0.2 },
{ transform: "scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)", offset: 0.3 },
{ transform: "scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)", offset: 0.4 },
{ transform: "scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)", offset: 0.5 },
{ transform: "scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)", offset: 0.6 },
{ transform: "scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)", offset: 0.7 },
{ transform: "scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)", offset: 0.8 },
{ transform: "scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)", offset: 0.9 },
{ transform: "scale3d(1, 1, 1)", offset: 1 }];
var timing = { duration: 900, iterations: iterations };
return elem.animate(keyframes, timing);
}
function wobble(elem, iterations) {
var keyframes = [
{ transform: "translate(0%)", offset: 0 },
{ transform: "translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)", offset: 0.15 },
{ transform: "translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)", offset: 0.45 },
{ transform: "translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)", offset: 0.6 },
{ transform: "translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)", offset: 0.75 },
{ transform: "translateX(0%)", offset: 1 }];
var timing = { duration: 900, iterations: iterations };
return elem.animate(keyframes, timing);
}
function rotateIn(elem, iterations) {
var transformOrigin = elem.style["transform-origin"];
var keyframes = [{ transform: "rotate3d(0, 0, 1, -200deg)", opacity: "0", transformOrigin: "center", offset: 0 },
{ transform: "none", opacity: "1", transformOrigin: "center", offset: 1 }];
var timing = { duration: 900, iterations: iterations };
return elem.animate(keyframes, timing);
}
function rotateOut(elem, iterations) {
var transformOrigin = elem.style["transform-origin"];
var keyframes = [{ transform: "none", opacity: "1", transformOrigin: "center", offset: 0 },
{ transform: "rotate3d(0, 0, 1, 200deg)", opacity: "0", transformOrigin: "center", offset: 1 }];
var timing = { duration: 900, iterations: iterations };
return elem.animate(keyframes, timing);
}
function fadeOut(elem, iterations) {
var keyframes = [
{ opacity: "1", offset: 0 },
{ opacity: "0", offset: 1 }];
var timing = { duration: 400, iterations: iterations };
return elem.animate(keyframes, timing);
}
function stopInterval() {
if (interval) {
clearInterval(interval);
interval = null;
}
}
self.show = function () {
require(["css!" + pluginManager.mapPath(self, "style.css")], function () {
var elem = document.querySelector(".logoScreenSaver");
if (!elem) {
elem = document.createElement("div");
elem.classList.add("logoScreenSaver");
document.body.appendChild(elem);
elem.innerHTML = '<img class="logoScreenSaverImage" src="' + pluginManager.mapPath(self, "logowhite.png") + '" />';
}
stopInterval();
interval = setInterval(animate, 3000);
});
};
self.hide = function () {
stopInterval();
var elem = document.querySelector(".logoScreenSaver");
if (elem) {
var onAnimationFinish = function () {
elem.parentNode.removeChild(elem);
};
if (elem.animate) {
var animation = fadeOut(elem, 1);
animation.onfinish = onAnimationFinish;
} else {
onAnimationFinish();
}
}
};
}
});

View file

@ -0,0 +1,18 @@
.logoScreenSaver {
background: #101010;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
text-align: center;
}
.logoScreenSaverImage {
height: 120px;
position: absolute;
top: 50%;
margin-top: -60px;
margin-left: -197px;
}

View file

@ -69,10 +69,7 @@
}
.closedCaptionMediaInfoText {
/*padding: .24em .4em;*/
font-weight: bold;
/*font-size: inherit;*/
/*background: rgba(81, 81, 81, .7);*/
}
.mediaInfoOfficialRating {

View file

@ -9,29 +9,20 @@
.touch-menu-la {
background-color: #FFF;
will-change: transform;
display: -webkit-box;
display: -webkit-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;
z-index: 1099
}
.touch-menu-la.transition {
-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 {
-webkit-box-shadow: 2px 0 12px rgba(0, 0, 0, .4);
box-shadow: 2px 0 12px rgba(0, 0, 0, .4)
}
.scrollContainer {
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1
}
@ -41,8 +32,6 @@
background-color: #000;
opacity: 0;
z-index: 1098;
-webkit-transition: opacity ease-in-out .38s, visibility ease-in-out .38s;
-o-transition: opacity ease-in-out .38s, visibility ease-in-out .38s;
transition: opacity ease-in-out .38s, visibility ease-in-out .38s;
will-change: opacity;
background-color: rgba(0, 0, 0, .3)

View file

@ -1,3 +0,0 @@
{
"main": "navdrawer.js"
}

View file

@ -2,7 +2,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
'use strict';
function onOneDocumentClick() {
document.removeEventListener('click', onOneDocumentClick);
document.removeEventListener('keydown', onOneDocumentClick);
@ -10,15 +9,14 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
Notification.requestPermission();
}
}
document.addEventListener('click', onOneDocumentClick);
document.addEventListener('keydown', onOneDocumentClick);
var serviceWorkerRegistration;
function closeAfter(notification, timeoutMs) {
setTimeout(function () {
if (notification.close) {
notification.close();
} else if (notification.cancel) {
@ -28,9 +26,7 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
}
function resetRegistration() {
var serviceWorker = navigator.serviceWorker;
if (serviceWorker) {
serviceWorker.ready.then(function (registration) {
serviceWorkerRegistration = registration;
@ -269,4 +265,4 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
showNotification(notification, 0, apiClient);
});
});
});

View file

@ -1,13 +1,12 @@
.nowPlayingInfoContainer {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
flex-direction: row
}
.navigationSection {
text-align: center
}
.nowPlayingPageTitle {
margin: 0 0 .5em .5em
}
@ -17,27 +16,20 @@
}
.nowPlayingInfoButtons {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-flex-wrap: wrap;
flex-wrap: wrap
}
.nowPlayingInfoControls,
.nowPlayingTime {
display: -webkit-box;
display: -webkit-flex
display: flex;
}
.nowPlayingPageImageContainer {
width: 20%;
margin-right: .25em;
position: relative;
-webkit-flex-shrink: 0;
flex-shrink: 0
}
@ -48,16 +40,9 @@
}
.nowPlayingInfoControls {
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center
}
@ -66,25 +51,15 @@
left: 0;
right: 0;
width: 100%;
-webkit-box-shadow: 0 0 1.9vh #000;
box-shadow: 0 0 1.9vh #000;
border: .1em solid #222;
user-drag: 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) {
.nowPlayingInfoContainer {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-webkit-flex-direction: column !important;
flex-direction: column !important;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center
}
@ -98,8 +73,6 @@
}
.nowPlayingInfoButtons {
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center
}
@ -127,33 +100,20 @@
.nowPlayingTime {
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
margin: 0 1em
}
.nowPlayingSecondaryButtons {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center
}
@media all and (min-width:50em) {
.nowPlayingSecondaryButtons {
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
-webkit-box-pack: end;
-webkit-justify-content: flex-end;
justify-content: flex-end
}
}
@ -170,15 +130,13 @@
.smallBackdropPosterItem .cardOverlayInner>div {
white-space: nowrap;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
overflow: hidden
}
.playlistIndexIndicatorImage {
-webkit-background-size: initial initial !important;
background-size: initial !important;
background-image: url(../../img/equalizer.gif) !important;
background-image: url(assets/img/equalizer.gif) !important;
}
.hideVideoButtons .videoButton {

View file

@ -203,18 +203,35 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
updateAudioTracksDisplay(player, context);
updateSubtitleTracksDisplay(player, context);
if (-1 != supportedCommands.indexOf("DisplayMessage")) {
if (-1 != supportedCommands.indexOf("DisplayMessage") && !currentPlayer.isLocalPlayer) {
context.querySelector(".sendMessageSection").classList.remove("hide");
} else {
context.querySelector(".sendMessageSection").classList.add("hide");
}
if (-1 != supportedCommands.indexOf("SendString")) {
if (-1 != supportedCommands.indexOf("SendString") && !currentPlayer.isLocalPlayer) {
context.querySelector(".sendTextSection").classList.remove("hide");
} else {
context.querySelector(".sendTextSection").classList.add("hide");
}
if (!currentPlayer.isLocalPlayer) {
context.querySelector(".navigationSection").classList.remove("hide");
} else {
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(".btnNextTrack"), null != item);
buttonVisible(context.querySelector(".btnPreviousTrack"), null != item);

View file

@ -0,0 +1,132 @@
define(["events", "playbackManager", "pluginManager", "inputManager", "connectionManager", "userSettings"], function (events, playbackManager, pluginManager, inputManager, connectionManager, userSettings) {
"use strict";
function getMinIdleTime() {
// Returns the minimum amount of idle time required before the screen saver can be displayed
//time units used Millisecond
return 180000;
}
var lastFunctionalEvent = 0;
function getFunctionalEventIdleTime() {
return new Date().getTime() - lastFunctionalEvent;
}
events.on(playbackManager, "playbackstop", function (e, stopInfo) {
var state = stopInfo.state;
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") {
lastFunctionalEvent = new Date().getTime();
}
});
function getScreensaverPlugin(isLoggedIn) {
var option;
try {
option = userSettings.get("screensaver", false);
} catch (err) {
option = isLoggedIn ? "backdropscreensaver" : "logoscreensaver";
}
var plugins = pluginManager.ofType("screensaver");
for (var i = 0, length = plugins.length; i < length; i++) {
var plugin = plugins[i];
if (plugin.id === option) {
return plugin;
}
}
return null;
}
function ScreenSaverManager() {
var self = this;
var activeScreenSaver;
function showScreenSaver(screensaver) {
if (activeScreenSaver) {
throw new Error("An existing screensaver is already active.");
}
console.log("Showing screensaver " + screensaver.name);
screensaver.show();
activeScreenSaver = screensaver;
if (screensaver.hideOnClick !== false) {
window.addEventListener("click", hide, true);
}
if (screensaver.hideOnMouse !== false) {
window.addEventListener("mousemove", hide, true);
}
if (screensaver.hideOnKey !== false) {
window.addEventListener("keydown", hide, true);
}
}
function hide() {
if (activeScreenSaver) {
console.log("Hiding screensaver");
activeScreenSaver.hide();
activeScreenSaver = null;
}
window.removeEventListener("click", hide, true);
window.removeEventListener("mousemove", hide, true);
window.removeEventListener("keydown", hide, true);
}
self.isShowing = function () {
return activeScreenSaver != null;
};
self.show = function () {
var isLoggedIn;
var apiClient = connectionManager.currentApiClient();
if (apiClient && apiClient.isLoggedIn()) {
isLoggedIn = true;
}
var screensaver = getScreensaverPlugin(isLoggedIn);
if (screensaver) {
showScreenSaver(screensaver);
}
};
self.hide = function () {
hide();
};
function onInterval() {
if (self.isShowing()) {
return;
}
if (inputManager.idleTime() < getMinIdleTime()) {
return;
}
if (getFunctionalEventIdleTime < getMinIdleTime()) {
return;
}
if (playbackManager.isPlayingVideo()) {
return;
}
self.show();
}
setInterval(onInterval, 10000);
}
return new ScreenSaverManager();
});

View file

@ -581,8 +581,6 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
allowBottomPadding: !enableScrollX()
}, cardOptions || {}));
section.querySelector('.emby-scroller').scrollToBeginning(true);
}
function enableScrollX() {
@ -636,4 +634,4 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
};
return SearchResults;
});
});

View file

@ -1,3 +0,0 @@
{
"main": "serverNotifications.js"
}

View file

@ -4,20 +4,15 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
var serverNotifications = {};
function notifyApp() {
inputManager.notify();
}
function displayMessage(cmd) {
var args = cmd.Arguments;
if (args.TimeoutMs) {
require(['toast'], function (toast) {
toast({ title: args.Header, text: args.Text });
});
} else {
require(['alert'], function (alert) {
alert({ title: args.Header, text: args.Text });
@ -146,14 +141,10 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
}
function onMessageReceived(e, msg) {
var apiClient = this;
if (msg.MessageType === "Play") {
notifyApp();
var serverId = apiClient.serverInfo().Id;
if (msg.Data.PlayCommand === "PlayNext") {
playbackManager.queueNext({ ids: msg.Data.ItemIds, serverId: serverId });
} else if (msg.Data.PlayCommand === "PlayLast") {
@ -169,9 +160,7 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
serverId: serverId
});
}
} else if (msg.MessageType === "Playstate") {
if (msg.Data.Command === 'Stop') {
inputManager.trigger('stop');
} else if (msg.Data.Command === 'Pause') {
@ -193,22 +182,17 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
var cmd = msg.Data;
processGeneralCommand(cmd, apiClient);
} else if (msg.MessageType === "UserDataChanged") {
if (msg.Data.UserId === apiClient.getCurrentUserId()) {
for (var i = 0, length = msg.Data.UserDataList.length; i < length; i++) {
events.trigger(serverNotifications, 'UserDataChanged', [apiClient, msg.Data.UserDataList[i]]);
}
}
} else {
events.trigger(serverNotifications, msg.MessageType, [apiClient, msg.Data]);
}
}
function bindEvents(apiClient) {
events.off(apiClient, "message", onMessageReceived);
events.on(apiClient, "message", onMessageReceived);
}
@ -229,7 +213,6 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
connectionManager.getApiClients().forEach(bindEvents);
events.on(connectionManager, 'apiclientcreated', function (e, newApiClient) {
bindEvents(newApiClient);
});

View file

@ -72,7 +72,7 @@ define(['apphost', 'userSettings', 'browser', 'events', 'pluginManager', 'backdr
selectedTheme = selectedTheme || defaultTheme;
return {
stylesheetPath: require.toUrl('components/themes/' + selectedTheme.id + '/theme.css'),
stylesheetPath: require.toUrl('themes/' + selectedTheme.id + '/theme.css'),
themeId: selectedTheme.id
};
}

View file

@ -41,9 +41,6 @@
height: auto;
max-width: 100%;
max-height: 100%;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
position: absolute;
left: 50%;

View file

@ -40,8 +40,6 @@
margin-right: 1%;
top: 2.5em;
height: 1.4em;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
border-radius: .3em;
z-index: 1;

View file

@ -1,458 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #303030
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.formDialogHeader:not(.formDialogHeader-clear),
.skinHeader-withBackground {
color: rgba(0, 0, 0, .7);
background: #303030;
background: -webkit-gradient(linear, left top, right top, from(#BCBCBC), color-stop(#A7B4B7), color-stop(#BEB5A5), color-stop(#ADBEC2), to(#B9C7CB));
background: -webkit-linear-gradient(left, #BCBCBC, #A7B4B7, #BEB5A5, #ADBEC2, #B9C7CB);
background: -o-linear-gradient(left, #BCBCBC, #A7B4B7, #BEB5A5, #ADBEC2, #B9C7CB);
background: linear-gradient(to right, #BCBCBC, #A7B4B7, #BEB5A5, #ADBEC2, #B9C7CB)
}
@supports (backdrop-filter:blur(1.5em)) or (-webkit-backdrop-filter:blur(1.5em)) {
.skinHeader-blurred {
background: -webkit-gradient(linear, left top, right top, from(rgba(188, 188, 188, .7)), color-stop(rgba(167, 180, 183, .7)), color-stop(rgba(190, 181, 165, .7)), color-stop(rgba(173, 190, 194, .7)), to(rgba(185, 199, 203, .7)));
background: -webkit-linear-gradient(left, rgba(188, 188, 188, .7), rgba(167, 180, 183, .7), rgba(190, 181, 165, .7), rgba(173, 190, 194, .7), rgba(185, 199, 203, .7));
background: -o-linear-gradient(left, rgba(188, 188, 188, .7), rgba(167, 180, 183, .7), rgba(190, 181, 165, .7), rgba(173, 190, 194, .7), rgba(185, 199, 203, .7));
background: linear-gradient(to right, rgba(188, 188, 188, .7), rgba(167, 180, 183, .7), rgba(190, 181, 165, .7), rgba(173, 190, 194, .7), rgba(185, 199, 203, .7));
-webkit-backdrop-filter: blur(1.5em);
backdrop-filter: blur(1.5em)
}
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important
}
.pageTitleWithDefaultLogo {
background-image: url(../logodark.png)
}
html {
background: #D5E9F2
}
.backgroundContainer,
.dialog {
background: #D5E9F2;
-webkit-background-size: 100% 100%;
background-size: 100% 100%
}
.backgroundContainer.withBackdrop {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(192, 212, 222, .94)), color-stop(rgba(235, 250, 254, .94)), color-stop(rgba(227, 220, 212, .94)), color-stop(rgba(206, 214, 216, .94)), to(rgba(192, 211, 218, .94)));
background: -webkit-linear-gradient(top, rgba(192, 212, 222, .94), rgba(235, 250, 254, .94), rgba(227, 220, 212, .94), rgba(206, 214, 216, .94), rgba(192, 211, 218, .94));
background: -o-linear-gradient(top, rgba(192, 212, 222, .94), rgba(235, 250, 254, .94), rgba(227, 220, 212, .94), rgba(206, 214, 216, .94), rgba(192, 211, 218, .94));
background: linear-gradient(to bottom, rgba(192, 212, 222, .94), rgba(235, 250, 254, .94), rgba(227, 220, 212, .94), rgba(206, 214, 216, .94), rgba(192, 211, 218, .94))
}
.actionSheet {
background: #f0f0f0
}
.paper-icon-button-light:hover:not(:disabled) {
color: #00a4dc;
background-color: rgba(0,164,220, .2);
}
.paper-icon-button-light.show-focus:focus {
color: #00a4dc;
}
.fab,
.raised {
background: #fff;
background: rgba(0, 0, 0, .14);
color: inherit
}
.fab:focus,
.raised:focus {
background: rgba(0, 0, 0, .24)
}
.button-submit {
background: #00a4dc;
color: #fff
}
.button-submit:focus {
background: #0cb0e8
}
.button-delete {
background: rgb(247, 0, 0);
color: rgba(255, 255, 255, .87)
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555;
color: rgba(0, 0, 0, .7)
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: green
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #fff;
background-color: rgba(0, 0, 0, .1)
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogFooter:not(.formDialogFooter-clear) {
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0, 0, 0, .08)
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888;
color: rgba(0, 0, 0, .5)
}
.actionsheetDivider {
background: #ddd;
background: rgba(0, 0, 0, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter,
.formDialogFooter:not(.formDialogFooter-clear) {
color: rgba(0, 0, 0, .7);
background: #303030;
background: -webkit-gradient(linear, left top, right top, from(#BCBCBC), color-stop(#A7B4B7), color-stop(#BEB5A5), color-stop(#ADBEC2), to(#B9C7CB));
background: -webkit-linear-gradient(left, #BCBCBC, #A7B4B7, #BEB5A5, #ADBEC2, #B9C7CB);
background: -o-linear-gradient(left, #BCBCBC, #A7B4B7, #BEB5A5, #ADBEC2, #B9C7CB);
background: linear-gradient(to right, #BCBCBC, #A7B4B7, #BEB5A5, #ADBEC2, #B9C7CB)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #00a4dc
}
.selectionCommandsPanel {
background: #00a4dc;
color: #fff
}
.upNextDialog-countdownText {
color: #00a4dc
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #00a4dc;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8;
background: rgba(0, 0, 0, .1)
}
.listItem-border {
border-color: rgba(0, 0, 0, .1) !important
}
.listItem:focus {
background: rgba(0, 0, 0, .2)
}
.progressring-spiner {
border-color: #00a4dc
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: rgba(255, 255, 255, .9);
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #00a4dc
}
.emby-select-withcolor {
color: inherit;
background: rgba(255, 255, 255, .9);
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #00a4dc
}
.emby-checkbox:focus+span+.checkboxOutline {
border-color: #fff;
}
.emby-checkbox:focus:not(:checked)+span+.checkboxOutline {
border-color: #00a4dc;
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #00a4dc;
color: #fff
}
.emby-checkbox:checked+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #00a4dc
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #00a4dc
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #00a4dc !important;
color: #fff
}
.emby-button.show-focus:focus {
background: #00a4dc;
color: #fff
}
.emby-tab-button {
color: #999;
}
.emby-tab-button-active {
color: #fff;
}
.emby-tab-button.show-focus:focus {
color: #fff;
}
.emby-tab-button:hover {
color: #fff;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: #555;
border-color: rgba(0, 0, 0, .1)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #00a4dc !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #00a4dc
}
.guide-date-tab-button.show-focus:focus {
background-color: #00a4dc;
color: #fff
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-color: #00a4dc !important
}
.metadataSidebarIcon {
color: #00a4dc
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 KiB

View file

@ -1,466 +0,0 @@
.skinHeader,
html {
color: #ddd;
color: rgba(255, 255, 255, .8)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #303030
}
.emby-collapsible-button {
border-color: #383838;
border-color: rgba(255, 255, 255, .135)
}
.skinHeader-withBackground {
background: #303030;
background: -webkit-gradient(linear, left top, right top, from(#291A31), color-stop(#033664), color-stop(#011432), color-stop(#141A3A), to(#291A31));
background: -webkit-linear-gradient(left, #291A31, #033664, #011432, #141A3A, #291A31);
background: -o-linear-gradient(left, #291A31, #033664, #011432, #141A3A, #291A31);
background: linear-gradient(to right, #291A31, #033664, #011432, #141A3A, #291A31)
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.dialog,
html {
background-color: #033361
}
.backgroundContainer {
background: url(bg.jpg) center top no-repeat #033361;
-webkit-background-size: cover;
background-size: cover
}
.backgroundContainer.withBackdrop {
opacity: .86
}
@media (orientation:portrait) {
.backgroundContainer {
background-position: 30% top
}
}
.paper-icon-button-light:hover:not(:disabled) {
color: #00a4dc;
background-color: rgba(0,164,220, .2);
}
.paper-icon-button-light.show-focus:focus {
color: #00a4dc;
}
.fab,
.raised {
background: rgba(0, 0, 0, .5);
color: rgba(255, 255, 255, .87)
}
.fab:focus,
.raised:focus {
background: rgba(0, 0, 0, .7)
}
.button-submit {
background: #00a4dc;
color: #fff
}
.button-submit:focus {
background: #0cb0e8;
color: #fff
}
.button-delete {
background: rgb(247, 0, 0);
color: rgba(255, 255, 255, .87)
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #bbb;
color: rgba(255, 255, 255, .7)
}
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #00a4dc
}
.checkboxOutline {
border-color: currentColor
}
.collapseContent,
.formDialogFooter:not(.formDialogFooter-clear),
.formDialogHeader:not(.formDialogHeader-clear),
.paperList,
.visualCardBox {
background-color: rgba(0, 0, 0, .5)
}
.defaultCardBackground1 {
background-color: #d2b019
}
.defaultCardBackground2 {
background-color: #338abb
}
.defaultCardBackground3 {
background-color: #6b689d
}
.defaultCardBackground4 {
background-color: #dd452b
}
.defaultCardBackground5 {
background-color: #5ccea9
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #999;
color: rgba(255, 255, 255, .5)
}
.actionsheetDivider {
background: #444;
background: rgba(255, 255, 255, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.actionSheetMenuItem:hover {
background-color: rgba(0, 0, 0, .5)
}
.toast {
background: #303030;
color: #fff;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #033664;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.itemSelectionPanel {
border: 1px solid #00a4dc
}
.selectionCommandsPanel {
background: #00a4dc;
color: #fff
}
.upNextDialog-countdownText {
color: #00a4dc
}
.alphaPickerButton {
color: #999;
color: rgba(255, 255, 255, .5);
background-color: transparent
}
.alphaPickerButton-selected {
color: #fff
}
.alphaPickerButton-tv:focus {
background-color: #00a4dc;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #1c1c1c;
background: rgba(30, 30, 30, .9)
}
.listItem-border {
border-color: rgba(255, 255, 255, .1) !important
}
.listItem:focus {
background: rgba(0, 0, 0, .3)
}
.progressring-spiner {
border-color: #00a4dc
}
.button-flat-accent,
.button-link {
color: #00a4dc
}
.mediaInfoText {
color: #ddd;
background: rgba(170, 170, 190, .2)
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: rgba(0, 0, 0, .5);
border: .07em solid transparent;
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #00a4dc
}
.emby-select-withcolor {
color: inherit;
background: rgba(0, 0, 0, .5);
border: .07em solid transparent
}
.emby-select-withcolor>option {
color: inherit;
background: #222
}
.emby-select-withcolor:focus {
border-color: #00a4dc !important
}
.emby-select-tv-withcolor:focus {
background-color: #00a4dc !important;
color: #fff !important
}
.emby-checkbox:checked+span+.checkboxOutline {
border-color: #00a4dc
}
.emby-checkbox:focus+span+.checkboxOutline {
border-color: #fff;
}
.emby-checkbox:focus:not(:checked)+span+.checkboxOutline {
border-color: #00a4dc;
}
.emby-checkbox:checked+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #00a4dc
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #00a4dc
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background-color: rgba(0, 0, 0, .5)
}
.drawer-open {
background-color: #011432
}
.navMenuOption:hover {
background: rgba(221, 221, 221, 0.068)
}
.navMenuOption-selected {
background: #00a4dc !important;
color: #fff
}
.emby-button.show-focus:focus {
background: #00a4dc;
color: #fff
}
.emby-tab-button {
color: #999;
}
.emby-tab-button-active {
color: #00a4dc
}
.emby-tab-button.show-focus:focus {
color: #00a4dc;
}
.emby-tab-button:hover {
color: #00a4dc;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(255, 255, 255, .05)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .4) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #00a4dc !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(255, 255, 255, .3)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #00a4dc
}
.guide-date-tab-button.show-focus:focus {
background-color: #00a4dc;
color: #fff
}
.infoBanner {
color: #ddd;
background: #111;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-color: #00a4dc !important
}
.layout-desktop ::-webkit-scrollbar {
width: 1em;
height: 1em
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3)
}
::-webkit-scrollbar-track-piece {
background-color: #3b3b3b
}
::-webkit-scrollbar-thumb:horizontal,
::-webkit-scrollbar-thumb:vertical {
-webkit-border-radius: 2px;
background: center no-repeat #888
}
.timeslotHeaders-desktop::-webkit-scrollbar {
height: .7em
}
.metadataSidebarIcon {
color: #00a4dc
}

View file

@ -1,443 +0,0 @@
.skinHeader,
html {
color: #ddd;
color: rgba(255, 255, 255, .8)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #101010
}
.emby-collapsible-button {
border-color: #383838;
border-color: rgba(255, 255, 255, .135)
}
.skinHeader-withBackground {
background-color: #101010
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, 0.4);
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
.dialog,
html {
background-color: #101010
}
.backgroundContainer.withBackdrop {
background-color: rgba(0, 0, 0, .86)
}
.paper-icon-button-light:hover:not(:disabled) {
color: #00a4dc;
background-color: rgba(0,164,220, .2);
}
.paper-icon-button-light.show-focus:focus {
color: #00a4dc;
}
.fab,
.raised {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.fab:focus,
.raised:focus {
background: #383838
}
.button-submit {
background: #00a4dc;
color: #fff
}
.button-submit:focus {
background: #0cb0e8;
color: #fff
}
.button-delete {
background: rgb(247, 0, 0);
color: rgba(255, 255, 255, .87)
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #bbb;
color: rgba(255, 255, 255, .7)
}
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #00a4dc
}
.checkboxOutline {
border-color: currentColor
}
.collapseContent,
.formDialogFooter:not(.formDialogFooter-clear),
.formDialogHeader:not(.formDialogHeader-clear),
.paperList,
.visualCardBox {
background-color: #242424
}
.defaultCardBackground1 {
background-color: #d2b019
}
.defaultCardBackground2 {
background-color: #338abb
}
.defaultCardBackground3 {
background-color: #6b689d
}
.defaultCardBackground4 {
background-color: #dd452b
}
.defaultCardBackground5 {
background-color: #5ccea9
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #999;
color: rgba(255, 255, 255, .5)
}
.actionsheetDivider {
background: #444;
background: rgba(255, 255, 255, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.actionSheetMenuItem:hover {
background-color: #242424
}
.toast {
background: #303030;
color: #fff;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #101010;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.itemSelectionPanel {
border: 1px solid #00a4dc
}
.selectionCommandsPanel {
background: #00a4dc;
color: #fff
}
.upNextDialog-countdownText {
color: #00a4dc
}
.alphaPickerButton {
color: #999;
color: rgba(255, 255, 255, .5);
background-color: transparent
}
.alphaPickerButton-selected {
color: #fff
}
.alphaPickerButton-tv:focus {
background-color: #00a4dc;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #1c1c1c;
background: rgba(30, 30, 30, .9)
}
.listItem-border {
border-color: rgba(34, 34, 34, .9) !important
}
.listItem:focus {
background: #333
}
.progressring-spiner {
border-color: #00a4dc
}
.button-flat-accent,
.button-link {
color: #00a4dc
}
.mediaInfoText {
color: #ddd;
background: rgba(170, 170, 190, .2)
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #292929;
border: .07em solid #292929;
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #00a4dc
}
.emby-select-withcolor {
color: inherit;
background: #292929;
border: .07em solid #292929
}
.emby-select-withcolor>option {
color: inherit;
background: #222
}
.emby-select-withcolor:focus {
border-color: #00a4dc !important
}
.emby-select-tv-withcolor:focus {
background-color: #00a4dc !important;
color: #fff !important
}
.emby-checkbox:checked+span+.checkboxOutline {
border-color: #00a4dc
}
.emby-checkbox:focus+span+.checkboxOutline {
border-color: #fff;
}
.emby-checkbox:focus:not(:checked)+span+.checkboxOutline {
border-color: #00a4dc;
}
.emby-checkbox:checked+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #00a4dc
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #00a4dc
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background-color: #101010
}
.navMenuOption:hover {
background: #252528
}
.navMenuOption-selected {
background: #00a4dc !important;
color: #fff
}
.emby-button.show-focus:focus {
background: #00a4dc;
color: #fff
}
.emby-tab-button {
color: #999;
}
.emby-tab-button-active {
color: #fff;
}
.emby-tab-button.show-focus:focus {
color: #00a4dc;
}
.emby-tab-button:hover {
color: #00a4dc;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(255, 255, 255, .05)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: #1e1e1e !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #00a4dc !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(255, 255, 255, .3)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #00a4dc
}
.guide-date-tab-button.show-focus:focus {
background-color: #00a4dc;
color: #fff
}
.infoBanner {
color: #ddd;
background: #111;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-color: #00a4dc !important
}
.layout-desktop ::-webkit-scrollbar {
width: 1em;
height: 1em
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3)
}
::-webkit-scrollbar-track-piece {
background-color: #3b3b3b
}
::-webkit-scrollbar-thumb:horizontal,
::-webkit-scrollbar-thumb:vertical {
-webkit-border-radius: 2px;
background: center no-repeat #888
}
.timeslotHeaders-desktop::-webkit-scrollbar {
height: .7em
}
.metadataSidebarIcon {
color: #00a4dc
}

View file

@ -1,443 +0,0 @@
.skinHeader,
html {
color: #ddd;
color: rgba(255, 255, 255, .8)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #1f1f1f
}
.emby-collapsible-button {
border-color: #383838;
border-color: rgba(255, 255, 255, .135)
}
.skinHeader-withBackground {
background-color: #1f1f1f
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, 0.4);
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
.dialog,
html {
background-color: #1a1a1a
}
.backgroundContainer.withBackdrop {
background-color: rgba(0, 0, 0, .86)
}
.paper-icon-button-light:hover:not(:disabled) {
color: #52b54b;
background-color: rgba(82, 181, 75, .2);
}
.paper-icon-button-light.show-focus:focus {
color: #52b54b;
}
.fab,
.raised {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.fab:focus,
.raised:focus {
background: #383838
}
.button-submit {
background: #52b54b;
color: #fff
}
.button-submit:focus {
background: #5EC157;
color: #fff
}
.button-delete {
background: rgb(247, 0, 0);
color: rgba(255, 255, 255, .87)
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #bbb;
color: rgba(255, 255, 255, .7)
}
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #52b54b
}
.checkboxOutline {
border-color: currentColor
}
.collapseContent,
.formDialogFooter:not(.formDialogFooter-clear),
.formDialogHeader:not(.formDialogHeader-clear),
.paperList,
.visualCardBox {
background-color: #242424
}
.defaultCardBackground1 {
background-color: #d2b019
}
.defaultCardBackground2 {
background-color: #338abb
}
.defaultCardBackground3 {
background-color: #6b689d
}
.defaultCardBackground4 {
background-color: #dd452b
}
.defaultCardBackground5 {
background-color: #5ccea9
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #999;
color: rgba(255, 255, 255, .5)
}
.actionsheetDivider {
background: #444;
background: rgba(255, 255, 255, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.actionSheetMenuItem:hover {
background-color: #242424
}
.toast {
background: #303030;
color: #fff;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #101010;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.itemSelectionPanel {
border: 1px solid #52b54b
}
.selectionCommandsPanel {
background: #52b54b;
color: #fff
}
.upNextDialog-countdownText {
color: #52b54b
}
.alphaPickerButton {
color: #999;
color: rgba(255, 255, 255, .5);
background-color: transparent
}
.alphaPickerButton-selected {
color: #fff
}
.alphaPickerButton-tv:focus {
background-color: #52b54b;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #1c1c1c;
background: rgba(30, 30, 30, .9)
}
.listItem-border {
border-color: rgba(34, 34, 34, .9) !important
}
.listItem:focus {
background: #333
}
.progressring-spiner {
border-color: #52b54b
}
.button-flat-accent,
.button-link {
color: #52b54b
}
.mediaInfoText {
color: #ddd;
background: rgba(170, 170, 190, .2)
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #292929;
border: .07em solid #292929;
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #52b54b
}
.emby-select-withcolor {
color: inherit;
background: #292929;
border: .07em solid #292929
}
.emby-select-withcolor>option {
color: inherit;
background: #222
}
.emby-select-withcolor:focus {
border-color: #52b54b !important
}
.emby-select-tv-withcolor:focus {
background-color: #52b54b !important;
color: #fff !important
}
.emby-checkbox:checked+span+.checkboxOutline {
border-color: #52b54b
}
.emby-checkbox:focus+span+.checkboxOutline {
border-color: #fff;
}
.emby-checkbox:focus:not(:checked)+span+.checkboxOutline {
border-color: #52b54b;
}
.emby-checkbox:checked+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #52b54b
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #52b54b
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background-color: #1c1c1c
}
.navMenuOption:hover {
background: #252528
}
.navMenuOption-selected {
background: #52b54b !important;
color: #fff
}
.emby-button.show-focus:focus {
background: #52b54b;
color: #fff
}
.emby-tab-button {
color: #999;
}
.emby-tab-button-active {
color: #52b54b;
}
.emby-tab-button.show-focus:focus {
color: #52b54b;
}
.emby-tab-button:hover {
color: #52b54b;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(255, 255, 255, .05)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: #1e1e1e !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #52b54b !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(255, 255, 255, .3)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #52b54b
}
.guide-date-tab-button.show-focus:focus {
background-color: #52b54b;
color: #fff
}
.infoBanner {
color: #ddd;
background: #111;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-color: #52b54b !important
}
.layout-desktop ::-webkit-scrollbar {
width: 1em;
height: 1em
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3)
}
::-webkit-scrollbar-track-piece {
background-color: #3b3b3b
}
::-webkit-scrollbar-thumb:horizontal,
::-webkit-scrollbar-thumb:vertical {
-webkit-border-radius: 2px;
background: center no-repeat #888
}
.timeslotHeaders-desktop::-webkit-scrollbar {
height: .7em
}
.metadataSidebarIcon {
color: #00a4dc
}

View file

@ -1,439 +0,0 @@
.skinHeader,
html {
color: #222;
color: rgba(0, 0, 0, .87)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #303030
}
.emby-collapsible-button {
border-color: #ccc;
border-color: rgba(0, 0, 0, .158)
}
.collapseContent {
background-color: #eaeaea
}
.skinHeader-withBackground {
background-color: #303030;
color: #ccc;
color: rgba(255, 255, 255, .87);
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37)
}
.osdHeader {
-webkit-box-shadow: none !important;
box-shadow: none !important
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, 0.4);
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
html {
background-color: #f2f2f2
}
.backgroundContainer.withBackdrop {
background-color: rgba(255, 255, 255, .80)
}
.dialog {
background-color: #f0f0f0
}
.paper-icon-button-light:hover:not(:disabled) {
color: #00a4dc;
background-color: rgba(0,164,220, .2);
}
.paper-icon-button-light.show-focus:focus {
color: #00a4dc;
}
.fab,
.raised {
background: #d8d8d8;
color: inherit
}
.fab:focus,
.raised:focus {
background: #ccc
}
.button-submit {
background: #00a4dc;
color: #fff
}
.button-submit:focus {
background: #0cb0e8
}
.button-delete {
background: rgb(247, 0, 0);
color: rgba(255, 255, 255, .87)
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #555
}
.button-link,
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: green
}
.checkboxOutline {
border-color: currentColor
}
.paperList,
.visualCardBox {
background-color: #fff
}
.defaultCardBackground1 {
background-color: #009688
}
.defaultCardBackground2 {
background-color: #D32F2F
}
.defaultCardBackground3 {
background-color: #0288D1
}
.defaultCardBackground4 {
background-color: #388E3C
}
.defaultCardBackground5 {
background-color: #F57F17
}
.formDialogHeader:not(.formDialogHeader-clear) {
background-color: #00a4dc;
color: #fff
}
.formDialogFooter:not(.formDialogFooter-clear) {
background-color: #f0f0f0;
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0, 0, 0, .08);
color: inherit
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #888
}
.actionsheetDivider {
background: #ddd;
background: rgba(0, 0, 0, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.formDialogHeader a,
.toast {
color: #fff
}
.actionSheetMenuItem:hover {
background-color: #ddd
}
.toast {
background: #303030;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #282828;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.nowPlayingBarSecondaryText {
color: #999
}
.itemSelectionPanel {
border: 1px solid #00a4dc
}
.selectionCommandsPanel {
background: #00a4dc;
color: #fff
}
.upNextDialog-countdownText {
color: #00a4dc
}
.alphaPickerButton {
color: #555;
color: rgba(0, 0, 0, .7);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #00a4dc;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #f8f8f8
}
.listItem-border {
border-color: #f0f0f0 !important
}
.listItem:focus {
background: #ddd
}
.progressring-spiner {
border-color: #00a4dc
}
.mediaInfoText {
color: #333;
background: #fff
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #00a4dc
}
.emby-select-withcolor {
color: inherit;
background: #fff;
border: .07em solid rgba(0, 0, 0, .158)
}
.emby-checkbox:checked+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #00a4dc
}
.emby-checkbox:focus+span+.checkboxOutline {
border-color: #000;
}
.emby-checkbox:focus:not(:checked)+span+.checkboxOutline {
border-color: #00a4dc;
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #00a4dc;
color: #fff
}
.emby-checkbox:checked+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #00a4dc
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #00a4dc
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background: #fff
}
.navMenuOption:hover {
background: #f2f2f2
}
.navMenuOption-selected {
background: #00a4dc !important;
color: #fff
}
.emby-button.show-focus:focus {
background: #00a4dc;
color: #fff
}
.emby-tab-button {
color: #999;
}
.emby-tab-button-active {
color: #00a4dc;
}
.emby-tab-button.show-focus:focus {
color: #00a4dc;
}
.emby-tab-button:hover {
color: #00a4dc;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(0, 0, 0, .12)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .1) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #00a4dc !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(0, 0, 0, .54)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #00a4dc
}
.guide-date-tab-button.show-focus:focus {
background-color: #00a4dc;
color: #fff
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-color: #00a4dc !important
}
.metadataSidebarIcon {
color: #00a4dc
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 KiB

View file

@ -1,598 +0,0 @@
.skinHeader,
html {
color: #f8f8fe;
color: rgba(248, 248, 254, 0.973)
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #303030
}
.emby-collapsible-button {
border-color: #383838;
border-color: rgba(255, 255, 255, .135)
}
.skinHeader-withBackground {
background: #000420;
background: -moz-linear-gradient(left, #000420 0%, #06256f 18%, #2b052b 38%, #2b052b 68%, #06256f 81%, #000420 100%);
background: -webkit-linear-gradient(left, #000420 0%,#06256f 18%,#2b052b 38%,#2b052b 68%,#06256f 81%,#000420 100%);
background: linear-gradient(to right, #000420 0%,#06256f 18%,#2b052b 38%,#2b052b 68%,#06256f 81%,#000420 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000420', endColorstr='#000420',GradientType=1 );
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.dialog,
html {
background-color: #230c33
}
.backgroundContainer {
background: url(bg.jpg) center top no-repeat #030322;
-webkit-background-size: cover;
background-size: cover
}
.backgroundContainer.withBackdrop {
opacity: .86
}
@media (orientation:portrait) {
.backgroundContainer {
background-position: 30% top
}
}
.paper-icon-button-light:hover:not(:disabled) {
color: rgb(12, 232, 214);
background-color: rgba(0,164,220, .2);
}
.paper-icon-button-light.show-focus:focus {
color: #ff77f1;
}
progress {
border-radius: .4em;
}
progress::-webkit-progress-bar {
border-radius: .4em;
}
progress::-moz-progress-bar {
border-radius: .4em;
}
progress::-webkit-progress-value {
border-radius: .4em;
}
.fab,
.raised {
background: rgba(0, 0, 0, .5);
color: rgba(255, 255, 255, .87);
}
.fab:focus,
.raised:focus {
background: #ff77f1
}
div[data-role=controlgroup] a.ui-btn-active {
background: #55828b !important;
color: #e1e5f2 !important
}
a[data-role=button] {
background: rgba(2, 43, 58, 0.521) !important;
}
#btnDeleteImage,
.submit,
.btnBrowse,
.mini,
.btnRefresh,
.btnManual,
.button-submit,
.viewTabButton,
.button-alt,
.btnOption {
background: rgb(72, 195, 200);
color: rgb(225, 229, 242)
}
#btnResetPassword:hover,
#btnRestart:hover,
#btnDeleteImage:hover,
#btnShutdown:hover,
.button-cancel:hover,
.fab:hover,
.raised:hover,
.alphaPickerButton:hover,
.submit:hover,
.btnBrowse:hover,
.mini:hover,
.btnRefresh:hover,
.button-submit:hover,
.viewTabButton:hover,
.button-alt:hover,
.btnOption:hover,
.btnManual:hover,
.block:hover {
background: rgb(12, 232, 214);
color: rgba(255, 255, 255, .87)
}
.button-submit:focus {
background: #ff77f1
}
.button-delete {
background: rgb(247, 0, 0);
color: rgba(255, 255, 255, .87)
}
#btnResetPassword,
.btnForgotPassword,
.btnCancel,
.button-cancel {
background: rgba(0, 0, 0, .5);
color: rgba(255, 255, 255, .87);
}
.itemName {
color: #f1f7ee
}
.textareaLabel,
.sectionTitle,
.fieldDescription,
.checkboxLabel {
color: #f1f7ee
}
.checkboxLabel {
color: inherit
}
.selectLabel,
.checkboxLabel,
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: rgb(191, 219, 247);
}
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #ff77f1
}
.checkboxOutline {
border-color: currentColor
}
.cardContent {
border-radius: 1.000em
}
.collapseContent,
.formDialogFooter:not(.formDialogFooter-clear),
.formDialogHeader:not(.formDialogHeader-clear),
.paperList,
.visualCardBox {
background-color: rgba(0, 0, 0, .5);
border-radius: 1.000em
}
.cardOverlayContainer {
border-radius: 0.8em;
}
.visualCardBox .cardOverlayContainer {
border-bottom-right-radius: 0em;
border-bottom-left-radius: 0em;
}
.defaultCardBackground1 {
background-color: #d2b019
}
.defaultCardBackground2 {
background-color: #338abb
}
.defaultCardBackground3 {
background-color: #6b689d
}
.defaultCardBackground4 {
background-color: #dd452b
}
.defaultCardBackground5 {
background-color: #5ccea9
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #999;
color: rgba(255, 255, 255, .5)
}
.actionsheetDivider {
background: #444;
background: rgba(255, 255, 255, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.actionSheetMenuItem:hover {
background-color: rgba(0, 0, 0, .5)
}
.toast {
background: #303030;
color: #f8f8fe;
color: rgba(255, 255, 255, .87)
}
.appfooter {
background: #06256f;
color: #ccc;
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.itemSelectionPanel {
border: 1px solid #48C3C8
}
.selectionCommandsPanel {
background: #48C3C8;
color: #f8f8fe
}
.upNextDialog-countdownText {
color: #48C3C8
}
.alphaPickerButton {
color: #999;
color: rgba(255, 255, 255, .5);
background-color: transparent
}
.alphaPickerButton-selected {
color: #0ce8d6
}
.alphaPickerButton-tv:focus {
background: #ff77f1;
color: #f8f8fe !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #1c1c1c;
background: rgba(30, 30, 30, .9)
}
.listItem-border {
border-color: rgba(255, 255, 255, .1) !important
}
.listItem:focus {
background: rgba(0, 0, 0, .3)
}
.progressring-spiner {
border-color: #48C3C8
}
.button-flat-accent,
.button-link {
color: #48C3C8
}
.mediaInfoText {
color: #f8f8fe;
background: rgba(170, 170, 190, .2)
}
.mediaInfoTimerIcon,
.starIcon {
color: #f2b01e
}
.emby-input,
.emby-textarea {
color: inherit;
background: rgba(0, 0, 0, .5);
border: .07em solid transparent;
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #ff77f1
}
.emby-select-withcolor {
color: inherit;
background: rgba(0, 0, 0, .5);
border: .07em solid transparent
}
.emby-select-withcolor>option {
color: inherit;
background: #030322d7
}
.emby-select-withcolor:focus {
border-color: #ff77f1 !important
}
.emby-select-tv-withcolor:focus {
background-color: #ff77f1 !important;
color: #fff !important
}
.emby-checkbox:checked+span+.checkboxOutline {
background-color: #030322;
border:2px solid rgb(72, 195, 200);
}
.emby-checkbox:checked + span + .checkboxOutline > .checkboxIcon-checked {
color: rgb(12, 232, 214);
}
.emby-checkbox:focus:not(:checked)+span+.checkboxOutline {
border:2px solid #ff77f1;
}
.emby-checkbox:focus+span+.checkboxOutline {
border-color: #ff77f1;
}
.itemProgressBarForeground {
background-color: rgb(12, 232, 214);
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: rgb(12, 232, 214);
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
color: #f8f8fe;
background: rgba(0, 0, 0, .5)
}
.drawer-open {
background-color: #030322
}
.navMenuOption:hover {
background: rgba(221, 221, 221, 0.068)
}
.navMenuOption-selected {
background: #6f0765 !important;
color: #f8f8fe
}
.emby-button.show-focus:focus {
background: #8ae9c1;
color: #f8f8fe
}
.emby-tab-button {
color: #999;
}
.emby-tab-button-active {
color: #f8f8fe;
}
.emby-tab-button.show-focus:focus {
color: #ff77f1;
}
.emby-tab-button:hover {
color: #ff77f1;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: rgba(255, 255, 255, .05)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .4) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #48C3C8 !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(255, 255, 255, .3)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #ff77f1
}
.guide-date-tab-button.show-focus:focus {
background-color: #48C3C8;
color: #fff
}
.infoBanner {
color: #0e0f2d;
background: #dbe6ff;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-color: #ff77f1 !important
}
.layout-desktop,
.scrollY {
scrollbar-width: thin;
scrollbar-color: #888 rgba(59, 59, 59, 0.5)
}
.layout-desktop ::-webkit-scrollbar {
width: .4em;
height: 1em
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3)
}
::-webkit-scrollbar-track-piece {
background-color: rgba(59, 59, 59, 0.5)
}
::-webkit-scrollbar-thumb:horizontal,
::-webkit-scrollbar-thumb:vertical {
-webkit-border-radius: 2px;
background: center no-repeat #888
}
.timeslotHeaders-desktop::-webkit-scrollbar {
height: .7em
}
.mediaInfoOfficialRating {
border: .09em solid #583fa0;
background-color: #dbe6ff;
color: #0e0f2d;
}
.metadataSidebarIcon {
color: #dbe6ff
}
.personCard .overflowPortraitCard {
width: 40vw;
}
.personCard .cardScalable {
border-radius: 50%;
border: 1px solid rgb(255, 255, 255);
}
.personCard .cardPadder-overflowPortrait,
.personCard .cardPadder-portrait {
padding-bottom: 100%;
contain: strict;
}
.personCard .coveredImage {
clip-path: circle(50% at 50% 50%);
}
.personCard .cardOverlayContainer {
clip-path: circle(50% at 50% 50%);
}
.personCard .cardOverlayButton-br {
right: 20%;
}

View file

@ -1,461 +0,0 @@
html {
color: #eee;
color: rgba(255, 255, 255, .9);
background-color: #0F3562
}
.wizardStartForm,
.ui-corner-all,
.ui-shadow {
background-color: #0C2450
}
.emby-collapsible-button {
border-color: #383838;
border-color: rgba(255, 255, 255, .135)
}
.skinHeader {
color: #ccc;
color: rgba(255, 255, 255, .78)
}
.formDialogHeader:not(.formDialogHeader-clear),
.skinHeader-withBackground {
background-color: #0C2450;
background: -webkit-gradient(linear, left top, left bottom, from(#0C2450), to(#081B3B));
background: -webkit-linear-gradient(top, #0C2450, #081B3B);
background: -o-linear-gradient(top, #0C2450, #081B3B);
background: linear-gradient(to bottom, #0C2450, #081B3B)
}
@supports (backdrop-filter:blur(1.5em)) or (-webkit-backdrop-filter:blur(1.5em)) {
.skinHeader-blurred {
background: rgba(20, 20, 20, .7);
-webkit-backdrop-filter: blur(1.5em);
backdrop-filter: blur(1.5em)
}
}
.skinHeader.semiTransparent {
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
background-color: rgba(0, 0, 0, .3);
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, .6)), to(rgba(0, 0, 0, 0)));
background: -webkit-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: -o-linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0));
background: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, 0))
}
.pageTitleWithDefaultLogo {
background-image: url(../logowhite.png)
}
.backgroundContainer,
.dialog {
background-color: #0F3562;
background: -webkit-gradient(linear, left top, left bottom, from(#0F3562), color-stop(#1162A4), to(#03215F));
background: -webkit-linear-gradient(top, #0F3562, #1162A4, #03215F);
background: -o-linear-gradient(top, #0F3562, #1162A4, #03215F);
background: linear-gradient(to bottom, #0F3562, #1162A4, #03215F)
}
.backgroundContainer.withBackdrop {
background: rgba(17, 98, 164, .9)
}
.paper-icon-button-light:hover:not(:disabled) {
color: #00a4dc;
background-color: rgba(0,164,220, .2);
}
.paper-icon-button-light.show-focus:focus {
color: #00a4dc;
}
.fab,
.raised {
background: #082845;
color: #fff
}
.fab:focus,
.raised:focus {
background: #143451
}
.button-submit {
background: #00a4dc;
color: #fff
}
.button-submit:focus {
background: #0cb0e8;
color: #fff
}
.button-delete {
background: rgb(247, 0, 0);
color: rgba(255, 255, 255, .87)
}
.checkboxLabel {
color: inherit
}
.checkboxListLabel,
.inputLabel,
.inputLabelUnfocused,
.paperListLabel,
.textareaLabelUnfocused {
color: #bbb;
color: rgba(255, 255, 255, .7)
}
.inputLabelFocused,
.selectLabelFocused,
.textareaLabelFocused {
color: #00a4dc
}
.checkboxOutline {
border-color: currentColor
}
.collapseContent,
.paperList,
.visualCardBox {
background-color: #0F3562
}
.defaultCardBackground1 {
background-color: #d2b019
}
.defaultCardBackground2 {
background-color: #338abb
}
.defaultCardBackground3 {
background-color: #6b689d
}
.defaultCardBackground4 {
background-color: #dd452b
}
.defaultCardBackground5 {
background-color: #5ccea9
}
.cardText-secondary,
.fieldDescription,
.guide-programNameCaret,
.listItem .secondary,
.nowPlayingBarSecondaryText,
.programSecondaryTitle,
.secondaryText {
color: #999;
color: rgba(255, 255, 255, .5)
}
.actionsheetDivider {
background: #ddd;
background: rgba(255, 255, 255, .14)
}
.cardFooter-vibrant .cardText-secondary {
color: inherit;
opacity: .5
}
.toast {
background: #081B3B;
color: #fff;
color: rgba(255, 255, 255, .87)
}
.appfooter,
.formDialogFooter:not(.formDialogFooter-clear) {
background: #0C2450;
background: -webkit-gradient(linear, left bottom, left top, from(#0C2450), to(#081B3B));
background: -webkit-linear-gradient(bottom, #0C2450, #081B3B);
background: -o-linear-gradient(bottom, #0C2450, #081B3B);
background: linear-gradient(to top, #0C2450, #081B3B);
color: rgba(255, 255, 255, .78)
}
@supports (backdrop-filter:blur(10px)) or (-webkit-backdrop-filter:blur(10px)) {
.appfooter-blurred {
background: rgba(24, 24, 24, .7);
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px)
}
}
.itemSelectionPanel {
border: 1px solid #00a4dc
}
.selectionCommandsPanel {
background: #00a4dc;
color: #fff
}
.upNextDialog-countdownText {
color: #00a4dc
}
.alphaPickerButton {
color: #999;
color: rgba(255, 255, 255, .5);
background-color: transparent
}
.alphaPickerButton-selected,
.alphaPickerButton-tv:focus {
background-color: #00a4dc;
color: #fff !important
}
.detailTableBodyRow-shaded:nth-child(even) {
background: #1c1c1c;
background: rgba(0, 0, 0, .3)
}
.listItem-border {
border-color: rgba(0, 0, 0, .3) !important
}
.listItem:focus {
background: #333
}
.progressring-spiner {
border-color: #00a4dc
}
.button-flat-accent,
.button-link {
color: #00a4dc
}
.mediaInfoText {
color: #ddd;
background: rgba(170, 170, 190, .2)
}
.mediaInfoTimerIcon,
.starIcon {
color: #CB272A
}
.emby-input,
.emby-textarea {
color: inherit;
background: rgba(255, 255, 255, .2);
border: .07em solid rgba(255, 255, 255, .135);
-webkit-border-radius: .15em;
border-radius: .15em
}
.emby-input:focus,
.emby-textarea:focus {
border-color: #00a4dc
}
.emby-select-withcolor {
color: inherit;
background: rgba(255, 255, 255, .2);
border: .07em solid rgba(255, 255, 255, .135)
}
.emby-checkbox:checked+span+.checkboxOutline,
.emby-select-withcolor:focus {
border-color: #00a4dc
}
.emby-checkbox:focus+span+.checkboxOutline {
border-color: #fff;
}
.emby-checkbox:focus:not(:checked)+span+.checkboxOutline {
border-color: #00a4dc;
}
.emby-select-withcolor>option {
color: #000;
background: #fff
}
.emby-select-tv-withcolor:focus {
background-color: #00a4dc;
color: #fff
}
.emby-checkbox:checked+span+.checkboxOutline,
.itemProgressBarForeground {
background-color: #00a4dc
}
.itemProgressBarForeground-recording {
background-color: #CB272A
}
.countIndicator,
.fullSyncIndicator,
.playedIndicator {
background: #00a4dc
}
.fullSyncIndicator {
color: #fff
}
.mainDrawer {
background-color: #0F3562;
color: #ccc;
color: rgba(255, 255, 255, .7)
}
.actionSheetMenuItem:hover,
.navMenuOption:hover {
background: #252528;
background: rgba(0, 0, 0, .2)
}
.navMenuOption-selected {
background: #00a4dc !important;
color: #fff
}
.emby-button.show-focus:focus {
background: #00a4dc;
color: #fff
}
.emby-tab-button {
color: #999;
}
.emby-tab-button-active {
color: #fff
}
.emby-tab-button.show-focus:focus {
color: #fff;
}
.emby-tab-button:hover {
color: #fff;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: #999;
border-color: rgba(255, 255, 255, .1)
}
.programCell-sports {
background: #3949AB !important
}
.programCell-movie {
background: #5E35B1 !important
}
.programCell-kids {
background: #039BE5 !important
}
.programCell-news {
background: #43A047 !important
}
.programCell-active {
background: rgba(0, 0, 0, .3) !important
}
.guide-channelHeaderCell:focus,
.programCell:focus {
background-color: #00a4dc !important;
color: #fff !important
}
.guide-programTextIcon {
color: #1e1e1e;
background: #555
}
.guide-headerTimeslots {
color: inherit
}
.guide-date-tab-button {
color: #555;
color: rgba(255, 255, 255, .3)
}
.guide-date-tab-button.emby-tab-button-active,
.guide-date-tab-button:focus {
color: #00a4dc
}
.guide-date-tab-button.show-focus:focus {
background-color: #00a4dc;
color: #fff
}
.infoBanner {
color: #000;
background: #fff3a5;
padding: 1em;
-webkit-border-radius: .25em;
border-radius: .25em
}
.ratingbutton-icon-withrating {
color: #c33
}
.downloadbutton-icon-complete,
.downloadbutton-icon-on {
color: #4285F4
}
.playstatebutton-icon-played {
color: #c33
}
.repeatButton-active {
color: #4285F4
}
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-color: #fff !important
}
.layout-desktop ::-webkit-scrollbar {
width: 1em;
height: 1em
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3)
}
::-webkit-scrollbar-track-piece {
background-color: #081B3B
}
::-webkit-scrollbar-thumb:horizontal,
::-webkit-scrollbar-thumb:vertical {
-webkit-border-radius: 2px;
background: center no-repeat rgba(255, 255, 255, .7)
}
.metadataSidebarIcon {
color: #00a4dc
}

View file

@ -1,3 +0,0 @@
{
"main": "toast.js"
}

View file

@ -11,7 +11,6 @@
background-color: rgba(0, 0, 0, 0.7);
color: #fff;
user-select: none;
-webkit-touch-callout: none;
}
.upNextDialog-hidden {
@ -67,8 +66,4 @@
border: 0;
user-drag: none;
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
}

View file

@ -1,8 +1,7 @@
define(['appSettings', 'events'], function (appsettings, events) {
define(['appSettings', 'events'], function (appSettings, events) {
'use strict';
function onSaveTimeout() {
var self = this;
self.saveTimeout = null;
self.currentApiClient.updateDisplayPreferences('usersettings', self.displayPrefs, self.currentUserId, 'emby');
@ -12,6 +11,7 @@ define(['appSettings', 'events'], function (appsettings, events) {
if (instance.saveTimeout) {
clearTimeout(instance.saveTimeout);
}
instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50);
}
@ -19,7 +19,6 @@ define(['appSettings', 'events'], function (appsettings, events) {
}
UserSettings.prototype.setUserInfo = function (userId, apiClient) {
if (this.saveTimeout) {
clearTimeout(this.saveTimeout);
}
@ -49,14 +48,9 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.set = function (name, value, enableOnServer) {
var userId = this.currentUserId;
if (!userId) {
throw new Error('userId cannot be null');
}
var currentValue = this.get(name, enableOnServer);
var result = appsettings.set(name, value, userId);
var result = appSettings.set(name, value, userId);
if (enableOnServer !== false && this.displayPrefs) {
this.displayPrefs.CustomPrefs[name] = value == null ? value : value.toString();
@ -72,108 +66,70 @@ define(['appSettings', 'events'], function (appsettings, events) {
UserSettings.prototype.get = function (name, enableOnServer) {
var userId = this.currentUserId;
if (!userId) {
// TODO: I'd like to continue to throw this exception but it causes issues with offline use
// Revisit in the future and restore it
return null;
//throw new Error('userId cannot be null');
if (enableOnServer !== false && this.displayPrefs) {
return this.displayPrefs.CustomPrefs[name];
}
if (enableOnServer !== false) {
if (this.displayPrefs) {
return this.displayPrefs.CustomPrefs[name];
}
}
return appsettings.get(name, userId);
return appSettings.get(name, userId);
};
UserSettings.prototype.serverConfig = function (config) {
var apiClient = this.currentApiClient;
if (config) {
return apiClient.updateUserConfiguration(this.currentUserId, config);
} else {
return apiClient.getUser(this.currentUserId).then(function (user) {
return user.Configuration;
});
}
return apiClient.getUser(this.currentUserId).then(function (user) {
return user.Configuration;
});
};
UserSettings.prototype.enableCinemaMode = function (val) {
if (val != null) {
return this.set('enableCinemaMode', val.toString(), false);
}
val = this.get('enableCinemaMode', false);
if (val) {
return val !== 'false';
}
return true;
return val !== 'false';
};
UserSettings.prototype.enableNextVideoInfoOverlay = function (val) {
if (val != null) {
return this.set('enableNextVideoInfoOverlay', val.toString());
}
val = this.get('enableNextVideoInfoOverlay');
val = this.get('enableNextVideoInfoOverlay', false);
return val !== 'false';
};
UserSettings.prototype.enableThemeSongs = function (val) {
if (val != null) {
return this.set('enableThemeSongs', val.toString(), false);
}
val = this.get('enableThemeSongs', false);
return val !== 'false';
};
UserSettings.prototype.enableThemeVideos = function (val) {
if (val != null) {
return this.set('enableThemeVideos', val.toString(), false);
}
val = this.get('enableThemeVideos', false);
if (val) {
return val !== 'false';
}
return UserSettings.defaults.enableThemeVideos;
return val !== 'false';
};
UserSettings.prototype.enableBackdrops = function (val) {
if (val != null) {
return this.set('enableBackdrops', val.toString(), false);
}
val = this.get('enableBackdrops', false);
if (val) {
return val !== 'false';
}
return UserSettings.defaults.enableBackdrops;
return val !== 'false';
};
UserSettings.prototype.language = function (val) {
if (val != null) {
return this.set('language', val.toString(), false);
}
@ -182,7 +138,6 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.dateTimeLocale = function (val) {
if (val != null) {
return this.set('datetimelocale', val.toString(), false);
}
@ -191,7 +146,6 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.skipBackLength = function (val) {
if (val != null) {
return this.set('skipBackLength', val.toString());
}
@ -200,7 +154,6 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.skipForwardLength = function (val) {
if (val != null) {
return this.set('skipForwardLength', val.toString());
}
@ -209,7 +162,6 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.dashboardTheme = function (val) {
if (val != null) {
return this.set('dashboardTheme', val);
}
@ -218,55 +170,41 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.skin = function (val) {
if (val != null) {
return this.set('skin', val, false);
}
return this.get('skin', false) || UserSettings.defaults.skin;
return this.get('skin', false);
};
UserSettings.prototype.theme = function (val) {
if (val != null) {
return this.set('appTheme', val, false);
}
return this.get('appTheme', false) || UserSettings.defaults.theme;
return this.get('appTheme', false);
};
UserSettings.prototype.screensaver = function (val) {
if (val != null) {
return this.set('screensaver', val, false);
}
return this.get('screensaver', false) || UserSettings.defaults.screensaver;
return this.get('screensaver', false);
};
UserSettings.prototype.soundEffects = function (val) {
if (val != null) {
return this.set('soundeffects', val, false);
}
return this.get('soundeffects', false) || UserSettings.defaults.soundEffects;
};
// apps should set these values
UserSettings.defaults = {
theme: null,
enableThemeVideos: true
return this.get('soundeffects', false);
};
UserSettings.prototype.loadQuerySettings = function (key, query) {
var values = this.get(key);
if (values) {
values = JSON.parse(values);
return Object.assign(query, values);
}
@ -274,12 +212,11 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.saveQuerySettings = function (key, query) {
var values = {};
if (query.SortBy) {
values.SortBy = query.SortBy;
}
if (query.SortOrder) {
values.SortOrder = query.SortOrder;
}
@ -288,26 +225,20 @@ define(['appSettings', 'events'], function (appsettings, events) {
};
UserSettings.prototype.getSubtitleAppearanceSettings = function (key) {
key = key || 'localplayersubtitleappearance3';
return JSON.parse(this.get(key, false) || '{}');
};
UserSettings.prototype.setSubtitleAppearanceSettings = function (value, key) {
key = key || 'localplayersubtitleappearance3';
return this.set(key, JSON.stringify(value), false);
};
UserSettings.prototype.setFilter = function (key, value) {
return this.set(key, value, true);
};
UserSettings.prototype.getFilter = function (key) {
return this.get(key, true);
};

View file

@ -41,84 +41,87 @@ define(["browser", "dom", "layoutManager", "css!components/viewManager/viewConta
var isPluginpage = -1 !== options.url.toLowerCase().indexOf("/configurationpage");
var newViewInfo = normalizeNewView(options, isPluginpage);
var newView = newViewInfo.elem;
var modulesToLoad = [];
if (isPluginpage) {
require(["legacyDashboard"]);
modulesToLoad.push("legacyDashboard");
}
if (newViewInfo.hasjQuerySelect) {
require(["legacySelectMenu"]);
modulesToLoad.push("legacySelectMenu");
}
if (newViewInfo.hasjQueryChecked) {
require(["fnchecked"]);
modulesToLoad.push("fnchecked");
}
return new Promise(function (resolve) {
var currentPage = allPages[pageIndex];
require(modulesToLoad, function () {
var currentPage = allPages[pageIndex];
if (currentPage) {
triggerDestroy(currentPage);
}
if (currentPage) {
triggerDestroy(currentPage);
}
var view = newView;
var view = newView;
if ("string" == typeof view) {
view = document.createElement("div");
view.innerHTML = newView;
}
if ("string" == typeof view) {
view = document.createElement("div");
view.innerHTML = newView;
}
view.classList.add("mainAnimatedPage");
view.classList.add("mainAnimatedPage");
if (currentPage) {
if (newViewInfo.hasScript && window.$) {
view = $(view).appendTo(mainAnimatedPages)[0];
mainAnimatedPages.removeChild(currentPage);
if (currentPage) {
if (newViewInfo.hasScript && window.$) {
view = $(view).appendTo(mainAnimatedPages)[0];
mainAnimatedPages.removeChild(currentPage);
} else {
mainAnimatedPages.replaceChild(view, currentPage);
}
} else {
mainAnimatedPages.replaceChild(view, currentPage);
}
} else {
if (newViewInfo.hasScript && window.$) {
view = $(view).appendTo(mainAnimatedPages)[0];
} else {
mainAnimatedPages.appendChild(view);
}
}
if (options.type) {
view.setAttribute("data-type", options.type);
}
var properties = [];
if (options.fullscreen) {
properties.push("fullscreen");
}
if (properties.length) {
view.setAttribute("data-properties", properties.join(","));
}
allPages[pageIndex] = view;
setControllerClass(view, options).then(function () {
if (onBeforeChange) {
onBeforeChange(view, false, options);
if (newViewInfo.hasScript && window.$) {
view = $(view).appendTo(mainAnimatedPages)[0];
} else {
mainAnimatedPages.appendChild(view);
}
}
beforeAnimate(allPages, pageIndex, selected);
selectedPageIndex = pageIndex;
currentUrls[pageIndex] = options.url;
if (!options.cancel && previousAnimatable) {
afterAnimate(allPages, pageIndex);
if (options.type) {
view.setAttribute("data-type", options.type);
}
if (window.$) {
$.mobile = $.mobile || {};
$.mobile.activePage = view;
var properties = [];
if (options.fullscreen) {
properties.push("fullscreen");
}
resolve(view);
if (properties.length) {
view.setAttribute("data-properties", properties.join(","));
}
allPages[pageIndex] = view;
setControllerClass(view, options).then(function () {
if (onBeforeChange) {
onBeforeChange(view, false, options);
}
beforeAnimate(allPages, pageIndex, selected);
selectedPageIndex = pageIndex;
currentUrls[pageIndex] = options.url;
if (!options.cancel && previousAnimatable) {
afterAnimate(allPages, pageIndex);
}
if (window.$) {
$.mobile = $.mobile || {};
$.mobile.activePage = view;
}
resolve(view);
});
});
});
}

View file

@ -1,3 +0,0 @@
{
"main": "viewManager.js"
}