mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
commit
8f2cfb16e7
145 changed files with 5062 additions and 2285 deletions
|
@ -16,12 +16,12 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {},
|
||||||
"ignore": [],
|
"ignore": [],
|
||||||
"version": "1.2.39",
|
"version": "1.2.48",
|
||||||
"_release": "1.2.39",
|
"_release": "1.2.48",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "1.2.39",
|
"tag": "1.2.48",
|
||||||
"commit": "956d151bb5506eea13c56b69f21220b55d2b7d35"
|
"commit": "342107db8bbaa343a4c61be6fd2591121a83ffff"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
||||||
"_target": "^1.2.0",
|
"_target": "^1.2.0",
|
||||||
|
|
|
@ -25,12 +25,17 @@
|
||||||
transition: transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);
|
transition: transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);
|
||||||
transition: transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1),-webkit-transform .3s cubic-bezier(.4,0,.2,1);
|
transition: transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1),-webkit-transform .3s cubic-bezier(.4,0,.2,1);
|
||||||
z-index: -1;*/
|
z-index: -1;*/
|
||||||
|
max-height: 84%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.actionSheet.centered .actionSheetContent {
|
.layout-tv .actionSheet {
|
||||||
text-align: center;
|
max-height: none;
|
||||||
align-items: center;
|
}
|
||||||
}
|
|
||||||
|
.actionSheet.centered .actionSheetContent {
|
||||||
|
text-align: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
.actionSheetContent {
|
.actionSheetContent {
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
|
|
12
dashboard-ui/bower_components/emby-webcomponents/clearbutton.css
vendored
Normal file
12
dashboard-ui/bower_components/emby-webcomponents/clearbutton.css
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.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;
|
||||||
|
}
|
398
dashboard-ui/bower_components/emby-webcomponents/guide/guide.css
vendored
Normal file
398
dashboard-ui/bower_components/emby-webcomponents/guide/guide.css
vendored
Normal file
|
@ -0,0 +1,398 @@
|
||||||
|
.tvguide {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvGuideHeader {
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvProgramSectionHeader {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvProgram {
|
||||||
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvProgramTimeSlotInner {
|
||||||
|
padding: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvProgramInfo {
|
||||||
|
vertical-align: middle;
|
||||||
|
padding: .5em .5em;
|
||||||
|
border-bottom: .65vh solid #121212;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvProgramCurrentTimeSlot {
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvProgramName {
|
||||||
|
color: #fff;
|
||||||
|
margin-bottom: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvProgramTime {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newTvProgram {
|
||||||
|
color: yellow;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.liveTvProgram {
|
||||||
|
color: #64A239;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.premiereTvProgram {
|
||||||
|
color: orange;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programAccent {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sportsProgramInfo .programAccent {
|
||||||
|
background-color: #0A7C33;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newsProgramInfo .programAccent {
|
||||||
|
background-color: #523378;
|
||||||
|
}
|
||||||
|
|
||||||
|
.movieProgramInfo .programAccent {
|
||||||
|
background-color: #A43913;
|
||||||
|
}
|
||||||
|
|
||||||
|
.childProgramInfo .programAccent {
|
||||||
|
background-color: #0B487D;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timerCircle {
|
||||||
|
display: inline-block;
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #cc0000;
|
||||||
|
border: 1px solid #cc3333;
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seriesTimerCircle {
|
||||||
|
position: relative;
|
||||||
|
margin-left: 0;
|
||||||
|
left: 21px;
|
||||||
|
opacity: .3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemMiscInfo .seriesTimerCircle:first-child {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seriesTimerCircle + .seriesTimerCircle {
|
||||||
|
opacity: .65;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seriesTimerCircle + .seriesTimerCircle + .seriesTimerCircle {
|
||||||
|
opacity: 1;
|
||||||
|
left: -21px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelTimeslotHeader {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeslotHeaders {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobileGuide .timeslotHeaders {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programContainer {
|
||||||
|
white-space: nowrap;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programGridContainer {
|
||||||
|
margin-left: 12.2vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelPrograms {
|
||||||
|
white-space: nowrap;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelPrograms, .timeslotHeadersInner {
|
||||||
|
width: 1800vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 600px) {
|
||||||
|
|
||||||
|
.channelPrograms, .timeslotHeadersInner {
|
||||||
|
width: 1400vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 800px) {
|
||||||
|
|
||||||
|
.channelPrograms, .timeslotHeadersInner {
|
||||||
|
width: 1200vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 1280px) {
|
||||||
|
|
||||||
|
.channelPrograms, .timeslotHeadersInner {
|
||||||
|
width: 660vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeslotHeader {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
text-indent: .35em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelHeaderCell, .channelTimeslotHeader {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
border-right: 1px solid #121212;
|
||||||
|
width: 24vw;
|
||||||
|
background: rgba(40, 40, 40, .9);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 500px) {
|
||||||
|
|
||||||
|
.channelHeaderCell, .channelTimeslotHeader {
|
||||||
|
width: 16vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 600px) {
|
||||||
|
|
||||||
|
.channelHeaderCell, .channelTimeslotHeader {
|
||||||
|
width: 16vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 800px) {
|
||||||
|
|
||||||
|
.channelHeaderCell, .channelTimeslotHeader {
|
||||||
|
width: 14vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 1280px) {
|
||||||
|
|
||||||
|
.channelHeaderCell, .channelTimeslotHeader {
|
||||||
|
width: 12vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnSelectDate {
|
||||||
|
color: #fff;
|
||||||
|
padding-left: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelHeaderCell {
|
||||||
|
border-bottom: .65vh solid #121212 !important;
|
||||||
|
background-size: auto 65.7%;
|
||||||
|
background-position: 90% center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 800px) {
|
||||||
|
|
||||||
|
.guideCurrentDay {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 1280px) {
|
||||||
|
|
||||||
|
.guideChannelInfoWithImage .guideChannelName {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelPrograms, .channelHeaderCell {
|
||||||
|
height: 15vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 500px) {
|
||||||
|
|
||||||
|
.channelPrograms, .channelHeaderCell {
|
||||||
|
height: 10.5vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 600px) {
|
||||||
|
|
||||||
|
.channelPrograms, .channelHeaderCell {
|
||||||
|
height: 9vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 720px) {
|
||||||
|
|
||||||
|
.channelPrograms, .channelHeaderCell {
|
||||||
|
height: 6vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-tv .channelPrograms, .layout-tv .channelHeaderCell {
|
||||||
|
height: 7.6vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelTimeslotHeader {
|
||||||
|
border-right-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelTimeslotHeader, .timeslotHeader {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeslotHeader, .channelTimeslotHeader {
|
||||||
|
height: 14vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 500px) {
|
||||||
|
|
||||||
|
.timeslotHeader, .channelTimeslotHeader {
|
||||||
|
height: 10vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 600px) {
|
||||||
|
|
||||||
|
.timeslotHeader, .channelTimeslotHeader {
|
||||||
|
height: 8vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 720px) {
|
||||||
|
|
||||||
|
.timeslotHeader, .channelTimeslotHeader {
|
||||||
|
height: 5.75vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pointerInput .channelHeaderCell:hover {
|
||||||
|
background-color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelList {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programGrid {
|
||||||
|
padding-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeslotHeader {
|
||||||
|
width: 2.0833333333333333333333333333333%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programCell {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
/* Unfortunately the borders using vh get rounded while the bottom property doesn't. So this is a little hack to try and make them even*/
|
||||||
|
bottom: .59vh;
|
||||||
|
border-left: .65vh solid #121212 !important;
|
||||||
|
background-color: rgba(32, 32, 32, .95);
|
||||||
|
display: flex;
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
overflow: hidden;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeslotCellInner {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
top: 0;
|
||||||
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guideProgramName {
|
||||||
|
padding: 0 .5em 0;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guideProgramTime {
|
||||||
|
padding: 0 .5em .35em;
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programCell iron-icon {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: .5em;
|
||||||
|
height: 3.5vh;
|
||||||
|
width: 3.5vh;
|
||||||
|
color: #ddd;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programCell iron-icon + iron-icon {
|
||||||
|
margin-left: .25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guideChannelInfo {
|
||||||
|
display: inline-block;
|
||||||
|
max-width: 110px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding-left: .7em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guideChannelName {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: .3em;
|
||||||
|
max-width: 6vw;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.channelList, .programGrid {
|
||||||
|
height: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programCell:focus, .channelHeaderCell:focus, .btnSelectDate:focus {
|
||||||
|
background-color: #52B54B;
|
||||||
|
outline: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.programCell:focus .programAccent {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timerIcon, .seriesTimerIcon {
|
||||||
|
color: #cc3333 !important;
|
||||||
|
}
|
641
dashboard-ui/bower_components/emby-webcomponents/guide/guide.js
vendored
Normal file
641
dashboard-ui/bower_components/emby-webcomponents/guide/guide.js
vendored
Normal file
|
@ -0,0 +1,641 @@
|
||||||
|
define(['globalize', 'connectionManager', 'loading', 'scrollHelper', 'datetime', 'focusManager', 'imageLoader', 'events', 'layoutManager', 'itemShortcuts', 'registrationservices', 'clearButtonStyle', 'css!./guide.css', 'html!./icons.html', 'scrollStyles'], function (globalize, connectionManager, loading, scrollHelper, datetime, focusManager, imageLoader, events, layoutManager, itemShortcuts, registrationServices) {
|
||||||
|
|
||||||
|
var baseUrl;
|
||||||
|
|
||||||
|
function Guide(options) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
var items = {};
|
||||||
|
|
||||||
|
self.refresh = function () {
|
||||||
|
reloadPage(options.element);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.destroy = function () {
|
||||||
|
itemShortcuts.off(options.element);
|
||||||
|
items = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
self.options = options;
|
||||||
|
|
||||||
|
// 30 mins
|
||||||
|
var cellCurationMinutes = 30;
|
||||||
|
var cellDurationMs = cellCurationMinutes * 60 * 1000;
|
||||||
|
var msPerDay = 86400000;
|
||||||
|
|
||||||
|
var currentDate;
|
||||||
|
|
||||||
|
var channelQuery = {
|
||||||
|
|
||||||
|
StartIndex: 0,
|
||||||
|
EnableFavoriteSorting: true
|
||||||
|
};
|
||||||
|
|
||||||
|
var channelsPromise;
|
||||||
|
|
||||||
|
function normalizeDateToTimeslot(date) {
|
||||||
|
|
||||||
|
var minutesOffset = date.getMinutes() - cellCurationMinutes;
|
||||||
|
|
||||||
|
if (minutesOffset >= 0) {
|
||||||
|
|
||||||
|
date.setHours(date.getHours(), cellCurationMinutes, 0, 0);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
date.setHours(date.getHours(), 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showLoading() {
|
||||||
|
loading.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
function hideLoading() {
|
||||||
|
loading.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getChannelLimit(context) {
|
||||||
|
|
||||||
|
return registrationServices.validateFeature('livetv').then(function () {
|
||||||
|
|
||||||
|
var limit = 400;
|
||||||
|
|
||||||
|
context.querySelector('.guideRequiresUnlock').classList.add('hide');
|
||||||
|
|
||||||
|
return limit;
|
||||||
|
|
||||||
|
}, function () {
|
||||||
|
|
||||||
|
var limit = 5;
|
||||||
|
|
||||||
|
context.querySelector('.guideRequiresUnlock').classList.remove('hide');
|
||||||
|
context.querySelector('.unlockText').innerHTML = globalize.translate('MessageLiveTvGuideRequiresUnlock', limit);
|
||||||
|
|
||||||
|
return limit;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadGuide(context, newStartDate) {
|
||||||
|
|
||||||
|
var apiClient = connectionManager.currentApiClient();
|
||||||
|
|
||||||
|
channelQuery.UserId = apiClient.getCurrentUserId();
|
||||||
|
|
||||||
|
getChannelLimit(context).then(function (channelLimit) {
|
||||||
|
|
||||||
|
showLoading();
|
||||||
|
|
||||||
|
channelQuery.Limit = channelLimit;
|
||||||
|
channelQuery.AddCurrentProgram = false;
|
||||||
|
|
||||||
|
channelsPromise = channelsPromise || apiClient.getLiveTvChannels(channelQuery);
|
||||||
|
|
||||||
|
var date = newStartDate;
|
||||||
|
// Add one second to avoid getting programs that are just ending
|
||||||
|
date = new Date(date.getTime() + 1000);
|
||||||
|
|
||||||
|
// Subtract to avoid getting programs that are starting when the grid ends
|
||||||
|
var nextDay = new Date(date.getTime() + msPerDay - 2000);
|
||||||
|
|
||||||
|
console.log(nextDay);
|
||||||
|
channelsPromise.then(function (channelsResult) {
|
||||||
|
|
||||||
|
apiClient.getLiveTvPrograms({
|
||||||
|
UserId: apiClient.getCurrentUserId(),
|
||||||
|
MaxStartDate: nextDay.toISOString(),
|
||||||
|
MinEndDate: date.toISOString(),
|
||||||
|
channelIds: channelsResult.Items.map(function (c) {
|
||||||
|
return c.Id;
|
||||||
|
}).join(','),
|
||||||
|
ImageTypeLimit: 1,
|
||||||
|
EnableImageTypes: "Primary,Backdrop",
|
||||||
|
SortBy: "StartDate"
|
||||||
|
|
||||||
|
}).then(function (programsResult) {
|
||||||
|
|
||||||
|
renderGuide(context, date, channelsResult.Items, programsResult.Items, apiClient);
|
||||||
|
|
||||||
|
hideLoading();
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDisplayTime(date) {
|
||||||
|
|
||||||
|
if ((typeof date).toString().toLowerCase() === 'string') {
|
||||||
|
try {
|
||||||
|
|
||||||
|
date = datetime.parseISO8601Date(date, { toLocal: true });
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return datetime.getDisplayTime(date).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTimeslotHeadersHtml(startDate, endDateTime) {
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
// clone
|
||||||
|
startDate = new Date(startDate.getTime());
|
||||||
|
|
||||||
|
html += '<div class="timeslotHeadersInner">';
|
||||||
|
|
||||||
|
while (startDate.getTime() < endDateTime) {
|
||||||
|
|
||||||
|
html += '<div class="timeslotHeader">';
|
||||||
|
|
||||||
|
html += getDisplayTime(startDate);
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
// Add 30 mins
|
||||||
|
startDate.setTime(startDate.getTime() + cellDurationMs);
|
||||||
|
}
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseDates(program) {
|
||||||
|
|
||||||
|
if (!program.StartDateLocal) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
program.StartDateLocal = datetime.parseISO8601Date(program.StartDate, { toLocal: true });
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!program.EndDateLocal) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
program.EndDateLocal = datetime.parseISO8601Date(program.EndDate, { toLocal: true });
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getChannelProgramsHtml(context, date, channel, programs) {
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
var startMs = date.getTime();
|
||||||
|
var endMs = startMs + msPerDay - 1;
|
||||||
|
|
||||||
|
programs = programs.filter(function (curr) {
|
||||||
|
return curr.ChannelId == channel.Id;
|
||||||
|
});
|
||||||
|
|
||||||
|
html += '<div class="channelPrograms">';
|
||||||
|
|
||||||
|
for (var i = 0, length = programs.length; i < length; i++) {
|
||||||
|
|
||||||
|
var program = programs[i];
|
||||||
|
|
||||||
|
if (program.ChannelId != channel.Id) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
parseDates(program);
|
||||||
|
|
||||||
|
if (program.EndDateLocal.getTime() < startMs) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (program.StartDateLocal.getTime() > endMs) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
items[program.Id] = program;
|
||||||
|
|
||||||
|
var renderStartMs = Math.max(program.StartDateLocal.getTime(), startMs);
|
||||||
|
var startPercent = (program.StartDateLocal.getTime() - startMs) / msPerDay;
|
||||||
|
startPercent *= 100;
|
||||||
|
startPercent = Math.max(startPercent, 0);
|
||||||
|
|
||||||
|
var renderEndMs = Math.min(program.EndDateLocal.getTime(), endMs);
|
||||||
|
var endPercent = (renderEndMs - renderStartMs) / msPerDay;
|
||||||
|
endPercent *= 100;
|
||||||
|
|
||||||
|
var cssClass = "programCell clearButton itemAction";
|
||||||
|
var addAccent = true;
|
||||||
|
|
||||||
|
if (program.IsKids) {
|
||||||
|
cssClass += " childProgramInfo";
|
||||||
|
} else if (program.IsSports) {
|
||||||
|
cssClass += " sportsProgramInfo";
|
||||||
|
} else if (program.IsNews) {
|
||||||
|
cssClass += " newsProgramInfo";
|
||||||
|
} else if (program.IsMovie) {
|
||||||
|
cssClass += " movieProgramInfo";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cssClass += " plainProgramInfo";
|
||||||
|
addAccent = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<button data-action="link" data-isfolder="' + program.IsFolder + '" data-id="' + program.Id + '" data-serverid="' + program.ServerId + '" data-type="' + program.Type + '" class="' + cssClass + '" style="left:' + startPercent + '%;width:' + endPercent + '%;">';
|
||||||
|
|
||||||
|
var guideProgramNameClass = "guideProgramName";
|
||||||
|
|
||||||
|
html += '<div class="' + guideProgramNameClass + '">';
|
||||||
|
|
||||||
|
if (program.IsLive) {
|
||||||
|
html += '<span class="liveTvProgram">' + globalize.translate('core#AttributeLive') + ' </span>';
|
||||||
|
}
|
||||||
|
else if (program.IsPremiere) {
|
||||||
|
html += '<span class="premiereTvProgram">' + globalize.translate('core#AttributePremiere') + ' </span>';
|
||||||
|
}
|
||||||
|
else if (program.IsSeries && !program.IsRepeat) {
|
||||||
|
html += '<span class="newTvProgram">' + globalize.translate('core#AttributeNew') + ' </span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += program.Name;
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
if (program.IsHD) {
|
||||||
|
html += '<iron-icon icon="guide:hd"></iron-icon>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (program.SeriesTimerId) {
|
||||||
|
html += '<iron-icon class="seriesTimerIcon" icon="guide:fiber-smart-record"></iron-icon>';
|
||||||
|
}
|
||||||
|
else if (program.TimerId) {
|
||||||
|
html += '<iron-icon class="timerIcon" icon="guide:fiber-manual-record"></iron-icon>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addAccent) {
|
||||||
|
html += '<div class="programAccent"></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '</button>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderPrograms(context, date, channels, programs) {
|
||||||
|
|
||||||
|
var html = [];
|
||||||
|
|
||||||
|
for (var i = 0, length = channels.length; i < length; i++) {
|
||||||
|
|
||||||
|
html.push(getChannelProgramsHtml(context, date, channels[i], programs));
|
||||||
|
}
|
||||||
|
|
||||||
|
var programGrid = context.querySelector('.programGrid');
|
||||||
|
programGrid.innerHTML = html.join('');
|
||||||
|
|
||||||
|
programGrid.scrollTop = 0;
|
||||||
|
programGrid.scrollLeft = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderChannelHeaders(context, channels, apiClient) {
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
for (var i = 0, length = channels.length; i < length; i++) {
|
||||||
|
|
||||||
|
var channel = channels[i];
|
||||||
|
var hasChannelImage = channel.ImageTags.Primary;
|
||||||
|
var dataSrc = '';
|
||||||
|
if (hasChannelImage) {
|
||||||
|
|
||||||
|
var url = apiClient.getScaledImageUrl(channel.Id, {
|
||||||
|
maxHeight: 200,
|
||||||
|
tag: channel.ImageTags.Primary,
|
||||||
|
type: "Primary"
|
||||||
|
});
|
||||||
|
|
||||||
|
dataSrc = ' data-src="' + url + '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<button type="button" class="channelHeaderCell clearButton itemAction lazy"' + dataSrc + ' data-action="link" data-isfolder="' + channel.IsFolder + '" data-id="' + channel.Id + '" data-serverid="' + channel.ServerId + '" data-type="' + channel.Type + '">';
|
||||||
|
|
||||||
|
var cssClass = hasChannelImage ? 'guideChannelInfo guideChannelInfoWithImage' : 'guideChannelInfo';
|
||||||
|
|
||||||
|
html += '<div class="' + cssClass + '"><div class="guideChannelName">' + channel.Number + '</div></div>';
|
||||||
|
|
||||||
|
html += '</button>';
|
||||||
|
}
|
||||||
|
|
||||||
|
var channelList = context.querySelector('.channelList');
|
||||||
|
channelList.innerHTML = html;
|
||||||
|
imageLoader.lazyChildren(channelList);
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderGuide(context, date, channels, programs, apiClient) {
|
||||||
|
|
||||||
|
//var list = [];
|
||||||
|
//channels.forEach(function(i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels.forEach(function (i) {
|
||||||
|
// list.push(i);
|
||||||
|
//});
|
||||||
|
//channels = list;
|
||||||
|
renderChannelHeaders(context, channels, apiClient);
|
||||||
|
|
||||||
|
var startDate = date;
|
||||||
|
var endDate = new Date(startDate.getTime() + msPerDay);
|
||||||
|
context.querySelector('.timeslotHeaders').innerHTML = getTimeslotHeadersHtml(startDate, endDate);
|
||||||
|
items = {};
|
||||||
|
renderPrograms(context, date, channels, programs);
|
||||||
|
|
||||||
|
if (layoutManager.tv) {
|
||||||
|
focusManager.autoFocus(context.querySelector('.programGrid'), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function nativeScrollTo(container, pos, horizontal) {
|
||||||
|
|
||||||
|
if (container.scrollTo) {
|
||||||
|
if (horizontal) {
|
||||||
|
container.scrollTo(pos, 0);
|
||||||
|
} else {
|
||||||
|
container.scrollTo(0, pos);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (horizontal) {
|
||||||
|
container.scrollLeft = Math.round(pos);
|
||||||
|
} else {
|
||||||
|
container.scrollTop = Math.round(pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var lastGridScroll = 0;
|
||||||
|
var lastHeaderScroll = 0;
|
||||||
|
function onProgramGridScroll(context, elem, timeslotHeaders) {
|
||||||
|
|
||||||
|
if ((new Date().getTime() - lastHeaderScroll) >= 1000) {
|
||||||
|
lastGridScroll = new Date().getTime();
|
||||||
|
nativeScrollTo(timeslotHeaders, elem.scrollLeft, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTimeslotHeadersScroll(context, elem, programGrid) {
|
||||||
|
|
||||||
|
if ((new Date().getTime() - lastGridScroll) >= 1000) {
|
||||||
|
lastHeaderScroll = new Date().getTime();
|
||||||
|
nativeScrollTo(programGrid, elem.scrollLeft, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getFutureDateText(date) {
|
||||||
|
|
||||||
|
var weekday = [];
|
||||||
|
weekday[0] = globalize.translate('core#OptionSundayShort');
|
||||||
|
weekday[1] = globalize.translate('core#OptionMondayShort');
|
||||||
|
weekday[2] = globalize.translate('core#OptionTuesdayShort');
|
||||||
|
weekday[3] = globalize.translate('core#OptionWednesdayShort');
|
||||||
|
weekday[4] = globalize.translate('core#OptionThursdayShort');
|
||||||
|
weekday[5] = globalize.translate('core#OptionFridayShort');
|
||||||
|
weekday[6] = globalize.translate('core#OptionSaturdayShort');
|
||||||
|
|
||||||
|
var day = weekday[date.getDay()];
|
||||||
|
date = date.toLocaleDateString();
|
||||||
|
|
||||||
|
if (date.toLowerCase().indexOf(day.toLowerCase()) == -1) {
|
||||||
|
return day + " " + date;
|
||||||
|
}
|
||||||
|
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeDate(page, date) {
|
||||||
|
|
||||||
|
var newStartDate = normalizeDateToTimeslot(date);
|
||||||
|
currentDate = newStartDate;
|
||||||
|
|
||||||
|
reloadGuide(page, newStartDate);
|
||||||
|
|
||||||
|
var text = getFutureDateText(date);
|
||||||
|
text = '<span class="guideCurrentDay">' + text.replace(' ', ' </span>');
|
||||||
|
page.querySelector('.btnSelectDate').innerHTML = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dateOptions = [];
|
||||||
|
|
||||||
|
function setDateRange(page, guideInfo) {
|
||||||
|
|
||||||
|
var today = new Date();
|
||||||
|
today.setHours(today.getHours(), 0, 0, 0);
|
||||||
|
|
||||||
|
var start = datetime.parseISO8601Date(guideInfo.StartDate, { toLocal: true });
|
||||||
|
var end = datetime.parseISO8601Date(guideInfo.EndDate, { toLocal: true });
|
||||||
|
|
||||||
|
start.setHours(0, 0, 0, 0);
|
||||||
|
end.setHours(0, 0, 0, 0);
|
||||||
|
|
||||||
|
if (start.getTime() >= end.getTime()) {
|
||||||
|
end.setDate(start.getDate() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
start = new Date(Math.max(today, start));
|
||||||
|
|
||||||
|
dateOptions = [];
|
||||||
|
|
||||||
|
while (start <= end) {
|
||||||
|
|
||||||
|
dateOptions.push({
|
||||||
|
name: getFutureDateText(start),
|
||||||
|
id: start.getTime()
|
||||||
|
});
|
||||||
|
|
||||||
|
start.setDate(start.getDate() + 1);
|
||||||
|
start.setHours(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
var date = new Date();
|
||||||
|
|
||||||
|
if (currentDate) {
|
||||||
|
date.setTime(currentDate.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
changeDate(page, date);
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadPage(page) {
|
||||||
|
|
||||||
|
showLoading();
|
||||||
|
|
||||||
|
var apiClient = connectionManager.currentApiClient();
|
||||||
|
|
||||||
|
apiClient.getLiveTvGuideInfo().then(function (guideInfo) {
|
||||||
|
|
||||||
|
setDateRange(page, guideInfo);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectDate(page) {
|
||||||
|
|
||||||
|
require(['actionsheet'], function (actionsheet) {
|
||||||
|
|
||||||
|
actionsheet.show({
|
||||||
|
items: dateOptions,
|
||||||
|
title: globalize.translate('core#HeaderSelectDate'),
|
||||||
|
callback: function (id) {
|
||||||
|
|
||||||
|
var date = new Date();
|
||||||
|
date.setTime(parseInt(id));
|
||||||
|
changeDate(page, date);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function createVerticalScroller(view, pageInstance) {
|
||||||
|
|
||||||
|
if (layoutManager.tv) {
|
||||||
|
scrollHelper.centerFocus.on(view.querySelector('.smoothScrollY'), false);
|
||||||
|
|
||||||
|
var programGrid = view.querySelector('.programGrid');
|
||||||
|
|
||||||
|
scrollHelper.centerFocus.on(programGrid, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function parentWithClass(elem, className) {
|
||||||
|
|
||||||
|
while (!elem.classList || !elem.classList.contains(className)) {
|
||||||
|
elem = elem.parentNode;
|
||||||
|
|
||||||
|
if (!elem) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
var selectedMediaInfoTimeout;
|
||||||
|
var focusedElement;
|
||||||
|
function onProgramGridFocus(e) {
|
||||||
|
|
||||||
|
var programCell = parentWithClass(e.target, 'programCell');
|
||||||
|
|
||||||
|
if (!programCell) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
focusedElement = e.target;
|
||||||
|
if (selectedMediaInfoTimeout) {
|
||||||
|
clearTimeout(selectedMediaInfoTimeout);
|
||||||
|
}
|
||||||
|
selectedMediaInfoTimeout = setTimeout(onSelectedMediaInfoTimeout, 700);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSelectedMediaInfoTimeout() {
|
||||||
|
var focused = focusedElement
|
||||||
|
if (focused && document.activeElement == focused) {
|
||||||
|
var id = focused.getAttribute('data-id');
|
||||||
|
var item = items[id];
|
||||||
|
|
||||||
|
if (item) {
|
||||||
|
events.trigger(self, 'focus', [
|
||||||
|
{
|
||||||
|
item: item
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', baseUrl + '/tvguide.template.html', true);
|
||||||
|
|
||||||
|
xhr.onload = function (e) {
|
||||||
|
|
||||||
|
var template = this.response;
|
||||||
|
var context = options.element;
|
||||||
|
context.innerHTML = globalize.translateDocument(template, 'core');
|
||||||
|
|
||||||
|
var programGrid = context.querySelector('.programGrid');
|
||||||
|
var timeslotHeaders = context.querySelector('.timeslotHeaders');
|
||||||
|
|
||||||
|
programGrid.addEventListener('focus', onProgramGridFocus, true);
|
||||||
|
programGrid.addEventListener('scroll', function () {
|
||||||
|
|
||||||
|
onProgramGridScroll(context, this, timeslotHeaders);
|
||||||
|
});
|
||||||
|
|
||||||
|
timeslotHeaders.addEventListener('scroll', function () {
|
||||||
|
onTimeslotHeadersScroll(context, this, programGrid);
|
||||||
|
});
|
||||||
|
|
||||||
|
context.querySelector('.btnSelectDate').addEventListener('click', function () {
|
||||||
|
selectDate(context);
|
||||||
|
});
|
||||||
|
|
||||||
|
context.querySelector('.btnUnlockGuide').addEventListener('click', function () {
|
||||||
|
reloadPage(context);
|
||||||
|
});
|
||||||
|
|
||||||
|
context.classList.add('tvguide');
|
||||||
|
|
||||||
|
createVerticalScroller(context, self);
|
||||||
|
itemShortcuts.on(context);
|
||||||
|
|
||||||
|
events.trigger(self, 'load');
|
||||||
|
|
||||||
|
self.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
};
|
||||||
|
|
||||||
|
Guide.setBaseUrl = function (url) {
|
||||||
|
baseUrl = url;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Guide;
|
||||||
|
});
|
42
dashboard-ui/bower_components/emby-webcomponents/guide/icons.html
vendored
Normal file
42
dashboard-ui/bower_components/emby-webcomponents/guide/icons.html
vendored
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
||||||
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||||||
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||||||
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
||||||
|
Code distributed by Google as part of the polymer project is also
|
||||||
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
||||||
|
-->
|
||||||
|
<!--
|
||||||
|
`iron-icons` is a utility import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set.
|
||||||
|
|
||||||
|
The `iron-icons` directory also includes imports for additional icon sets that can be loaded into your project.
|
||||||
|
|
||||||
|
Example loading icon set:
|
||||||
|
|
||||||
|
<link rel="import" href="../iron-icons/maps-icons.html">
|
||||||
|
|
||||||
|
To use an icon from one of these sets, first prefix your `iron-icon` with the icon set name, followed by a colon, ":", and then the icon id.
|
||||||
|
|
||||||
|
Example using the directions-bus icon from the maps icon set:
|
||||||
|
|
||||||
|
<iron-icon icon="maps:directions-bus"></iron-icon>
|
||||||
|
|
||||||
|
|
||||||
|
See [iron-icon](#iron-icon) for more information about working with icons.
|
||||||
|
|
||||||
|
See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for more information about how to create a custom iconset.
|
||||||
|
|
||||||
|
@group Iron Elements
|
||||||
|
@element iron-icons
|
||||||
|
@demo demo/index.html
|
||||||
|
-->
|
||||||
|
|
||||||
|
<iron-iconset-svg name="guide" size="24">
|
||||||
|
<svg>
|
||||||
|
<defs>
|
||||||
|
<g id="fiber-manual-record"><circle cx="12" cy="12" r="8" /></g>
|
||||||
|
<g id="fiber-smart-record"><g><circle cx="9" cy="12" r="8" /><path d="M17 4.26v2.09c2.33.82 4 3.04 4 5.65s-1.67 4.83-4 5.65v2.09c3.45-.89 6-4.01 6-7.74s-2.55-6.85-6-7.74z" /></g></g>
|
||||||
|
<g id="hd"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 12H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm2-6h4c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1h-4V9zm1.5 4.5h2v-3h-2v3z" /></g>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
</iron-iconset-svg>
|
22
dashboard-ui/bower_components/emby-webcomponents/guide/tvguide.template.html
vendored
Normal file
22
dashboard-ui/bower_components/emby-webcomponents/guide/tvguide.template.html
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<div class="tvGuideHeader">
|
||||||
|
<div class="channelTimeslotHeader">
|
||||||
|
<button class="btnSelectDate clearButton" style="display:block;"></button>
|
||||||
|
</div>
|
||||||
|
<div class="timeslotHeaders smoothScrollX" style="scroll-behavior: auto;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="smoothScrollY guideVerticalScroller" style="flex-grow: 1;">
|
||||||
|
|
||||||
|
<div class="programContainer">
|
||||||
|
<div class="channelList"></div>
|
||||||
|
|
||||||
|
<div class="programGridContainer programGrid smoothScrollX" style="white-space: nowrap;">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="guideRequiresUnlock readOnlyContent hide" style="margin:1em auto;text-align:center;padding:1em;flex-shrink:0;">
|
||||||
|
<p class="unlockText"></p>
|
||||||
|
<paper-button raised class="secondary block btnUnlockGuide"><iron-icon icon="check"></iron-icon><span>${ButtonUnlockGuide}</span></paper-button>
|
||||||
|
</div>
|
|
@ -271,17 +271,17 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
|
||||||
var apiClient = connectionManager.currentApiClient();
|
var apiClient = connectionManager.currentApiClient();
|
||||||
var pathname = ctx.pathname.toLowerCase();
|
var pathname = ctx.pathname.toLowerCase();
|
||||||
|
|
||||||
console.log('Emby.Page - processing path request ' + pathname);
|
console.log('embyRouter - processing path request ' + pathname);
|
||||||
|
|
||||||
if ((!apiClient || !apiClient.isLoggedIn()) && !route.anonymous) {
|
if ((!apiClient || !apiClient.isLoggedIn()) && !route.anonymous) {
|
||||||
console.log('Emby.Page - route does not allow anonymous access, redirecting to login');
|
console.log('embyRouter - route does not allow anonymous access, redirecting to login');
|
||||||
beginConnectionWizard();
|
beginConnectionWizard();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apiClient && apiClient.isLoggedIn()) {
|
if (apiClient && apiClient.isLoggedIn()) {
|
||||||
|
|
||||||
console.log('Emby.Page - user is authenticated');
|
console.log('embyRouter - user is authenticated');
|
||||||
|
|
||||||
var isCurrentRouteStartup = currentRouteInfo ? currentRouteInfo.route.startup : true;
|
var isCurrentRouteStartup = currentRouteInfo ? currentRouteInfo.route.startup : true;
|
||||||
if (ctx.isBack && (route.isDefaultRoute || route.startup) && !isCurrentRouteStartup) {
|
if (ctx.isBack && (route.isDefaultRoute || route.startup) && !isCurrentRouteStartup) {
|
||||||
|
@ -289,7 +289,7 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (route.isDefaultRoute) {
|
else if (route.isDefaultRoute) {
|
||||||
console.log('Emby.Page - loading skin home page');
|
console.log('embyRouter - loading skin home page');
|
||||||
skinManager.loadUserSkin();
|
skinManager.loadUserSkin();
|
||||||
return;
|
return;
|
||||||
} else if (route.roles) {
|
} else if (route.roles) {
|
||||||
|
@ -303,7 +303,7 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Emby.Page - proceeding to ' + pathname);
|
console.log('embyRouter - proceeding to ' + pathname);
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,8 +484,10 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
|
||||||
function showItem(item) {
|
function showItem(item) {
|
||||||
|
|
||||||
if (typeof (item) === 'string') {
|
if (typeof (item) === 'string') {
|
||||||
Emby.Models.item(item).then(showItem);
|
require(['connectionManager'], function (connectionManager) {
|
||||||
|
var apiClient = connectionManager.currentApiClient();
|
||||||
|
apiClient.getItem(apiClient.getCurrentUserId(), item).then(showItem);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
skinManager.getCurrentSkin().showItem(item);
|
skinManager.getCurrentSkin().showItem(item);
|
||||||
}
|
}
|
||||||
|
|
168
dashboard-ui/bower_components/emby-webcomponents/shortcuts.js
vendored
Normal file
168
dashboard-ui/bower_components/emby-webcomponents/shortcuts.js
vendored
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter'], function (playbackManager, inputManager, connectionManager, embyRouter) {
|
||||||
|
|
||||||
|
function playAllFromHere(card, serverId) {
|
||||||
|
var cards = card.parentNode.querySelectorAll('.itemAction[data-id]');
|
||||||
|
var ids = [];
|
||||||
|
|
||||||
|
var foundCard = false;
|
||||||
|
for (var i = 0, length = cards.length; i < length; i++) {
|
||||||
|
if (cards[i] == card) {
|
||||||
|
foundCard = true;
|
||||||
|
}
|
||||||
|
if (foundCard) {
|
||||||
|
ids.push(cards[i].getAttribute('data-id'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playbackManager.play({
|
||||||
|
ids: ids,
|
||||||
|
serverId: serverId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function showSlideshow(startItemId, serverId) {
|
||||||
|
|
||||||
|
var apiClient = connectionManager.getApiClient(serverId);
|
||||||
|
var userId = apiClient.getCurrentUserId();
|
||||||
|
|
||||||
|
return apiClient.getItem(userId, startItemId).then(function (item) {
|
||||||
|
|
||||||
|
return apiClient.getItems(userId, {
|
||||||
|
|
||||||
|
MediaTypes: 'Photo',
|
||||||
|
Filters: 'IsNotFolder',
|
||||||
|
ParentId: item.ParentId
|
||||||
|
|
||||||
|
}).then(function (result) {
|
||||||
|
|
||||||
|
var items = result.Items;
|
||||||
|
|
||||||
|
var index = items.map(function (i) {
|
||||||
|
return i.Id;
|
||||||
|
|
||||||
|
}).indexOf(startItemId);
|
||||||
|
|
||||||
|
if (index == -1) {
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
require(['slideshow'], function (slideshow) {
|
||||||
|
|
||||||
|
var newSlideShow = new slideshow({
|
||||||
|
showTitle: false,
|
||||||
|
cover: false,
|
||||||
|
items: items,
|
||||||
|
startIndex: index,
|
||||||
|
interval: 8000,
|
||||||
|
interactive: true
|
||||||
|
});
|
||||||
|
|
||||||
|
newSlideShow.show();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function showItem(options) {
|
||||||
|
|
||||||
|
if (options.Type == 'Photo') {
|
||||||
|
|
||||||
|
showSlideshow(options.Id, options.ServerId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
embyRouter.showItem(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
function executeAction(card, action) {
|
||||||
|
var id = card.getAttribute('data-id');
|
||||||
|
var serverId = card.getAttribute('data-serverid');
|
||||||
|
var type = card.getAttribute('data-type');
|
||||||
|
var isfolder = card.getAttribute('data-isfolder') == 'true';
|
||||||
|
|
||||||
|
if (action == 'link') {
|
||||||
|
showItem({
|
||||||
|
Id: id,
|
||||||
|
Type: type,
|
||||||
|
IsFolder: isfolder,
|
||||||
|
ServerId: serverId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (action == 'instantmix') {
|
||||||
|
playbackManager.instantMix(id, serverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (action == 'play') {
|
||||||
|
|
||||||
|
var startPositionTicks = parseInt(card.getAttribute('data-startpositionticks') || '0');
|
||||||
|
|
||||||
|
playbackManager.play({
|
||||||
|
ids: [id],
|
||||||
|
startPositionTicks: startPositionTicks,
|
||||||
|
serverId: serverId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (action == 'playallfromhere') {
|
||||||
|
playAllFromHere(card, serverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (action == 'setplaylistindex') {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onClick(e) {
|
||||||
|
var card = parentWithClass(e.target, 'itemAction');
|
||||||
|
|
||||||
|
if (card) {
|
||||||
|
var action = card.getAttribute('data-action');
|
||||||
|
|
||||||
|
if (action) {
|
||||||
|
executeAction(card, action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function parentWithClass(elem, className) {
|
||||||
|
|
||||||
|
while (!elem.classList || !elem.classList.contains(className)) {
|
||||||
|
elem = elem.parentNode;
|
||||||
|
|
||||||
|
if (!elem) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onCommand(e) {
|
||||||
|
var cmd = e.detail.command;
|
||||||
|
|
||||||
|
if (cmd == 'play') {
|
||||||
|
var card = parentWithClass(e.target, 'itemAction');
|
||||||
|
|
||||||
|
if (card) {
|
||||||
|
executeAction(card, cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function on(context) {
|
||||||
|
context.addEventListener('click', onClick);
|
||||||
|
inputManager.on(context, onCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
function off(context) {
|
||||||
|
context.removeEventListener('click', onClick);
|
||||||
|
inputManager.off(context, onCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
on: on,
|
||||||
|
off: off
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "iron-overlay-behavior",
|
"name": "iron-overlay-behavior",
|
||||||
"version": "1.6.3",
|
"version": "1.6.4",
|
||||||
"license": "http://polymer.github.io/LICENSE.txt",
|
"license": "http://polymer.github.io/LICENSE.txt",
|
||||||
"description": "Provides a behavior for making an element an overlay",
|
"description": "Provides a behavior for making an element an overlay",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
@ -35,11 +35,11 @@
|
||||||
},
|
},
|
||||||
"ignore": [],
|
"ignore": [],
|
||||||
"homepage": "https://github.com/polymerelements/iron-overlay-behavior",
|
"homepage": "https://github.com/polymerelements/iron-overlay-behavior",
|
||||||
"_release": "1.6.3",
|
"_release": "1.6.4",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "v1.6.3",
|
"tag": "v1.6.4",
|
||||||
"commit": "5b331ebaefe3214937b94ba19769154efee46244"
|
"commit": "983654132fd8281c3da07d79eea8a0f5b28e7a4f"
|
||||||
},
|
},
|
||||||
"_source": "git://github.com/polymerelements/iron-overlay-behavior.git",
|
"_source": "git://github.com/polymerelements/iron-overlay-behavior.git",
|
||||||
"_target": "^1.0.0",
|
"_target": "^1.0.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "iron-overlay-behavior",
|
"name": "iron-overlay-behavior",
|
||||||
"version": "1.6.3",
|
"version": "1.6.4",
|
||||||
"license": "http://polymer.github.io/LICENSE.txt",
|
"license": "http://polymer.github.io/LICENSE.txt",
|
||||||
"description": "Provides a behavior for making an element an overlay",
|
"description": "Provides a behavior for making an element an overlay",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|
|
@ -113,7 +113,9 @@ context. You should place this element as a child of `<body>` whenever possible.
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the reason this dialog was last closed.
|
* Contains the reason(s) this overlay was last closed (see `iron-overlay-closed`).
|
||||||
|
* `IronOverlayBehavior` provides the `canceled` reason; implementers of the
|
||||||
|
* behavior can provide other reasons in addition to `canceled`.
|
||||||
*/
|
*/
|
||||||
closingReason: {
|
closingReason: {
|
||||||
// was a getter before, but needs to be a property so other
|
// was a getter before, but needs to be a property so other
|
||||||
|
@ -322,16 +324,23 @@ context. You should place this element as a child of `<body>` whenever possible.
|
||||||
|
|
||||||
this._manager.addOrRemoveOverlay(this);
|
this._manager.addOrRemoveOverlay(this);
|
||||||
|
|
||||||
this.__isAnimating = true;
|
|
||||||
|
|
||||||
// requestAnimationFrame for non-blocking rendering
|
|
||||||
if (this.__openChangedAsync) {
|
if (this.__openChangedAsync) {
|
||||||
window.cancelAnimationFrame(this.__openChangedAsync);
|
window.cancelAnimationFrame(this.__openChangedAsync);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Defer any animation-related code on attached
|
||||||
|
// (_openedChanged gets called again on attached).
|
||||||
|
if (!this.isAttached) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.__isAnimating = true;
|
||||||
|
|
||||||
if (this.opened) {
|
if (this.opened) {
|
||||||
if (this.withBackdrop) {
|
if (this.withBackdrop) {
|
||||||
this.backdropElement.prepare();
|
this.backdropElement.prepare();
|
||||||
}
|
}
|
||||||
|
// requestAnimationFrame for non-blocking rendering
|
||||||
this.__openChangedAsync = window.requestAnimationFrame(function() {
|
this.__openChangedAsync = window.requestAnimationFrame(function() {
|
||||||
this.__openChangedAsync = null;
|
this.__openChangedAsync = null;
|
||||||
this._prepareRenderOpened();
|
this._prepareRenderOpened();
|
||||||
|
@ -574,24 +583,26 @@ context. You should place this element as a child of `<body>` whenever possible.
|
||||||
Polymer.IronOverlayBehavior = [Polymer.IronFitBehavior, Polymer.IronResizableBehavior, Polymer.IronOverlayBehaviorImpl];
|
Polymer.IronOverlayBehavior = [Polymer.IronFitBehavior, Polymer.IronResizableBehavior, Polymer.IronOverlayBehaviorImpl];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fired after the `iron-overlay` opens.
|
* Fired after the overlay opens.
|
||||||
* @event iron-overlay-opened
|
* @event iron-overlay-opened
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fired when the `iron-overlay` is canceled, but before it is closed.
|
* Fired when the overlay is canceled, but before it is closed.
|
||||||
* Cancel the event to prevent the `iron-overlay` from closing.
|
* @event iron-overlay-canceled
|
||||||
* @event iron-overlay-canceled
|
* @param {Event} event The closing of the overlay can be prevented
|
||||||
* @param {Event} event The closing of the `iron-overlay` can be prevented
|
* by calling `event.preventDefault()`.
|
||||||
* by calling `event.preventDefault()`. The `event.detail` is the original event that originated
|
* @param {Event} event.detail It is the original event that originated
|
||||||
* the canceling (e.g. ESC keyboard event or click event outside the `iron-overlay`).
|
* the canceling (e.g. ESC keyboard event or click event outside the overlay).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fired after the `iron-overlay` closes.
|
* Fired after the overlay closes.
|
||||||
* @event iron-overlay-closed
|
* @event iron-overlay-closed
|
||||||
* @param {{canceled: (boolean|undefined)}} closingReason Contains `canceled` (whether the overlay was canceled).
|
* @param {Event} event The event
|
||||||
*/
|
* @param {Object} event.detail It is the `closingReason` property (contains
|
||||||
|
* `canceled`, whether the overlay was canceled).
|
||||||
|
*/
|
||||||
|
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -339,6 +339,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
var overlay = /** @type {?} */ (this.currentOverlay());
|
var overlay = /** @type {?} */ (this.currentOverlay());
|
||||||
// Check if clicked outside of top overlay.
|
// Check if clicked outside of top overlay.
|
||||||
if (overlay && this._overlayInPath(Polymer.dom(event).path) !== overlay) {
|
if (overlay && this._overlayInPath(Polymer.dom(event).path) !== overlay) {
|
||||||
|
if (overlay.withBackdrop) {
|
||||||
|
// There's no need to stop the propagation as the backdrop element
|
||||||
|
// already got this mousedown/touchstart event. Calling preventDefault
|
||||||
|
// on this event ensures that click/tap won't be triggered at all.
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
overlay._onCaptureClick(event);
|
overlay._onCaptureClick(event);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -155,6 +155,21 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
assert.equal(getComputedStyle(overlay).display, 'none', 'overlay starts hidden');
|
assert.equal(getComputedStyle(overlay).display, 'none', 'overlay starts hidden');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('_renderOpened called only after is attached', function(done) {
|
||||||
|
var overlay = document.createElement('test-overlay');
|
||||||
|
// The overlay is ready at this point, but not yet attached.
|
||||||
|
var spy = sinon.spy(overlay, '_renderOpened');
|
||||||
|
// This triggers _openedChanged.
|
||||||
|
overlay.opened = true;
|
||||||
|
// Even if not attached yet, overlay should be the current overlay!
|
||||||
|
assert.equal(overlay, overlay._manager.currentOverlay(), 'currentOverlay ok');
|
||||||
|
// Wait long enough for requestAnimationFrame callback.
|
||||||
|
overlay.async(function() {
|
||||||
|
assert.isFalse(spy.called, '_renderOpened not called');
|
||||||
|
done();
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
|
||||||
test('overlay open/close events', function(done) {
|
test('overlay open/close events', function(done) {
|
||||||
var nevents = 0;
|
var nevents = 0;
|
||||||
|
|
||||||
|
@ -751,6 +766,27 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('withBackdrop = true prevents click outside event', function(done) {
|
||||||
|
runAfterOpen(overlay, function() {
|
||||||
|
overlay.addEventListener('iron-overlay-canceled', function(event) {
|
||||||
|
assert.isTrue(event.detail.defaultPrevented, 'click event prevented');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
MockInteractions.tap(document.body);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('withBackdrop = false does not prevent click outside event', function(done) {
|
||||||
|
overlay.withBackdrop = false;
|
||||||
|
runAfterOpen(overlay, function() {
|
||||||
|
overlay.addEventListener('iron-overlay-canceled', function(event) {
|
||||||
|
assert.isFalse(event.detail.defaultPrevented, 'click event not prevented');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
MockInteractions.tap(document.body);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
suite('multiple overlays', function() {
|
suite('multiple overlays', function() {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "iron-validatable-behavior",
|
"name": "iron-validatable-behavior",
|
||||||
"version": "1.0.5",
|
"version": "1.1.0",
|
||||||
"description": "Provides a behavior for an element that validates user input",
|
"description": "Provides a behavior for an element that validates user input",
|
||||||
"authors": "The Polymer Authors",
|
"authors": "The Polymer Authors",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
@ -9,9 +9,7 @@
|
||||||
"iron",
|
"iron",
|
||||||
"behavior"
|
"behavior"
|
||||||
],
|
],
|
||||||
"main": [
|
"main": "iron-validatable-behavior.html",
|
||||||
"iron-validatable-behavior.html"
|
|
||||||
],
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -29,14 +27,14 @@
|
||||||
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
|
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
|
||||||
"iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
|
"iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
|
||||||
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
|
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
|
||||||
"web-component-tester": "*",
|
"web-component-tester": "^4.0.0",
|
||||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||||
},
|
},
|
||||||
"_release": "1.0.5",
|
"_release": "1.1.0",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "v1.0.5",
|
"tag": "v1.1.0",
|
||||||
"commit": "c1334b835892b3d7a329a8e6b8741d4be3a8d99c"
|
"commit": "01ed585b28d8ab41367518f9aebd8442b9166bfe"
|
||||||
},
|
},
|
||||||
"_source": "git://github.com/PolymerElements/iron-validatable-behavior.git",
|
"_source": "git://github.com/PolymerElements/iron-validatable-behavior.git",
|
||||||
"_target": "^1.0.0",
|
"_target": "^1.0.0",
|
||||||
|
|
33
dashboard-ui/bower_components/iron-validatable-behavior/.github/ISSUE_TEMPLATE.md
vendored
Normal file
33
dashboard-ui/bower_components/iron-validatable-behavior/.github/ISSUE_TEMPLATE.md
vendored
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<!-- Instructions: https://github.com/PolymerElements/iron-validatable-behavior/CONTRIBUTING.md#filing-issues -->
|
||||||
|
### Description
|
||||||
|
<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
|
||||||
|
|
||||||
|
### Expected outcome
|
||||||
|
|
||||||
|
<!-- Example: The page stays the same color. -->
|
||||||
|
|
||||||
|
### Actual outcome
|
||||||
|
|
||||||
|
<!-- Example: The page turns pink. -->
|
||||||
|
|
||||||
|
### Live Demo
|
||||||
|
<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
<!-- Example
|
||||||
|
1. Put a `paper-foo` element in the page.
|
||||||
|
2. Open the page in a web browser.
|
||||||
|
3. Click the `paper-foo` element.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Browsers Affected
|
||||||
|
<!-- Check all that apply -->
|
||||||
|
- [ ] Chrome
|
||||||
|
- [ ] Firefox
|
||||||
|
- [ ] Safari 9
|
||||||
|
- [ ] Safari 8
|
||||||
|
- [ ] Safari 7
|
||||||
|
- [ ] Edge
|
||||||
|
- [ ] IE 11
|
||||||
|
- [ ] IE 10
|
23
dashboard-ui/bower_components/iron-validatable-behavior/.travis.yml
vendored
Normal file
23
dashboard-ui/bower_components/iron-validatable-behavior/.travis.yml
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
language: node_js
|
||||||
|
sudo: required
|
||||||
|
before_script:
|
||||||
|
- npm install -g bower polylint web-component-tester
|
||||||
|
- bower install
|
||||||
|
- polylint
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- secure: AsXK1s4viLG4eumYMxE0bJasVbWrpQ7JaUboMoK4Nzhmunx01udikRRAJifl3nkcc4m2GpzCb4Kmtyh5hxyLA05uE416VzmfDq3dGJKsNAQXbSescSVik63llq4HXAdOvek2eSo5wOVGNHslscIed5K2bJajXfPMIODJyBxo8aE=
|
||||||
|
- secure: V/H/0+/R8owujbwe3IDbND8v5zs4pWTe0hRCLefjgR9ci2lmNNP54Zb97nOZnLQqynafDSyrngL3+RP5F0fk1dC++cpuxQNKoYPwDFPZ41LAxp5dgtyxkb+J4eWtq0UilWF5thVt4oB1OWwPGtxMmSl+imXXKtq4a4Ov++t2Apo=
|
||||||
|
node_js: stable
|
||||||
|
addons:
|
||||||
|
firefox: latest
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- google-chrome
|
||||||
|
packages:
|
||||||
|
- google-chrome-stable
|
||||||
|
sauce_connect: true
|
||||||
|
script:
|
||||||
|
- xvfb-run wct
|
||||||
|
- "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi"
|
||||||
|
dist: trusty
|
77
dashboard-ui/bower_components/iron-validatable-behavior/CONTRIBUTING.md
vendored
Normal file
77
dashboard-ui/bower_components/iron-validatable-behavior/CONTRIBUTING.md
vendored
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This file is autogenerated based on
|
||||||
|
https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
|
||||||
|
|
||||||
|
If you edit that file, it will get updated everywhere else.
|
||||||
|
If you edit this file, your changes will get overridden :)
|
||||||
|
|
||||||
|
You can however override the jsbin link with one that's customized to this
|
||||||
|
specific element:
|
||||||
|
|
||||||
|
jsbin=https://jsbin.com/cagaye/edit?html,output
|
||||||
|
-->
|
||||||
|
# Polymer Elements
|
||||||
|
## Guide for Contributors
|
||||||
|
|
||||||
|
Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
|
||||||
|
|
||||||
|
### Filing Issues
|
||||||
|
|
||||||
|
**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
|
||||||
|
|
||||||
|
1. **Who will use the feature?** _“As someone filling out a form…”_
|
||||||
|
2. **When will they use the feature?** _“When I enter an invalid value…”_
|
||||||
|
3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
|
||||||
|
|
||||||
|
**If you are filing an issue to report a bug**, please provide:
|
||||||
|
|
||||||
|
1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
The `paper-foo` element causes the page to turn pink when clicked.
|
||||||
|
|
||||||
|
## Expected outcome
|
||||||
|
|
||||||
|
The page stays the same color.
|
||||||
|
|
||||||
|
## Actual outcome
|
||||||
|
|
||||||
|
The page turns pink.
|
||||||
|
|
||||||
|
## Steps to reproduce
|
||||||
|
|
||||||
|
1. Put a `paper-foo` element in the page.
|
||||||
|
2. Open the page in a web browser.
|
||||||
|
3. Click the `paper-foo` element.
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
|
||||||
|
|
||||||
|
3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
|
||||||
|
|
||||||
|
### Submitting Pull Requests
|
||||||
|
|
||||||
|
**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
|
||||||
|
|
||||||
|
When submitting pull requests, please provide:
|
||||||
|
|
||||||
|
1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
(For a single issue)
|
||||||
|
Fixes #20
|
||||||
|
|
||||||
|
(For multiple issues)
|
||||||
|
Fixes #32, fixes #40
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **A succinct description of the design** used to fix any related issues. For example:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
|
||||||
|
|
||||||
|
If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "iron-validatable-behavior",
|
"name": "iron-validatable-behavior",
|
||||||
"version": "1.0.5",
|
"version": "1.1.0",
|
||||||
"description": "Provides a behavior for an element that validates user input",
|
"description": "Provides a behavior for an element that validates user input",
|
||||||
"authors": "The Polymer Authors",
|
"authors": "The Polymer Authors",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
@ -9,9 +9,7 @@
|
||||||
"iron",
|
"iron",
|
||||||
"behavior"
|
"behavior"
|
||||||
],
|
],
|
||||||
"main": [
|
"main": "iron-validatable-behavior.html",
|
||||||
"iron-validatable-behavior.html"
|
|
||||||
],
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -29,7 +27,7 @@
|
||||||
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
|
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
|
||||||
"iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
|
"iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
|
||||||
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
|
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
|
||||||
"web-component-tester": "*",
|
"web-component-tester": "^4.0.0",
|
||||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,10 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
<link rel="import" href="../iron-meta/iron-meta.html">
|
<link rel="import" href="../iron-meta/iron-meta.html">
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* Singleton IronMeta instance.
|
||||||
|
*/
|
||||||
|
Polymer.IronValidatableBehaviorMeta = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* `Use Polymer.IronValidatableBehavior` to implement an element that validates user input.
|
* `Use Polymer.IronValidatableBehavior` to implement an element that validates user input.
|
||||||
|
@ -41,14 +45,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
|
|
||||||
properties: {
|
properties: {
|
||||||
|
|
||||||
/**
|
|
||||||
* Namespace for this validator.
|
|
||||||
*/
|
|
||||||
validatorType: {
|
|
||||||
type: String,
|
|
||||||
value: 'validator'
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the validator to use.
|
* Name of the validator to use.
|
||||||
*/
|
*/
|
||||||
|
@ -66,22 +62,35 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
value: false
|
value: false
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This property is deprecated and should not be used. Use the global
|
||||||
|
* validator meta singleton, `Polymer.IronValidatableBehaviorMeta` instead.
|
||||||
|
*/
|
||||||
_validatorMeta: {
|
_validatorMeta: {
|
||||||
type: Object
|
type: Object
|
||||||
}
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Namespace for this validator. This property is deprecated and should
|
||||||
|
* not be used. For all intents and purposes, please consider it a
|
||||||
|
* read-only, config-time property.
|
||||||
|
*/
|
||||||
|
validatorType: {
|
||||||
|
type: String,
|
||||||
|
value: 'validator'
|
||||||
|
},
|
||||||
|
|
||||||
|
_validator: {
|
||||||
|
computed: '__computeValidator(validator)'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
observers: [
|
observers: [
|
||||||
'_invalidChanged(invalid)'
|
'_invalidChanged(invalid)'
|
||||||
],
|
],
|
||||||
|
|
||||||
get _validator() {
|
registered: function() {
|
||||||
return this._validatorMeta && this._validatorMeta.byKey(this.validator);
|
Polymer.IronValidatableBehaviorMeta = new Polymer.IronMeta({type: 'validator'});
|
||||||
},
|
|
||||||
|
|
||||||
ready: function() {
|
|
||||||
this._validatorMeta = new Polymer.IronMeta({type: this.validatorType});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_invalidChanged: function() {
|
_invalidChanged: function() {
|
||||||
|
@ -128,6 +137,11 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
return this._validator.validate(value);
|
return this._validator.validate(value);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
__computeValidator: function() {
|
||||||
|
return Polymer.IronValidatableBehaviorMeta &&
|
||||||
|
Polymer.IronValidatableBehaviorMeta.byKey(this.validator);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
30
dashboard-ui/bower_components/iron-validatable-behavior/test/cats-only.html
vendored
Normal file
30
dashboard-ui/bower_components/iron-validatable-behavior/test/cats-only.html
vendored
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<!--
|
||||||
|
@license
|
||||||
|
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
|
||||||
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||||||
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||||||
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
||||||
|
Code distributed by Google as part of the polymer project is also
|
||||||
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
||||||
|
-->
|
||||||
|
|
||||||
|
<link rel="import" href="../../polymer/polymer.html">
|
||||||
|
<link rel="import" href="../../iron-validator-behavior/iron-validator-behavior.html">
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
Polymer({
|
||||||
|
|
||||||
|
is: 'cats-only',
|
||||||
|
|
||||||
|
behaviors: [
|
||||||
|
Polymer.IronValidatorBehavior
|
||||||
|
],
|
||||||
|
|
||||||
|
validate: function(value) {
|
||||||
|
return value === 'cats';
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
30
dashboard-ui/bower_components/iron-validatable-behavior/test/dogs-only.html
vendored
Normal file
30
dashboard-ui/bower_components/iron-validatable-behavior/test/dogs-only.html
vendored
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<!--
|
||||||
|
@license
|
||||||
|
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
|
||||||
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||||||
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||||||
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
||||||
|
Code distributed by Google as part of the polymer project is also
|
||||||
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
||||||
|
-->
|
||||||
|
|
||||||
|
<link rel="import" href="../../polymer/polymer.html">
|
||||||
|
<link rel="import" href="../../iron-validator-behavior/iron-validator-behavior.html">
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
Polymer({
|
||||||
|
|
||||||
|
is: 'dogs-only',
|
||||||
|
|
||||||
|
behaviors: [
|
||||||
|
Polymer.IronValidatorBehavior
|
||||||
|
],
|
||||||
|
|
||||||
|
validate: function(value) {
|
||||||
|
return value === 'dogs';
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
|
@ -1,5 +1,4 @@
|
||||||
<!doctype html>
|
<!DOCTYPE html><!--
|
||||||
<!--
|
|
||||||
@license
|
@license
|
||||||
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
||||||
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||||||
|
@ -7,11 +6,9 @@ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||||||
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
||||||
Code distributed by Google as part of the polymer project is also
|
Code distributed by Google as part of the polymer project is also
|
||||||
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
||||||
-->
|
--><html><head>
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
|
|
||||||
<title>paper-validatable-behavior tests</title>
|
<title>iron-validatable-behavior tests</title>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
@ -23,13 +20,13 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
/* no tests */
|
/* no tests */
|
||||||
WCT.loadSuites([
|
WCT.loadSuites([
|
||||||
'iron-validatable-behavior.html'
|
'iron-validatable-behavior.html',
|
||||||
|
'iron-validatable-behavior.html?dom=shadow'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
</body></html>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<!--
|
<!--
|
||||||
|
@license
|
||||||
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
||||||
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||||||
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||||||
|
@ -23,6 +24,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
|
|
||||||
<link rel="import" href="../../test-fixture/test-fixture.html">
|
<link rel="import" href="../../test-fixture/test-fixture.html">
|
||||||
<link rel="import" href="test-validatable.html">
|
<link rel="import" href="test-validatable.html">
|
||||||
|
<link rel="import" href="cats-only.html">
|
||||||
|
<link rel="import" href="dogs-only.html">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -33,6 +36,14 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
</template>
|
</template>
|
||||||
</test-fixture>
|
</test-fixture>
|
||||||
|
|
||||||
|
<test-fixture id="validators">
|
||||||
|
<template>
|
||||||
|
<cats-only></cats-only>
|
||||||
|
<dogs-only></dogs-only>
|
||||||
|
<test-validatable></test-validatable>
|
||||||
|
</template>
|
||||||
|
</test-fixture>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
suite('basic', function() {
|
suite('basic', function() {
|
||||||
|
@ -51,6 +62,25 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
||||||
assert.isTrue(valid);
|
assert.isTrue(valid);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('changing the validator works', function() {
|
||||||
|
var node = fixture('validators');
|
||||||
|
var input = node[2];
|
||||||
|
|
||||||
|
// Initially there's no validator, so everything is valid.
|
||||||
|
assert.isTrue(input.validate(''));
|
||||||
|
assert.isTrue(input.validate('cats'));
|
||||||
|
|
||||||
|
// Only valid if the value is 'cats'.
|
||||||
|
input.validator = 'cats-only';
|
||||||
|
assert.isFalse(input.validate('ca'));
|
||||||
|
assert.isTrue(input.validate('cats'));
|
||||||
|
|
||||||
|
// Only valid if the value is 'dogs'.
|
||||||
|
input.validator = 'dogs-only';
|
||||||
|
assert.isFalse(input.validate('cats'));
|
||||||
|
assert.isTrue(input.validate('dogs'));
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<!--
|
<!--
|
||||||
|
@license
|
||||||
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
||||||
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||||||
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
"tag": "v1.0.11",
|
"tag": "v1.0.11",
|
||||||
"commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5"
|
"commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5"
|
||||||
},
|
},
|
||||||
"_source": "git://github.com/PolymerElements/paper-behaviors.git",
|
"_source": "git://github.com/polymerelements/paper-behaviors.git",
|
||||||
"_target": "^1.0.0",
|
"_target": "^1.0.0",
|
||||||
"_originalSource": "PolymerElements/paper-behaviors"
|
"_originalSource": "polymerelements/paper-behaviors"
|
||||||
}
|
}
|
|
@ -32,14 +32,14 @@
|
||||||
"iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
|
"iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
|
||||||
},
|
},
|
||||||
"ignore": [],
|
"ignore": [],
|
||||||
"homepage": "https://github.com/PolymerElements/paper-ripple",
|
"homepage": "https://github.com/polymerelements/paper-ripple",
|
||||||
"_release": "1.0.5",
|
"_release": "1.0.5",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "v1.0.5",
|
"tag": "v1.0.5",
|
||||||
"commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5"
|
"commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5"
|
||||||
},
|
},
|
||||||
"_source": "git://github.com/PolymerElements/paper-ripple.git",
|
"_source": "git://github.com/polymerelements/paper-ripple.git",
|
||||||
"_target": "^1.0.0",
|
"_target": "^1.0.0",
|
||||||
"_originalSource": "PolymerElements/paper-ripple"
|
"_originalSource": "polymerelements/paper-ripple"
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="cinemaModeConfigurationPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Cinema-Mode" data-require="scripts/cinemamodeconfiguration,paper-checkbox,paper-input">
|
<div id="cinemaModeConfigurationPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Cinema-Mode" data-require="scripts/cinemamodeconfiguration,paper-checkbox,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,519 +0,0 @@
|
||||||
define(['jQuery', 'livetvcss', 'scripts/livetvcomponents', 'scrollStyles'], function ($) {
|
|
||||||
|
|
||||||
return function (options) {
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
self.refresh = function () {
|
|
||||||
reloadPage(options.element);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 30 mins
|
|
||||||
var cellCurationMinutes = 30;
|
|
||||||
var cellDurationMs = cellCurationMinutes * 60 * 1000;
|
|
||||||
var msPerDay = 86400000;
|
|
||||||
|
|
||||||
var currentDate;
|
|
||||||
|
|
||||||
var defaultChannels = browserInfo.mobile ? 50 : 100;
|
|
||||||
var channelLimit = 1000;
|
|
||||||
|
|
||||||
var channelQuery = {
|
|
||||||
|
|
||||||
StartIndex: 0,
|
|
||||||
Limit: defaultChannels,
|
|
||||||
EnableFavoriteSorting: true
|
|
||||||
};
|
|
||||||
|
|
||||||
var channelsPromise;
|
|
||||||
|
|
||||||
function normalizeDateToTimeslot(date) {
|
|
||||||
|
|
||||||
var minutesOffset = date.getMinutes() - cellCurationMinutes;
|
|
||||||
|
|
||||||
if (minutesOffset >= 0) {
|
|
||||||
|
|
||||||
date.setHours(date.getHours(), cellCurationMinutes, 0, 0);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
date.setHours(date.getHours(), 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return date;
|
|
||||||
}
|
|
||||||
|
|
||||||
function reloadChannels(page) {
|
|
||||||
channelsPromise = null;
|
|
||||||
reloadGuide(page);
|
|
||||||
}
|
|
||||||
|
|
||||||
function reloadGuide(page) {
|
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
|
||||||
|
|
||||||
channelQuery.UserId = Dashboard.getCurrentUserId();
|
|
||||||
|
|
||||||
channelQuery.Limit = Math.min(channelQuery.Limit || defaultChannels, channelLimit);
|
|
||||||
channelQuery.AddCurrentProgram = false;
|
|
||||||
|
|
||||||
channelsPromise = channelsPromise || ApiClient.getLiveTvChannels(channelQuery);
|
|
||||||
|
|
||||||
var date = currentDate;
|
|
||||||
// Add one second to avoid getting programs that are just ending
|
|
||||||
date = new Date(date.getTime() + 1000);
|
|
||||||
|
|
||||||
// Subtract to avoid getting programs that are starting when the grid ends
|
|
||||||
var nextDay = new Date(date.getTime() + msPerDay - 2000);
|
|
||||||
|
|
||||||
console.log(nextDay);
|
|
||||||
channelsPromise.then(function (channelsResult) {
|
|
||||||
|
|
||||||
ApiClient.getLiveTvPrograms({
|
|
||||||
UserId: Dashboard.getCurrentUserId(),
|
|
||||||
MaxStartDate: nextDay.toISOString(),
|
|
||||||
MinEndDate: date.toISOString(),
|
|
||||||
channelIds: channelsResult.Items.map(function (c) {
|
|
||||||
return c.Id;
|
|
||||||
}).join(','),
|
|
||||||
ImageTypeLimit: 1,
|
|
||||||
EnableImages: false,
|
|
||||||
SortBy: "StartDate"
|
|
||||||
|
|
||||||
}).then(function (programsResult) {
|
|
||||||
|
|
||||||
renderGuide(page, date, channelsResult.Items, programsResult.Items);
|
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
|
||||||
|
|
||||||
LibraryBrowser.setLastRefreshed(page);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
if (options.enablePaging !== false) {
|
|
||||||
var channelPagingHtml = LibraryBrowser.getQueryPagingHtml({
|
|
||||||
startIndex: channelQuery.StartIndex,
|
|
||||||
limit: channelQuery.Limit,
|
|
||||||
totalRecordCount: channelsResult.TotalRecordCount,
|
|
||||||
updatePageSizeSetting: false,
|
|
||||||
showLimit: true
|
|
||||||
});
|
|
||||||
|
|
||||||
var channelPaging = page.querySelector('.channelPaging');
|
|
||||||
channelPaging.innerHTML = channelPagingHtml;
|
|
||||||
$(channelPaging);
|
|
||||||
}
|
|
||||||
|
|
||||||
page.querySelector('.btnNextPage').addEventListener('click', function () {
|
|
||||||
channelQuery.StartIndex += channelQuery.Limit;
|
|
||||||
reloadChannels(page);
|
|
||||||
});
|
|
||||||
|
|
||||||
page.querySelector('.btnPreviousPage').addEventListener('click', function () {
|
|
||||||
channelQuery.StartIndex -= channelQuery.Limit;
|
|
||||||
reloadChannels(page);
|
|
||||||
});
|
|
||||||
|
|
||||||
page.querySelector('#selectPageSize').addEventListener('change', function () {
|
|
||||||
channelQuery.Limit = parseInt(this.value);
|
|
||||||
channelQuery.StartIndex = 0;
|
|
||||||
reloadChannels(page);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTimeslotHeadersHtml(startDate, endDateTime) {
|
|
||||||
|
|
||||||
var html = '';
|
|
||||||
|
|
||||||
// clone
|
|
||||||
startDate = new Date(startDate.getTime());
|
|
||||||
|
|
||||||
html += '<div class="timeslotHeadersInner">';
|
|
||||||
|
|
||||||
while (startDate.getTime() < endDateTime) {
|
|
||||||
|
|
||||||
html += '<div class="timeslotHeader">';
|
|
||||||
html += '<div class="timeslotHeaderInner">';
|
|
||||||
|
|
||||||
html += LibraryBrowser.getDisplayTime(startDate);
|
|
||||||
html += '</div>';
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
// Add 30 mins
|
|
||||||
startDate.setTime(startDate.getTime() + cellDurationMs);
|
|
||||||
}
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
return html;
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseDates(program) {
|
|
||||||
|
|
||||||
if (!program.StartDateLocal) {
|
|
||||||
try {
|
|
||||||
|
|
||||||
program.StartDateLocal = parseISO8601Date(program.StartDate, { toLocal: true });
|
|
||||||
|
|
||||||
} catch (err) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!program.EndDateLocal) {
|
|
||||||
try {
|
|
||||||
|
|
||||||
program.EndDateLocal = parseISO8601Date(program.EndDate, { toLocal: true });
|
|
||||||
|
|
||||||
} catch (err) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getChannelProgramsHtml(page, date, channel, programs) {
|
|
||||||
|
|
||||||
var html = '';
|
|
||||||
|
|
||||||
var startMs = date.getTime();
|
|
||||||
var endMs = startMs + msPerDay - 1;
|
|
||||||
|
|
||||||
programs = programs.filter(function (curr) {
|
|
||||||
return curr.ChannelId == channel.Id;
|
|
||||||
});
|
|
||||||
|
|
||||||
html += '<div class="channelPrograms">';
|
|
||||||
|
|
||||||
for (var i = 0, length = programs.length; i < length; i++) {
|
|
||||||
|
|
||||||
var program = programs[i];
|
|
||||||
|
|
||||||
if (program.ChannelId != channel.Id) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
parseDates(program);
|
|
||||||
|
|
||||||
if (program.EndDateLocal.getTime() < startMs) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (program.StartDateLocal.getTime() > endMs) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var renderStartMs = Math.max(program.StartDateLocal.getTime(), startMs);
|
|
||||||
var startPercent = (program.StartDateLocal.getTime() - startMs) / msPerDay;
|
|
||||||
startPercent *= 100;
|
|
||||||
startPercent = Math.max(startPercent, 0);
|
|
||||||
|
|
||||||
var renderEndMs = Math.min(program.EndDateLocal.getTime(), endMs);
|
|
||||||
var endPercent = (renderEndMs - renderStartMs) / msPerDay;
|
|
||||||
endPercent *= 100;
|
|
||||||
|
|
||||||
var cssClass = "programCell";
|
|
||||||
var addAccent = true;
|
|
||||||
|
|
||||||
if (program.IsKids) {
|
|
||||||
cssClass += " childProgramInfo";
|
|
||||||
} else if (program.IsSports) {
|
|
||||||
cssClass += " sportsProgramInfo";
|
|
||||||
} else if (program.IsNews) {
|
|
||||||
cssClass += " newsProgramInfo";
|
|
||||||
} else if (program.IsMovie) {
|
|
||||||
cssClass += " movieProgramInfo";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cssClass += " plainProgramInfo";
|
|
||||||
addAccent = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '<a href="itemdetails.html?id=' + program.Id + '" class="' + cssClass + '" data-programid="' + program.Id + '" style="left:' + startPercent + '%;width:' + endPercent + '%;">';
|
|
||||||
|
|
||||||
html += '<div class="guideProgramName">';
|
|
||||||
html += program.Name;
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
html += '<div class="guideProgramTime">';
|
|
||||||
if (program.IsLive) {
|
|
||||||
html += '<span class="liveTvProgram">' + Globalize.translate('LabelLiveProgram') + ' </span>';
|
|
||||||
}
|
|
||||||
else if (program.IsPremiere) {
|
|
||||||
html += '<span class="premiereTvProgram">' + Globalize.translate('LabelPremiereProgram') + ' </span>';
|
|
||||||
}
|
|
||||||
else if (program.IsSeries && !program.IsRepeat) {
|
|
||||||
html += '<span class="newTvProgram">' + Globalize.translate('LabelNewProgram') + ' </span>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += LibraryBrowser.getDisplayTime(program.StartDateLocal);
|
|
||||||
html += ' - ';
|
|
||||||
html += LibraryBrowser.getDisplayTime(program.EndDateLocal);
|
|
||||||
|
|
||||||
if (program.SeriesTimerId) {
|
|
||||||
html += '<div class="timerCircle seriesTimerCircle"></div>';
|
|
||||||
html += '<div class="timerCircle seriesTimerCircle"></div>';
|
|
||||||
html += '<div class="timerCircle seriesTimerCircle"></div>';
|
|
||||||
}
|
|
||||||
else if (program.TimerId) {
|
|
||||||
|
|
||||||
html += '<div class="timerCircle"></div>';
|
|
||||||
}
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
if (addAccent) {
|
|
||||||
html += '<div class="programAccent"></div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '</a>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
return html;
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderPrograms(page, date, channels, programs) {
|
|
||||||
|
|
||||||
var html = [];
|
|
||||||
|
|
||||||
for (var i = 0, length = channels.length; i < length; i++) {
|
|
||||||
|
|
||||||
html.push(getChannelProgramsHtml(page, date, channels[i], programs));
|
|
||||||
}
|
|
||||||
|
|
||||||
var programGrid = page.querySelector('.programGrid');
|
|
||||||
programGrid.innerHTML = html.join('');
|
|
||||||
|
|
||||||
$(programGrid).scrollTop(0).scrollLeft(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderChannelHeaders(page, channels) {
|
|
||||||
|
|
||||||
var html = '';
|
|
||||||
|
|
||||||
for (var i = 0, length = channels.length; i < length; i++) {
|
|
||||||
|
|
||||||
var channel = channels[i];
|
|
||||||
|
|
||||||
html += '<div class="channelHeaderCellContainer">';
|
|
||||||
|
|
||||||
html += '<a class="channelHeaderCell" href="itemdetails.html?id=' + channel.Id + '">';
|
|
||||||
|
|
||||||
var hasChannelImage = channel.ImageTags.Primary;
|
|
||||||
var cssClass = hasChannelImage ? 'guideChannelInfo guideChannelInfoWithImage' : 'guideChannelInfo';
|
|
||||||
|
|
||||||
html += '<div class="' + cssClass + '">' + channel.Number + '</div>';
|
|
||||||
|
|
||||||
if (hasChannelImage) {
|
|
||||||
|
|
||||||
var url = ApiClient.getScaledImageUrl(channel.Id, {
|
|
||||||
maxHeight: 44,
|
|
||||||
maxWidth: 70,
|
|
||||||
tag: channel.ImageTags.Primary,
|
|
||||||
type: "Primary"
|
|
||||||
});
|
|
||||||
|
|
||||||
html += '<div class="guideChannelImage lazy" data-src="' + url + '"></div>';
|
|
||||||
} else {
|
|
||||||
html += '<div class="guideChannelName">' + channel.Name + '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '</a>';
|
|
||||||
|
|
||||||
html += '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
var channelList = page.querySelector('.channelList');
|
|
||||||
channelList.innerHTML = html;
|
|
||||||
ImageLoader.lazyChildren(channelList);
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderGuide(page, date, channels, programs) {
|
|
||||||
|
|
||||||
renderChannelHeaders(page, channels);
|
|
||||||
|
|
||||||
var startDate = date;
|
|
||||||
var endDate = new Date(startDate.getTime() + msPerDay);
|
|
||||||
page.querySelector('.timeslotHeaders').innerHTML = getTimeslotHeadersHtml(startDate, endDate);
|
|
||||||
renderPrograms(page, date, channels, programs);
|
|
||||||
}
|
|
||||||
|
|
||||||
var gridScrolling = false;
|
|
||||||
var headersScrolling = false;
|
|
||||||
function onProgramGridScroll(page, elem) {
|
|
||||||
|
|
||||||
if (!headersScrolling) {
|
|
||||||
gridScrolling = true;
|
|
||||||
|
|
||||||
$(page.querySelector('.timeslotHeaders')).scrollLeft($(elem).scrollLeft());
|
|
||||||
gridScrolling = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function onTimeslotHeadersScroll(page, elem) {
|
|
||||||
|
|
||||||
if (!gridScrolling) {
|
|
||||||
headersScrolling = true;
|
|
||||||
$(page.querySelector('.programGrid')).scrollLeft($(elem).scrollLeft());
|
|
||||||
headersScrolling = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function changeDate(page, date) {
|
|
||||||
|
|
||||||
currentDate = normalizeDateToTimeslot(date);
|
|
||||||
|
|
||||||
reloadGuide(page);
|
|
||||||
|
|
||||||
var text = LibraryBrowser.getFutureDateText(date);
|
|
||||||
text = '<span class="currentDay">' + text.replace(' ', ' </span>');
|
|
||||||
page.querySelector('.currentDate').innerHTML = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
var dateOptions = [];
|
|
||||||
|
|
||||||
function setDateRange(page, guideInfo) {
|
|
||||||
|
|
||||||
var today = new Date();
|
|
||||||
today.setHours(today.getHours(), 0, 0, 0);
|
|
||||||
|
|
||||||
var start = parseISO8601Date(guideInfo.StartDate, { toLocal: true });
|
|
||||||
var end = parseISO8601Date(guideInfo.EndDate, { toLocal: true });
|
|
||||||
|
|
||||||
start.setHours(0, 0, 0, 0);
|
|
||||||
end.setHours(0, 0, 0, 0);
|
|
||||||
|
|
||||||
if (start.getTime() >= end.getTime()) {
|
|
||||||
end.setDate(start.getDate() + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
start = new Date(Math.max(today, start));
|
|
||||||
|
|
||||||
dateOptions = [];
|
|
||||||
|
|
||||||
while (start <= end) {
|
|
||||||
|
|
||||||
dateOptions.push({
|
|
||||||
name: LibraryBrowser.getFutureDateText(start),
|
|
||||||
id: start.getTime(),
|
|
||||||
ironIcon: 'today'
|
|
||||||
});
|
|
||||||
|
|
||||||
start.setDate(start.getDate() + 1);
|
|
||||||
start.setHours(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
var date = new Date();
|
|
||||||
|
|
||||||
if (currentDate) {
|
|
||||||
date.setTime(currentDate.getTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
changeDate(page, date);
|
|
||||||
}
|
|
||||||
|
|
||||||
function reloadPageAfterValidation(page, limit) {
|
|
||||||
|
|
||||||
channelLimit = limit;
|
|
||||||
|
|
||||||
ApiClient.getLiveTvGuideInfo().then(function (guideInfo) {
|
|
||||||
|
|
||||||
setDateRange(page, guideInfo);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function reloadPage(page) {
|
|
||||||
|
|
||||||
$('.guideRequiresUnlock', page).hide();
|
|
||||||
|
|
||||||
RegistrationServices.validateFeature('livetv').then(function () {
|
|
||||||
Dashboard.showLoadingMsg();
|
|
||||||
|
|
||||||
reloadPageAfterValidation(page, 1000);
|
|
||||||
}, function () {
|
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
|
||||||
|
|
||||||
var limit = 5;
|
|
||||||
$('.guideRequiresUnlock', page).show();
|
|
||||||
$('.unlockText', page).html(Globalize.translate('MessageLiveTvGuideRequiresUnlock', limit));
|
|
||||||
|
|
||||||
reloadPageAfterValidation(page, limit);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectDate(page) {
|
|
||||||
|
|
||||||
require(['actionsheet'], function (actionsheet) {
|
|
||||||
|
|
||||||
actionsheet.show({
|
|
||||||
items: dateOptions,
|
|
||||||
showCancel: true,
|
|
||||||
title: Globalize.translate('HeaderSelectDate'),
|
|
||||||
callback: function (id) {
|
|
||||||
|
|
||||||
var date = new Date();
|
|
||||||
date.setTime(parseInt(id));
|
|
||||||
changeDate(page, date);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.open('GET', 'components/tvguide/tvguide.template.html', true);
|
|
||||||
|
|
||||||
xhr.onload = function (e) {
|
|
||||||
|
|
||||||
var template = this.response;
|
|
||||||
var tabContent = options.element;
|
|
||||||
tabContent.innerHTML = Globalize.translateDocument(template);
|
|
||||||
|
|
||||||
tabContent.querySelector('.programGrid').addEventListener('scroll', function (e) {
|
|
||||||
|
|
||||||
onProgramGridScroll(tabContent, e.target);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (browserInfo.mobile) {
|
|
||||||
tabContent.querySelector('.tvGuide').classList.add('mobileGuide');
|
|
||||||
} else {
|
|
||||||
|
|
||||||
tabContent.querySelector('.tvGuide').classList.remove('mobileGuide');
|
|
||||||
|
|
||||||
tabContent.querySelector('.timeslotHeaders').addEventListener('scroll', function (e) {
|
|
||||||
|
|
||||||
onTimeslotHeadersScroll(tabContent, e.target);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AppInfo.enableHeadRoom && options.enableHeadRoom) {
|
|
||||||
requirejs(["headroom"], function () {
|
|
||||||
|
|
||||||
// construct an instance of Headroom, passing the element
|
|
||||||
var headroom = new Headroom(tabContent.querySelector('.tvGuideHeader'));
|
|
||||||
// initialise
|
|
||||||
headroom.init();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$('.btnUnlockGuide', tabContent).on('click', function () {
|
|
||||||
|
|
||||||
reloadPage(tabContent);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.btnSelectDate', tabContent).on('click', function () {
|
|
||||||
|
|
||||||
selectDate(tabContent);
|
|
||||||
});
|
|
||||||
|
|
||||||
self.refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
xhr.send();
|
|
||||||
};
|
|
||||||
});
|
|
|
@ -1,19 +0,0 @@
|
||||||
<div class="tvGuide">
|
|
||||||
<div class="tvGuideHeader">
|
|
||||||
<div class="channelTimeslotHeader">
|
|
||||||
<div class="timeslotHeaderInner">
|
|
||||||
<a class="btnSelectDate" href="#" style="display:block;padding-left:5px;color:#fff;text-decoration:none;font-weight:normal!important;padding:5px 10px 4px 0;font-size:13px;"><iron-icon icon="schedule" style="margin-right:3px;width:18px;height:18px;"></iron-icon><span class="currentDate" style="vertical-align: middle;"></span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="timeslotHeaders smoothScrollX"></div>
|
|
||||||
</div>
|
|
||||||
<div class="programContainer">
|
|
||||||
<div class="channelList"></div>
|
|
||||||
<div class="programGrid smoothScrollX"></div>
|
|
||||||
</div>
|
|
||||||
<div class="channelPaging"></div>
|
|
||||||
</div>
|
|
||||||
<div class="guideRequiresUnlock readOnlyContent" style="margin:1em auto;text-align:center;display:none;padding:1em;">
|
|
||||||
<p class="unlockText"></p>
|
|
||||||
<paper-button raised class="secondary block btnUnlockGuide"><iron-icon icon="check"></iron-icon><span>${ButtonUnlockGuide}</span></paper-button>
|
|
||||||
</div>
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="connectLoginPage" data-role="page" class="page standalonePage connectLoginPage" data-theme="b" data-require="scripts/connectlogin,paper-input">
|
<div id="connectLoginPage" data-role="page" class="page standalonePage connectLoginPage" data-theme="b" data-require="scripts/connectlogin,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -66,14 +66,6 @@
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.absolutePageTabContent {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*.pageWithAbsoluteTabs .pageTabContent {
|
/*.pageWithAbsoluteTabs .pageTabContent {
|
||||||
padding-left: .5em !important;
|
padding-left: .5em !important;
|
||||||
padding-right: .5em !important;
|
padding-right: .5em !important;
|
||||||
|
|
|
@ -11,11 +11,24 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.absolutePageTabContent {
|
.absolutePageTabContent {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 1000;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
top: 98px !important;
|
/* Page needs to supply padding */
|
||||||
|
top: 92px !important;
|
||||||
|
transition: transform 200ms ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.absolutePageTabContent.headroomUnpinned {
|
||||||
|
transform: translateY(-92px);
|
||||||
|
bottom: -92px!important;
|
||||||
|
}
|
||||||
|
|
||||||
.sidebarDivider {
|
.sidebarDivider {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background: #eaeaea;
|
background: #eaeaea;
|
||||||
|
|
|
@ -1,421 +1,17 @@
|
||||||
.guideTabContent {
|
.guideTabContent {
|
||||||
background: #161616;
|
background: #121212;
|
||||||
}
|
|
||||||
|
|
||||||
.tvGuide {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvGuideHeader {
|
|
||||||
white-space: nowrap;
|
|
||||||
position: fixed;
|
|
||||||
top: 95px;
|
|
||||||
left: 0;
|
|
||||||
z-index: 100;
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.neon-animating .tvGuideHeader {
|
|
||||||
position: static;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvGuideHeader.headroom--unpinned {
|
|
||||||
-webkit-transform: translateY(-98px);
|
|
||||||
transform: translateY(-98px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramSectionHeader {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgram {
|
|
||||||
display: block;
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: normal !important;
|
|
||||||
white-space: nowrap;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detailSectionHeader + .tvProgram {
|
|
||||||
border-top: 6px solid #161616;
|
|
||||||
margin-top: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramTimeSlot {
|
|
||||||
width: 80px;
|
|
||||||
vertical-align: middle;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #fff;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
border-bottom: 6px solid #161616;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramTimeSlotInner {
|
|
||||||
padding: .5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramInfo {
|
|
||||||
vertical-align: middle;
|
|
||||||
padding: .5em .5em;
|
|
||||||
border-bottom: 6px solid #161616;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramTimeSlot + .tvProgramInfo {
|
|
||||||
margin-left: 80px;
|
|
||||||
border-left: 6px solid #161616;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramCurrentTimeSlot {
|
|
||||||
background-color: green;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramName {
|
|
||||||
color: #fff;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-bottom: .5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvProgramTime {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.newTvProgram {
|
|
||||||
color: #E88606;
|
|
||||||
}
|
|
||||||
|
|
||||||
.liveTvProgram {
|
|
||||||
color: #64A239;
|
|
||||||
}
|
|
||||||
|
|
||||||
.premiereTvProgram {
|
|
||||||
color: yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
.programAccent {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
height: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sportsProgramInfo .programAccent {
|
|
||||||
background-color: #0A7C33;
|
|
||||||
}
|
|
||||||
|
|
||||||
.newsProgramInfo .programAccent {
|
|
||||||
background-color: #523378;
|
|
||||||
}
|
|
||||||
|
|
||||||
.movieProgramInfo .programAccent {
|
|
||||||
background-color: #A43913;
|
|
||||||
}
|
|
||||||
|
|
||||||
.childProgramInfo .programAccent {
|
|
||||||
background-color: #0B487D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timerCircle {
|
|
||||||
display: inline-block;
|
|
||||||
width: 12px;
|
|
||||||
height: 12px;
|
|
||||||
border-radius: 50%;
|
|
||||||
background: #cc0000;
|
|
||||||
border: 1px solid #cc3333;
|
|
||||||
margin-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.seriesTimerCircle {
|
|
||||||
position: relative;
|
|
||||||
margin-left: 0;
|
|
||||||
left: 21px;
|
|
||||||
opacity: .3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.itemMiscInfo .seriesTimerCircle:first-child {
|
|
||||||
margin-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.seriesTimerCircle + .seriesTimerCircle {
|
|
||||||
opacity: .65;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.seriesTimerCircle + .seriesTimerCircle + .seriesTimerCircle {
|
|
||||||
opacity: 1;
|
|
||||||
left: -21px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelImageContainer .itemDetailImage {
|
|
||||||
max-width: 200px;
|
|
||||||
max-height: 110px;
|
|
||||||
margin-top: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeslotHeaders {
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mobileGuide .timeslotHeaders {
|
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.programContainer {
|
|
||||||
white-space: nowrap;
|
|
||||||
position: relative;
|
|
||||||
margin: 0 auto;
|
|
||||||
margin-top: 44px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mobileGuide .programContainer {
|
|
||||||
margin-top: 38px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelPrograms {
|
|
||||||
white-space: nowrap;
|
|
||||||
height: 61px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelPrograms, .timeslotHeadersInner {
|
|
||||||
width: 12000px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeslotHeader {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeslotHeaderInner {
|
|
||||||
padding: .6em .35em .5em;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader .timeslotHeaderInner {
|
|
||||||
padding-top: .4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelHeaderCell, .channelTimeslotHeader {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
border-right: 1px solid #161616;
|
|
||||||
width: 199px;
|
|
||||||
background: #303030;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelHeaderCell {
|
|
||||||
border-bottom: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelHeaderCellContainer + .channelHeaderCellContainer .channelHeaderCell {
|
|
||||||
border-top: 6px solid #161616;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader {
|
|
||||||
border-right-color: #52B54B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader, .timeslotHeader {
|
|
||||||
background: #52B54B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeslotHeader, .channelTimeslotHeader {
|
|
||||||
height: 42px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelHeaderCell {
|
|
||||||
padding: 0;
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: 400 !important;
|
|
||||||
color: #fff !important;
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pointerInput .channelHeaderCell:hover {
|
|
||||||
background-color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelList {
|
|
||||||
float: left;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
.programGrid {
|
|
||||||
padding-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.programGrid, .timeslotHeaders {
|
|
||||||
margin-left: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeslotHeader {
|
|
||||||
width: 2.0833333333333333333333333333333%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.programCell {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 6px;
|
|
||||||
border-left: 6px solid #161616;
|
|
||||||
background-color: #212121;
|
|
||||||
display: block;
|
|
||||||
color: #fff !important;
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: 400 !important;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeslotCellInner {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
width: 100%;
|
|
||||||
top: 0;
|
|
||||||
display: block;
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: normal !important;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelHeaderCell {
|
|
||||||
height: 55px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.guideProgramName {
|
|
||||||
padding: .5em .5em .35em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.guideProgramTime {
|
|
||||||
padding: 0 .5em .35em;
|
|
||||||
color: #bbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
.guideChannelInfo {
|
|
||||||
display: inline-block;
|
|
||||||
max-width: 110px;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
margin-left: .5em;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.guideChannelImage {
|
|
||||||
width: 70px;
|
|
||||||
height: 44px;
|
|
||||||
background-size: contain;
|
|
||||||
background-position: right center;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
margin-right: .5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.guideChannelName {
|
|
||||||
margin-right: .5em;
|
|
||||||
max-width: 50%;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 1920px) {
|
|
||||||
|
|
||||||
.channelPrograms, .timeslotHeadersInner {
|
|
||||||
width: 10000px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 1600px) {
|
|
||||||
|
|
||||||
.channelPrograms, .timeslotHeadersInner {
|
|
||||||
width: 8000px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 600px) {
|
|
||||||
|
|
||||||
.guideChannelInfoWithImage {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timerPageImageContainer {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelHeaderCell, .channelTimeslotHeader {
|
|
||||||
width: 98px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.programGrid, .timeslotHeaders {
|
|
||||||
margin-left: 99px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.currentDay {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelPrograms, .timeslotHeadersInner {
|
|
||||||
width: 6500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeslotHeaderInner {
|
|
||||||
padding-top: .8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader a {
|
|
||||||
padding-left: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader i {
|
|
||||||
margin-right: 4px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader .timeslotHeaderInner {
|
|
||||||
padding-top: .5em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelList, .programGrid {
|
|
||||||
height: auto !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.itemOverlayContent {
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 800px) {
|
|
||||||
|
|
||||||
.itemOverlayContent {
|
|
||||||
width: 300px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelList, .timeslotHeaderInner {
|
|
||||||
font-size: 110%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 1000px) {
|
|
||||||
|
|
||||||
.itemOverlayContent {
|
|
||||||
width: 400px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
|
|
||||||
.itemOverlayContent {
|
|
||||||
width: 500px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.chkAdvanced {
|
.chkAdvanced {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Allow vertical space for anything that slides up at the bottom */
|
||||||
|
.guideVerticalScroller {
|
||||||
|
padding-bottom: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tvGuideHeader.headroom--unpinned {
|
||||||
|
-webkit-transform: none;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
|
@ -300,6 +300,10 @@ body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.autoScrollY {
|
||||||
|
overflow-y: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* Without this, no content will be displayed in mobile safari */
|
/* Without this, no content will be displayed in mobile safari */
|
||||||
.pageContainer {
|
.pageContainer {
|
||||||
overflow-x: visible !important;
|
overflow-x: visible !important;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="dashboardPage" data-role="page" class="page type-interior dashboardHomePage" data-require="scripts/dashboardpage,humanedate,buttonenabled,paper-icon-item,paper-item-body,paper-fab,emby-collapsible">
|
<div id="dashboardPage" data-role="page" class="page type-interior dashboardHomePage" data-require="scripts/dashboardpage,humanedate,buttonenabled,paper-icon-item,paper-item-body,paper-fab,emby-collapsible,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="dashboardHostingPage" data-role="page" class="page type-interior advancedConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Hosting%20Settings" data-require="scripts/dashboardhosting,paper-checkbox,paper-input">
|
<div id="dashboardHostingPage" data-role="page" class="page type-interior advancedConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Hosting%20Settings" data-require="scripts/dashboardhosting,paper-checkbox,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="devicePage" data-role="page" class="page type-interior devicesPage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Devices" data-require="scripts/device,paper-input">
|
<div id="devicePage" data-role="page" class="page type-interior devicesPage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Devices" data-require="scripts/device,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -106,14 +106,6 @@
|
||||||
color: #52B54B !important;
|
color: #52B54B !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.channelTimeslotHeader {
|
|
||||||
border-right-color: #52B54B !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTimeslotHeader, .timeslotHeader {
|
|
||||||
background: #52B54B !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.libraryViewNav, paper-tabs {
|
.libraryViewNav, paper-tabs {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
@ -126,18 +118,6 @@ h1, h1 a {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.channelList {
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelHeaderCellInner {
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tvGuideHeader {
|
|
||||||
top: 86px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.libraryMenuButtonText {
|
.libraryMenuButtonText {
|
||||||
font-weight: 500 !important;
|
font-weight: 500 !important;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -188,18 +168,6 @@ div.cardBox {
|
||||||
background: #1c1c1c;
|
background: #1c1c1c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 600px) {
|
|
||||||
|
|
||||||
/* This needs a little extra space to account for the longer date format */
|
|
||||||
.channelHeaderCell, .channelTimeslotHeader {
|
|
||||||
width: 209px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.programGrid, .timeslotHeaders {
|
|
||||||
margin-left: 210px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottomFab {
|
.bottomFab {
|
||||||
bottom: 120px !important;
|
bottom: 120px !important;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="devicesUploadPage" data-role="page" class="page type-interior devicesPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Camera%20upload" data-require="scripts/devicesupload,paper-input,paper-checkbox">
|
<div id="devicesUploadPage" data-role="page" class="page type-interior devicesPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Camera%20upload" data-require="scripts/devicesupload,paper-input,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="dlnaProfilePage" data-role="page" class="page type-interior dlnaPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Dlna%20profiles" data-require="jqmcollapsible,jqmpopup,scripts/dlnaprofile,jqmcheckbox">
|
<div id="dlnaProfilePage" data-role="page" class="page type-interior dlnaPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Dlna%20profiles" data-require="jqmcollapsible,jqmpopup,scripts/dlnaprofile,jqmcheckbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="dlnaProfilesPage" data-role="page" class="page type-interior dlnaPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Dlna%20profiles" data-require="scripts/dlnaprofiles">
|
<div id="dlnaProfilesPage" data-role="page" class="page type-interior dlnaPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Dlna%20profiles" data-require="scripts/dlnaprofiles,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="dlnaSettingsPage" data-role="page" class="page type-interior withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Play%20to" data-require="scripts/dlnasettings,paper-input,paper-checkbox">
|
<div id="dlnaSettingsPage" data-role="page" class="page type-interior withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Play%20to" data-require="scripts/dlnasettings,paper-input,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="encodingSettingsPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Transcoding" data-require="scripts/encodingsettings,paper-input,paper-checkbox">
|
<div id="encodingSettingsPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Transcoding" data-require="scripts/encodingsettings,paper-input,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div data-role="page" id="forgotPasswordPage" class="page standalonePage forgotPasswordPage" data-theme="b" data-require="scripts/forgotpassword,paper-input">
|
<div data-role="page" id="forgotPasswordPage" class="page standalonePage forgotPasswordPage" data-theme="b" data-require="scripts/forgotpassword,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div data-role="page" class="page standalonePage forgotPasswordPinPage" data-theme="b" data-require="scripts/forgotpasswordpin,paper-input">
|
<div data-role="page" class="page standalonePage forgotPasswordPinPage" data-theme="b" data-require="scripts/forgotpasswordpin,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="itemDetailPage" data-role="page" class="page libraryPage itemDetailPage noSecondaryNavPage selfBackdropPage" data-theme="b" data-require="scripts/itemdetailpage,tileitemcss,scripts/livetvcomponents,paper-fab,paper-item-body,paper-icon-item">
|
<div id="itemDetailPage" data-role="page" class="page libraryPage itemDetailPage noSecondaryNavPage selfBackdropPage" data-theme="b" data-require="scripts/itemdetailpage,tileitemcss,scripts/livetvcomponents,paper-fab,paper-item-body,paper-icon-item,paper-button">
|
||||||
|
|
||||||
<div id="itemBackdrop" class="itemBackdrop noBackdrop">
|
<div id="itemBackdrop" class="itemBackdrop noBackdrop">
|
||||||
<div class="itemBackdropContent">
|
<div class="itemBackdropContent">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="librarySettingsPage" data-role="page" class="page type-interior librarySectionPage withTabs" data-require="emby-collapsible,scripts/librarysettings,paper-input,paper-checkbox">
|
<div id="librarySettingsPage" data-role="page" class="page type-interior librarySectionPage withTabs" data-require="emby-collapsible,scripts/librarysettings,paper-input,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="liveTvSuggestedPage" data-dom-cache="true" data-role="page" class="page libraryPage liveTvPage pageWithAbsoluteTabs" data-contextname="${HeaderLiveTv}" data-backdroptype="series,movie" data-require="scripts/livetvsuggested,livetvcss,scripts/livetvcomponents,paper-tabs,paper-checkbox">
|
<div id="liveTvSuggestedPage" data-dom-cache="true" data-role="page" class="page libraryPage liveTvPage pageWithAbsoluteTabs" data-contextname="${HeaderLiveTv}" data-backdroptype="series,movie" data-require="scripts/livetvsuggested,livetvcss,scripts/livetvcomponents,paper-tabs,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div class="libraryViewNav libraryViewNavWithMinHeight">
|
<div class="libraryViewNav libraryViewNavWithMinHeight">
|
||||||
<paper-tabs hidescrollbuttons noink>
|
<paper-tabs hidescrollbuttons noink>
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pageTabContent guideTabContent hide" style="width: auto;" data-index="1">
|
<div class="pageTabContent absolutePageTabContent guideTabContent hide" style="width: auto; display: flex;padding-bottom: 0;" data-index="1">
|
||||||
</div>
|
</div>
|
||||||
<div class="pageTabContent channelsTabContent hide" data-index="2">
|
<div class="pageTabContent channelsTabContent hide" data-index="2">
|
||||||
<div class="viewSettings">
|
<div class="viewSettings">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="jqmcheckbox,jqmcontrolgroup,jqmcollapsible,scripts/livetvcomponents,scripts/livetvseriestimer,livetvcss,paper-checkbox,paper-input" data-backbutton="true" data-menubutton="false">
|
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="jqmcheckbox,jqmcontrolgroup,paper-button,jqmcollapsible,scripts/livetvcomponents,scripts/livetvseriestimer,livetvcss,paper-checkbox,paper-input" data-backbutton="true" data-menubutton="false">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<form class="liveTvSeriesTimerForm" style="margin: 0 auto; max-width: 720px;">
|
<form class="liveTvSeriesTimerForm" style="margin: 0 auto; max-width: 720px;">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="liveTvSettingsPage" data-role="page" class="page type-interior liveTvPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvsettings,paper-checkbox,paper-input,emby-collapsible">
|
<div id="liveTvSettingsPage" data-role="page" class="page type-interior liveTvPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvsettings,paper-checkbox,paper-input,emby-collapsible,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="liveTvStatusPage" data-role="page" class="page type-interior liveTvSettingsPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvstatus,scripts/taskbutton,paper-fab,paper-item-body,paper-icon-item,paper-checkbox">
|
<div id="liveTvStatusPage" data-role="page" class="page type-interior liveTvSettingsPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvstatus,scripts/taskbutton,paper-fab,paper-item-body,paper-icon-item,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="liveTvTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="jqmcollapsible,scripts/livetvcomponents,scripts/livetvtimer,livetvcss,paper-input" data-backbutton="true" data-menubutton="false">
|
<div id="liveTvTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="jqmcollapsible,scripts/livetvcomponents,scripts/livetvtimer,livetvcss,paper-input,paper-button" data-backbutton="true" data-menubutton="false">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="liveTvTunerProviderHdHomerunPage" data-role="page" class="page type-interior liveTvSettingsPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvtunerprovider-hdhomerun,paper-input,paper-checkbox">
|
<div id="liveTvTunerProviderHdHomerunPage" data-role="page" class="page type-interior liveTvSettingsPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvtunerprovider-hdhomerun,paper-input,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="liveTvTunerProviderM3UPage" data-role="page" class="page type-interior liveTvSettingsPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvtunerprovider-m3u,paper-input">
|
<div id="liveTvTunerProviderM3UPage" data-role="page" class="page type-interior liveTvSettingsPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Live%20TV" data-require="scripts/livetvtunerprovider-m3u,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="loginPage" data-role="page" class="page standalonePage" data-theme="b" data-require="scripts/loginpage,humanedate,paper-input">
|
<div id="loginPage" data-role="page" class="page standalonePage" data-theme="b" data-require="scripts/loginpage,humanedate,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="metadataConfigurationPage" data-role="page" class="page type-interior metadataConfigurationPage withTabs" data-require="scripts/metadataconfigurationpage,paper-checkbox">
|
<div id="metadataConfigurationPage" data-role="page" class="page type-interior metadataConfigurationPage withTabs" data-require="scripts/metadataconfigurationpage,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="metadataImagesConfigurationPage" data-role="page" class="page type-interior metadataConfigurationPage withTabs" data-require="emby-collapsible,scripts/metadataimagespage,paper-checkbox,paper-input,paper-fab,paper-icon-item,paper-item-body">
|
<div id="metadataImagesConfigurationPage" data-role="page" class="page type-interior metadataConfigurationPage withTabs" data-require="emby-collapsible,scripts/metadataimagespage,paper-checkbox,paper-input,paper-fab,paper-icon-item,paper-item-body,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="metadataNfoPage" data-role="page" class="page type-interior metadataConfigurationPage withTabs" data-require="scripts/metadatanfo,paper-checkbox">
|
<div id="metadataNfoPage" data-role="page" class="page type-interior metadataConfigurationPage withTabs" data-require="scripts/metadatanfo,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="metadataSubtitlesPage" data-role="page" class="page type-interior metadataConfigurationPage" data-require="scripts/metadatasubtitles,paper-input,paper-checkbox">
|
<div id="metadataSubtitlesPage" data-role="page" class="page type-interior metadataConfigurationPage" data-require="scripts/metadatasubtitles,paper-input,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="displayPreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${HeaderDisplaySettings}" data-require="scripts/mypreferencesdisplay,paper-checkbox" data-backbutton="true" data-menubutton="false">
|
<div id="displayPreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${HeaderDisplaySettings}" data-require="scripts/mypreferencesdisplay,paper-checkbox,paper-button" data-backbutton="true" data-menubutton="false">
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<form class="displayPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
|
<form class="displayPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
|
||||||
<div class="detailSection languageSection">
|
<div class="detailSection languageSection">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="homeScreenPreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${HeaderHomeScreenSettings}" data-require="scripts/mypreferenceshome,paper-checkbox,paper-fab,paper-item-body,paper-icon-item" data-backbutton="true" data-menubutton="false">
|
<div id="homeScreenPreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${HeaderHomeScreenSettings}" data-require="scripts/mypreferenceshome,paper-checkbox,paper-fab,paper-item-body,paper-icon-item,paper-button" data-backbutton="true" data-menubutton="false">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<form class="homeScreenPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
|
<form class="homeScreenPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="languagePreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${HeaderPlaybackSettings}" data-require="scripts/mypreferenceslanguages,paper-checkbox" data-backbutton="true" data-menubutton="false">
|
<div id="languagePreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${HeaderPlaybackSettings}" data-require="scripts/mypreferenceslanguages,paper-checkbox,paper-button" data-backbutton="true" data-menubutton="false">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="userImagePage" data-role="page" class="page libraryPage userPreferencesPage userPasswordPage noSecondaryNavPage" data-title="${HeaderProfile}" data-require="jqmcollapsible,scripts/myprofile,paper-checkbox,paper-input" data-backbutton="true" data-menubutton="false">
|
<div id="userImagePage" data-role="page" class="page libraryPage userPreferencesPage userPasswordPage noSecondaryNavPage" data-title="${HeaderProfile}" data-require="jqmcollapsible,scripts/myprofile,paper-checkbox,paper-input,paper-button" data-backbutton="true" data-menubutton="false">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<br />
|
<br />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="mySyncActivityPage" data-role="page" class="page libraryPage syncActivityPage mySyncPage noSecondaryNavPage" data-contextname="${TitleSync}" data-require="scripts/syncactivity,scripts/taskbutton,scripts/mysync,paper-spinner,paper-fab">
|
<div id="mySyncActivityPage" data-role="page" class="page libraryPage syncActivityPage mySyncPage noSecondaryNavPage" data-contextname="${TitleSync}" data-require="scripts/syncactivity,scripts/taskbutton,scripts/mysync,paper-spinner,paper-fab,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="syncPreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${ButtonSyncSettings}" data-require="scripts/mysyncsettings,paper-checkbox,paper-input" data-backbutton="true" data-menubutton="false">
|
<div id="syncPreferencesPage" data-role="page" class="page libraryPage userPreferencesPage noSecondaryNavPage" data-title="${ButtonSyncSettings}" data-require="scripts/mysyncsettings,paper-checkbox,paper-input,paper-button" data-backbutton="true" data-menubutton="false">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<form class="userProfileSettingsForm" style="margin: 0 auto;">
|
<form class="userProfileSettingsForm" style="margin: 0 auto;">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="notificationSettingPage" data-role="page" class="page type-interior notificationConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Notifications" data-require="scripts/notificationsetting,paper-input,paper-checkbox">
|
<div id="notificationSettingPage" data-role="page" class="page type-interior notificationConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Notifications" data-require="scripts/notificationsetting,paper-input,paper-checkbox,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="nowPlayingPage" data-role="page" class="page libraryPage nowPlayingPage noSecondaryNavPage selfBackdropPage" data-contextname="${TitleRemoteControl}" data-theme="b" data-require="scripts/nowplayingpage,paper-tabs,paper-icon-button,paper-slider">
|
<div id="nowPlayingPage" data-role="page" class="page libraryPage nowPlayingPage noSecondaryNavPage selfBackdropPage" data-contextname="${TitleRemoteControl}" data-theme="b" data-require="scripts/nowplayingpage,paper-tabs,paper-icon-button,paper-slider,paper-button">
|
||||||
|
|
||||||
<div class="remoteControlContent">
|
<div class="remoteControlContent">
|
||||||
|
|
||||||
|
|
|
@ -1,42 +1,10 @@
|
||||||
<div id="photosPage" data-role="page" data-dom-cache="true" class="page libraryPage pageWithAbsoluteTabs" data-require="scripts/photos,paper-tabs">
|
<div id="photosPage" data-role="page" data-dom-cache="true" class="page libraryPage noSecondaryNavPage" data-require="scripts/photos,paper-tabs">
|
||||||
|
|
||||||
<div class="libraryViewNav scopedLibraryViewNav libraryViewNavWithMinHeight">
|
|
||||||
<paper-tabs hidescrollbuttons noink>
|
|
||||||
<paper-tab>${TabAlbums}</paper-tab>
|
|
||||||
<paper-tab>${TabPhotos}</paper-tab>
|
|
||||||
<paper-tab>${TabVideos}</paper-tab>
|
|
||||||
</paper-tabs>
|
|
||||||
<div class="legacyTabs">
|
|
||||||
<a href="photos.html" class="lnkPhotoAlbums">${TabAlbums}</a>
|
|
||||||
<a href="photos.html?tab=1" class="lnkPhotos">${TabPhotos}</a>
|
|
||||||
<a href="photos.html?tab=2" class="lnkVideos">${TabVideos}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pageTabsContainer">
|
|
||||||
<div class="pageTabContent albumTabContent hide">
|
|
||||||
<div class="viewSettings">
|
|
||||||
<div class="listTopPaging">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
|
||||||
</div>
|
|
||||||
<div class="pageTabContent photoTabContent hide">
|
|
||||||
<div class="viewSettings">
|
|
||||||
<div class="listTopPaging">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
|
||||||
</div>
|
|
||||||
<div class="pageTabContent videoTabContent hide">
|
|
||||||
<div class="viewSettings">
|
|
||||||
<div class="listTopPaging">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
<div class="viewSettings">
|
||||||
|
<div class="listTopPaging">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="playbackConfigurationPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-require="scripts/playbackconfiguration,paper-input">
|
<div id="playbackConfigurationPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-require="scripts/playbackconfiguration,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="scheduledTaskPage" data-role="page" class="page type-interior scheduledTasksConfigurationPage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Scheduled%20tasks" data-require="jqmpopup,scripts/scheduledtaskpage,paper-input">
|
<div id="scheduledTaskPage" data-role="page" class="page type-interior scheduledTasksConfigurationPage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Scheduled%20tasks" data-require="jqmpopup,scripts/scheduledtaskpage,paper-input,paper-button">
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
||||||
|
|
|
@ -1483,6 +1483,10 @@
|
||||||
attributes.push(createAttribute(Globalize.translate('MediaInfoCodecTag'), stream.CodecTag));
|
attributes.push(createAttribute(Globalize.translate('MediaInfoCodecTag'), stream.CodecTag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stream.IsAVC != null) {
|
||||||
|
attributes.push(createAttribute('AVC', stream.IsAVC));
|
||||||
|
}
|
||||||
|
|
||||||
if (stream.Profile) {
|
if (stream.Profile) {
|
||||||
attributes.push(createAttribute(Globalize.translate('MediaInfoProfile'), stream.Profile));
|
attributes.push(createAttribute(Globalize.translate('MediaInfoProfile'), stream.Profile));
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
if (!pageData) {
|
if (!pageData) {
|
||||||
pageData = data = {
|
pageData = data = {
|
||||||
query: {
|
query: {
|
||||||
SortBy: "SortName",
|
SortBy: "IsFolder,SortName",
|
||||||
SortOrder: "Ascending",
|
SortOrder: "Ascending",
|
||||||
Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount,SyncInfo",
|
Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount,SyncInfo",
|
||||||
ImageTypeLimit: 1,
|
ImageTypeLimit: 1,
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
function getSavedQueryKey() {
|
function getSavedQueryKey() {
|
||||||
|
|
||||||
if (!view.savedQueryKey) {
|
if (!view.savedQueryKey) {
|
||||||
view.savedQueryKey = libraryBrowser.getSavedQueryKey('items');
|
view.savedQueryKey = libraryBrowser.getSavedQueryKey('itemsv1');
|
||||||
}
|
}
|
||||||
return view.savedQueryKey;
|
return view.savedQueryKey;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1877,418 +1877,6 @@
|
||||||
options.squareSize = squareSize;
|
options.squareSize = squareSize;
|
||||||
},
|
},
|
||||||
|
|
||||||
setPosterViewDataOnItems: function (options, items) {
|
|
||||||
|
|
||||||
LibraryBrowser.setPosterViewData(options);
|
|
||||||
|
|
||||||
options.shape = options.shape || "portrait";
|
|
||||||
|
|
||||||
var html = "";
|
|
||||||
|
|
||||||
var primaryImageAspectRatio;
|
|
||||||
var thumbWidth = options.thumbWidth;
|
|
||||||
var posterWidth = options.posterWidth;
|
|
||||||
var squareSize = options.squareSize;
|
|
||||||
var bannerWidth = options.bannerWidth;
|
|
||||||
|
|
||||||
var uiAspect = options.uiAspect;
|
|
||||||
|
|
||||||
for (var i = 0, length = items.length; i < length; i++) {
|
|
||||||
|
|
||||||
var item = items[i];
|
|
||||||
|
|
||||||
primaryImageAspectRatio = LibraryBrowser.getAveragePrimaryImageAspectRatio([item]);
|
|
||||||
|
|
||||||
LibraryBrowser.setPosterViewDataOnItem(item, i, options, primaryImageAspectRatio, thumbWidth, posterWidth, squareSize, bannerWidth, uiAspect);
|
|
||||||
}
|
|
||||||
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
|
|
||||||
setPosterViewDataOnItem: function (item, index, options, primaryImageAspectRatio, thumbWidth, posterWidth, squareSize, bannerWidth, uiAspect) {
|
|
||||||
|
|
||||||
var imgUrl = null;
|
|
||||||
var icon;
|
|
||||||
var width = null;
|
|
||||||
var height = null;
|
|
||||||
|
|
||||||
var forceName = false;
|
|
||||||
|
|
||||||
var enableImageEnhancers = options.enableImageEnhancers !== false;
|
|
||||||
|
|
||||||
var cssClass = "card";
|
|
||||||
|
|
||||||
if (options.fullWidthOnMobile) {
|
|
||||||
cssClass += " fullWidthCardOnMobile";
|
|
||||||
}
|
|
||||||
|
|
||||||
var showTitle = options.showTitle == 'auto' ? true : options.showTitle;
|
|
||||||
var coverImage = options.coverImage;
|
|
||||||
|
|
||||||
if (options.autoThumb && item.ImageTags && item.ImageTags.Primary && item.PrimaryImageAspectRatio && item.PrimaryImageAspectRatio >= 1.34) {
|
|
||||||
|
|
||||||
width = posterWidth;
|
|
||||||
height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null;
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getImageUrl(item.Id, {
|
|
||||||
type: "Primary",
|
|
||||||
maxHeight: height,
|
|
||||||
maxWidth: width,
|
|
||||||
tag: item.ImageTags.Primary,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
if (primaryImageAspectRatio) {
|
|
||||||
if (uiAspect) {
|
|
||||||
if (Math.abs(primaryImageAspectRatio - uiAspect) <= .2) {
|
|
||||||
coverImage = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (options.autoThumb && item.ImageTags && item.ImageTags.Thumb) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.ImageTags.Thumb,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Backdrop",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.BackdropImageTags[0],
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (options.preferThumb && item.ImageTags && item.ImageTags.Thumb) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.ImageTags.Thumb,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (options.preferBanner && item.ImageTags && item.ImageTags.Banner) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Banner",
|
|
||||||
maxWidth: bannerWidth,
|
|
||||||
tag: item.ImageTags.Banner,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (options.preferThumb && item.SeriesThumbImageTag && options.inheritThumb !== false) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.SeriesThumbImageTag,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (options.preferThumb && item.ParentThumbItemId && options.inheritThumb !== false) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getThumbImageUrl(item.ParentThumbItemId, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (options.preferThumb && item.BackdropImageTags && item.BackdropImageTags.length) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Backdrop",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.BackdropImageTags[0],
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
forceName = true;
|
|
||||||
|
|
||||||
} else if (item.ImageTags && item.ImageTags.Primary) {
|
|
||||||
|
|
||||||
width = posterWidth;
|
|
||||||
height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null;
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getImageUrl(item.Id, {
|
|
||||||
type: "Primary",
|
|
||||||
maxHeight: height,
|
|
||||||
maxWidth: width,
|
|
||||||
tag: item.ImageTags.Primary,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
if (primaryImageAspectRatio) {
|
|
||||||
if (uiAspect) {
|
|
||||||
if (Math.abs(primaryImageAspectRatio - uiAspect) <= .2) {
|
|
||||||
coverImage = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (item.ParentPrimaryImageTag) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getImageUrl(item.ParentPrimaryImageItemId, {
|
|
||||||
type: "Primary",
|
|
||||||
maxWidth: posterWidth,
|
|
||||||
tag: item.ParentPrimaryImageTag,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if (item.AlbumId && item.AlbumPrimaryImageTag) {
|
|
||||||
|
|
||||||
height = squareSize;
|
|
||||||
width = primaryImageAspectRatio ? Math.round(height * primaryImageAspectRatio) : null;
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.AlbumId, {
|
|
||||||
type: "Primary",
|
|
||||||
maxHeight: height,
|
|
||||||
maxWidth: width,
|
|
||||||
tag: item.AlbumPrimaryImageTag,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
if (primaryImageAspectRatio) {
|
|
||||||
if (uiAspect) {
|
|
||||||
if (Math.abs(primaryImageAspectRatio - uiAspect) <= .2) {
|
|
||||||
coverImage = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (item.Type == 'Season' && item.ImageTags && item.ImageTags.Thumb) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.ImageTags.Thumb,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (item.BackdropImageTags && item.BackdropImageTags.length) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Backdrop",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.BackdropImageTags[0],
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (item.ImageTags && item.ImageTags.Thumb) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.ImageTags.Thumb,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (item.SeriesThumbImageTag) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
tag: item.SeriesThumbImageTag,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (item.ParentThumbItemId) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getThumbImageUrl(item, {
|
|
||||||
type: "Thumb",
|
|
||||||
maxWidth: thumbWidth,
|
|
||||||
enableImageEnhancers: enableImageEnhancers
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (item.MediaType == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist") {
|
|
||||||
|
|
||||||
if (item.Name && showTitle) {
|
|
||||||
icon = 'library-music';
|
|
||||||
}
|
|
||||||
cssClass += " defaultBackground";
|
|
||||||
|
|
||||||
} else if (item.Type == "Recording" || item.Type == "Program" || item.Type == "TvChannel") {
|
|
||||||
|
|
||||||
if (item.Name && showTitle) {
|
|
||||||
icon = 'folder-open';
|
|
||||||
}
|
|
||||||
|
|
||||||
cssClass += " defaultBackground";
|
|
||||||
} else if (item.MediaType == "Video" || item.Type == "Season" || item.Type == "Series") {
|
|
||||||
|
|
||||||
if (item.Name && showTitle) {
|
|
||||||
icon = 'videocam';
|
|
||||||
}
|
|
||||||
cssClass += " defaultBackground";
|
|
||||||
} else if (item.Type == "Person") {
|
|
||||||
|
|
||||||
if (item.Name && showTitle) {
|
|
||||||
icon = 'person';
|
|
||||||
}
|
|
||||||
cssClass += " defaultBackground";
|
|
||||||
} else {
|
|
||||||
if (item.Name && showTitle) {
|
|
||||||
icon = 'folder-open';
|
|
||||||
}
|
|
||||||
cssClass += " defaultBackground";
|
|
||||||
}
|
|
||||||
|
|
||||||
icon = item.icon || icon;
|
|
||||||
cssClass += ' ' + options.shape + 'Card';
|
|
||||||
|
|
||||||
var mediaSourceCount = item.MediaSourceCount || 1;
|
|
||||||
|
|
||||||
var href = options.linkItem === false ? '#' : LibraryBrowser.getHref(item, options.context);
|
|
||||||
|
|
||||||
if (options.showChildCountIndicator && item.ChildCount && options.showLatestItemsPopup !== false) {
|
|
||||||
cssClass += ' groupedCard';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((showTitle || options.showItemCounts) && !options.overlayText) {
|
|
||||||
cssClass += ' bottomPaddedCard';
|
|
||||||
}
|
|
||||||
|
|
||||||
var dataAttributes = LibraryBrowser.getItemDataAttributesList(item, options, index);
|
|
||||||
|
|
||||||
for (var i = 0, length = dataAttributes.length; i < length; i++) {
|
|
||||||
var att = dataAttributes[i];
|
|
||||||
if (att.value) {
|
|
||||||
item['data-' + att.name] = att.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultAction = options.defaultAction;
|
|
||||||
if (defaultAction == 'play' || defaultAction == 'playallfromhere') {
|
|
||||||
if (item.PlayAccess != 'Full') {
|
|
||||||
defaultAction = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// card
|
|
||||||
//html += '<div' + dataAttributes + ' class="' + cssClass + '">';
|
|
||||||
item.elemClass = cssClass;
|
|
||||||
item.defaultAction = defaultAction;
|
|
||||||
|
|
||||||
var style = "";
|
|
||||||
|
|
||||||
if (imgUrl && !options.lazy) {
|
|
||||||
style += 'background-image:url(\'' + imgUrl + '\');';
|
|
||||||
}
|
|
||||||
|
|
||||||
var imageCssClass = 'cardImage';
|
|
||||||
|
|
||||||
if (icon) {
|
|
||||||
imageCssClass += " iconCardImage";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (coverImage) {
|
|
||||||
imageCssClass += " coveredCardImage";
|
|
||||||
if (item.MediaType == 'Photo' || item.Type == 'PhotoAlbum' || item.Type == 'Folder' || item.Type == 'Program' || item.Type == 'Recording') {
|
|
||||||
imageCssClass += " noScale";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (options.centerImage) {
|
|
||||||
imageCssClass += " centeredCardImage";
|
|
||||||
}
|
|
||||||
|
|
||||||
var dataSrc = "";
|
|
||||||
|
|
||||||
if (options.lazy && imgUrl) {
|
|
||||||
imageCssClass += " lazy";
|
|
||||||
dataSrc = ' data-src="' + imgUrl + '"';
|
|
||||||
}
|
|
||||||
|
|
||||||
var cardboxCssClass = 'cardBox';
|
|
||||||
|
|
||||||
if (options.cardLayout) {
|
|
||||||
cardboxCssClass += ' visualCardBox';
|
|
||||||
}
|
|
||||||
|
|
||||||
item.cardBoxClass = cardboxCssClass;
|
|
||||||
|
|
||||||
var anchorCssClass = "cardContent";
|
|
||||||
|
|
||||||
anchorCssClass += ' mediaItem';
|
|
||||||
|
|
||||||
if (defaultAction) {
|
|
||||||
anchorCssClass += ' itemWithAction';
|
|
||||||
}
|
|
||||||
|
|
||||||
item.anchorClass = anchorCssClass;
|
|
||||||
item.href = href;
|
|
||||||
item.imgUrl = imgUrl;
|
|
||||||
item.imageClass = imageCssClass;
|
|
||||||
|
|
||||||
if (imgUrl) {
|
|
||||||
item.imageStyle = 'background-image:url("' + imgUrl + '");';
|
|
||||||
} else {
|
|
||||||
item.imageStyle = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var overlayHtml = '';
|
|
||||||
|
|
||||||
if (item.LocationType == "Virtual" || item.LocationType == "Offline") {
|
|
||||||
if (options.showLocationTypeIndicator !== false) {
|
|
||||||
overlayHtml += LibraryBrowser.getOfflineIndicatorHtml(item);
|
|
||||||
}
|
|
||||||
} else if (options.showUnplayedIndicator !== false) {
|
|
||||||
overlayHtml += LibraryBrowser.getPlayedIndicatorHtml(item);
|
|
||||||
} else if (options.showChildCountIndicator) {
|
|
||||||
overlayHtml += LibraryBrowser.getGroupCountIndicator(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
overlayHtml += LibraryBrowser.getSyncIndicator(item);
|
|
||||||
|
|
||||||
if (mediaSourceCount > 1) {
|
|
||||||
overlayHtml += '<div class="mediaSourceIndicator">' + mediaSourceCount + '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
var progressHtml = options.showProgress === false || item.IsFolder ? '' : LibraryBrowser.getItemProgressBarHtml((item.Type == 'Recording' ? item : item.UserData));
|
|
||||||
|
|
||||||
var footerOverlayed = false;
|
|
||||||
|
|
||||||
if (options.overlayText || (forceName && !showTitle)) {
|
|
||||||
|
|
||||||
var footerCssClass = progressHtml ? 'cardFooter fullCardFooter' : 'cardFooter';
|
|
||||||
|
|
||||||
overlayHtml += LibraryBrowser.getCardFooterText(item, options, showTitle, imgUrl, forceName, footerCssClass, progressHtml);
|
|
||||||
footerOverlayed = true;
|
|
||||||
}
|
|
||||||
else if (progressHtml) {
|
|
||||||
overlayHtml += '<div class="cardFooter fullCardFooter lightCardFooter">';
|
|
||||||
overlayHtml += "<div class='cardProgress cardText'>";
|
|
||||||
overlayHtml += progressHtml;
|
|
||||||
overlayHtml += "</div>";
|
|
||||||
//cardFooter
|
|
||||||
overlayHtml += "</div>";
|
|
||||||
|
|
||||||
progressHtml = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.overlayPlayButton && !item.IsPlaceHolder && (item.LocationType != 'Virtual' || !item.MediaType || item.Type == 'Program') && item.Type != 'Person') {
|
|
||||||
overlayHtml += '<div class="cardOverlayButtonContainer"><paper-icon-button icon="play-arrow" class="cardOverlayPlayButton" onclick="return false;"></paper-icon-button></div>';
|
|
||||||
}
|
|
||||||
if (options.overlayMoreButton) {
|
|
||||||
overlayHtml += '<div class="cardOverlayButtonContainer"><paper-icon-button icon="' + AppInfo.moreIcon + '" class="cardOverlayMoreButton" onclick="return false;"></paper-icon-button></div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
//// cardScalable
|
|
||||||
|
|
||||||
if (!options.overlayText && !footerOverlayed) {
|
|
||||||
item.footerHtml = LibraryBrowser.getCardFooterText(item, options, showTitle, imgUrl, forceName, 'cardFooter outerCardFooter', progressHtml);
|
|
||||||
} else {
|
|
||||||
item.footerHtml = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
item.overlayHtml = overlayHtml;
|
|
||||||
},
|
|
||||||
|
|
||||||
getPosterViewHtml: function (options) {
|
getPosterViewHtml: function (options) {
|
||||||
|
|
||||||
LibraryBrowser.setPosterViewData(options);
|
LibraryBrowser.setPosterViewData(options);
|
||||||
|
@ -2370,6 +1958,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
var showTitle = options.showTitle == 'auto' ? true : options.showTitle;
|
var showTitle = options.showTitle == 'auto' ? true : options.showTitle;
|
||||||
|
|
||||||
|
if (item.Type == 'PhotoAlbum') {
|
||||||
|
showTitle = true;
|
||||||
|
}
|
||||||
var coverImage = options.coverImage;
|
var coverImage = options.coverImage;
|
||||||
|
|
||||||
if (options.autoThumb && item.ImageTags && item.ImageTags.Primary && item.PrimaryImageAspectRatio && item.PrimaryImageAspectRatio >= 1.34) {
|
if (options.autoThumb && item.ImageTags && item.ImageTags.Primary && item.PrimaryImageAspectRatio && item.PrimaryImageAspectRatio >= 1.34) {
|
||||||
|
@ -3419,10 +3011,6 @@
|
||||||
html += '</paper-radio-group>';
|
html += '</paper-radio-group>';
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
//html += '<div class="buttons">';
|
|
||||||
//html += '<paper-button dialog-dismiss>' + Globalize.translate('ButtonClose') + '</paper-button>';
|
|
||||||
//html += '</div>';
|
|
||||||
|
|
||||||
dlg.innerHTML = html;
|
dlg.innerHTML = html;
|
||||||
document.body.appendChild(dlg);
|
document.body.appendChild(dlg);
|
||||||
|
|
||||||
|
@ -3877,13 +3465,13 @@
|
||||||
if (item.IsSeries && !item.IsRepeat) {
|
if (item.IsSeries && !item.IsRepeat) {
|
||||||
|
|
||||||
require(['livetvcss']);
|
require(['livetvcss']);
|
||||||
miscInfo.push('<span class="newTvProgram">' + Globalize.translate('LabelNewProgram') + '</span>');
|
miscInfo.push('<span class="newTvProgram">' + Globalize.translate('AttributeNew') + '</span>');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.IsLive) {
|
if (item.IsLive) {
|
||||||
|
|
||||||
miscInfo.push('<span class="liveTvProgram">' + Globalize.translate('LabelLiveProgram') + '</span>');
|
miscInfo.push('<span class="liveTvProgram">' + Globalize.translate('AttributeLive') + '</span>');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,13 +59,13 @@
|
||||||
html += '<div class="tvProgramTime">';
|
html += '<div class="tvProgramTime">';
|
||||||
|
|
||||||
if (program.IsLive) {
|
if (program.IsLive) {
|
||||||
html += '<span class="liveTvProgram">' + Globalize.translate('LabelLiveProgram') + ' </span>';
|
html += '<span class="liveTvProgram">' + Globalize.translate('AttributeLive') + ' </span>';
|
||||||
}
|
}
|
||||||
else if (program.IsPremiere) {
|
else if (program.IsPremiere) {
|
||||||
html += '<span class="premiereTvProgram">' + Globalize.translate('LabelPremiereProgram') + ' </span>';
|
html += '<span class="premiereTvProgram">' + Globalize.translate('AttributePremiere') + ' </span>';
|
||||||
}
|
}
|
||||||
else if (program.IsSeries && !program.IsRepeat) {
|
else if (program.IsSeries && !program.IsRepeat) {
|
||||||
html += '<span class="newTvProgram">' + Globalize.translate('LabelNewProgram') + ' </span>';
|
html += '<span class="newTvProgram">' + Globalize.translate('AttributeNew') + ' </span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
var minutes = program.RunTimeTicks / 600000000;
|
var minutes = program.RunTimeTicks / 600000000;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define([], function () {
|
define(['tvguide'], function (tvguide) {
|
||||||
|
|
||||||
window.LiveTvPage.initGuideTab = function (page, tabContent) {
|
window.LiveTvPage.initGuideTab = function (page, tabContent) {
|
||||||
|
|
||||||
|
@ -6,17 +6,10 @@
|
||||||
|
|
||||||
window.LiveTvPage.renderGuideTab = function (page, tabContent) {
|
window.LiveTvPage.renderGuideTab = function (page, tabContent) {
|
||||||
|
|
||||||
if (page.guideInstance) {
|
if (!page.guideInstance) {
|
||||||
if (LibraryBrowser.needsRefresh(tabContent)) {
|
|
||||||
page.guideInstance.refresh();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
require(['tvguide'], function (tvguide) {
|
|
||||||
|
|
||||||
page.guideInstance = new tvguide({
|
page.guideInstance = new tvguide({
|
||||||
element: tabContent,
|
element: tabContent
|
||||||
enableHeadRoom: true
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -207,6 +207,22 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
pageIdOn('viewshow', "liveTvSuggestedPage", function () {
|
||||||
|
|
||||||
|
var page = this;
|
||||||
|
|
||||||
|
// Needed on the guide tab
|
||||||
|
// Ideally this should be moved to the guide tab on show/hide
|
||||||
|
document.body.classList.add('autoScrollY');
|
||||||
|
});
|
||||||
|
|
||||||
|
pageIdOn('viewbeforehide', "liveTvSuggestedPage", function () {
|
||||||
|
|
||||||
|
var page = this;
|
||||||
|
|
||||||
|
document.body.classList.remove('autoScrollY');
|
||||||
|
});
|
||||||
|
|
||||||
window.LiveTvPage = {
|
window.LiveTvPage = {
|
||||||
renderSuggestedTab: renderSuggestedTab,
|
renderSuggestedTab: renderSuggestedTab,
|
||||||
initSuggestedTab: initSuggestedTab
|
initSuggestedTab: initSuggestedTab
|
||||||
|
|
|
@ -3,15 +3,15 @@
|
||||||
var view = 'Poster';
|
var view = 'Poster';
|
||||||
|
|
||||||
var data = {};
|
var data = {};
|
||||||
function getQuery(tab) {
|
function getQuery() {
|
||||||
|
|
||||||
var key = getSavedQueryKey(tab);
|
var key = getSavedQueryKey();
|
||||||
var pageData = data[key];
|
var pageData = data[key];
|
||||||
|
|
||||||
if (!pageData) {
|
if (!pageData) {
|
||||||
pageData = data[key] = {
|
pageData = data[key] = {
|
||||||
query: {
|
query: {
|
||||||
SortBy: "SortName",
|
SortBy: "IsFolder,SortName",
|
||||||
SortOrder: "Ascending",
|
SortOrder: "Ascending",
|
||||||
Fields: "PrimaryImageAspectRatio,SortName,SyncInfo",
|
Fields: "PrimaryImageAspectRatio,SortName,SyncInfo",
|
||||||
ImageTypeLimit: 1,
|
ImageTypeLimit: 1,
|
||||||
|
@ -20,24 +20,26 @@
|
||||||
Limit: LibraryBrowser.getDefaultPageSize()
|
Limit: LibraryBrowser.getDefaultPageSize()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
setQueryPerTab(tab, pageData.query);
|
|
||||||
pageData.query.ParentId = LibraryMenu.getTopParentId();
|
pageData.query.Recursive = false;
|
||||||
|
pageData.query.MediaTypes = null;
|
||||||
|
pageData.query.ParentId = getParameterByName('parentId') || LibraryMenu.getTopParentId();
|
||||||
|
|
||||||
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||||
}
|
}
|
||||||
return pageData.query;
|
return pageData.query;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSavedQueryKey(tab) {
|
function getSavedQueryKey() {
|
||||||
|
|
||||||
return LibraryBrowser.getSavedQueryKey('tab=' + tab);
|
return LibraryBrowser.getSavedQueryKey('v1');
|
||||||
}
|
}
|
||||||
|
|
||||||
function reloadItems(page, tabIndex) {
|
function reloadItems(page) {
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
var query = getQuery(tabIndex);
|
var query = getQuery();
|
||||||
|
|
||||||
ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) {
|
ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) {
|
||||||
|
|
||||||
// Scroll back up so they can see the results from the beginning
|
// Scroll back up so they can see the results from the beginning
|
||||||
|
@ -63,7 +65,7 @@
|
||||||
overlayText: true,
|
overlayText: true,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
coverImage: true,
|
coverImage: true,
|
||||||
showTitle: tabIndex == 0,
|
showTitle: false,
|
||||||
centerText: true
|
centerText: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -74,38 +76,20 @@
|
||||||
|
|
||||||
$('.btnNextPage', page).on('click', function () {
|
$('.btnNextPage', page).on('click', function () {
|
||||||
query.StartIndex += query.Limit;
|
query.StartIndex += query.Limit;
|
||||||
reloadItems(page, tabIndex);
|
reloadItems(page);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.btnPreviousPage', page).on('click', function () {
|
$('.btnPreviousPage', page).on('click', function () {
|
||||||
query.StartIndex -= query.Limit;
|
query.StartIndex -= query.Limit;
|
||||||
reloadItems(page, tabIndex);
|
reloadItems(page);
|
||||||
});
|
});
|
||||||
|
|
||||||
LibraryBrowser.saveQueryValues(getSavedQueryKey(tabIndex), query);
|
LibraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function setQueryPerTab(tab, query) {
|
|
||||||
|
|
||||||
if (tab == 1) {
|
|
||||||
query.Recursive = true;
|
|
||||||
query.MediaTypes = 'Photo';
|
|
||||||
}
|
|
||||||
else if (tab == 2) {
|
|
||||||
query.Recursive = true;
|
|
||||||
query.MediaTypes = 'Video';
|
|
||||||
}
|
|
||||||
else if (tab == 0) {
|
|
||||||
query.Recursive = false;
|
|
||||||
query.MediaTypes = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
query.ParentId = getParameterByName('parentId') || LibraryMenu.getTopParentId();
|
|
||||||
}
|
|
||||||
|
|
||||||
function startSlideshow(page, itemQuery, startItemId) {
|
function startSlideshow(page, itemQuery, startItemId) {
|
||||||
|
|
||||||
var userId = Dashboard.getCurrentUserId();
|
var userId = Dashboard.getCurrentUserId();
|
||||||
|
@ -155,54 +139,18 @@
|
||||||
var info = LibraryBrowser.getListItemInfo(this);
|
var info = LibraryBrowser.getListItemInfo(this);
|
||||||
|
|
||||||
if (info.mediaType == 'Photo') {
|
if (info.mediaType == 'Photo') {
|
||||||
var query = getQuery(LibraryBrowser.selectedTab(page.querySelector('.pageTabsContainer')));
|
var query = getQuery();
|
||||||
|
|
||||||
Photos.startSlideshow(page, query, info.id);
|
Photos.startSlideshow(page, query, info.id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadTab(page, index) {
|
|
||||||
|
|
||||||
switch (index) {
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
{
|
|
||||||
reloadItems(page.querySelector('.albumTabContent'), 0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
reloadItems(page.querySelector('.photoTabContent'), 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
{
|
|
||||||
reloadItems(page.querySelector('.videoTabContent'), 2);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pageIdOn('pageinit', "photosPage", function () {
|
pageIdOn('pageinit', "photosPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
var tabs = page.querySelector('paper-tabs');
|
reloadItems(page, 0);
|
||||||
|
|
||||||
var baseUrl = 'photos.html';
|
|
||||||
var topParentId = LibraryMenu.getTopParentId();
|
|
||||||
if (topParentId) {
|
|
||||||
baseUrl += '?topParentId=' + topParentId;
|
|
||||||
}
|
|
||||||
|
|
||||||
LibraryBrowser.configurePaperLibraryTabs(page, tabs, page.querySelector('.pageTabsContainer'), baseUrl);
|
|
||||||
|
|
||||||
page.querySelector('.pageTabsContainer').addEventListener('tabchange', function (e) {
|
|
||||||
loadTab(page, parseInt(e.detail.selectedTabIndex));
|
|
||||||
});
|
|
||||||
|
|
||||||
$(page).on('click', '.mediaItem', onListItemClick);
|
$(page).on('click', '.mediaItem', onListItemClick);
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
|
|
||||||
function showPlaybackOverlay(resolve, reject) {
|
function showPlaybackOverlay(resolve, reject) {
|
||||||
|
|
||||||
require(['dialogHelper', 'paper-fab', 'paper-item-body', 'paper-icon-item'], function (dialogHelper) {
|
require(['dialogHelper', 'paper-fab', 'paper-item-body', 'paper-icon-item', 'paper-button'], function (dialogHelper) {
|
||||||
|
|
||||||
var dlg = dialogHelper.createDialog({
|
var dlg = dialogHelper.createDialog({
|
||||||
size: 'fullscreen-border'
|
size: 'fullscreen-border'
|
||||||
|
@ -297,4 +297,5 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return window.RegistrationServices;
|
||||||
});
|
});
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'jQuery', 'appSettings', 'scrollStyles'], function (LibraryBrowser, $, appSettings) {
|
define(['libraryBrowser', 'jQuery', 'appSettings', 'scrollStyles', 'paper-button'], function (LibraryBrowser, $, appSettings) {
|
||||||
|
|
||||||
function getUserViews(userId) {
|
function getUserViews(userId) {
|
||||||
|
|
||||||
|
|
|
@ -1481,7 +1481,7 @@ var AppInfo = {};
|
||||||
console.log('loaded ApiClient singleton');
|
console.log('loaded ApiClient singleton');
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1605,7 +1605,6 @@ var AppInfo = {};
|
||||||
|
|
||||||
var paths = {
|
var paths = {
|
||||||
velocity: bowerPath + "/velocity/velocity.min",
|
velocity: bowerPath + "/velocity/velocity.min",
|
||||||
tvguide: 'components/tvguide/tvguide',
|
|
||||||
ironCardList: 'components/ironcardlist/ironcardlist',
|
ironCardList: 'components/ironcardlist/ironcardlist',
|
||||||
scrollThreshold: 'components/scrollthreshold',
|
scrollThreshold: 'components/scrollthreshold',
|
||||||
directorybrowser: 'components/directorybrowser/directorybrowser',
|
directorybrowser: 'components/directorybrowser/directorybrowser',
|
||||||
|
@ -1635,7 +1634,9 @@ var AppInfo = {};
|
||||||
layoutManager: embyWebComponentsBowerPath + "/layoutmanager",
|
layoutManager: embyWebComponentsBowerPath + "/layoutmanager",
|
||||||
pageJs: embyWebComponentsBowerPath + '/page.js/page',
|
pageJs: embyWebComponentsBowerPath + '/page.js/page',
|
||||||
focusManager: embyWebComponentsBowerPath + "/focusmanager",
|
focusManager: embyWebComponentsBowerPath + "/focusmanager",
|
||||||
|
datetime: embyWebComponentsBowerPath + "/datetime",
|
||||||
globalize: embyWebComponentsBowerPath + "/globalize",
|
globalize: embyWebComponentsBowerPath + "/globalize",
|
||||||
|
itemShortcuts: embyWebComponentsBowerPath + "/shortcuts",
|
||||||
imageLoader: embyWebComponentsBowerPath + "/images/imagehelper"
|
imageLoader: embyWebComponentsBowerPath + "/images/imagehelper"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1667,6 +1668,11 @@ var AppInfo = {};
|
||||||
define("backdrop", [embyWebComponentsBowerPath + "/backdrop/backdrop"], returnFirstDependency);
|
define("backdrop", [embyWebComponentsBowerPath + "/backdrop/backdrop"], returnFirstDependency);
|
||||||
define("fetchHelper", [embyWebComponentsBowerPath + "/fetchhelper"], returnFirstDependency);
|
define("fetchHelper", [embyWebComponentsBowerPath + "/fetchhelper"], returnFirstDependency);
|
||||||
|
|
||||||
|
define("tvguide", [embyWebComponentsBowerPath + "/guide/guide", 'embyRouter'], function (tvGuide, embyRouter) {
|
||||||
|
tvGuide.setBaseUrl(embyRouter.baseUrl() + '/bower_components/emby-webcomponents/guide');
|
||||||
|
return tvGuide;
|
||||||
|
});
|
||||||
|
|
||||||
define("viewManager", [embyWebComponentsBowerPath + "/viewmanager"], function (viewManager) {
|
define("viewManager", [embyWebComponentsBowerPath + "/viewmanager"], function (viewManager) {
|
||||||
viewManager.dispatchPageEvents(true);
|
viewManager.dispatchPageEvents(true);
|
||||||
return viewManager;
|
return viewManager;
|
||||||
|
@ -1786,12 +1792,13 @@ var AppInfo = {};
|
||||||
define('webcomponentsjs', [bowerPath + '/webcomponentsjs/webcomponents-lite.min.js']);
|
define('webcomponentsjs', [bowerPath + '/webcomponentsjs/webcomponents-lite.min.js']);
|
||||||
define('native-promise-only', [bowerPath + '/native-promise-only/lib/npo.src']);
|
define('native-promise-only', [bowerPath + '/native-promise-only/lib/npo.src']);
|
||||||
define("fingerprintjs2", [bowerPath + '/fingerprintjs2/fingerprint2'], returnFirstDependency);
|
define("fingerprintjs2", [bowerPath + '/fingerprintjs2/fingerprint2'], returnFirstDependency);
|
||||||
|
define("clearButtonStyle", ['css!' + embyWebComponentsBowerPath + '/clearbutton']);
|
||||||
|
|
||||||
if (Dashboard.isRunningInCordova()) {
|
if (Dashboard.isRunningInCordova()) {
|
||||||
define('registrationservices', ['cordova/registrationservices']);
|
define('registrationservices', ['cordova/registrationservices'], returnFirstDependency);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
define('registrationservices', ['scripts/registrationservices']);
|
define('registrationservices', ['scripts/registrationservices'], returnFirstDependency);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Dashboard.isRunningInCordova()) {
|
if (Dashboard.isRunningInCordova()) {
|
||||||
|
@ -1866,6 +1873,12 @@ var AppInfo = {};
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// mock this for now. not used in this app
|
||||||
|
define("playbackManager", [], function () {
|
||||||
|
return {
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
// mock this for now. not used in this app
|
// mock this for now. not used in this app
|
||||||
define("pluginManager", [], function () {
|
define("pluginManager", [], function () {
|
||||||
return {
|
return {
|
||||||
|
@ -1884,7 +1897,7 @@ var AppInfo = {};
|
||||||
|
|
||||||
define('dialogText', ['globalize'], getDialogText());
|
define('dialogText', ['globalize'], getDialogText());
|
||||||
|
|
||||||
define("router", [embyWebComponentsBowerPath + '/router'], function (embyRouter) {
|
define("embyRouter", [embyWebComponentsBowerPath + '/router'], function (embyRouter) {
|
||||||
|
|
||||||
embyRouter.showLocalLogin = function (apiClient, serverId, manualLogin) {
|
embyRouter.showLocalLogin = function (apiClient, serverId, manualLogin) {
|
||||||
Dashboard.navigate('login.html?serverid=' + serverId);
|
Dashboard.navigate('login.html?serverid=' + serverId);
|
||||||
|
@ -1907,6 +1920,17 @@ var AppInfo = {};
|
||||||
Dashboard.navigate('mypreferencesmenu.html?userId=' + ApiClient.getCurrentUserId());
|
Dashboard.navigate('mypreferencesmenu.html?userId=' + ApiClient.getCurrentUserId());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
embyRouter.showItem = function (item) {
|
||||||
|
if (typeof (item) === 'string') {
|
||||||
|
require(['connectionManager'], function (connectionManager) {
|
||||||
|
var apiClient = connectionManager.currentApiClient();
|
||||||
|
apiClient.getItem(apiClient.getCurrentUserId(), item).then(showItem);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Dashboard.navigate(LibraryBrowser.getHref(item));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return embyRouter;
|
return embyRouter;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2521,7 +2545,7 @@ var AppInfo = {};
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/movies.html',
|
path: '/movies.html',
|
||||||
dependencies: ['paper-tabs', 'paper-checkbox', 'paper-fab', 'scripts/alphapicker'],
|
dependencies: ['paper-tabs', 'paper-checkbox', 'paper-fab', 'scripts/alphapicker', 'paper-button'],
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
controller: 'scripts/moviesrecommended'
|
controller: 'scripts/moviesrecommended'
|
||||||
});
|
});
|
||||||
|
@ -2873,7 +2897,7 @@ var AppInfo = {};
|
||||||
var deps = [];
|
var deps = [];
|
||||||
|
|
||||||
deps.push('imageLoader');
|
deps.push('imageLoader');
|
||||||
deps.push('router');
|
deps.push('embyRouter');
|
||||||
deps.push('layoutManager');
|
deps.push('layoutManager');
|
||||||
|
|
||||||
if (!(AppInfo.isNativeApp && browserInfo.android)) {
|
if (!(AppInfo.isNativeApp && browserInfo.android)) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['jQuery', 'paper-progress', 'paper-fab', 'paper-item-body', 'paper-icon-item', 'paper-icon-button'], function ($) {
|
define(['jQuery', 'paper-progress', 'paper-fab', 'paper-item-body', 'paper-icon-item', 'paper-icon-button', 'paper-button'], function ($) {
|
||||||
|
|
||||||
function renderJob(page, job, dialogOptions) {
|
function renderJob(page, job, dialogOptions) {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['appStorage', 'jQuery'], function (appStorage, $) {
|
define(['appStorage', 'jQuery', 'paper-button'], function (appStorage, $) {
|
||||||
|
|
||||||
$.fn.taskButton = function (options) {
|
$.fn.taskButton = function (options) {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="selectServerPage" data-role="page" class="page noSecondaryNavPage standalonePage" data-theme="b" data-require="scripts/selectserver,paper-fab,paper-item-body,paper-icon-item">
|
<div id="selectServerPage" data-role="page" class="page noSecondaryNavPage standalonePage" data-theme="b" data-require="scripts/selectserver,paper-fab,paper-item-body,paper-icon-item,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="serverSecurityPage" data-role="page" class="page type-interior advancedConfigurationPage withTabs" data-require="jqmtable,scripts/serversecurity,detailtablecss">
|
<div id="serverSecurityPage" data-role="page" class="page type-interior advancedConfigurationPage withTabs" data-require="jqmtable,scripts/serversecurity,detailtablecss,paper-button">
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
<div class="detailSectionHeader">
|
<div class="detailSectionHeader">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="streamingSettingsPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Streaming" data-require="scripts/streamingsettings,paper-input">
|
<div id="streamingSettingsPage" data-role="page" class="page type-interior playbackConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Streaming" data-require="scripts/streamingsettings,paper-input,paper-button">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div class="content-primary">
|
<div class="content-primary">
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuing",
|
"OptionContinuing": "Continuing",
|
||||||
"OptionEnded": "Ended",
|
"OptionEnded": "Ended",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "Air Days",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "\u0627\u0644\u0627\u062d\u062f",
|
"OptionSunday": "\u0627\u0644\u0627\u062d\u062f",
|
||||||
"OptionMonday": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
|
"OptionMonday": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
|
||||||
"OptionTuesday": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
|
"OptionTuesday": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "\u041f\u0440\u043e\u0434\u044a\u043b\u0436\u0430\u0432\u0430\u0449\u043e",
|
"OptionContinuing": "\u041f\u0440\u043e\u0434\u044a\u043b\u0436\u0430\u0432\u0430\u0449\u043e",
|
||||||
"OptionEnded": "\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0438\u043b\u043e",
|
"OptionEnded": "\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0438\u043b\u043e",
|
||||||
"HeaderAirDays": "\u0414\u043d\u0438 \u043d\u0430 \u0438\u0437\u043b\u044a\u0447\u0432\u0430\u043d\u0435",
|
"HeaderAirDays": "\u0414\u043d\u0438 \u043d\u0430 \u0438\u0437\u043b\u044a\u0447\u0432\u0430\u043d\u0435",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "\u041d\u0435\u0434\u0435\u043b\u044f",
|
"OptionSunday": "\u041d\u0435\u0434\u0435\u043b\u044f",
|
||||||
"OptionMonday": "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
|
"OptionMonday": "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
|
||||||
"OptionTuesday": "\u0412\u0442\u043e\u0440\u043d\u0438\u043a",
|
"OptionTuesday": "\u0412\u0442\u043e\u0440\u043d\u0438\u043a",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuant",
|
"OptionContinuing": "Continuant",
|
||||||
"OptionEnded": "Acabades",
|
"OptionEnded": "Acabades",
|
||||||
"HeaderAirDays": "Dies d'Emissi\u00f3",
|
"HeaderAirDays": "Dies d'Emissi\u00f3",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Diumenge",
|
"OptionSunday": "Diumenge",
|
||||||
"OptionMonday": "Dilluns",
|
"OptionMonday": "Dilluns",
|
||||||
"OptionTuesday": "Dimarts",
|
"OptionTuesday": "Dimarts",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Pokra\u010dov\u00e1n\u00ed",
|
"OptionContinuing": "Pokra\u010dov\u00e1n\u00ed",
|
||||||
"OptionEnded": "Ukon\u010deno",
|
"OptionEnded": "Ukon\u010deno",
|
||||||
"HeaderAirDays": "Vys\u00edl\u00e1no ve dnech",
|
"HeaderAirDays": "Vys\u00edl\u00e1no ve dnech",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Ned\u011ble",
|
"OptionSunday": "Ned\u011ble",
|
||||||
"OptionMonday": "Pond\u011bl\u00ed",
|
"OptionMonday": "Pond\u011bl\u00ed",
|
||||||
"OptionTuesday": "\u00dater\u00fd",
|
"OptionTuesday": "\u00dater\u00fd",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "M\u00edsto v\u00fdroby",
|
"OptionProductionLocations": "M\u00edsto v\u00fdroby",
|
||||||
"OptionBirthLocation": "M\u00edsto narozen\u00ed",
|
"OptionBirthLocation": "M\u00edsto narozen\u00ed",
|
||||||
"LabelAllChannels": "V\u0161echny kan\u00e1ly",
|
"LabelAllChannels": "V\u0161echny kan\u00e1ly",
|
||||||
"LabelLiveProgram": "\u017dIV\u011a",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NOVINKA",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMI\u00c9RA",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Zm\u011bna typu obsahu",
|
"HeaderChangeFolderType": "Zm\u011bna typu obsahu",
|
||||||
"HeaderChangeFolderTypeHelp": "Chcete-li zm\u011bnit typ, vyjm\u011bte a znovu prohledejte knihovny s nov\u011b p\u0159i\u0159azen\u00fdm typem.",
|
"HeaderChangeFolderTypeHelp": "Chcete-li zm\u011bnit typ, vyjm\u011bte a znovu prohledejte knihovny s nov\u011b p\u0159i\u0159azen\u00fdm typem.",
|
||||||
|
@ -2335,12 +2342,12 @@
|
||||||
"ErrorAddingGuestAccount1": "Do\u0161lo k chyb\u011b p\u0159i p\u0159id\u00e1v\u00e1n\u00ed \u00fa\u010dtu Emby Connect. M\u00e1 v\u00e1\u0161 nov\u00fd u\u017eivatel vytvo\u0159en\u00fd \u00fa\u010det Emby? U\u017eivatel\u00e9 se mohou p\u0159ihl\u00e1sit na {0}.",
|
"ErrorAddingGuestAccount1": "Do\u0161lo k chyb\u011b p\u0159i p\u0159id\u00e1v\u00e1n\u00ed \u00fa\u010dtu Emby Connect. M\u00e1 v\u00e1\u0161 nov\u00fd u\u017eivatel vytvo\u0159en\u00fd \u00fa\u010det Emby? U\u017eivatel\u00e9 se mohou p\u0159ihl\u00e1sit na {0}.",
|
||||||
"ErrorAddingGuestAccount2": "Ujist\u011bte se pros\u00edm, \u017ee v\u00e1\u0161 nov\u00fd u\u017eivatel dokon\u010dil aktivaci dle pokyn\u016f z e-mailu zaslan\u00e9m po vytvo\u0159en\u00ed \u00fa\u010dtu. Jestli\u017ee nedostali takov\u00fd e-mail, pak pros\u00edm po\u0161lete email na {0}, a p\u0159ipojte svoj\u00ed e-mailovou adresu, stejn\u011b jako jejich.",
|
"ErrorAddingGuestAccount2": "Ujist\u011bte se pros\u00edm, \u017ee v\u00e1\u0161 nov\u00fd u\u017eivatel dokon\u010dil aktivaci dle pokyn\u016f z e-mailu zaslan\u00e9m po vytvo\u0159en\u00ed \u00fa\u010dtu. Jestli\u017ee nedostali takov\u00fd e-mail, pak pros\u00edm po\u0161lete email na {0}, a p\u0159ipojte svoj\u00ed e-mailovou adresu, stejn\u011b jako jejich.",
|
||||||
"GuestUserNotFound": "U\u017eivatel nenalezen. Pros\u00edm, ujist\u011bte se, \u017ee n\u00e1zev je spr\u00e1vn\u00fd a zkuste to znovu, nebo zkuste zadat jejich e-mailovou adresu.",
|
"GuestUserNotFound": "U\u017eivatel nenalezen. Pros\u00edm, ujist\u011bte se, \u017ee n\u00e1zev je spr\u00e1vn\u00fd a zkuste to znovu, nebo zkuste zadat jejich e-mailovou adresu.",
|
||||||
"MarkPlayed": "Mark played",
|
"MarkPlayed": "Ozna\u010dit p\u0159ehran\u00e9",
|
||||||
"MarkUnplayed": "Mark unplayed",
|
"MarkUnplayed": "Ozna\u010dit nep\u0159ehran\u00e9",
|
||||||
"Yesterday": "Yesterday",
|
"Yesterday": "V\u010dera",
|
||||||
"DownloadImagesInAdvanceWarning": "Downloading all images in advance will result in longer library scan times.",
|
"DownloadImagesInAdvanceWarning": "St\u00e1hnut\u00ed v\u0161ech obr\u00e1zk\u016f p\u0159edem m\u016f\u017ee prodlou\u017eit skenov\u00e1n\u00ed knihovny.",
|
||||||
"MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.",
|
"MetadataSettingChangeHelp": "Zm\u011bna nastaven\u00ed metadat bude m\u00edt vliv na nov\u00fd obsah, kter\u00fd bude p\u0159id\u00e1v\u00e1n. Chcete-li aktualizovat st\u00e1vaj\u00edc\u00ed obsah, otev\u0159te obrazovku s detailem a klepn\u011bte na tla\u010d\u00edtko Aktualizovat, nebo prove\u010fte hromadnou aktualizaci pomoc\u00ed spr\u00e1vce metadat.",
|
||||||
"LabelTitle": "Title:",
|
"LabelTitle": "N\u00e1zev:",
|
||||||
"LabelOriginalTitle": "Original title:",
|
"LabelOriginalTitle": "Origin\u00e1ln\u00ed n\u00e1zev:",
|
||||||
"LabelSortTitle": "Sort title:"
|
"LabelSortTitle": "T\u0159\u00eddit dle n\u00e1zvu:"
|
||||||
}
|
}
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Fors\u00e6ttes",
|
"OptionContinuing": "Fors\u00e6ttes",
|
||||||
"OptionEnded": "F\u00e6rdig",
|
"OptionEnded": "F\u00e6rdig",
|
||||||
"HeaderAirDays": "Sendedage",
|
"HeaderAirDays": "Sendedage",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "S\u00f8ndag",
|
"OptionSunday": "S\u00f8ndag",
|
||||||
"OptionMonday": "Mandag",
|
"OptionMonday": "Mandag",
|
||||||
"OptionTuesday": "Tirsdag",
|
"OptionTuesday": "Tirsdag",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Produktionslokationer",
|
"OptionProductionLocations": "Produktionslokationer",
|
||||||
"OptionBirthLocation": "F\u00f8dselssted",
|
"OptionBirthLocation": "F\u00f8dselssted",
|
||||||
"LabelAllChannels": "Alle kanaler",
|
"LabelAllChannels": "Alle kanaler",
|
||||||
"LabelLiveProgram": "DIREKTE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NY",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PR\u00c6MIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "\u00c6ndre indholdstype",
|
"HeaderChangeFolderType": "\u00c6ndre indholdstype",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Fortdauernd",
|
"OptionContinuing": "Fortdauernd",
|
||||||
"OptionEnded": "Beendent",
|
"OptionEnded": "Beendent",
|
||||||
"HeaderAirDays": "Ausstrahlungstage",
|
"HeaderAirDays": "Ausstrahlungstage",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Sonntag",
|
"OptionSunday": "Sonntag",
|
||||||
"OptionMonday": "Montag",
|
"OptionMonday": "Montag",
|
||||||
"OptionTuesday": "Dienstag",
|
"OptionTuesday": "Dienstag",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Produktionsst\u00e4tten",
|
"OptionProductionLocations": "Produktionsst\u00e4tten",
|
||||||
"OptionBirthLocation": "Geburtsort",
|
"OptionBirthLocation": "Geburtsort",
|
||||||
"LabelAllChannels": "Alle Kan\u00e4le",
|
"LabelAllChannels": "Alle Kan\u00e4le",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEU",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "\u00c4ndere Inhalte Typ",
|
"HeaderChangeFolderType": "\u00c4ndere Inhalte Typ",
|
||||||
"HeaderChangeFolderTypeHelp": "Um den Typ zu \u00e4ndern, bitte entferne die Bibliothek und erstelle sie mit dem neuen Medientyp erneut.",
|
"HeaderChangeFolderTypeHelp": "Um den Typ zu \u00e4ndern, bitte entferne die Bibliothek und erstelle sie mit dem neuen Medientyp erneut.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuing",
|
"OptionContinuing": "Continuing",
|
||||||
"OptionEnded": "Ended",
|
"OptionEnded": "Ended",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "Air Days",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Sunday",
|
"OptionSunday": "Sunday",
|
||||||
"OptionMonday": "Monday",
|
"OptionMonday": "Monday",
|
||||||
"OptionTuesday": "Tuesday",
|
"OptionTuesday": "Tuesday",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuing",
|
"OptionContinuing": "Continuing",
|
||||||
"OptionEnded": "Ended",
|
"OptionEnded": "Ended",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "Air Days",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Sunday",
|
"OptionSunday": "Sunday",
|
||||||
"OptionMonday": "Monday",
|
"OptionMonday": "Monday",
|
||||||
"OptionTuesday": "Tuesday",
|
"OptionTuesday": "Tuesday",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuing",
|
"OptionContinuing": "Continuing",
|
||||||
"OptionEnded": "Ended",
|
"OptionEnded": "Ended",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "Air Days",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Sunday",
|
"OptionSunday": "Sunday",
|
||||||
"OptionMonday": "Monday",
|
"OptionMonday": "Monday",
|
||||||
"OptionTuesday": "Tuesday",
|
"OptionTuesday": "Tuesday",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuing",
|
"OptionContinuing": "Continuing",
|
||||||
"OptionEnded": "Ended",
|
"OptionEnded": "Ended",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "Air Days",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Sunday",
|
"OptionSunday": "Sunday",
|
||||||
"OptionMonday": "Monday",
|
"OptionMonday": "Monday",
|
||||||
"OptionTuesday": "Tuesday",
|
"OptionTuesday": "Tuesday",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Lugar de nacimiento",
|
"OptionBirthLocation": "Lugar de nacimiento",
|
||||||
"LabelAllChannels": "Todos los canales",
|
"LabelAllChannels": "Todos los canales",
|
||||||
"LabelLiveProgram": "EN VIVO",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NUEVO",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "ESTRENO",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuando",
|
"OptionContinuing": "Continuando",
|
||||||
"OptionEnded": "Finalizado",
|
"OptionEnded": "Finalizado",
|
||||||
"HeaderAirDays": "D\u00edas de Emisi\u00f3n",
|
"HeaderAirDays": "D\u00edas de Emisi\u00f3n",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Domingo",
|
"OptionSunday": "Domingo",
|
||||||
"OptionMonday": "Lunes",
|
"OptionMonday": "Lunes",
|
||||||
"OptionTuesday": "Martes",
|
"OptionTuesday": "Martes",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Lugares de Producci\u00f3n",
|
"OptionProductionLocations": "Lugares de Producci\u00f3n",
|
||||||
"OptionBirthLocation": "Lugar de Nacimiento",
|
"OptionBirthLocation": "Lugar de Nacimiento",
|
||||||
"LabelAllChannels": "Todos los canales",
|
"LabelAllChannels": "Todos los canales",
|
||||||
"LabelLiveProgram": "EN VIVO",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NUEVO",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "ESTRENO",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Cambiar Tipo de Contenido",
|
"HeaderChangeFolderType": "Cambiar Tipo de Contenido",
|
||||||
"HeaderChangeFolderTypeHelp": "Para cambiar el tipo, por favor elimine y reconstruya la biblioteca con el nuevo tipo.",
|
"HeaderChangeFolderTypeHelp": "Para cambiar el tipo, por favor elimine y reconstruya la biblioteca con el nuevo tipo.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuando",
|
"OptionContinuing": "Continuando",
|
||||||
"OptionEnded": "Finalizado",
|
"OptionEnded": "Finalizado",
|
||||||
"HeaderAirDays": "Dias al aire",
|
"HeaderAirDays": "Dias al aire",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Domingo",
|
"OptionSunday": "Domingo",
|
||||||
"OptionMonday": "Lunes",
|
"OptionMonday": "Lunes",
|
||||||
"OptionTuesday": "Martes",
|
"OptionTuesday": "Martes",
|
||||||
|
@ -1381,150 +1388,150 @@
|
||||||
"OptionEnableFullSpeedConversionHelp": "Por defecto, la conversi\u00f3n de las sinronizaciones se realiza a baja velocidad para minimizar el uso de recursos.",
|
"OptionEnableFullSpeedConversionHelp": "Por defecto, la conversi\u00f3n de las sinronizaciones se realiza a baja velocidad para minimizar el uso de recursos.",
|
||||||
"HeaderPlaylists": "Listas de reproducci\u00f3n",
|
"HeaderPlaylists": "Listas de reproducci\u00f3n",
|
||||||
"HeaderViewStyles": "Estilos de vistas",
|
"HeaderViewStyles": "Estilos de vistas",
|
||||||
"LabelSelectViewStyles": "Enable enhanced presentations for:",
|
"LabelSelectViewStyles": "Activar presentaciones mejoradas para:",
|
||||||
"LabelSelectViewStylesHelp": "If enabled, views will be built with metadata to offer categories such as Suggestions, Latest, Genres, and more. If disabled, they'll be displayed with simple folders.",
|
"LabelSelectViewStylesHelp": "Si est\u00e1 activado, las vistas se generar\u00e1n con los metadatos para ofrecer categor\u00edas cono Sugerencias, \u00daltimos, G\u00e9neros, y m\u00e1s. Si est\u00e1 desactivado, se mostrar\u00e1n como simples carpetas.",
|
||||||
"TabPhotos": "Photos",
|
"TabPhotos": "Fotos",
|
||||||
"TabVideos": "Videos",
|
"TabVideos": "V\u00eddeos",
|
||||||
"HeaderWelcomeToEmby": "Welcome to Emby",
|
"HeaderWelcomeToEmby": "Bienvenido a Emby",
|
||||||
"EmbyIntroMessage": "With Emby you can easily stream videos, music and photos to smart phones, tablets and other devices from your Emby Server.",
|
"EmbyIntroMessage": "Con Emby puedes transmitir v\u00eddeos, m\u00fasica y fotos a smartphones, tablets y otros dispositivos desde tu servidor Emby.",
|
||||||
"ButtonSkip": "Skip",
|
"ButtonSkip": "Saltar",
|
||||||
"TextConnectToServerManually": "Connect to server manually",
|
"TextConnectToServerManually": "Conectar al servidor manualmente",
|
||||||
"ButtonSignInWithConnect": "Sign in with Emby Connect",
|
"ButtonSignInWithConnect": "Inicia sesi\u00f3n con Emby Connect",
|
||||||
"ButtonConnect": "Connect",
|
"ButtonConnect": "Conectar",
|
||||||
"LabelServerHost": "Host:",
|
"LabelServerHost": "Host:",
|
||||||
"LabelServerHostHelp": "192.168.1.100 or https:\/\/myserver.com",
|
"LabelServerHostHelp": "192.168.1.100 o https:\/\/miservidor.com",
|
||||||
"LabelServerPort": "Port:",
|
"LabelServerPort": "Puerto:",
|
||||||
"HeaderNewServer": "New Server",
|
"HeaderNewServer": "Nuevo servidor",
|
||||||
"ButtonChangeServer": "Change Server",
|
"ButtonChangeServer": "Cambiar servidor",
|
||||||
"HeaderConnectToServer": "Connect to Server",
|
"HeaderConnectToServer": "Conectar al servidor",
|
||||||
"OptionReportList": "List View",
|
"OptionReportList": "Vista de lista",
|
||||||
"OptionReportStatistics": "Statistics",
|
"OptionReportStatistics": "Estad\u00edsticas",
|
||||||
"OptionReportGrouping": "Grouping",
|
"OptionReportGrouping": "Agrupamientos",
|
||||||
"HeaderExport": "Export",
|
"HeaderExport": "Exportar",
|
||||||
"HeaderColumns": "Columns",
|
"HeaderColumns": "Columnas",
|
||||||
"ButtonReset": "Reset",
|
"ButtonReset": "Reestablecer",
|
||||||
"OptionEnableExternalVideoPlayers": "Enable external video players",
|
"OptionEnableExternalVideoPlayers": "Activar reproductores externos",
|
||||||
"ButtonUnlockGuide": "Unlock Guide",
|
"ButtonUnlockGuide": "Gu\u00eda de desbloqueo",
|
||||||
"LabelEnableFullScreen": "Enable fullscreen mode",
|
"LabelEnableFullScreen": "Activar modo pantalla completa",
|
||||||
"LabelEnableChromecastAc3Passthrough": "Enable Chromecast AC3 Passthrough",
|
"LabelEnableChromecastAc3Passthrough": "Activar el traspaso de AC3 al Chromecast",
|
||||||
"OptionSyncToSDCard": "Synced to external SD card",
|
"OptionSyncToSDCard": "Sincronizado a la tarjeta SD externa",
|
||||||
"LabelEmail": "Email:",
|
"LabelEmail": "Correo:",
|
||||||
"LabelUsername": "Username:",
|
"LabelUsername": "Nombre de usuario:",
|
||||||
"HeaderSignUp": "Sign Up",
|
"HeaderSignUp": "Registrarse",
|
||||||
"LabelPasswordConfirm": "Password (confirm):",
|
"LabelPasswordConfirm": "Contrase\u00f1a (Confirmar):",
|
||||||
"ButtonAddServer": "Add Server",
|
"ButtonAddServer": "A\u00f1adir servidor",
|
||||||
"TabHomeScreen": "Home Screen",
|
"TabHomeScreen": "Pantalla de inicio",
|
||||||
"HeaderDisplay": "Display",
|
"HeaderDisplay": "Mostrar",
|
||||||
"HeaderNavigation": "Navigation",
|
"HeaderNavigation": "Navegaci\u00f3n",
|
||||||
"LegendTheseSettingsShared": "These settings are shared on all devices",
|
"LegendTheseSettingsShared": "Estos ajustes se comparten en todos los dispositivos",
|
||||||
"OptionEnableAutomaticServerUpdates": "Enable automatic server updates",
|
"OptionEnableAutomaticServerUpdates": "Activar actualizaciones autom\u00e1ticas del servidor",
|
||||||
"OptionOtherTrailers": "Include trailers from older movies",
|
"OptionOtherTrailers": "Incluir tr\u00e1ilers de pel\u00edculas antiguas",
|
||||||
"HeaderOverview": "Overview",
|
"HeaderOverview": "Resumen",
|
||||||
"HeaderShortOverview": "Short Overview",
|
"HeaderShortOverview": "Resumen corto",
|
||||||
"HeaderType": "Type",
|
"HeaderType": "Tipo",
|
||||||
"HeaderSeverity": "Severity",
|
"HeaderSeverity": "Severidad",
|
||||||
"OptionReportActivities": "Activities Log",
|
"OptionReportActivities": "Registro de actividades",
|
||||||
"HeaderTunerDevices": "Tuner Devices",
|
"HeaderTunerDevices": "Sintonizadores",
|
||||||
"ButtonAddDevice": "Add Device",
|
"ButtonAddDevice": "A\u00f1adir dispositivo",
|
||||||
"HeaderAddDevice": "Add Device",
|
"HeaderAddDevice": "A\u00f1adir dispositivo",
|
||||||
"HeaderExternalServices": "External Services",
|
"HeaderExternalServices": "Servicios externos",
|
||||||
"LabelTunerIpAddress": "Tuner IP Address:",
|
"LabelTunerIpAddress": "IP del sintonizador:",
|
||||||
"TabExternalServices": "External Services",
|
"TabExternalServices": "Servicios externos",
|
||||||
"TabTuners": "Tuners",
|
"TabTuners": "Sintonizadores",
|
||||||
"HeaderGuideProviders": "Guide Providers",
|
"HeaderGuideProviders": "Proveedores de gu\u00edas",
|
||||||
"AddGuideProviderHelp": "Add a source for TV Guide information",
|
"AddGuideProviderHelp": "A\u00f1adir una fuente para la gu\u00eda de TV",
|
||||||
"LabelZipCode": "Zip Code:",
|
"LabelZipCode": "C\u00f3digo Zip:",
|
||||||
"GuideProviderSelectListings": "Select Listings",
|
"GuideProviderSelectListings": "Seleccionar listados",
|
||||||
"GuideProviderLogin": "Login",
|
"GuideProviderLogin": "Login",
|
||||||
"LabelLineup": "Lineup:",
|
"LabelLineup": "Reparto:",
|
||||||
"MessageTunerDeviceNotListed": "Is your tuner device not listed? Try installing an external service provider for more Live TV options.",
|
"MessageTunerDeviceNotListed": "\u00bfNo ves tu sintonizador?, int\u00e9ntalo de nuevo a\u00f1adiendo un proveedor externo para tener m\u00e1s opciones de TV en vivo.",
|
||||||
"LabelImportOnlyFavoriteChannels": "Restrict to channels marked as favorite",
|
"LabelImportOnlyFavoriteChannels": "Reestringir a los canales marcados como favoritos",
|
||||||
"ImportFavoriteChannelsHelp": "If enabled, only channels that are marked as favorite on the tuner device will be imported.",
|
"ImportFavoriteChannelsHelp": "Si est\u00e1 activado, s\u00f3lo los canales guardados como favoritos en el sintonizador se importar\u00e1n.",
|
||||||
"ButtonRepeat": "Repeat",
|
"ButtonRepeat": "Repetir",
|
||||||
"LabelEnableThisTuner": "Enable this tuner",
|
"LabelEnableThisTuner": "Activar este sintonizador",
|
||||||
"LabelEnableThisTunerHelp": "Uncheck to prevent importing channels from this tuner.",
|
"LabelEnableThisTunerHelp": "Desmarca para evitar que se importen canales desde este sintonizador.",
|
||||||
"HeaderLocked": "Locked",
|
"HeaderLocked": "Bloqueado",
|
||||||
"HeaderUnidentified": "Unidentified",
|
"HeaderUnidentified": "Sin identificar",
|
||||||
"HeaderImagePrimary": "Primary",
|
"HeaderImagePrimary": "Principal",
|
||||||
"HeaderImageBackdrop": "Backdrop",
|
"HeaderImageBackdrop": "Fondo",
|
||||||
"HeaderImageLogo": "Logo",
|
"HeaderImageLogo": "Logo",
|
||||||
"HeaderUserPrimaryImage": "User Image",
|
"HeaderUserPrimaryImage": "Imagen de usuario",
|
||||||
"ButtonDisplaySettings": "Display settings",
|
"ButtonDisplaySettings": "Opciones de visualizaci\u00f3n",
|
||||||
"ButtonHomeScreenSettings": "Home screen settings",
|
"ButtonHomeScreenSettings": "Ajustes de la pantalla de inicio",
|
||||||
"ButtonPlaybackSettings": "Playback settings",
|
"ButtonPlaybackSettings": "Ajustes de reproducci\u00f3n",
|
||||||
"ButtonProfile": "Profile",
|
"ButtonProfile": "Perfil",
|
||||||
"ButtonDisplaySettingsHelp": "Your Emby display settings",
|
"ButtonDisplaySettingsHelp": "Tus ajustes de visualizaci\u00f3n de Emby",
|
||||||
"ButtonHomeScreenSettingsHelp": "Configure the display of your home screen",
|
"ButtonHomeScreenSettingsHelp": "Configura la visualizaci\u00f3n de tu pantalla de inicio",
|
||||||
"ButtonPlaybackSettingsHelp": "Specify your audio and subtitle preferences, streaming quality, and more.",
|
"ButtonPlaybackSettingsHelp": "Especifica los ajustes de audio, subt\u00edtulos, calidad del streaming y m\u00e1s.",
|
||||||
"ButtonProfileHelp": "Set your profile image and password.",
|
"ButtonProfileHelp": "Establece tu contrase\u00f1a e imagen de perfil",
|
||||||
"HeaderHomeScreenSettings": "Home Screen settings",
|
"HeaderHomeScreenSettings": "Ajustes de la pantalla de inicio",
|
||||||
"HeaderProfile": "Profile",
|
"HeaderProfile": "Perfil",
|
||||||
"HeaderLanguage": "Language",
|
"HeaderLanguage": "Idioma",
|
||||||
"ButtonSyncSettings": "Sync settings",
|
"ButtonSyncSettings": "Ajustes de sincronizaci\u00f3n",
|
||||||
"ButtonSyncSettingsHelp": "Configure your sync settings",
|
"ButtonSyncSettingsHelp": "Configura tus ajustes de sincronizaci\u00f3n",
|
||||||
"LabelTranscodingThreadCount": "Transcoding thread count:",
|
"LabelTranscodingThreadCount": "Cantidad de instancias de transcodificaci\u00f3n:",
|
||||||
"LabelTranscodingThreadCountHelp": "Select the maximum number of threads to use when transcoding. Reducing the thread count will lower cpu usage but may not convert fast enough for a smooth playback experience.",
|
"LabelTranscodingThreadCountHelp": "Selecciona el n\u00famero m\u00e1ximo de instancias de transcodificaci\u00f3n. Reducirlas disminuir\u00e1 la carga del procesador pero no convertir\u00e1 lo suficientemente r\u00e1pido para una reproducci\u00f3n fluida.",
|
||||||
"OptionMax": "Max",
|
"OptionMax": "M\u00e1ximo",
|
||||||
"HeaderEmbyGuide": "Emby Guide",
|
"HeaderEmbyGuide": "Gu\u00eda Emby",
|
||||||
"LabelSyncPath": "Synced content path:",
|
"LabelSyncPath": "Ruta de contenido sincronizado:",
|
||||||
"OptionSyncOnlyOnWifi": "Sync only on Wifi",
|
"OptionSyncOnlyOnWifi": "Sincronizar s\u00f3lo con Wifi",
|
||||||
"OptionSyncLosslessAudioOriginal": "Sync lossless audio at original quality",
|
"OptionSyncLosslessAudioOriginal": "Sincronizar audio sin p\u00e9rdidas en calidad original",
|
||||||
"HeaderMetadata": "Metadata",
|
"HeaderMetadata": "Metadatos",
|
||||||
"HeaderRecordingOptions": "Recording Options",
|
"HeaderRecordingOptions": "Ajustes de grabaci\u00f3n",
|
||||||
"HeaderUpcomingForKids": "Upcoming for Kids",
|
"HeaderUpcomingForKids": "Pr\u00f3ximamente para ni\u00f1os",
|
||||||
"HeaderSetupLiveTV": "Setup Live TV",
|
"HeaderSetupLiveTV": "Configurar TV en vivo",
|
||||||
"LabelTunerType": "Tuner type:",
|
"LabelTunerType": "Tipo de sintonizador:",
|
||||||
"HelpMoreTunersCanBeAdded": "Additional tuners can be added later within the Live TV section.",
|
"HelpMoreTunersCanBeAdded": "Se puede a\u00f1adir m\u00e1s sintonizadores desde la secci\u00f3n de TV en vivo.",
|
||||||
"AdditionalLiveTvProvidersCanBeInstalledLater": "Additional Live TV providers can be added later within the Live TV section.",
|
"AdditionalLiveTvProvidersCanBeInstalledLater": "Se pueden a\u00f1adir mas proveedores de TV en vivo desde la secci\u00f3n de TV en vivo.",
|
||||||
"MessageActiveSubscriptionRequiredSeriesRecordings": "An active Emby Premiere subscription is required in order to create automated series recordings.",
|
"MessageActiveSubscriptionRequiredSeriesRecordings": "Se necesita una suscripci\u00f3n a Emby Premiere para poder crear grabaciones autom\u00e1ticas.",
|
||||||
"HeaderSetupTVGuide": "Setup TV Guide",
|
"HeaderSetupTVGuide": "Configurar gu\u00eda de TV",
|
||||||
"LabelDataProvider": "Data provider:",
|
"LabelDataProvider": "Proveedor de datos:",
|
||||||
"OptionSendRecordingsToAutoOrganize": "Enable Auto-Organize for new recordings",
|
"OptionSendRecordingsToAutoOrganize": "Activar organizaci\u00f3n autom\u00e1tica para las nuevas grabaciones",
|
||||||
"OptionSendRecordingsToAutoOrganizeHelp": "New recordings will be sent to the Auto-Organize feature and imported into your media library.",
|
"OptionSendRecordingsToAutoOrganizeHelp": "Las nuevas grabaciones se enviar\u00e1n al organizador autom\u00e1tico y se importar\u00e1n a tu biblioteca.",
|
||||||
"HeaderDefaultPadding": "Default Padding",
|
"HeaderDefaultPadding": "Relleno por defecto",
|
||||||
"HeaderSubtitles": "Subt\u00edtulos",
|
"HeaderSubtitles": "Subt\u00edtulos",
|
||||||
"HeaderVideos": "Videos",
|
"HeaderVideos": "V\u00eddeos",
|
||||||
"OptionEnableVideoFrameAnalysis": "Enable frame by frame video analysis",
|
"OptionEnableVideoFrameAnalysis": "Activar an\u00e1lisis fotograma a fotograma",
|
||||||
"OptionEnableVideoFrameAnalysisHelp": "Extract detailed information about videos that can be used to make transcoding as efficient as possible. This will cause library scans to take longer.",
|
"OptionEnableVideoFrameAnalysisHelp": "Extraer informaci\u00f3n detallada de los v\u00eddeos hace que la transcodificaci\u00f3n sea lo m\u00e1s eficiente posible. Los escaneos de la biblioteca tardar\u00e1n m\u00e1s.",
|
||||||
"LabelVideoFrameAnalysisLimit": "Limit frame by frame analysis to videos less than:",
|
"LabelVideoFrameAnalysisLimit": "Limitar an\u00e1lisis fotograma a fotograma a menos de:",
|
||||||
"LabelHardwareAccelerationType": "Hardware acceleration:",
|
"LabelHardwareAccelerationType": "Aceleraci\u00f3n por hardware:",
|
||||||
"LabelHardwareAccelerationTypeHelp": "Available on supported systems only.",
|
"LabelHardwareAccelerationTypeHelp": "Disponible s\u00f3lo en sistemas soportados.",
|
||||||
"ButtonServerDashboard": "Server Dashboard",
|
"ButtonServerDashboard": "Panel de control del servidor",
|
||||||
"HeaderAdmin": "Admin",
|
"HeaderAdmin": "Administrador",
|
||||||
"ButtonSignOut": "Sign out",
|
"ButtonSignOut": "Desconectarse",
|
||||||
"HeaderCameraUpload": "Camera Upload",
|
"HeaderCameraUpload": "Subidas de la c\u00e1mara",
|
||||||
"SelectCameraUploadServers": "Upload camera photos to the following servers:",
|
"SelectCameraUploadServers": "Subir fotos de la c\u00e1mara a los siguientes servidores:",
|
||||||
"ButtonClear": "Clear",
|
"ButtonClear": "Limpiar",
|
||||||
"LabelFolder": "Folder:",
|
"LabelFolder": "Carpeta:",
|
||||||
"HeadersFolders": "Folders",
|
"HeadersFolders": "Carpetas:",
|
||||||
"LabelDisplayName": "Display name:",
|
"LabelDisplayName": "Mostrar nombre:",
|
||||||
"HeaderNewRecording": "New Recording",
|
"HeaderNewRecording": "Nueva grabaci\u00f3n",
|
||||||
"ButtonAdvanced": "Advanced",
|
"ButtonAdvanced": "Avanzado",
|
||||||
"LabelCodecIntrosPath": "Codec intros path:",
|
"LabelCodecIntrosPath": "Ruta de las c\u00f3dec intros:",
|
||||||
"LabelCodecIntrosPathHelp": "A folder containing video files. If an intro video file name matches the video codec, audio codec, audio profile, or a tag, then it will be played prior to the main feature.",
|
"LabelCodecIntrosPathHelp": "Una carpeta que contenga v\u00eddeos. Si el nombre de un archivo de intro coincide con el c\u00f3dec de v\u00eddeo, audio, perfil de audio, o etiqueta, se reproducir\u00e1 antes que la caracter\u00edstica principal.",
|
||||||
"OptionConvertRecordingsToStreamingFormat": "Automatically convert recordings to a streaming friendly format",
|
"OptionConvertRecordingsToStreamingFormat": "Convertir grabaciones autom\u00e1ticamente a un formato amigable",
|
||||||
"OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 for easy playback on your devices.",
|
"OptionConvertRecordingsToStreamingFormatHelp": "Las grabaciones se convertir\u00e1n en tiempo real a MP4 para una reproducci\u00f3n sencilla desde tus dispositivos.",
|
||||||
"FeatureRequiresEmbyPremiere": "This feature requires an active Emby Premiere subscription.",
|
"FeatureRequiresEmbyPremiere": "Esta caracter\u00edstica necesita una suscripci\u00f3n a Emby Premiere.",
|
||||||
"FileExtension": "File extension",
|
"FileExtension": "Extensi\u00f3n del archivo",
|
||||||
"OptionReplaceExistingImages": "Replace existing images",
|
"OptionReplaceExistingImages": "Reemplazar im\u00e1genes existentes",
|
||||||
"OptionPlayNextEpisodeAutomatically": "Play next episode automatically",
|
"OptionPlayNextEpisodeAutomatically": "Reproducir siguiente episodio autom\u00e1ticamente",
|
||||||
"OptionDownloadImagesInAdvance": "Download all images in advance",
|
"OptionDownloadImagesInAdvance": "Descargar todas las im\u00e1genes antes",
|
||||||
"SettingsSaved": "Configuraci\u00f3n guardada",
|
"SettingsSaved": "Configuraci\u00f3n guardada",
|
||||||
"OptionDownloadImagesInAdvanceHelp": "By default, most secondary images are only downloaded when requested by an Emby app. Enable this option to download all images in advance, as new media is imported.",
|
"OptionDownloadImagesInAdvanceHelp": "Por defecto las im\u00e1genes secundarias se descargan s\u00f3lo cuando una aplicaci\u00f3n de Emby las requiere. Activa esta opci\u00f3n para descargar todas las im\u00e1genes antes, conforme se a\u00f1aden medios.",
|
||||||
"Users": "Usuarios",
|
"Users": "Usuarios",
|
||||||
"Delete": "Borrar",
|
"Delete": "Borrar",
|
||||||
"Administrator": "Administrador",
|
"Administrator": "Administrador",
|
||||||
"Password": "Contrase\u00f1a",
|
"Password": "Contrase\u00f1a",
|
||||||
"DeleteImage": "Borrar Imagen",
|
"DeleteImage": "Borrar Imagen",
|
||||||
"MessageThankYouForSupporting": "Thank you for supporting Emby.",
|
"MessageThankYouForSupporting": "Gracias por apoyar a Emby.",
|
||||||
"MessagePleaseSupportProject": "Please support Emby.",
|
"MessagePleaseSupportProject": "Por favor da tu apoyo a Emby.",
|
||||||
"DeleteImageConfirmation": "Est\u00e1 seguro que desea borrar esta imagen?",
|
"DeleteImageConfirmation": "Est\u00e1 seguro que desea borrar esta imagen?",
|
||||||
"FileReadCancelled": "The file read has been canceled.",
|
"FileReadCancelled": "La lectura del archivo se ha cancelado.",
|
||||||
"FileNotFound": "Archivo no encontrado.",
|
"FileNotFound": "Archivo no encontrado.",
|
||||||
"FileReadError": "Se encontr\u00f3 un error al leer el archivo.",
|
"FileReadError": "Se encontr\u00f3 un error al leer el archivo.",
|
||||||
"DeleteUser": "Borrar Usuario",
|
"DeleteUser": "Borrar Usuario",
|
||||||
"DeleteUserConfirmation": "Are you sure you wish to delete this user?",
|
"DeleteUserConfirmation": "\u00bfEst\u00e1s seguro de que quieres borrar este usuario?",
|
||||||
"PasswordResetHeader": "Reset Password",
|
"PasswordResetHeader": "Reestablecer contrase\u00f1a",
|
||||||
"PasswordResetComplete": "La contrase\u00f1a se ha restablecido.",
|
"PasswordResetComplete": "La contrase\u00f1a se ha restablecido.",
|
||||||
"PinCodeResetComplete": "El c\u00f3digo PIN se ha restablecido.",
|
"PinCodeResetComplete": "El c\u00f3digo PIN se ha restablecido.",
|
||||||
"PasswordResetConfirmation": "Esta seguro que desea restablecer la contrase\u00f1a?",
|
"PasswordResetConfirmation": "Esta seguro que desea restablecer la contrase\u00f1a?",
|
||||||
|
@ -1540,45 +1547,45 @@
|
||||||
"HeaderNewApiKey": "Nueva Clave Api",
|
"HeaderNewApiKey": "Nueva Clave Api",
|
||||||
"LabelAppName": "Nombre de la app",
|
"LabelAppName": "Nombre de la app",
|
||||||
"LabelAppNameExample": "Ejemplo: Sickbeard, NzbDrone",
|
"LabelAppNameExample": "Ejemplo: Sickbeard, NzbDrone",
|
||||||
"HeaderNewApiKeyHelp": "Grant an application permission to communicate with Emby Server.",
|
"HeaderNewApiKeyHelp": "Permitir que una aplicaci\u00f3n se comunique con el servidor Emby.",
|
||||||
"MessageKeyEmailedTo": "Clave enviada por email a {0}.",
|
"MessageKeyEmailedTo": "Clave enviada por email a {0}.",
|
||||||
"MessageKeysLinked": "Claves vinculadas.",
|
"MessageKeysLinked": "Claves vinculadas.",
|
||||||
"HeaderConfirmation": "Confirmaci\u00f3n",
|
"HeaderConfirmation": "Confirmaci\u00f3n",
|
||||||
"MessageKeyUpdated": "Thank you. Your Emby Premiere key has been updated.",
|
"MessageKeyUpdated": "Gracias. Tu clave de Emby Premiere se ha actualizado.",
|
||||||
"MessageKeyRemoved": "Thank you. Your Emby Premiere key has been removed.",
|
"MessageKeyRemoved": "Gracias. Tu clave de Emby Premiere se ha eliminado.",
|
||||||
"TextEnjoyBonusFeatures": "Disfrute los extras",
|
"TextEnjoyBonusFeatures": "Disfrute los extras",
|
||||||
"ButtonCancelSyncJob": "Cancel sync",
|
"ButtonCancelSyncJob": "Cancelar sincronizaci\u00f3n",
|
||||||
"HeaderAddTag": "Add Tag",
|
"HeaderAddTag": "A\u00f1adir etiqueta",
|
||||||
"LabelTag": "Tag:",
|
"LabelTag": "Etiqueta:",
|
||||||
"ButtonSelectView": "Select view",
|
"ButtonSelectView": "Seleccionar vista",
|
||||||
"HeaderSelectDate": "Seleccionar Fecha",
|
"HeaderSelectDate": "Seleccionar Fecha",
|
||||||
"ServerUpdateNeeded": "This Emby Server needs to be updated. To download the latest version, please visit {0}",
|
"ServerUpdateNeeded": "El servidor necesita actualizarse. Para descargar la \u00faltima versi\u00f3n visita {0}",
|
||||||
"HeaderIdentifyItem": "Identify Item",
|
"HeaderIdentifyItem": "Identificar \u00edtem",
|
||||||
"LabelRecurringDonationCanBeCancelledHelp": "Donaciones recurrentes se pueden cancelar en cualquier momento desde su cuenta de PayPal.",
|
"LabelRecurringDonationCanBeCancelledHelp": "Donaciones recurrentes se pueden cancelar en cualquier momento desde su cuenta de PayPal.",
|
||||||
"LabelFromHelp": "Example: {0} (on the server)",
|
"LabelFromHelp": "Ejemplo: {0} (en el servidor)",
|
||||||
"HeaderMyMedia": "My Media",
|
"HeaderMyMedia": "Mis medios",
|
||||||
"ButtonRemoveFromCollection": "Remove from Collection",
|
"ButtonRemoveFromCollection": "Quitar de la colecci\u00f3n",
|
||||||
"LabelAutomaticUpdateLevel": "Automatic update level:",
|
"LabelAutomaticUpdateLevel": "Actualizar autom\u00e1ticamente nivel:",
|
||||||
"LabelAutomaticUpdateLevelForPlugins": "Automatic update level for plugins:",
|
"LabelAutomaticUpdateLevelForPlugins": "Actualizar autom\u00e1ticamente nivel para los plugins:",
|
||||||
"ErrorLaunchingChromecast": "Ha habido un error al lanzar chromecast. Asegurese que su dispositivo est\u00e1 conectado a su red inal\u00e1mbrica.",
|
"ErrorLaunchingChromecast": "Ha habido un error al lanzar chromecast. Asegurese que su dispositivo est\u00e1 conectado a su red inal\u00e1mbrica.",
|
||||||
"MessageErrorLoadingSupporterInfo": "There was an error loading Emby Premiere information. Please try again later.",
|
"MessageErrorLoadingSupporterInfo": "Ha habido un error cargando la informaci\u00f3n de Emby Premiere. Por favor int\u00e9ntelo otra vez m\u00e1s tarde.",
|
||||||
"MessageLinkYourSupporterKey": "Link your Emby Premiere key with up to {0} Emby Connect members to enjoy free access to the following apps:",
|
"MessageLinkYourSupporterKey": "Conecta tu clave de Emby Premiere hasta con {0} miembros de Emby Connect para disfrutar del acceso gratuito a las siguientes aplicaciones:",
|
||||||
"HeaderConfirmRemoveUser": "Remove User",
|
"HeaderConfirmRemoveUser": "Quitar usuario",
|
||||||
"MessageConfirmRemoveConnectSupporter": "Are you sure you wish to remove additional Emby Premiere benefits from this user?",
|
"MessageConfirmRemoveConnectSupporter": "\u00bfEst\u00e1s seguro de que quieres quitar los beneficios de Emby Premiere de este usuario?",
|
||||||
"ValueTimeLimitSingleHour": "Time limit: 1 hour",
|
"ValueTimeLimitSingleHour": "Tiempo l\u00edmite: 1 hora",
|
||||||
"ValueTimeLimitMultiHour": "Time limit: {0} hours",
|
"ValueTimeLimitMultiHour": "Tiempo l\u00edmite: {0} hora",
|
||||||
"PluginCategoryGeneral": "General",
|
"PluginCategoryGeneral": "General",
|
||||||
"PluginCategoryContentProvider": "Content Providers",
|
"PluginCategoryContentProvider": "Preveedores de contenidos",
|
||||||
"PluginCategoryScreenSaver": "Screen Savers",
|
"PluginCategoryScreenSaver": "Salvapantallas",
|
||||||
"PluginCategoryTheme": "Themes",
|
"PluginCategoryTheme": "Temas",
|
||||||
"PluginCategorySync": "Sync",
|
"PluginCategorySync": "Sincronizar",
|
||||||
"PluginCategorySocialIntegration": "Social Networks",
|
"PluginCategorySocialIntegration": "Redes sociales",
|
||||||
"PluginCategoryNotifications": "Notifications",
|
"PluginCategoryNotifications": "Notificaciones",
|
||||||
"PluginCategoryMetadata": "Metadata",
|
"PluginCategoryMetadata": "Metadatos",
|
||||||
"PluginCategoryLiveTV": "Live TV",
|
"PluginCategoryLiveTV": "TV en vivo",
|
||||||
"PluginCategoryChannel": "Channels",
|
"PluginCategoryChannel": "Canales",
|
||||||
"HeaderSearch": "Buscar",
|
"HeaderSearch": "Buscar",
|
||||||
"ValueDateCreated": "Date created: {0}",
|
"ValueDateCreated": "Fecha de creaci\u00f3n: {0}",
|
||||||
"LabelArtist": "Artista",
|
"LabelArtist": "Artista",
|
||||||
"LabelMovie": "Pel\u00edcula",
|
"LabelMovie": "Pel\u00edcula",
|
||||||
"LabelMusicVideo": "Video Musical",
|
"LabelMusicVideo": "Video Musical",
|
||||||
|
@ -1587,61 +1594,61 @@
|
||||||
"LabelStopping": "Deteniendo",
|
"LabelStopping": "Deteniendo",
|
||||||
"LabelCancelled": "Cancelado",
|
"LabelCancelled": "Cancelado",
|
||||||
"ButtonDownload": "Descargar",
|
"ButtonDownload": "Descargar",
|
||||||
"SyncJobStatusQueued": "Queued",
|
"SyncJobStatusQueued": "En cola",
|
||||||
"SyncJobStatusConverting": "Converting",
|
"SyncJobStatusConverting": "Convirtiendo",
|
||||||
"SyncJobStatusFailed": "Failed",
|
"SyncJobStatusFailed": "Fallado",
|
||||||
"SyncJobStatusCancelled": "Cancelled",
|
"SyncJobStatusCancelled": "Cancelado",
|
||||||
"SyncJobStatusCompleted": "Synced",
|
"SyncJobStatusCompleted": "Sincronizado",
|
||||||
"SyncJobStatusReadyToTransfer": "Ready to Transfer",
|
"SyncJobStatusReadyToTransfer": "Listo para transferir",
|
||||||
"SyncJobStatusTransferring": "Transferring",
|
"SyncJobStatusTransferring": "Transfiriendo",
|
||||||
"SyncJobStatusCompletedWithError": "Synced with errors",
|
"SyncJobStatusCompletedWithError": "Sincronizado con errores",
|
||||||
"SyncJobItemStatusReadyToTransfer": "Ready to Transfer",
|
"SyncJobItemStatusReadyToTransfer": "Listo para transferir",
|
||||||
"LabelCollection": "Collection",
|
"LabelCollection": "Colecci\u00f3n",
|
||||||
"HeaderAddToCollection": "A\u00f1adir a la colecci\u00f3n",
|
"HeaderAddToCollection": "A\u00f1adir a la colecci\u00f3n",
|
||||||
"NewCollectionNameExample": "Ejemplo: Colecci\u00f3n de Star Wars",
|
"NewCollectionNameExample": "Ejemplo: Colecci\u00f3n de Star Wars",
|
||||||
"OptionSearchForInternetMetadata": "Buscar en internet ilustraciones y metadatos",
|
"OptionSearchForInternetMetadata": "Buscar en internet ilustraciones y metadatos",
|
||||||
"LabelSelectCollection": "Seleccionar colecci\u00f3n:",
|
"LabelSelectCollection": "Seleccionar colecci\u00f3n:",
|
||||||
"HeaderDevices": "Devices",
|
"HeaderDevices": "Dispositivos",
|
||||||
"ButtonScheduledTasks": "Scheduled tasks",
|
"ButtonScheduledTasks": "Tareas programadas",
|
||||||
"MessageItemsAdded": "Items added",
|
"MessageItemsAdded": "Items a\u00f1adidos",
|
||||||
"HeaderSelectCertificatePath": "Select Certificate Path",
|
"HeaderSelectCertificatePath": "Elige la ruta del certificado",
|
||||||
"ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task and does not require any manual effort. To configure the scheduled task, see:",
|
"ConfirmMessageScheduledTaskButton": "Esta operaci\u00f3n normalmente se ejecuta autom\u00e1ticamente como una tarea programada y no se necesita hacerlo manualmente. Para configurar la tarea programada ve a:",
|
||||||
"HeaderSupporterBenefit": "An active Emby Premiere subscription provides additional benefits such as access to sync, premium plugins, internet channel content, and more. {0}Learn more{1}.",
|
"HeaderSupporterBenefit": "Una suscripci\u00f3n de Emby Premiere proporciona beneficios adicionales como la sincronizaci\u00f3n, plugins premium, contenido por internet de los canales, y m\u00e1s. {0}Aprende m\u00e1s{1}.",
|
||||||
"LabelSyncNoTargetsHelp": "It looks like you don't currently have any apps that support sync.",
|
"LabelSyncNoTargetsHelp": "Parece que no tienes aplicaciones que soporten la sincronizaci\u00f3n.",
|
||||||
"HeaderWelcomeToProjectServerDashboard": "Welcome to the Emby Server Dashboard",
|
"HeaderWelcomeToProjectServerDashboard": "Bienvenido al panel de control del servidor Emby",
|
||||||
"HeaderWelcomeToProjectWebClient": "Welcome to Emby",
|
"HeaderWelcomeToProjectWebClient": "Bienvenido a Emby",
|
||||||
"ButtonTakeTheTour": "Hacer un recorrido",
|
"ButtonTakeTheTour": "Hacer un recorrido",
|
||||||
"HeaderWelcomeBack": "Welcome back!",
|
"HeaderWelcomeBack": "\u00a1Bienvenido de nuevo!",
|
||||||
"ButtonTakeTheTourToSeeWhatsNew": "Take the tour to see what's new",
|
"ButtonTakeTheTourToSeeWhatsNew": "Da un paseo para ver que hay nuevo",
|
||||||
"MessageNoSyncJobsFound": "No sync jobs found. Create sync jobs using the Sync buttons found throughout the web interface.",
|
"MessageNoSyncJobsFound": "No se han encontrado trabajos de sincronizaci\u00f3n. Cr\u00e9alos usando los botones de sincronizaci\u00f3n que se encuentran a trav\u00e9s de la interfaz web.",
|
||||||
"HeaderSelectDevices": "Select Devices",
|
"HeaderSelectDevices": "Elegir dispositivos",
|
||||||
"ButtonCancelItem": "Cancel item",
|
"ButtonCancelItem": "Cancelar \u00edtem",
|
||||||
"ButtonQueueForRetry": "Queue for retry",
|
"ButtonQueueForRetry": "En cola para reintentar",
|
||||||
"ButtonReenable": "Re-enable",
|
"ButtonReenable": "Reactivar",
|
||||||
"SyncJobItemStatusSyncedMarkForRemoval": "Marked for removal",
|
"SyncJobItemStatusSyncedMarkForRemoval": "Marcado para quitar",
|
||||||
"LabelAbortedByServerShutdown": "(Abortado por cierre del servidor)",
|
"LabelAbortedByServerShutdown": "(Abortado por cierre del servidor)",
|
||||||
"LabelScheduledTaskLastRan": "\u00daltima ejecuci\u00f3n {0}, teniendo {1}.",
|
"LabelScheduledTaskLastRan": "\u00daltima ejecuci\u00f3n {0}, teniendo {1}.",
|
||||||
"HeaderDeleteTaskTrigger": "Eliminar tarea de activaci\u00f3n",
|
"HeaderDeleteTaskTrigger": "Eliminar tarea de activaci\u00f3n",
|
||||||
"MessageDeleteTaskTrigger": "\u00bfEst\u00e1 seguro que desea eliminar esta tarea de activaci\u00f3n?",
|
"MessageDeleteTaskTrigger": "\u00bfEst\u00e1 seguro que desea eliminar esta tarea de activaci\u00f3n?",
|
||||||
"MessageNoPluginsInstalled": "No tiene plugins instalados.",
|
"MessageNoPluginsInstalled": "No tiene plugins instalados.",
|
||||||
"MessageNoPluginsDueToAppStore": "To manage plugins, please use the Emby web app.",
|
"MessageNoPluginsDueToAppStore": "Para administrar los plugins usa la interfaz web de Emby",
|
||||||
"LabelVersionInstalled": "{0} instalado",
|
"LabelVersionInstalled": "{0} instalado",
|
||||||
"LabelNumberReviews": "{0} Revisiones",
|
"LabelNumberReviews": "{0} Revisiones",
|
||||||
"LabelFree": "Libre",
|
"LabelFree": "Libre",
|
||||||
"HeaderPlaybackError": "Playback Error",
|
"HeaderPlaybackError": "Error de reproducci\u00f3n",
|
||||||
"MessagePlaybackErrorNotAllowed": "You're currently not authorized to play this content. Please contact your system administrator for details.",
|
"MessagePlaybackErrorNotAllowed": "No est\u00e1s autorizado a reproducir este contenido. Contacta con el administrador para m\u00e1s detalles.",
|
||||||
"MessagePlaybackErrorNoCompatibleStream": "No compatible streams are currently available. Please try again later or contact your system administrator for details.",
|
"MessagePlaybackErrorNoCompatibleStream": "No tienes disponible ninguna calidad por ahora. Int\u00e9ntalo m\u00e1s tarde o contacta con el administrador para m\u00e1s detalles.",
|
||||||
"MessagePlaybackErrorRateLimitExceeded": "Your playback rate limit has been exceeded. Please contact your system administrator for details.",
|
"MessagePlaybackErrorRateLimitExceeded": "Has sobrepasado el ratio l\u00edmite de reproducci\u00f3n. Contacta con el administrador para m\u00e1s detalles.",
|
||||||
"MessagePlaybackErrorPlaceHolder": "The content chosen is not playable from this device.",
|
"MessagePlaybackErrorPlaceHolder": "El contenido elegido no se puede reproducir desde este dispositivo.",
|
||||||
"HeaderSelectAudio": "Seleccionar Audio",
|
"HeaderSelectAudio": "Seleccionar Audio",
|
||||||
"HeaderSelectSubtitles": "Seleccionar Subt\u00edtulos",
|
"HeaderSelectSubtitles": "Seleccionar Subt\u00edtulos",
|
||||||
"ButtonMarkForRemoval": "Remove from device",
|
"ButtonMarkForRemoval": "Quitar del dispositivo",
|
||||||
"ButtonUnmarkForRemoval": "Cancel removal from device",
|
"ButtonUnmarkForRemoval": "Cancelar quitar del dispositivo",
|
||||||
"LabelDefaultStream": "(Por defecto)",
|
"LabelDefaultStream": "(Por defecto)",
|
||||||
"LabelForcedStream": "(Forzado)",
|
"LabelForcedStream": "(Forzado)",
|
||||||
"LabelDefaultForcedStream": "(Por defecto\/Forzado)",
|
"LabelDefaultForcedStream": "(Por defecto\/Forzado)",
|
||||||
"LabelUnknownLanguage": "Idioma desconocido",
|
"LabelUnknownLanguage": "Idioma desconocido",
|
||||||
"MessageConfirmSyncJobItemCancellation": "Are you sure you wish to cancel this item?",
|
"MessageConfirmSyncJobItemCancellation": "\u00bfEst\u00e1s seguro de que quieres cancelar este \u00edtem?",
|
||||||
"ButtonMute": "Silencio",
|
"ButtonMute": "Silencio",
|
||||||
"ButtonUnmute": "Activar audio",
|
"ButtonUnmute": "Activar audio",
|
||||||
"ButtonQueue": "En cola",
|
"ButtonQueue": "En cola",
|
||||||
|
@ -1653,8 +1660,8 @@
|
||||||
"ButtonViewNotifications": "Ver notificaciones",
|
"ButtonViewNotifications": "Ver notificaciones",
|
||||||
"ButtonMarkTheseRead": "Marcar como le\u00eddo",
|
"ButtonMarkTheseRead": "Marcar como le\u00eddo",
|
||||||
"LabelAllPlaysSentToPlayer": "Todas las reproducciones se enviar\u00e1n al reproductor seleccionado.",
|
"LabelAllPlaysSentToPlayer": "Todas las reproducciones se enviar\u00e1n al reproductor seleccionado.",
|
||||||
"MessageInvalidUser": "Invalid username or password. Please try again.",
|
"MessageInvalidUser": "Usuario o contrase\u00f1a inv\u00e1lidos. Por favor int\u00e9ntalo otra vez.",
|
||||||
"HeaderLoginFailure": "Login Failure",
|
"HeaderLoginFailure": "Fallo de inicio de sesi\u00f3n",
|
||||||
"RecommendationBecauseYouLike": "Como le gusta {0}",
|
"RecommendationBecauseYouLike": "Como le gusta {0}",
|
||||||
"RecommendationBecauseYouWatched": "Ya que vi\u00f3 {0}",
|
"RecommendationBecauseYouWatched": "Ya que vi\u00f3 {0}",
|
||||||
"RecommendationDirectedBy": "Dirigida por {0}",
|
"RecommendationDirectedBy": "Dirigida por {0}",
|
||||||
|
@ -1662,7 +1669,7 @@
|
||||||
"HeaderConfirmRecordingCancellation": "Confirmar la cancelaci\u00f3n de la grabaci\u00f3n",
|
"HeaderConfirmRecordingCancellation": "Confirmar la cancelaci\u00f3n de la grabaci\u00f3n",
|
||||||
"MessageConfirmRecordingCancellation": "\u00bfEst\u00e1 seguro que desea cancelar esta grabaci\u00f3n?",
|
"MessageConfirmRecordingCancellation": "\u00bfEst\u00e1 seguro que desea cancelar esta grabaci\u00f3n?",
|
||||||
"MessageRecordingCancelled": "Grabaci\u00f3n cancelada.",
|
"MessageRecordingCancelled": "Grabaci\u00f3n cancelada.",
|
||||||
"MessageRecordingScheduled": "Recording scheduled.",
|
"MessageRecordingScheduled": "Grabaci\u00f3n programada.",
|
||||||
"HeaderConfirmSeriesCancellation": "Confirmar cancelaci\u00f3n de serie",
|
"HeaderConfirmSeriesCancellation": "Confirmar cancelaci\u00f3n de serie",
|
||||||
"MessageConfirmSeriesCancellation": "\u00bfEst\u00e1 seguro que desea cancelar esta serie?",
|
"MessageConfirmSeriesCancellation": "\u00bfEst\u00e1 seguro que desea cancelar esta serie?",
|
||||||
"MessageSeriesCancelled": "Serie cancelada",
|
"MessageSeriesCancelled": "Serie cancelada",
|
||||||
|
@ -1671,8 +1678,8 @@
|
||||||
"MessageRecordingDeleted": "Grabaci\u00f3n eliminada.",
|
"MessageRecordingDeleted": "Grabaci\u00f3n eliminada.",
|
||||||
"ButonCancelRecording": "Cancelar Grabaci\u00f3n",
|
"ButonCancelRecording": "Cancelar Grabaci\u00f3n",
|
||||||
"MessageRecordingSaved": "Grabaci\u00f3n guardada.",
|
"MessageRecordingSaved": "Grabaci\u00f3n guardada.",
|
||||||
"OptionWeekend": "Weekends",
|
"OptionWeekend": "Fines de semana",
|
||||||
"OptionWeekday": "Weekdays",
|
"OptionWeekday": "D\u00edas de semana",
|
||||||
"MessageConfirmPathSubstitutionDeletion": "\u00bfEst\u00e1 seguro que desea borrar esta ruta de sustituci\u00f3n?",
|
"MessageConfirmPathSubstitutionDeletion": "\u00bfEst\u00e1 seguro que desea borrar esta ruta de sustituci\u00f3n?",
|
||||||
"LiveTvUpdateAvailable": "(Actualizaci\u00f3n disponible)",
|
"LiveTvUpdateAvailable": "(Actualizaci\u00f3n disponible)",
|
||||||
"LabelVersionUpToDate": "\u00a1Actualizado!",
|
"LabelVersionUpToDate": "\u00a1Actualizado!",
|
||||||
|
@ -1689,11 +1696,11 @@
|
||||||
"HeaderSplitMedia": "Divisi\u00f3n de medios",
|
"HeaderSplitMedia": "Divisi\u00f3n de medios",
|
||||||
"MessageConfirmSplitMedia": "\u00bfEst\u00e1 seguro que desea dividir los medios en partes separadas?",
|
"MessageConfirmSplitMedia": "\u00bfEst\u00e1 seguro que desea dividir los medios en partes separadas?",
|
||||||
"HeaderError": "Error",
|
"HeaderError": "Error",
|
||||||
"MessageChromecastConnectionError": "Your Chromecast receiver is unable to connect to your Emby Server. Please check their connections and try again.",
|
"MessageChromecastConnectionError": "Tu Chromecast no se puede conectar a tu servidor Emby. Comprueba las conexiones y prueba otra vez.",
|
||||||
"MessagePleaseSelectOneItem": "Seleccione al menos un elemento.",
|
"MessagePleaseSelectOneItem": "Seleccione al menos un elemento.",
|
||||||
"MessagePleaseSelectTwoItems": "Seleccione al menos dos elementos.",
|
"MessagePleaseSelectTwoItems": "Seleccione al menos dos elementos.",
|
||||||
"MessageTheSelectedItemsWillBeGrouped": "The selected videos will be grouped into one virtual item. Emby apps will automatically choose which version to play based on device and network performance. Are you sure you wish to continue?",
|
"MessageTheSelectedItemsWillBeGrouped": "Los v\u00eddeos seleccionados se agrupar\u00e1n en uno s\u00f3lo virtual. Las aplicaciones de Emby elegir\u00e1n autom\u00e1ticamente qu\u00e9 versi\u00f3n reproducir en funci\u00f3n del dispositivo y la velocidad de internet. \u00bfQuieres continuar?",
|
||||||
"HeaderLibraryFolders": "Media Folders",
|
"HeaderLibraryFolders": "Carpetas de medios",
|
||||||
"HeaderFavoriteMovies": "Pel\u00edculas favoritas",
|
"HeaderFavoriteMovies": "Pel\u00edculas favoritas",
|
||||||
"HeaderFavoriteShows": "Programas favoritos",
|
"HeaderFavoriteShows": "Programas favoritos",
|
||||||
"HeaderFavoriteEpisodes": "Episodios favoritos",
|
"HeaderFavoriteEpisodes": "Episodios favoritos",
|
||||||
|
@ -1705,7 +1712,7 @@
|
||||||
"HeaderSelectTranscodingPath": "Seleccione la ruta temporal del transcodificador",
|
"HeaderSelectTranscodingPath": "Seleccione la ruta temporal del transcodificador",
|
||||||
"HeaderSelectImagesByNamePath": "Seleccione la ruta para im\u00e1genes",
|
"HeaderSelectImagesByNamePath": "Seleccione la ruta para im\u00e1genes",
|
||||||
"HeaderSelectMetadataPath": "Seleccione la ruta para Metadatos",
|
"HeaderSelectMetadataPath": "Seleccione la ruta para Metadatos",
|
||||||
"HeaderSelectServerCachePathHelp": "Browse or enter the path to use for server cache files. The folder must be writeable.",
|
"HeaderSelectServerCachePathHelp": "Navega o introduce la ruta para alojar los archivos cach\u00e9 del servidor. Tienes que tener permisos de escritura en esa carpeta.",
|
||||||
"HeaderSelectTranscodingPathHelp": "Busque o escriba la ruta de acceso que se utilizar\u00e1 para la transcodificaci\u00f3n de archivos temporales. La carpeta debe tener permiso de escritura.",
|
"HeaderSelectTranscodingPathHelp": "Busque o escriba la ruta de acceso que se utilizar\u00e1 para la transcodificaci\u00f3n de archivos temporales. La carpeta debe tener permiso de escritura.",
|
||||||
"HeaderSelectImagesByNamePathHelp": "Busque o escriba la ruta de sus elementos por nombre de carpeta. La carpeta debe tener permisos de escritura.",
|
"HeaderSelectImagesByNamePathHelp": "Busque o escriba la ruta de sus elementos por nombre de carpeta. La carpeta debe tener permisos de escritura.",
|
||||||
"HeaderSelectMetadataPathHelp": "Busque o escriba la ruta donde desea almacenar los metadatos. La carpeta debe tener permiso de escritura.",
|
"HeaderSelectMetadataPathHelp": "Busque o escriba la ruta donde desea almacenar los metadatos. La carpeta debe tener permiso de escritura.",
|
||||||
|
@ -1731,15 +1738,15 @@
|
||||||
"HeaderSelectWatchFolder": "Seleccionar carpeta para el reloj",
|
"HeaderSelectWatchFolder": "Seleccionar carpeta para el reloj",
|
||||||
"HeaderSelectWatchFolderHelp": "Navegue o introduzca la ruta para la carpeta para el reloj. La carpeta debe tener permisos de escritura.",
|
"HeaderSelectWatchFolderHelp": "Navegue o introduzca la ruta para la carpeta para el reloj. La carpeta debe tener permisos de escritura.",
|
||||||
"OrganizePatternResult": "Resultado: {0}",
|
"OrganizePatternResult": "Resultado: {0}",
|
||||||
"AutoOrganizeError": "Error Organizing File",
|
"AutoOrganizeError": "Error al organizar el archivo",
|
||||||
"FileOrganizeManually": "Organize File",
|
"FileOrganizeManually": "Organizar el archivo",
|
||||||
"ErrorOrganizingFileWithErrorCode": "There was an error organizing the file. Error code: {0}.",
|
"ErrorOrganizingFileWithErrorCode": "Ha habido un error al organizar el archivo. C\u00f3digo de error: {0}.",
|
||||||
"HeaderRestart": "Reiniciar",
|
"HeaderRestart": "Reiniciar",
|
||||||
"HeaderShutdown": "Apagar",
|
"HeaderShutdown": "Apagar",
|
||||||
"MessageConfirmRestart": "Are you sure you wish to restart Emby Server?",
|
"MessageConfirmRestart": "\u00bfEst\u00e1s seguro de que quieres reiniciar el servidor?",
|
||||||
"MessageConfirmShutdown": "Are you sure you wish to shutdown Emby Server?",
|
"MessageConfirmShutdown": "\u00bfEst\u00e1s seguro de que quieres apagar el servidor?",
|
||||||
"ValueItemCount": "{0} item",
|
"ValueItemCount": "\u00edtem {0}",
|
||||||
"ValueItemCountPlural": "{0} items",
|
"ValueItemCountPlural": "\u00edtems {0}",
|
||||||
"NewVersionOfSomethingAvailable": "\u00a1Hay disponible una nueva versi\u00f3n de {0}!",
|
"NewVersionOfSomethingAvailable": "\u00a1Hay disponible una nueva versi\u00f3n de {0}!",
|
||||||
"VersionXIsAvailableForDownload": "La versi\u00f3n {0} est\u00e1 disponible para su descarga.",
|
"VersionXIsAvailableForDownload": "La versi\u00f3n {0} est\u00e1 disponible para su descarga.",
|
||||||
"LabelVersionNumber": "Versi\u00f3n {0}",
|
"LabelVersionNumber": "Versi\u00f3n {0}",
|
||||||
|
@ -1748,10 +1755,10 @@
|
||||||
"LabelPlayMethodDirectPlay": "Reproducci\u00f3n directa",
|
"LabelPlayMethodDirectPlay": "Reproducci\u00f3n directa",
|
||||||
"LabelAudioCodec": "Audio: {0}",
|
"LabelAudioCodec": "Audio: {0}",
|
||||||
"LabelVideoCodec": "Video: {0}",
|
"LabelVideoCodec": "Video: {0}",
|
||||||
"LabelLocalAccessUrl": "Local access: {0}",
|
"LabelLocalAccessUrl": "Acceso local: {0}",
|
||||||
"LabelRemoteAccessUrl": "Acceso remoto: {0}",
|
"LabelRemoteAccessUrl": "Acceso remoto: {0}",
|
||||||
"LabelRunningOnPort": "Running on http port {0}.",
|
"LabelRunningOnPort": "Ejecut\u00e1ndose en el puerto http {0}.",
|
||||||
"LabelRunningOnPorts": "Running on http port {0}, and https port {1}.",
|
"LabelRunningOnPorts": "Ejecut\u00e1ndose en el puerto http {0}, y puerto https {1}.",
|
||||||
"HeaderLatestFromChannel": "Lo \u00faltimo de {0}",
|
"HeaderLatestFromChannel": "Lo \u00faltimo de {0}",
|
||||||
"LabelUnknownLanaguage": "Idioma desconocido",
|
"LabelUnknownLanaguage": "Idioma desconocido",
|
||||||
"HeaderCurrentSubtitles": "Subt\u00edtulos actuales",
|
"HeaderCurrentSubtitles": "Subt\u00edtulos actuales",
|
||||||
|
@ -1761,11 +1768,11 @@
|
||||||
"HeaderLatestTvRecordings": "\u00daltimas grabaciones",
|
"HeaderLatestTvRecordings": "\u00daltimas grabaciones",
|
||||||
"LabelCurrentPath": "Ruta actual:",
|
"LabelCurrentPath": "Ruta actual:",
|
||||||
"HeaderSelectMediaPath": "Seleccionar la ruta para Medios",
|
"HeaderSelectMediaPath": "Seleccionar la ruta para Medios",
|
||||||
"HeaderSelectPath": "Select Path",
|
"HeaderSelectPath": "Elige ruta",
|
||||||
"ButtonNetwork": "Red",
|
"ButtonNetwork": "Red",
|
||||||
"MessageDirectoryPickerInstruction": "Rutas de red pueden ser introducidas manualmente en el caso de que el bot\u00f3n de la red no pueda localizar sus dispositivos. Por ejemplo, {0} o {1}.",
|
"MessageDirectoryPickerInstruction": "Rutas de red pueden ser introducidas manualmente en el caso de que el bot\u00f3n de la red no pueda localizar sus dispositivos. Por ejemplo, {0} o {1}.",
|
||||||
"MessageDirectoryPickerBSDInstruction": "For BSD, you may need to configure storage within your FreeNAS Jail in order to allow Emby to access it.",
|
"MessageDirectoryPickerBSDInstruction": "Para BSD, necesitar\u00e1s configurar el almacenamiento del \"FreeNAS Jail\" para poder permitir a Emby acceder a \u00e9l.",
|
||||||
"MessageDirectoryPickerLinuxInstruction": "For Linux on Arch Linux, CentOS, Debian, Fedora, OpenSuse, or Ubuntu, you must grant the Emby system user at least read access to your storage locations.",
|
"MessageDirectoryPickerLinuxInstruction": "Para Arch Linux, CentOS, Debian, Fedora, OpenSuse, o Ubuntu, tienes que permitir al usuario de Emby acceso de lectura a las ubicaciones de almacenamiento.",
|
||||||
"HeaderMenu": "Men\u00fa",
|
"HeaderMenu": "Men\u00fa",
|
||||||
"ButtonOpen": "Abrir",
|
"ButtonOpen": "Abrir",
|
||||||
"ButtonOpenInNewTab": "Abrir en nueva pesta\u00f1a",
|
"ButtonOpenInNewTab": "Abrir en nueva pesta\u00f1a",
|
||||||
|
@ -1773,7 +1780,7 @@
|
||||||
"ButtonInstantMix": "Mix instant\u00e1neo",
|
"ButtonInstantMix": "Mix instant\u00e1neo",
|
||||||
"ButtonResume": "Continuar",
|
"ButtonResume": "Continuar",
|
||||||
"HeaderAudioTracks": "Pistas de audio",
|
"HeaderAudioTracks": "Pistas de audio",
|
||||||
"HeaderLibraries": "Libraries",
|
"HeaderLibraries": "Blibliotecas",
|
||||||
"HeaderVideoQuality": "Calidad de video",
|
"HeaderVideoQuality": "Calidad de video",
|
||||||
"MessageErrorPlayingVideo": "Ha habido un error reproduciendo el video.",
|
"MessageErrorPlayingVideo": "Ha habido un error reproduciendo el video.",
|
||||||
"MessageEnsureOpenTuner": "Aseg\u00farese que hay un sintonizador disponible.",
|
"MessageEnsureOpenTuner": "Aseg\u00farese que hay un sintonizador disponible.",
|
||||||
|
@ -1797,7 +1804,7 @@
|
||||||
"OptionBlockLiveTvChannels": "Canales de Tv en vivo",
|
"OptionBlockLiveTvChannels": "Canales de Tv en vivo",
|
||||||
"OptionBlockChannelContent": "Contenido de canales de Internet",
|
"OptionBlockChannelContent": "Contenido de canales de Internet",
|
||||||
"ButtonRevoke": "Revocar",
|
"ButtonRevoke": "Revocar",
|
||||||
"MessageConfirmRevokeApiKey": "Are you sure you wish to revoke this api key? The application's connection to Emby Server will be abruptly terminated.",
|
"MessageConfirmRevokeApiKey": "\u00bfEst\u00e1s seguro de que quieres revocar esta clave API? Las conexiones de aplicaciones que usen la API se terminar\u00e1n.",
|
||||||
"HeaderConfirmRevokeApiKey": "Revocar Clave Api",
|
"HeaderConfirmRevokeApiKey": "Revocar Clave Api",
|
||||||
"ValueContainer": "Contenedor: {0}",
|
"ValueContainer": "Contenedor: {0}",
|
||||||
"ValueAudioCodec": "Codec de audio: {0}",
|
"ValueAudioCodec": "Codec de audio: {0}",
|
||||||
|
@ -1814,18 +1821,18 @@
|
||||||
"ButtonMoveRight": "Mover derecha",
|
"ButtonMoveRight": "Mover derecha",
|
||||||
"ButtonBrowseOnlineImages": "Navegar im\u00e1genes online",
|
"ButtonBrowseOnlineImages": "Navegar im\u00e1genes online",
|
||||||
"HeaderDeleteItem": "Borrar elemento",
|
"HeaderDeleteItem": "Borrar elemento",
|
||||||
"ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?",
|
"ConfirmDeleteItem": "Al borrar este \u00edtem se borrar\u00e1 del sistema de archivos y de la biblioteca. \u00bfQuieres continuar?",
|
||||||
"HeaderDeleteItems": "Delete Items",
|
"HeaderDeleteItems": "Borrar \u00edtems",
|
||||||
"ConfirmDeleteItems": "Deleting these items will delete them from both the file system and your media library. Are you sure you wish to continue?",
|
"ConfirmDeleteItems": "Al borrar este \u00edtem se borrar\u00e1 del sistema de archivos y de la biblioteca. \u00bfQuieres continuar?",
|
||||||
"MessagePleaseEnterNameOrId": "Introduzca un nombre o un identificador externo.",
|
"MessagePleaseEnterNameOrId": "Introduzca un nombre o un identificador externo.",
|
||||||
"MessageValueNotCorrect": "El valor introducido no es correcto. Intentelo de nuevo.",
|
"MessageValueNotCorrect": "El valor introducido no es correcto. Intentelo de nuevo.",
|
||||||
"MessageItemSaved": "Elemento grabado.",
|
"MessageItemSaved": "Elemento grabado.",
|
||||||
"MessagePleaseAcceptTermsOfServiceBeforeContinuing": "Please accept the terms of service before continuing.",
|
"MessagePleaseAcceptTermsOfServiceBeforeContinuing": "Por favor acepta los t\u00e9rminos del servicio antes de continuar.",
|
||||||
"OptionOff": "Apagado",
|
"OptionOff": "Apagado",
|
||||||
"OptionOn": "Encendido",
|
"OptionOn": "Encendido",
|
||||||
"ButtonUninstall": "Uninstall",
|
"ButtonUninstall": "Desinstalar",
|
||||||
"HeaderEnabledFields": "Enabled Fields",
|
"HeaderEnabledFields": "Campos activados",
|
||||||
"HeaderEnabledFieldsHelp": "Uncheck a field to lock it and prevent it's data from being changed.",
|
"HeaderEnabledFieldsHelp": "Desmarca un campo para bloquearlo y evitar que se cambie su contenido.",
|
||||||
"HeaderLiveTV": "Tv en vivo",
|
"HeaderLiveTV": "Tv en vivo",
|
||||||
"MissingLocalTrailer": "Falta trailer local.",
|
"MissingLocalTrailer": "Falta trailer local.",
|
||||||
"MissingPrimaryImage": "Falta imagen principal.",
|
"MissingPrimaryImage": "Falta imagen principal.",
|
||||||
|
@ -1845,18 +1852,18 @@
|
||||||
"OptionProductionLocations": "Localizaciones de producci\u00f3n",
|
"OptionProductionLocations": "Localizaciones de producci\u00f3n",
|
||||||
"OptionBirthLocation": "Lugar de nacimiento",
|
"OptionBirthLocation": "Lugar de nacimiento",
|
||||||
"LabelAllChannels": "Todos los canales",
|
"LabelAllChannels": "Todos los canales",
|
||||||
"LabelLiveProgram": "EN VIVO",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NUEVO",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "ESTRENO",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Cambiar tipo de contenido",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "Para cambiar el tipo de contenido por favor elimina y reconstruye la biblioteca con el nuevo tipo.",
|
||||||
"HeaderAlert": "Alert",
|
"HeaderAlert": "Alerta",
|
||||||
"MessagePleaseRestart": "Please restart to finish updating.",
|
"MessagePleaseRestart": "Por favor reinicie para terminar la actualizaci\u00f3n.",
|
||||||
"MessagePleaseRefreshPage": "Please refresh this page to receive new updates from Emby Server.",
|
"MessagePleaseRefreshPage": "Actualice la p\u00e1gina para ver las nuevas actualizaciones del servidor Emby.",
|
||||||
"ButtonHide": "Hide",
|
"ButtonHide": "Esconder",
|
||||||
"MessageSettingsSaved": "Settings saved.",
|
"MessageSettingsSaved": "Ajustes guardados.",
|
||||||
"ButtonMyProfile": "My Profile",
|
"ButtonMyProfile": "Mi Perfil",
|
||||||
"ButtonMyPreferences": "My Preferences",
|
"ButtonMyPreferences": "My Preferences",
|
||||||
"MessageBrowserDoesNotSupportWebSockets": "This browser does not support web sockets. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera.",
|
"MessageBrowserDoesNotSupportWebSockets": "This browser does not support web sockets. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera.",
|
||||||
"LabelInstallingPackage": "Installing {0}",
|
"LabelInstallingPackage": "Installing {0}",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuing",
|
"OptionContinuing": "Continuing",
|
||||||
"OptionEnded": "Ended",
|
"OptionEnded": "Ended",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "Air Days",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Sunday",
|
"OptionSunday": "Sunday",
|
||||||
"OptionMonday": "Monday",
|
"OptionMonday": "Monday",
|
||||||
"OptionTuesday": "Tuesday",
|
"OptionTuesday": "Tuesday",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
|
@ -266,6 +266,13 @@
|
||||||
"OptionContinuing": "Continuing",
|
"OptionContinuing": "Continuing",
|
||||||
"OptionEnded": "Ended",
|
"OptionEnded": "Ended",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "Air Days",
|
||||||
|
"OptionSundayShort": "Sun",
|
||||||
|
"OptionMondayShort": "Mon",
|
||||||
|
"OptionTuesdayShort": "Tue",
|
||||||
|
"OptionWednesdayShort": "Wed",
|
||||||
|
"OptionThursdayShort": "Thu",
|
||||||
|
"OptionFridayShort": "Fri",
|
||||||
|
"OptionSaturdayShort": "Sat",
|
||||||
"OptionSunday": "Sunday",
|
"OptionSunday": "Sunday",
|
||||||
"OptionMonday": "Monday",
|
"OptionMonday": "Monday",
|
||||||
"OptionTuesday": "Tuesday",
|
"OptionTuesday": "Tuesday",
|
||||||
|
@ -1845,9 +1852,9 @@
|
||||||
"OptionProductionLocations": "Production Locations",
|
"OptionProductionLocations": "Production Locations",
|
||||||
"OptionBirthLocation": "Birth Location",
|
"OptionBirthLocation": "Birth Location",
|
||||||
"LabelAllChannels": "All channels",
|
"LabelAllChannels": "All channels",
|
||||||
"LabelLiveProgram": "LIVE",
|
"AttributeNew": "New",
|
||||||
"LabelNewProgram": "NEW",
|
"AttributePremiere": "Premiere",
|
||||||
"LabelPremiereProgram": "PREMIERE",
|
"AttributeLive": "Live",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "Change Content Type",
|
"HeaderChangeFolderType": "Change Content Type",
|
||||||
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
"HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the library with the new type.",
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue