mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update series timer editor
This commit is contained in:
parent
67a90b61b9
commit
99f7d3e9f8
14 changed files with 241 additions and 157 deletions
|
@ -237,7 +237,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.cardText {
|
.cardText {
|
||||||
padding: .35em .5em;
|
padding: .25em .5em;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
|
|
@ -167,6 +167,10 @@
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tabScenes, .tabCast {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
#videoPlayer .nowPlayingText {
|
#videoPlayer .nowPlayingText {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
margin: 0 0 0 1em;
|
margin: 0 0 0 1em;
|
||||||
|
@ -186,6 +190,7 @@
|
||||||
|
|
||||||
.videoNowPlayingOverview, .videoNowPlayingRating {
|
.videoNowPlayingOverview, .videoNowPlayingRating {
|
||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.videoTopControlsLogo {
|
.videoTopControlsLogo {
|
||||||
|
|
|
@ -11,11 +11,6 @@
|
||||||
max-width: 130px;
|
max-width: 130px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mediaButton.infoButton {
|
|
||||||
width: 34px;
|
|
||||||
height: 34px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mediaButton.active {
|
.mediaButton.active {
|
||||||
color: #52B54B;
|
color: #52B54B;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,16 @@
|
||||||
<div class="recordingEditor">
|
<div class="recordingEditor">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="scheduleTab seriesTimerSchedule"></div>
|
|
||||||
|
<h1 style="margin-top:0;">${HeaderSchedule}</h1>
|
||||||
|
<div style="display:flex;align-items:center;">
|
||||||
|
<i class="md-icon" style="color:#cc3333;font-size:1.5em;"></i>
|
||||||
|
<div style="margin-left:.25em;">${WillRecord}</div>
|
||||||
|
<i class="md-icon" style="color:gray;font-size:1.5em;margin-left: 1.5em;"></i>
|
||||||
|
<div style="margin-left:.25em;">${NotScheduledToRecord}</div>
|
||||||
|
</div>
|
||||||
|
<div class="scheduleTab seriesTimerSchedule">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,101 @@
|
||||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getProgramScheduleHtml(items, options) {
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
var groups = [];
|
||||||
|
|
||||||
|
var currentGroupName = '';
|
||||||
|
var currentGroup = [];
|
||||||
|
|
||||||
|
var i, length;
|
||||||
|
|
||||||
|
for (i = 0, length = items.length; i < length; i++) {
|
||||||
|
|
||||||
|
var item = items[i];
|
||||||
|
|
||||||
|
var dateText = '';
|
||||||
|
|
||||||
|
if (options.indexByDate !== false && item.StartDate) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
var premiereDate = datetime.parseISO8601Date(item.StartDate, true);
|
||||||
|
|
||||||
|
dateText = LibraryBrowser.getFutureDateText(premiereDate, true);
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dateText != currentGroupName) {
|
||||||
|
|
||||||
|
if (currentGroup.length) {
|
||||||
|
groups.push({
|
||||||
|
name: currentGroupName,
|
||||||
|
items: currentGroup
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
currentGroupName = dateText;
|
||||||
|
currentGroup = [item];
|
||||||
|
} else {
|
||||||
|
currentGroup.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentGroup.length) {
|
||||||
|
groups.push({
|
||||||
|
name: currentGroupName,
|
||||||
|
items: currentGroup
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
for (i = 0, length = groups.length; i < length; i++) {
|
||||||
|
|
||||||
|
var group = groups[i];
|
||||||
|
|
||||||
|
if (group.name) {
|
||||||
|
html += '<div class="homePageSection">';
|
||||||
|
|
||||||
|
html += '<h1 class="listHeader">' + group.name + '</h1>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enableScrollX()) {
|
||||||
|
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX">';
|
||||||
|
} else {
|
||||||
|
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap">';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += cardBuilder.getCardsHtml({
|
||||||
|
items: group.items,
|
||||||
|
shape: getBackdropShape(),
|
||||||
|
preferThumb: true,
|
||||||
|
showTitle: true,
|
||||||
|
showAirTime: true,
|
||||||
|
showAirEndTime: true,
|
||||||
|
showChannelName: true,
|
||||||
|
cardLayout: true,
|
||||||
|
action: 'programdialog',
|
||||||
|
cardFooterAside: 'none',
|
||||||
|
preferThumb: true,
|
||||||
|
coverImage: true,
|
||||||
|
overlayText: false
|
||||||
|
|
||||||
|
});
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
if (group.name) {
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.resolve(html);
|
||||||
|
}
|
||||||
|
|
||||||
function getTimersHtml(timers, options) {
|
function getTimersHtml(timers, options) {
|
||||||
|
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
@ -109,29 +204,8 @@
|
||||||
|
|
||||||
window.LiveTvHelpers = {
|
window.LiveTvHelpers = {
|
||||||
|
|
||||||
getDaysOfWeek: function () {
|
getTimersHtml: getTimersHtml,
|
||||||
|
getProgramScheduleHtml: getProgramScheduleHtml
|
||||||
var days = [
|
|
||||||
'Sunday',
|
|
||||||
'Monday',
|
|
||||||
'Tuesday',
|
|
||||||
'Wednesday',
|
|
||||||
'Thursday',
|
|
||||||
'Friday',
|
|
||||||
'Saturday'
|
|
||||||
];
|
|
||||||
|
|
||||||
return days.map(function (d) {
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: d,
|
|
||||||
value: d
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
getTimersHtml: getTimersHtml
|
|
||||||
|
|
||||||
};
|
};
|
||||||
});
|
});
|
|
@ -9,17 +9,38 @@
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSchedule(page, result) {
|
function renderSchedule(page) {
|
||||||
|
|
||||||
var timers = result.Items;
|
ApiClient.getLiveTvPrograms({
|
||||||
|
UserId: ApiClient.getCurrentUserId(),
|
||||||
|
ImageTypeLimit: 1,
|
||||||
|
EnableImageTypes: "Primary,Backdrop,Thumb",
|
||||||
|
SortBy: "StartDate",
|
||||||
|
EnableTotalRecordCount: false,
|
||||||
|
EnableUserData: false,
|
||||||
|
SeriesTimerId: params.id,
|
||||||
|
Fields: "ChannelInfo"
|
||||||
|
|
||||||
LiveTvHelpers.getTimersHtml(timers).then(function (html) {
|
}).then(function (result) {
|
||||||
|
|
||||||
|
LiveTvHelpers.getProgramScheduleHtml(result.Items).then(function (html) {
|
||||||
|
|
||||||
var scheduleTab = page.querySelector('.scheduleTab');
|
var scheduleTab = page.querySelector('.scheduleTab');
|
||||||
scheduleTab.innerHTML = html;
|
scheduleTab.innerHTML = html;
|
||||||
|
|
||||||
ImageLoader.lazyChildren(scheduleTab);
|
ImageLoader.lazyChildren(scheduleTab);
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//var timers = result.Items;
|
||||||
|
|
||||||
|
//LiveTvHelpers.getTimersHtml(timers).then(function (html) {
|
||||||
|
|
||||||
|
// var scheduleTab = page.querySelector('.scheduleTab');
|
||||||
|
// scheduleTab.innerHTML = html;
|
||||||
|
|
||||||
|
// ImageLoader.lazyChildren(scheduleTab);
|
||||||
|
//});
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload() {
|
function reload() {
|
||||||
|
@ -33,15 +54,7 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ApiClient.getLiveTvTimers({
|
renderSchedule(view);
|
||||||
|
|
||||||
seriesTimerId: id
|
|
||||||
|
|
||||||
}).then(function (timerResult) {
|
|
||||||
|
|
||||||
renderSchedule(view, timerResult);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
seriesRecordingEditor.embed(params.id, ApiClient.serverId(), {
|
seriesRecordingEditor.embed(params.id, ApiClient.serverId(), {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'cardBuilder', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, cardBuilder) {
|
define(['libraryBrowser', 'cardBuilder', 'dom', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, cardBuilder, dom) {
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return browserInfo.mobile && AppInfo.enableAppLayouts;
|
return browserInfo.mobile && AppInfo.enableAppLayouts;
|
||||||
|
@ -29,6 +29,7 @@
|
||||||
limit: limit,
|
limit: limit,
|
||||||
ImageTypeLimit: 1,
|
ImageTypeLimit: 1,
|
||||||
EnableImageTypes: "Primary,Thumb,Backdrop",
|
EnableImageTypes: "Primary,Thumb,Backdrop",
|
||||||
|
EnableTotalRecordCount: false,
|
||||||
Fields: "ChannelInfo"
|
Fields: "ChannelInfo"
|
||||||
|
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
|
|
|
@ -376,6 +376,8 @@
|
||||||
|
|
||||||
if (playerInfo.supportedCommands.indexOf('EndSession') != -1) {
|
if (playerInfo.supportedCommands.indexOf('EndSession') != -1) {
|
||||||
|
|
||||||
|
require(['dialog'], function (dialog) {
|
||||||
|
|
||||||
var menuItems = [];
|
var menuItems = [];
|
||||||
|
|
||||||
menuItems.push({
|
menuItems.push({
|
||||||
|
@ -387,8 +389,6 @@
|
||||||
id: 'no'
|
id: 'no'
|
||||||
});
|
});
|
||||||
|
|
||||||
require(['dialog'], function (dialog) {
|
|
||||||
|
|
||||||
dialog({
|
dialog({
|
||||||
buttons: menuItems,
|
buttons: menuItems,
|
||||||
//positionTo: positionTo,
|
//positionTo: positionTo,
|
||||||
|
|
|
@ -413,7 +413,24 @@
|
||||||
|
|
||||||
var elem = mediaControls.querySelector('.nowPlayingTabs');
|
var elem = mediaControls.querySelector('.nowPlayingTabs');
|
||||||
elem.innerHTML = getNowPlayingTabsHtml(item.CurrentProgram || item);
|
elem.innerHTML = getNowPlayingTabsHtml(item.CurrentProgram || item);
|
||||||
|
|
||||||
|
var tabCast = elem.querySelector('.tabCast');
|
||||||
|
if (tabCast) {
|
||||||
|
require(['peoplecardbuilder'], function (peoplecardbuilder) {
|
||||||
|
|
||||||
|
peoplecardbuilder.buildPeopleCards((item.CurrentProgram || item).People || [], {
|
||||||
|
itemsContainer: tabCast,
|
||||||
|
coverImage: true,
|
||||||
|
serverId: ApiClient.serverId(),
|
||||||
|
width: 160,
|
||||||
|
shape: 'portrait'
|
||||||
|
});
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ImageLoader.lazyChildren(elem);
|
||||||
|
}
|
||||||
|
|
||||||
function onTabButtonClick() {
|
function onTabButtonClick() {
|
||||||
if (!this.classList.contains('selectedNowPlayingTabButton')) {
|
if (!this.classList.contains('selectedNowPlayingTabButton')) {
|
||||||
|
@ -540,55 +557,6 @@
|
||||||
|
|
||||||
if (item.People && item.People.length) {
|
if (item.People && item.People.length) {
|
||||||
html += '<div class="tabCast nowPlayingTab smoothScrollX hide" style="white-space:nowrap;">';
|
html += '<div class="tabCast nowPlayingTab smoothScrollX hide" style="white-space:nowrap;">';
|
||||||
html += item.People.map(function (cast) {
|
|
||||||
|
|
||||||
var personHtml = '<div class="tileItem smallPosterTileItem" style="width:300px;">';
|
|
||||||
|
|
||||||
var imgUrl;
|
|
||||||
var height = 150;
|
|
||||||
|
|
||||||
if (cast.PrimaryImageTag) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(cast.Id, {
|
|
||||||
height: height,
|
|
||||||
tag: cast.PrimaryImageTag,
|
|
||||||
type: "primary",
|
|
||||||
minScale: 2
|
|
||||||
});
|
|
||||||
|
|
||||||
personHtml += '<div class="tileImage lazy" data-src="' + imgUrl + '" style="height:' + height + 'px;"></div>';
|
|
||||||
} else {
|
|
||||||
|
|
||||||
imgUrl = "css/images/items/list/person.png";
|
|
||||||
personHtml += '<div class="tileImage" style="background-image:url(\'' + imgUrl + '\');height:' + height + 'px;"></div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
personHtml += '<div class="tileContent">';
|
|
||||||
|
|
||||||
personHtml += '<p>' + cast.Name + '</p>';
|
|
||||||
|
|
||||||
var role = cast.Role ? Globalize.translate('ValueAsRole', cast.Role) : cast.Type;
|
|
||||||
|
|
||||||
if (role == "GuestStar") {
|
|
||||||
role = Globalize.translate('ValueGuestStar');
|
|
||||||
}
|
|
||||||
|
|
||||||
role = role || "";
|
|
||||||
|
|
||||||
var maxlength = 40;
|
|
||||||
|
|
||||||
if (role.length > maxlength) {
|
|
||||||
role = role.substring(0, maxlength - 3) + '...';
|
|
||||||
}
|
|
||||||
|
|
||||||
personHtml += '<p>' + role + '</p>';
|
|
||||||
|
|
||||||
personHtml += '</div>';
|
|
||||||
|
|
||||||
personHtml += '</div>';
|
|
||||||
return personHtml;
|
|
||||||
|
|
||||||
}).join('');
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -146,6 +146,25 @@ define(['appSettings', 'userSettings', 'appStorage', 'datetime'], function (appS
|
||||||
return window.MediaSource != null;
|
return window.MediaSource != null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function getProfileOptions(item) {
|
||||||
|
|
||||||
|
var disableVideoAudioCodecs = [];
|
||||||
|
if (!AppInfo.isNativeApp && !item.RunTimeTicks) {
|
||||||
|
disableVideoAudioCodecs.push('ac3');
|
||||||
|
}
|
||||||
|
|
||||||
|
var options = {};
|
||||||
|
|
||||||
|
if (!AppInfo.isNativeApp) {
|
||||||
|
options.enableMkvProgressive = item.RunTimeTicks != null;
|
||||||
|
options.enableTsProgressive = item.RunTimeTicks != null;
|
||||||
|
options.enableHls = !browserInfo.firefox || item.RunTimeTicks == null;
|
||||||
|
options.disableVideoAudioCodecs = disableVideoAudioCodecs;
|
||||||
|
}
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
self.changeStream = function (ticks, params) {
|
self.changeStream = function (ticks, params) {
|
||||||
|
|
||||||
var mediaRenderer = self.currentMediaRenderer;
|
var mediaRenderer = self.currentMediaRenderer;
|
||||||
|
@ -163,19 +182,7 @@ define(['appSettings', 'userSettings', 'appStorage', 'datetime'], function (appS
|
||||||
var playSessionId = getParameterByName('PlaySessionId', currentSrc);
|
var playSessionId = getParameterByName('PlaySessionId', currentSrc);
|
||||||
var liveStreamId = getParameterByName('LiveStreamId', currentSrc);
|
var liveStreamId = getParameterByName('LiveStreamId', currentSrc);
|
||||||
|
|
||||||
var disableVideoAudioCodecs = [];
|
Dashboard.getDeviceProfile(null, getProfileOptions(self.currentMediaSource)).then(function (deviceProfile) {
|
||||||
if (!AppInfo.isNativeApp && !self.currentMediaSource.RunTimeTicks) {
|
|
||||||
disableVideoAudioCodecs.push('ac3');
|
|
||||||
}
|
|
||||||
|
|
||||||
Dashboard.getDeviceProfile(null, {
|
|
||||||
|
|
||||||
enableMkvProgressive: self.currentMediaSource.RunTimeTicks != null,
|
|
||||||
enableTsProgressive: self.currentMediaSource.RunTimeTicks != null,
|
|
||||||
enableHls: !browserInfo.firefox || self.currentMediaSource.RunTimeTicks == null,
|
|
||||||
disableVideoAudioCodecs: disableVideoAudioCodecs
|
|
||||||
|
|
||||||
}).then(function (deviceProfile) {
|
|
||||||
|
|
||||||
var audioStreamIndex = params.AudioStreamIndex == null ? (getParameterByName('AudioStreamIndex', currentSrc) || null) : params.AudioStreamIndex;
|
var audioStreamIndex = params.AudioStreamIndex == null ? (getParameterByName('AudioStreamIndex', currentSrc) || null) : params.AudioStreamIndex;
|
||||||
if (typeof (audioStreamIndex) == 'string') {
|
if (typeof (audioStreamIndex) == 'string') {
|
||||||
|
@ -683,19 +690,7 @@ define(['appSettings', 'userSettings', 'appStorage', 'datetime'], function (appS
|
||||||
|
|
||||||
var onBitrateDetected = function () {
|
var onBitrateDetected = function () {
|
||||||
|
|
||||||
var disableVideoAudioCodecs = [];
|
Dashboard.getDeviceProfile(null, getProfileOptions(item)).then(function (deviceProfile) {
|
||||||
|
|
||||||
if (!AppInfo.isNativeApp && !item.RunTimeTicks) {
|
|
||||||
disableVideoAudioCodecs.push('ac3');
|
|
||||||
}
|
|
||||||
|
|
||||||
Dashboard.getDeviceProfile(null, {
|
|
||||||
|
|
||||||
enableMkvProgressive: item.RunTimeTicks != null,
|
|
||||||
enableTsProgressive: item.RunTimeTicks != null,
|
|
||||||
disableVideoAudioCodecs: disableVideoAudioCodecs
|
|
||||||
|
|
||||||
}).then(function (deviceProfile) {
|
|
||||||
playOnDeviceProfileCreated(deviceProfile, item, startPosition, callback);
|
playOnDeviceProfileCreated(deviceProfile, item, startPosition, callback);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
SortOrder: "Descending",
|
SortOrder: "Descending",
|
||||||
IncludeItemTypes: "Movie",
|
IncludeItemTypes: "Movie",
|
||||||
Filters: "IsResumable",
|
Filters: "IsResumable",
|
||||||
Limit: screenWidth >= 1920 ? 5 : (screenWidth >= 1600 ? 4 : 3),
|
Limit: screenWidth >= 1920 ? 5 : (screenWidth >= 1600 ? 5 : 3),
|
||||||
Recursive: true,
|
Recursive: true,
|
||||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
||||||
CollapseBoxSetItems: false,
|
CollapseBoxSetItems: false,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['appStorage', 'emby-button'], function (appStorage) {
|
define(['userSettings', 'emby-button'], function (userSettings) {
|
||||||
|
|
||||||
return function (options) {
|
return function (options) {
|
||||||
|
|
||||||
|
@ -77,32 +77,54 @@
|
||||||
function onButtonClick() {
|
function onButtonClick() {
|
||||||
|
|
||||||
var button = this;
|
var button = this;
|
||||||
var id = button.getAttribute('data-taskid');
|
var buttonTextElement = this.querySelector('span') || this;
|
||||||
|
var text = buttonTextElement.textContent || buttonTextElement.innerText;
|
||||||
|
var taskId = button.getAttribute('data-taskid');
|
||||||
|
|
||||||
var key = 'scheduledTaskButton' + options.taskKey;
|
var key = 'scheduledTaskButton' + options.taskKey;
|
||||||
var expectedValue = new Date().getMonth() + '6';
|
var expectedValue = new Date().getMonth() + '6';
|
||||||
|
|
||||||
if (appStorage.getItem(key) == expectedValue) {
|
if (userSettings.get(key) == expectedValue) {
|
||||||
onScheduledTaskMessageConfirmed(id);
|
onScheduledTaskMessageConfirmed(taskId);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
require(['dialog'], function (dialog) {
|
||||||
|
|
||||||
var msg = Globalize.translate('ConfirmMessageScheduledTaskButton');
|
var msg = Globalize.translate('ConfirmMessageScheduledTaskButton');
|
||||||
msg += '<br/>';
|
|
||||||
msg += '<div style="margin-top:1em;">';
|
|
||||||
msg += '<a class="clearLink" href="scheduledtasks.html"><button is="emby-button" type="button" style="color:#3f51b5!important;margin:0;">' + Globalize.translate('ButtonScheduledTasks') + '</button></a>';
|
|
||||||
msg += '</div>';
|
|
||||||
|
|
||||||
require(['confirm'], function (confirm) {
|
var menuItems = [];
|
||||||
|
|
||||||
confirm({
|
menuItems.push({
|
||||||
|
name: text,
|
||||||
|
id: 'task'
|
||||||
|
});
|
||||||
|
menuItems.push({
|
||||||
|
name: Globalize.translate('ButtonScheduledTasks'),
|
||||||
|
id: 'tasks'
|
||||||
|
});
|
||||||
|
menuItems.push({
|
||||||
|
name: Globalize.translate('ButtonCancel'),
|
||||||
|
id: 'cancel'
|
||||||
|
});
|
||||||
|
|
||||||
title: Globalize.translate('HeaderConfirmation'),
|
dialog({
|
||||||
html: msg,
|
buttons: menuItems,
|
||||||
text: Globalize.translate('ConfirmMessageScheduledTaskButton') + "\n\n" + Globalize.translate('ButtonScheduledTasks')
|
text: msg
|
||||||
|
|
||||||
}).then(function () {
|
}).then(function (id) {
|
||||||
appStorage.setItem(key, expectedValue);
|
switch (id) {
|
||||||
onScheduledTaskMessageConfirmed(id);
|
|
||||||
|
case 'task':
|
||||||
|
userSettings.set(key, expectedValue);
|
||||||
|
onScheduledTaskMessageConfirmed(taskId);
|
||||||
|
break;
|
||||||
|
case 'tasks':
|
||||||
|
userSettings.set(key, expectedValue);
|
||||||
|
Dashboard.navigate('scheduledtasks.html');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'components/categorysyncbuttons', 'cardBuilder', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, categorysyncbuttons, cardBuilder) {
|
define(['libraryBrowser', 'dom', 'components/categorysyncbuttons', 'cardBuilder', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, dom, categorysyncbuttons, cardBuilder) {
|
||||||
|
|
||||||
return function (view, params) {
|
return function (view, params) {
|
||||||
|
|
||||||
|
@ -62,7 +62,8 @@
|
||||||
|
|
||||||
var parentId = LibraryMenu.getTopParentId();
|
var parentId = LibraryMenu.getTopParentId();
|
||||||
|
|
||||||
var limit = 6;
|
var screenWidth = dom.getWindowSize().innerWidth;
|
||||||
|
var limit = screenWidth >= 1600 ? 5 : 6;
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,6 @@
|
||||||
"HeaderAvailableServices": "Available Services",
|
"HeaderAvailableServices": "Available Services",
|
||||||
"MessageNoServicesInstalled": "No services are currently installed.",
|
"MessageNoServicesInstalled": "No services are currently installed.",
|
||||||
"HeaderToAccessPleaseEnterEasyPinCode": "To access, please enter your easy pin code",
|
"HeaderToAccessPleaseEnterEasyPinCode": "To access, please enter your easy pin code",
|
||||||
"KidsModeAdultInstruction": "Click the lock icon in the bottom right to configure or leave kids mode. Your pin code will be required.",
|
|
||||||
"ButtonConfigurePinCode": "Configure pin code",
|
"ButtonConfigurePinCode": "Configure pin code",
|
||||||
"RegisterWithPayPal": "Register with PayPal",
|
"RegisterWithPayPal": "Register with PayPal",
|
||||||
"HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial",
|
"HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial",
|
||||||
|
@ -1431,7 +1430,7 @@
|
||||||
"ButtonScheduledTasks": "Scheduled tasks",
|
"ButtonScheduledTasks": "Scheduled tasks",
|
||||||
"MessageItemsAdded": "Items added",
|
"MessageItemsAdded": "Items added",
|
||||||
"HeaderSelectCertificatePath": "Select Certificate Path",
|
"HeaderSelectCertificatePath": "Select Certificate Path",
|
||||||
"ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task and does not require any manual effort. To configure the scheduled task, see:",
|
"ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task and does not require any manual effort. To configure the scheduled task, click Scheduled Tasks.",
|
||||||
"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": "An active Emby Premiere subscription provides additional benefits such as access to sync, premium plugins, internet channel content, and more. {0}Learn more{1}.",
|
||||||
"HeaderWelcomeToProjectServerDashboard": "Welcome to the Emby Server Dashboard",
|
"HeaderWelcomeToProjectServerDashboard": "Welcome to the Emby Server Dashboard",
|
||||||
"HeaderWelcomeToProjectWebClient": "Welcome to Emby",
|
"HeaderWelcomeToProjectWebClient": "Welcome to Emby",
|
||||||
|
@ -2141,5 +2140,7 @@
|
||||||
"HeaderUpcomingOnTV": "Upcoming On TV",
|
"HeaderUpcomingOnTV": "Upcoming On TV",
|
||||||
"LabelOptionalNetworkPath": "(Optional) Shared network folder:",
|
"LabelOptionalNetworkPath": "(Optional) Shared network folder:",
|
||||||
"LabelOptionalNetworkPathHelp": "If this folder is shared on your network, supplying the network share path can allow Emby apps on other devices to access media files directly.",
|
"LabelOptionalNetworkPathHelp": "If this folder is shared on your network, supplying the network share path can allow Emby apps on other devices to access media files directly.",
|
||||||
"ButtonPlayExternalPlayer": "Play with external player"
|
"ButtonPlayExternalPlayer": "Play with external player",
|
||||||
|
"WillRecord": "Will record",
|
||||||
|
"NotScheduledToRecord": "Not scheduled to record"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue