added live tv timers page
79
ApiClient.js
|
@ -380,7 +380,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
|||
|
||||
self.getLiveTvServices = function (options) {
|
||||
|
||||
var url = self.getUrl("/LiveTv/Services", options || {});
|
||||
var url = self.getUrl("LiveTv/Services", options || {});
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
|
@ -395,7 +395,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
|||
throw new Error("null id");
|
||||
}
|
||||
|
||||
var url = self.getUrl("/LiveTv/Channels/" + id);
|
||||
var url = self.getUrl("LiveTv/Channels/" + id);
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
|
@ -406,7 +406,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
|||
|
||||
self.getLiveTvChannels = function (options) {
|
||||
|
||||
var url = self.getUrl("/LiveTv/Channels", options || {});
|
||||
var url = self.getUrl("LiveTv/Channels", options || {});
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
|
@ -417,7 +417,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
|||
|
||||
self.getLiveTvPrograms = function (options) {
|
||||
|
||||
var url = self.getUrl("/LiveTv/Programs", options || {});
|
||||
var url = self.getUrl("LiveTv/Programs", options || {});
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
|
@ -428,7 +428,76 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
|||
|
||||
self.getLiveTvRecordings = function (options) {
|
||||
|
||||
var url = self.getUrl("/LiveTv/Recordings", options || {});
|
||||
var url = self.getUrl("LiveTv/Recordings", options || {});
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json"
|
||||
});
|
||||
};
|
||||
|
||||
self.getLiveTvRecording = function (id) {
|
||||
|
||||
if (!id) {
|
||||
throw new Error("null id");
|
||||
}
|
||||
|
||||
var url = self.getUrl("LiveTv/Recordings/" + id);
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json"
|
||||
});
|
||||
};
|
||||
|
||||
self.deleteLiveTvRecording = function (id) {
|
||||
|
||||
if (!id) {
|
||||
throw new Error("null id");
|
||||
}
|
||||
|
||||
var url = self.getUrl("LiveTv/Recordings/" + id);
|
||||
|
||||
return self.ajax({
|
||||
type: "DELETE",
|
||||
url: url
|
||||
});
|
||||
};
|
||||
|
||||
self.cancelLiveTvTimer = function (id) {
|
||||
|
||||
if (!id) {
|
||||
throw new Error("null id");
|
||||
}
|
||||
|
||||
var url = self.getUrl("LiveTv/Timers/" + id);
|
||||
|
||||
return self.ajax({
|
||||
type: "DELETE",
|
||||
url: url
|
||||
});
|
||||
};
|
||||
|
||||
self.getLiveTvTimers = function (options) {
|
||||
|
||||
var url = self.getUrl("LiveTv/Timers", options || {});
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json"
|
||||
});
|
||||
};
|
||||
|
||||
self.getLiveTvTimer = function (id) {
|
||||
|
||||
if (!id) {
|
||||
throw new Error("null id");
|
||||
}
|
||||
|
||||
var url = self.getUrl("LiveTv/Timers/" + id);
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
|
|
BIN
dashboard-ui/css/images/editor.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
dashboard-ui/css/images/items/detail/tv.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 733 B |
Before Width: | Height: | Size: 634 B |
Before Width: | Height: | Size: 882 B |
Before Width: | Height: | Size: 805 B |
|
@ -102,7 +102,7 @@
|
|||
padding: 10px;
|
||||
}
|
||||
|
||||
.libraryPage, .itemListContent {
|
||||
.libraryPage:not(.metadataEditorPage), .libraryPage:not(.metadataEditorPage) .itemListContent {
|
||||
background: #494949 url(images/bgflip.png) repeat-x!important;
|
||||
background-attachment: fixed!important;
|
||||
}
|
||||
|
@ -435,22 +435,22 @@ a.itemTag:hover {
|
|||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.libraryPage ::-webkit-scrollbar {
|
||||
.libraryPage:not(.metadataEditorPage) ::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.libraryPage ::-webkit-scrollbar-button:start:decrement,
|
||||
.libraryPage ::-webkit-scrollbar-button:end:increment {
|
||||
.libraryPage:not(.metadataEditorPage) ::-webkit-scrollbar-button:start:decrement,
|
||||
.libraryPage:not(.metadataEditorPage) ::-webkit-scrollbar-button:end:increment {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.libraryPage ::-webkit-scrollbar-track-piece {
|
||||
.libraryPage:not(.metadataEditorPage) ::-webkit-scrollbar-track-piece {
|
||||
background-color: #3b3b3b;
|
||||
-webkit-border-radius: 6px;
|
||||
}
|
||||
|
||||
.libraryPage ::-webkit-scrollbar-thumb:vertical {
|
||||
.libraryPage:not(.metadataEditorPage) ::-webkit-scrollbar-thumb:vertical {
|
||||
-webkit-border-radius: 6px;
|
||||
background: #666 no-repeat center;
|
||||
}
|
||||
|
|
|
@ -95,6 +95,7 @@
|
|||
overflow-y: scroll;
|
||||
overflow-x: auto!important;
|
||||
display: block;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.editPageInnerContent {
|
||||
|
@ -108,6 +109,28 @@
|
|||
}
|
||||
}
|
||||
|
||||
.editorTile {
|
||||
display: inline-block;
|
||||
margin: 5px;
|
||||
padding: 10px;
|
||||
border: 1px solid #ccc;
|
||||
background: #eee;
|
||||
background-image: -webkit-gradient(linear,left top,left bottom,from(#fff),to(#f1f1f1));
|
||||
background-image: -webkit-linear-gradient(#fff,#f1f1f1);
|
||||
background-image: -moz-linear-gradient(#fff,#f1f1f1);
|
||||
background-image: -ms-linear-gradient(#fff,#f1f1f1);
|
||||
background-image: -o-linear-gradient(#fff,#f1f1f1);
|
||||
background-image: linear-gradient(#fff,#f1f1f1);
|
||||
}
|
||||
|
||||
.imageEditorTile {
|
||||
width: 200px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.editorTile p {
|
||||
margin: .5em 0;
|
||||
}
|
||||
|
||||
@media all and (min-width: 700px) {
|
||||
|
||||
|
|
|
@ -43,8 +43,12 @@ body {
|
|||
text-decoration: underline;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: 'Open Sans', Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: 'Segoe UI Light', 'Open Sans', Arial, Helvetica, sans-serif;
|
||||
font-family: 'Open Sans', Arial, Helvetica, sans-serif;
|
||||
font-weight: 200;
|
||||
font-size: 22pt;
|
||||
}
|
||||
|
@ -59,20 +63,20 @@ h1 {
|
|||
}
|
||||
|
||||
h2 {
|
||||
font-family: 'Segoe UI Semiight', 'Open Sans', Arial, Helvetica, sans-serif;
|
||||
font-family: 'Open Sans', Arial, Helvetica, sans-serif;
|
||||
font-weight: 400;
|
||||
font-size: 20pt;
|
||||
}
|
||||
|
||||
h1 a {
|
||||
.libraryPage:not(.metadataEditorPage) h1 a {
|
||||
font-weight: 200!important;
|
||||
text-decoration: none;
|
||||
color: #fff!important;
|
||||
}
|
||||
|
||||
h1 a:hover {
|
||||
h1 a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width: 750px) {
|
||||
h1 {
|
||||
|
@ -217,7 +221,7 @@ form, .readOnlyContent {
|
|||
}
|
||||
|
||||
.fieldDescription {
|
||||
font-size: 11px;
|
||||
font-size: 12px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,8 +20,7 @@
|
|||
|
||||
.tileItem .criticRating {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
font-size: 13px;
|
||||
top: -2px;
|
||||
}
|
||||
|
||||
.tileImage {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Media Browser</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="editItemImagesPage" data-role="page" class="page libraryPage metadataEditorPage" data-theme="a">
|
||||
<div id="editItemImagesPage" data-role="page" class="page libraryPage metadataEditorPage">
|
||||
<div data-role="content editPageContent">
|
||||
<div class="editPageSidebar">
|
||||
<div class="libraryTree">
|
||||
|
@ -18,7 +18,7 @@
|
|||
<br />
|
||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||
<a href="#" data-role="button" id="btnEditMetadata">Metadata</a>
|
||||
<a href="#" data-role="button" id="btnEditPeople">People</a>
|
||||
<a href="#" data-role="button" id="btnEditPeople" style="display: none;">People</a>
|
||||
<a href="#" data-role="button" class="ui-btn-active">Images</a>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Media Browser</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="editItemMetadataPage" data-role="page" class="page libraryPage metadataEditorPage" data-theme="a">
|
||||
<div id="editItemMetadataPage" data-role="page" class="page libraryPage metadataEditorPage">
|
||||
<div data-role="content editPageContent">
|
||||
<div class="editPageSidebar">
|
||||
<div class="libraryTree">
|
||||
|
@ -30,21 +30,27 @@
|
|||
<div class="circle1"></div>
|
||||
<div style="margin-top: -15px;"></div>
|
||||
</div>
|
||||
<div class="fldRefresh" style="display: none; vertical-align: bottom;">
|
||||
<button id="btnRefresh" type="button" data-icon="refresh" data-mini="true" data-theme="b" data-inline="true">Refresh</button>
|
||||
<div style="vertical-align: bottom; display: inline-block;">
|
||||
<button class="saveButtonContainer btnSave" type="submit" data-theme="b" data-icon="ok" data-mini="true" data-inline="true">
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
<div id="fldRecursive" style="display: none; vertical-align: bottom;">
|
||||
<div style="display: inline-block; vertical-align: bottom;">
|
||||
<div class="fldRefresh" style="display: none;">
|
||||
<button id="btnRefresh" type="button" data-icon="refresh" data-mini="true" data-inline="true">Refresh</button>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: inline-block; vertical-align: bottom;">
|
||||
<div id="fldRecursive" style="display: none;">
|
||||
<label for="chkRecursive">Refresh child items</label>
|
||||
<input type="checkbox" id="chkRecursive" name="chkRecursive" data-mini="true" checked="checked" data-inline="true" />
|
||||
</div>
|
||||
<div style="display: inline-block;">
|
||||
<div id="fldDelete" style="vertical-align: bottom; display: none;">
|
||||
</div>
|
||||
<div style="vertical-align: bottom; display: inline-block;">
|
||||
<div id="fldDelete" style="display: none;">
|
||||
<button id="btnDelete" type="button" data-icon="delete" data-mini="true" data-theme="a" data-inline="true">Delete</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fldRefresh" style="display: none; margin: .5em 0 1em;">
|
||||
<div class="fieldDescription">A refresh will cause internet metadata to be re-downloaded (if enabled, and dependent on metadata settings).</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="padding: 10px 15px;">
|
||||
|
@ -199,7 +205,7 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="collapsible" data-collapsed="false">
|
||||
<div data-role="collapsible" data-mini="true" data-collapsed="false">
|
||||
<h3>External Id's</h3>
|
||||
<div>
|
||||
<p id="albumAssociationMessage" style="display: none;">Associate this album with a movie, tv series and/or game, and we'll be able to link it to other items in your library.</p>
|
||||
|
@ -280,7 +286,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="collapsible" id="genresCollapsible" style="display: none;">
|
||||
<div data-role="collapsible" data-mini="true" id="genresCollapsible" style="display: none;">
|
||||
<h3>Genres</h3>
|
||||
<div data-role="editableListviewContainer">
|
||||
<div data-role="fieldcontain">
|
||||
|
@ -290,7 +296,7 @@
|
|||
<ul data-role="listview" data-inset="true" data-split-icon="delete" id="listGenres"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="collapsible" id="studiosCollapsible" style="display: none;">
|
||||
<div data-role="collapsible" data-mini="true" id="studiosCollapsible" style="display: none;">
|
||||
<h3>Studios</h3>
|
||||
<div data-role="editableListviewContainer">
|
||||
<div data-role="fieldcontain">
|
||||
|
@ -300,7 +306,7 @@
|
|||
<ul data-role="listview" data-inset="true" data-split-icon="delete" id="listStudios"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="collapsible" id="tagsCollapsible" style="display: none;">
|
||||
<div data-mini="true" data-role="collapsible" id="tagsCollapsible" style="display: none;">
|
||||
<h3>Tags</h3>
|
||||
<div data-role="editableListviewContainer">
|
||||
<div data-role="fieldcontain">
|
||||
|
@ -310,12 +316,12 @@
|
|||
<ul data-role="listview" data-inset="true" data-split-icon="delete" id="listTags"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="collapsible" id="metadataSettingsCollapsible" style="display: none;">
|
||||
<div data-role="collapsible" data-mini="true" id="metadataSettingsCollapsible" style="display: none;">
|
||||
<h3>Metadata Settings</h3>
|
||||
<div>
|
||||
<p>
|
||||
<label for="enableInternetProviders">Enable internet metadata providers for this item.</label>
|
||||
<input type="checkbox" name="enableInternetProviders" id="enableInternetProviders" onchange="EditItemMetadataPage.setProviderSettingsContainerVisibility(this)" />
|
||||
<input data-mini="true" type="checkbox" name="enableInternetProviders" id="enableInternetProviders" onchange="EditItemMetadataPage.setProviderSettingsContainerVisibility(this)" />
|
||||
</p>
|
||||
<p>
|
||||
Slide a field to 'off' to lock it and prevent it's data from being changed.
|
||||
|
@ -324,9 +330,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="ulSave" data-role="listview" class="ulForm" style="display: none;">
|
||||
<ul data-role="listview" class="saveButtonContainer ulForm" style="display: none;">
|
||||
<li>
|
||||
<button id="btnSave" type="submit" data-theme="b" data-icon="ok">
|
||||
<button class="btnSave" type="submit" data-theme="b" data-icon="ok" data-mini="true">
|
||||
Save
|
||||
</button>
|
||||
</li>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Media Browser</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="editItemPeoplePage" data-role="page" class="page libraryPage metadataEditorPage" data-theme="a">
|
||||
<div id="editItemPeoplePage" data-role="page" class="page libraryPage metadataEditorPage">
|
||||
<div data-role="content editPageContent">
|
||||
<div class="editPageSidebar">
|
||||
<div class="libraryTree">
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<a href="livetvguide.html">Guide</a>
|
||||
<a href="livetvchannels.html" class="ui-btn-active">Channels</a>
|
||||
<a href="livetvrecordings.html">Recordings</a>
|
||||
<a href="livetvtimers.html">Timers</a>
|
||||
</div>
|
||||
<div id="itemBackdrop" class="itemBackdrop noBackdrop">
|
||||
<div class="itemBackdropContent">
|
||||
|
@ -19,8 +20,9 @@
|
|||
</td>
|
||||
<td style="vertical-align: top; padding: 0;">
|
||||
<p><span class="itemName"></span><span class="itemMiscInfo" style="display: inline;"></span></p>
|
||||
<p>
|
||||
<span class="userDataIcons" style="margin-left: 2em;"></span>
|
||||
<p class="itemChannelNumber"></p>
|
||||
<p style="margin: 2em 0;">
|
||||
<span class="userDataIcons"></span>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<a href="livetvguide.html">Guide</a>
|
||||
<a href="livetvchannels.html" class="ui-btn-active">Channels</a>
|
||||
<a href="livetvrecordings.html">Recordings</a>
|
||||
<a href="livetvtimers.html">Timers</a>
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<div class="viewSettings">
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<a href="livetvguide.html" class="ui-btn-active">Guide</a>
|
||||
<a href="livetvchannels.html">Channels</a>
|
||||
<a href="livetvrecordings.html">Recordings</a>
|
||||
<a href="livetvtimers.html">Timers</a>
|
||||
</div>
|
||||
<div data-role="content">
|
||||
</div>
|
||||
|
|
|
@ -9,8 +9,10 @@
|
|||
<a href="livetvguide.html">Guide</a>
|
||||
<a href="livetvchannels.html">Channels</a>
|
||||
<a href="livetvrecordings.html" class="ui-btn-active">Recordings</a>
|
||||
<a href="livetvtimers.html">Timers</a>
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<div id="items" class="itemsContainer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
|
19
dashboard-ui/livetvtimers.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Media Browser</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="liveTvTimersPage" data-role="page" class="page libraryPage" data-theme="a" data-view="livetv">
|
||||
<div class="libraryViewNav">
|
||||
<a href="livetvguide.html">Guide</a>
|
||||
<a href="livetvchannels.html">Channels</a>
|
||||
<a href="livetvrecordings.html">Recordings</a>
|
||||
<a href="livetvtimers.html" class="ui-btn-active">Timers</a>
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<div id="items" class="itemsContainer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -14,8 +14,6 @@
|
|||
|
||||
renderHeader(page, item);
|
||||
|
||||
$('#itemImage', page).html(LibraryBrowser.getDetailImageHtml(item));
|
||||
|
||||
LibraryBrowser.renderName(item, $('.itemName', page));
|
||||
LibraryBrowser.renderParentName(item, $('.parentName', page));
|
||||
|
||||
|
@ -23,6 +21,10 @@
|
|||
|
||||
Dashboard.getCurrentUser().done(function (user) {
|
||||
|
||||
var imageHref = user.Configuration.IsAdministrator ? "edititemimages.html?id=" + item.Id : "";
|
||||
|
||||
$('#itemImage', page).html(LibraryBrowser.getDetailImageHtml(item, imageHref));
|
||||
|
||||
setInitialCollapsibleState(page, item, context, user);
|
||||
renderDetails(page, item, context);
|
||||
LibraryBrowser.renderDetailPageBackdrop(page, item);
|
||||
|
|
|
@ -279,7 +279,17 @@
|
|||
|
||||
currentItem = item;
|
||||
|
||||
ApiClient.getRemoteImageProviders(getBaseRemoteOptions()).done(function(providers) {
|
||||
LibraryBrowser.renderName(item, $('.itemName', page), true);
|
||||
|
||||
updateTabs(page, item);
|
||||
|
||||
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel") {
|
||||
$('#btnEditPeople', page).hide();
|
||||
} else {
|
||||
$('#btnEditPeople', page).show();
|
||||
}
|
||||
|
||||
ApiClient.getRemoteImageProviders(getBaseRemoteOptions()).done(function (providers) {
|
||||
|
||||
if (providers.length) {
|
||||
$('.lnkBrowseAllImages', page).removeClass('hide');
|
||||
|
@ -295,17 +305,6 @@
|
|||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
});
|
||||
|
||||
LibraryBrowser.renderName(item, $('.itemName', page), true);
|
||||
|
||||
updateTabs(page, item);
|
||||
|
||||
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel") {
|
||||
$('#btnEditPeople', page).hide();
|
||||
} else {
|
||||
$('#btnEditPeople', page).show();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -317,18 +316,17 @@
|
|||
|
||||
var image = images[i];
|
||||
|
||||
html += '<div style="display:inline-block;margin:5px;background:#202020;padding:10px;">';
|
||||
html += '<div class="editorTile imageEditorTile">';
|
||||
|
||||
html += '<div style="float:left;height:100px;width:175px;vertical-align:top;background-repeat:no-repeat;background-size:contain;background-image:url(\'' + LibraryBrowser.getImageUrl(currentItem, image.ImageType, image.ImageIndex, { maxwidth: 300 }) + '\');"></div>';
|
||||
html += '<div style="height:100px;vertical-align:top;background-repeat:no-repeat;background-size:contain;background-image:url(\'' + LibraryBrowser.getImageUrl(currentItem, image.ImageType, image.ImageIndex, { maxwidth: 300 }) + '\');"></div>';
|
||||
|
||||
html += '<div style="float:right;vertical-align:top;margin-left:1em;width:125px;">';
|
||||
html += '<p style="margin-top:0;">' + image.ImageType + '</p>';
|
||||
html += '<div>';
|
||||
|
||||
html += '<p>' + image.Width + ' * ' + image.Height + '</p>';
|
||||
html += '<p>' + image.ImageType + '</p>';
|
||||
|
||||
html += '<p>' + (parseInt(image.Size / 1024)) + ' KB</p>';
|
||||
html += '<p>' + image.Width + ' X ' + image.Height + '</p>';
|
||||
|
||||
html += '<p style="margin-left:-5px;">';
|
||||
html += '<p>';
|
||||
|
||||
if (image.ImageType == "Backdrop" || image.ImageType == "Screenshot") {
|
||||
|
||||
|
@ -345,12 +343,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
html += '<button type="button" data-icon="delete" data-mini="true" data-inline="true" data-iconpos="notext" onclick="EditItemImagesPage.deleteImage(\'' + image.ImageType + '\', ' + (image.ImageIndex != null ? image.ImageIndex : "null") + ');">Delete</button>';
|
||||
|
||||
if (imageProviders.length) {
|
||||
html += '<button type="button" data-icon="cloud" data-mini="true" data-inline="true" data-iconpos="notext" onclick="EditItemImagesPage.showDownloadMenu(\'' + image.ImageType + '\');">Browse Online Images</button>';
|
||||
html += '<button type="button" data-icon="pencil" data-mini="true" data-inline="true" data-iconpos="notext" onclick="EditItemImagesPage.showDownloadMenu(\'' + image.ImageType + '\');">Browse Online Images</button>';
|
||||
}
|
||||
|
||||
html += '<button type="button" data-icon="delete" data-mini="true" data-inline="true" data-iconpos="notext" onclick="EditItemImagesPage.deleteImage(\'' + image.ImageType + '\', ' + (image.ImageIndex != null ? image.ImageIndex : "null") + ');">Delete</button>';
|
||||
|
||||
html += '</p>';
|
||||
|
||||
html += '</div>';
|
||||
|
@ -456,7 +454,7 @@
|
|||
return function (e) {
|
||||
|
||||
// Render thumbnail.
|
||||
var html = ['<img style="max-width:500px;max-height:200px;" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join('');
|
||||
var html = ['<img style="max-width:300px;max-height:100px;" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join('');
|
||||
|
||||
$('#imageOutput', page).html(html);
|
||||
$('#fldUpload', page).show();
|
||||
|
@ -590,7 +588,7 @@
|
|||
reloadBrowsableImages(page);
|
||||
});
|
||||
|
||||
}).on('pageshow', "#editItemImagesPage", function () {
|
||||
}).on('pagebeforeshow', "#editItemImagesPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
|
@ -632,26 +630,3 @@
|
|||
});
|
||||
|
||||
})(jQuery, document, window, window.FileReader, escape);
|
||||
|
||||
function onMouseOver() {
|
||||
|
||||
}
|
||||
function onMouseOut() {
|
||||
|
||||
}
|
||||
|
||||
function bindEvents() {
|
||||
|
||||
var document = 1;
|
||||
|
||||
var parentDiv = document.createElement('div');
|
||||
var childDiv = document.createElement('div');
|
||||
|
||||
document.body.appendChild(parentDiv);
|
||||
parentDiv.appendChild(childDiv);
|
||||
var myObj = '';
|
||||
|
||||
var div = document.getElementById('id');
|
||||
myObj.element = div;
|
||||
div.obj = myObj;
|
||||
}
|
|
@ -251,7 +251,7 @@
|
|||
|
||||
themes: {
|
||||
theme: 'mb3',
|
||||
url: 'thirdparty/jstree1.0fix2/themes/mb3/style.css?v=' + Dashboard.initialServerVersion
|
||||
url: 'thirdparty/jstree1.0fix3/themes/mb3/style.css?v=' + Dashboard.initialServerVersion
|
||||
}
|
||||
|
||||
}).off('select_node.jstree').on('select_node.jstree', function (event, data) {
|
||||
|
@ -468,14 +468,14 @@
|
|||
MetadataEditor.getItemPromise().done(function (item) {
|
||||
|
||||
if (item.LocationType == "Offline") {
|
||||
$('#ulSave', page).hide();
|
||||
$('.saveButtonContainer', page).hide();
|
||||
} else {
|
||||
$('#ulSave', page).show();
|
||||
$('.saveButtonContainer', page).show();
|
||||
}
|
||||
|
||||
$('#btnRefresh', page).button('enable');
|
||||
$('#btnDelete', page).button('enable');
|
||||
$('#btnSave', page).button('enable');
|
||||
$('.btnSave', page).button('enable');
|
||||
|
||||
$('#refreshLoading', page).hide();
|
||||
|
||||
|
@ -1348,7 +1348,7 @@
|
|||
|
||||
$('#btnDelete', page).button('disable');
|
||||
$('#btnRefresh', page).button('disable');
|
||||
$('#btnSave', page).button('disable');
|
||||
$('.btnSave', page).button('disable');
|
||||
|
||||
$('#refreshLoading', page).show();
|
||||
|
||||
|
@ -1393,7 +1393,7 @@
|
|||
|
||||
$('#btnDelete', page).button('disable');
|
||||
$('#btnRefresh', page).button('disable');
|
||||
$('#btnSave', page).button('disable');
|
||||
$('.btnSave', page).button('disable');
|
||||
|
||||
$('#refreshLoading', page).show();
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@
|
|||
}
|
||||
});
|
||||
|
||||
}).on('pageshow', "#editItemPeoplePage", function () {
|
||||
}).on('pagebeforeshow', "#editItemPeoplePage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
|
|
|
@ -1504,7 +1504,7 @@
|
|||
itemId = item.Name;
|
||||
}
|
||||
|
||||
if (item.MediaType || item.IsFolder) {
|
||||
if ((item.MediaType || item.IsFolder) && item.Type != "Channel") {
|
||||
if (userData.Played) {
|
||||
html += '<img data-type="' + type + '" data-itemid="' + itemId + '" class="imgUserItemRating imgPlayed" src="css/images/userdata/playedon.png" alt="Played" title="Played" onclick="LibraryBrowser.markPlayed(this);return false;" />';
|
||||
} else {
|
||||
|
@ -1701,7 +1701,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
getDetailImageHtml: function (item) {
|
||||
getDetailImageHtml: function (item, href) {
|
||||
|
||||
var imageTags = item.ImageTags || {};
|
||||
|
||||
|
@ -1905,6 +1905,9 @@
|
|||
else if (item.Type == "Genre" || item.Type == "Studio") {
|
||||
url = "css/images/items/detail/video.png";
|
||||
}
|
||||
else if (item.Type == "Channel") {
|
||||
url = "css/images/items/detail/tv.png";
|
||||
}
|
||||
else {
|
||||
url = "css/images/items/detail/video.png";
|
||||
}
|
||||
|
@ -1917,7 +1920,9 @@
|
|||
identifierValue = ApiClient.encodeName(item.Name);
|
||||
}
|
||||
|
||||
var href = "itemgallery.html?" + identifierName + "=" + identifierValue;
|
||||
if (!href) {
|
||||
href = "itemgallery.html?" + identifierName + "=" + identifierValue;
|
||||
}
|
||||
|
||||
var linkToGallery = LibraryBrowser.shouldDisplayGallery(item);
|
||||
|
||||
|
@ -2333,6 +2338,8 @@
|
|||
|
||||
html += '<a class="viewMenuLink viewMenuImageLink remoteControlMenuLink" href="#" onclick="RemoteControl.showMenu();" title="Remote Control"><img src="css/images/remote.png" alt="Remote Control" /></a>';
|
||||
|
||||
html += '<a class="viewMenuLink viewMenuImageLink editorMenuLink" href="edititemmetadata.html" title="Metadata Manager"><img src="css/images/editor.png" alt=""Metadata Manager" /></a>';
|
||||
|
||||
html += '<div class="viewMenuSecondary">';
|
||||
|
||||
html += Search.getSearchHtml();
|
||||
|
|
|
@ -3,23 +3,6 @@
|
|||
var currentItem;
|
||||
var programs;
|
||||
|
||||
function getDisplayTime(date) {
|
||||
|
||||
try {
|
||||
|
||||
date = parseISO8601Date(date, { toLocal: true });
|
||||
|
||||
} catch (err) {
|
||||
return date;
|
||||
}
|
||||
|
||||
date = date.toLocaleTimeString();
|
||||
|
||||
date = date.replace('0:00', '0');
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
function cancelRecording(page, id) {
|
||||
|
||||
}
|
||||
|
@ -75,9 +58,9 @@
|
|||
|
||||
html += '<td>' + startDate.toLocaleDateString() + '</td>';
|
||||
|
||||
html += '<td>' + getDisplayTime(program.StartDate) + '</td>';
|
||||
html += '<td>' + LiveTvHelpers.getDisplayTime(program.StartDate) + '</td>';
|
||||
|
||||
html += '<td>' + getDisplayTime(program.EndDate) + '</td>';
|
||||
html += '<td>' + LiveTvHelpers.getDisplayTime(program.EndDate) + '</td>';
|
||||
|
||||
html += '<td>' + (program.Name || '') + '</td>';
|
||||
html += '<td>' + program.Genres.join(' / ') + '</td>';
|
||||
|
@ -134,6 +117,9 @@
|
|||
Dashboard.setPageTitle(name);
|
||||
|
||||
$('.itemName', page).html(name);
|
||||
$('.itemChannelNumber', page).html(item.Number);
|
||||
|
||||
$('.userDataIcons', page).html(LibraryBrowser.getUserDataIconsHtml(item));
|
||||
|
||||
if (ApiClient.isWebSocketOpen()) {
|
||||
|
||||
|
@ -165,6 +151,27 @@
|
|||
});
|
||||
}
|
||||
|
||||
window.LiveTvHelpers = {
|
||||
|
||||
getDisplayTime: function (date) {
|
||||
|
||||
try {
|
||||
|
||||
date = parseISO8601Date(date, { toLocal: true });
|
||||
|
||||
} catch (err) {
|
||||
return date;
|
||||
}
|
||||
|
||||
date = date.toLocaleTimeString();
|
||||
|
||||
date = date.replace('0:00', '0');
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$(document).on('pageinit', "#liveTvChannelPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
|
|
@ -1 +1,80 @@
|
|||
|
||||
(function ($, document, apiClient) {
|
||||
|
||||
function renderRecordings(page, recordings) {
|
||||
|
||||
var html = '';
|
||||
|
||||
var cssClass = "detailTable";
|
||||
|
||||
html += '<div class="detailTableContainer"><table class="' + cssClass + '">';
|
||||
|
||||
html += '<tr>';
|
||||
|
||||
html += '<th> </th>';
|
||||
html += '<th>Name</th>';
|
||||
html += '<th>Channel</th>';
|
||||
html += '<th>Date</th>';
|
||||
html += '<th>Start</th>';
|
||||
html += '<th>End</th>';
|
||||
html += '<th>Status</th>';
|
||||
|
||||
html += '</tr>';
|
||||
|
||||
for (var i = 0, length = recordings.length; i < length; i++) {
|
||||
|
||||
var recording = recordings[i];
|
||||
|
||||
html += '<tr>';
|
||||
|
||||
html += '<td>';
|
||||
html += '<button data-recordingid="' + recording.Id + '" class="btnPlayRecording" type="button" data-icon="play" data-inline="true" data-mini="true" data-iconpos="notext">Play</button>';
|
||||
html += '<button data-recordingid="' + recording.Id + '" class="btnEditRecording" type="button" data-icon="pencil" data-inline="true" data-mini="true" data-iconpos="notext">Edit</button>';
|
||||
html += '<button data-recordingid="' + recording.Id + '" class="btnDeleteRecording" type="button" data-icon="delete" data-inline="true" data-mini="true" data-iconpos="notext">Delete</button>';
|
||||
html += '</td>';
|
||||
|
||||
html += '<td>' + (recording.Name || '') + '</td>';
|
||||
html += '<td>' + (recording.ChannelName || '') + '</td>';
|
||||
|
||||
var startDate = recording.StartDate;
|
||||
|
||||
try {
|
||||
|
||||
startDate = parseISO8601Date(startDate, { toLocal: true });
|
||||
|
||||
} catch (err) {
|
||||
|
||||
}
|
||||
|
||||
html += '<td>' + startDate.toLocaleDateString() + '</td>';
|
||||
|
||||
html += '<td>' + LiveTvHelpers.getDisplayTime(recording.StartDate) + '</td>';
|
||||
|
||||
html += '<td>' + LiveTvHelpers.getDisplayTime(recording.EndDate) + '</td>';
|
||||
|
||||
html += '<td>' + (recording.Status || '') + '</td>';
|
||||
|
||||
html += '</tr>';
|
||||
}
|
||||
|
||||
html += '</table></div>';
|
||||
|
||||
var elem = $('#items', page).html(html).trigger('create');
|
||||
}
|
||||
|
||||
function reload(page) {
|
||||
|
||||
apiClient.getLiveTvRecordings().done(function(result) {
|
||||
|
||||
renderRecordings(page, result.Items);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('pagebeforeshow', "#liveTvRecordingsPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
reload(page);
|
||||
});
|
||||
|
||||
})(jQuery, document, ApiClient);
|
82
dashboard-ui/scripts/livetvtimers.js
Normal file
|
@ -0,0 +1,82 @@
|
|||
(function ($, document, apiClient) {
|
||||
|
||||
function renderTimers(page, timers) {
|
||||
|
||||
var html = '';
|
||||
|
||||
var cssClass = "detailTable";
|
||||
|
||||
html += '<div class="detailTableContainer"><table class="' + cssClass + '">';
|
||||
|
||||
html += '<tr>';
|
||||
|
||||
html += '<th> </th>';
|
||||
html += '<th>Name</th>';
|
||||
html += '<th>Channel</th>';
|
||||
html += '<th>Date</th>';
|
||||
html += '<th>Start</th>';
|
||||
html += '<th>End</th>';
|
||||
html += '<th>Status</th>';
|
||||
html += '<th>Recurring Schedule</th>';
|
||||
|
||||
html += '</tr>';
|
||||
|
||||
for (var i = 0, length = timers.length; i < length; i++) {
|
||||
|
||||
var timer = timers[i];
|
||||
|
||||
html += '<tr>';
|
||||
|
||||
html += '<td>';
|
||||
html += '<button data-timerid="' + timer.Id + '" class="btnEditTimer" type="button" data-icon="pencil" data-inline="true" data-mini="true" data-iconpos="notext">Edit</button>';
|
||||
html += '<button data-timerid="' + timer.Id + '" class="btnDeleteTimer" type="button" data-icon="delete" data-inline="true" data-mini="true" data-iconpos="notext">Delete</button>';
|
||||
html += '</td>';
|
||||
|
||||
html += '<td>' + (timer.Name || '') + '</td>';
|
||||
html += '<td>' + (timer.ChannelName || '') + '</td>';
|
||||
|
||||
var startDate = timer.StartDate;
|
||||
|
||||
try {
|
||||
|
||||
startDate = parseISO8601Date(startDate, { toLocal: true });
|
||||
|
||||
} catch (err) {
|
||||
|
||||
}
|
||||
|
||||
html += '<td>' + startDate.toLocaleDateString() + '</td>';
|
||||
|
||||
html += '<td>' + LiveTvHelpers.getDisplayTime(timer.StartDate) + '</td>';
|
||||
|
||||
html += '<td>' + LiveTvHelpers.getDisplayTime(timer.EndDate) + '</td>';
|
||||
|
||||
html += '<td>' + (timer.Status || '') + '</td>';
|
||||
|
||||
html += '<td></td>';
|
||||
|
||||
html += '</tr>';
|
||||
}
|
||||
|
||||
html += '</table></div>';
|
||||
|
||||
var elem = $('#items', page).html(html).trigger('create');
|
||||
}
|
||||
|
||||
function reload(page) {
|
||||
|
||||
apiClient.getLiveTvTimers().done(function (result) {
|
||||
|
||||
renderTimers(page, result.Items);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('pagebeforeshow', "#liveTvTimersPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
reload(page);
|
||||
});
|
||||
|
||||
})(jQuery, document, ApiClient);
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 43 B After Width: | Height: | Size: 43 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 43 B After Width: | Height: | Size: 43 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 132 B After Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
@ -5,15 +5,15 @@
|
|||
*/
|
||||
|
||||
.jstree-mb3 li,
|
||||
.jstree-mb3 ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
|
||||
.jstree-mb3 ins {cursor: pointer; background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
|
||||
.jstree-mb3 li { background-position:-90px 0; background-repeat:repeat-y; }
|
||||
.jstree-mb3 li.jstree-last { background:transparent; }
|
||||
.jstree-mb3 .jstree-open > ins { background-position:-72px 0; }
|
||||
.jstree-mb3 .jstree-closed > ins { background-position:-54px 0; }
|
||||
.jstree-mb3 .jstree-leaf > ins { background-position:-36px 0; }
|
||||
|
||||
.jstree-mb3 .jstree-hovered { background:#666; border:1px solid transparent; padding:0 2px 0 1px; }
|
||||
.jstree-mb3 .jstree-clicked { background:#4d90fe; border:1px solid transparent; padding:0 2px 0 1px; }
|
||||
.jstree-mb3 .jstree-hovered { background:#ddd; border:1px solid transparent; padding:0 2px 0 1px; }
|
||||
.jstree-mb3 .jstree-clicked { background:#3388CC;border:1px solid transparent; padding:0 2px 0 1px; }
|
||||
|
||||
.jstree-mb3 a .jstree-icon { background-position:-56px -19px; }
|
||||
.jstree-mb3 a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
|
||||
|
@ -49,7 +49,7 @@
|
|||
#vakata-contextmenu.jstree-mb3-context,
|
||||
#vakata-contextmenu.jstree-mb3-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
|
||||
#vakata-contextmenu.jstree-mb3-context li { }
|
||||
#vakata-contextmenu.jstree-mb3-context a { color:white; }
|
||||
#vakata-contextmenu.jstree-mb3-context a { color:black; }
|
||||
#vakata-contextmenu.jstree-mb3-context a:hover,
|
||||
#vakata-contextmenu.jstree-mb3-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:white; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
|
||||
#vakata-contextmenu.jstree-mb3-context li.jstree-contextmenu-disabled a,
|
||||
|
@ -58,6 +58,9 @@
|
|||
#vakata-contextmenu.jstree-mb3-context li ul { margin-left:-4px; }
|
||||
|
||||
.jstree a {
|
||||
color: #000!important;
|
||||
}
|
||||
.jstree-mb3 .jstree-clicked {
|
||||
color: #fff!important;
|
||||
}
|
||||
|
||||
|
@ -68,7 +71,7 @@
|
|||
.jstree li {
|
||||
margin-left: 10px;
|
||||
min-width: 10px;
|
||||
border-bottom: 1px solid #555;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.jstree li:last-child {
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.199" targetFramework="net45" />
|
||||
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.200" targetFramework="net45" />
|
||||
<package id="ServiceStack.Common" version="3.9.62" targetFramework="net45" />
|
||||
<package id="ServiceStack.Text" version="3.9.62" targetFramework="net45" />
|
||||
</packages>
|