mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-16 11:37:58 +02:00
added episode detail modal
summary tab is working.
This commit is contained in:
parent
80759f923e
commit
95a6dfc34e
@ -91,8 +91,8 @@ module.exports = function (grunt) {
|
|||||||
|
|
||||||
copy: {
|
copy: {
|
||||||
index : {
|
index : {
|
||||||
src : 'UI/index.html',
|
src : 'UI/**/index.html',
|
||||||
dest: '_output/UI/index.html'
|
dest: '_output/'
|
||||||
},
|
},
|
||||||
scripts: {
|
scripts: {
|
||||||
src : 'UI/**/*.js',
|
src : 'UI/**/*.js',
|
||||||
@ -114,7 +114,7 @@ module.exports = function (grunt) {
|
|||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
bootstrap : {
|
bootstrap : {
|
||||||
files: ['<%= less.bootstrap.src %>', 'UI/**/FontAwesome/**'],
|
files: ['UI/**/Bootstrap/**', 'UI/**/FontAwesome/**'],
|
||||||
tasks: ['less:bootstrap']
|
tasks: ['less:bootstrap']
|
||||||
},
|
},
|
||||||
generalLess: {
|
generalLess: {
|
||||||
|
@ -26,8 +26,8 @@
|
|||||||
top: 10%;
|
top: 10%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
z-index: @zindexModal;
|
z-index: @zindexModal;
|
||||||
width: 560px;
|
width: 750px;
|
||||||
margin-left: -280px;
|
margin-left: -375px;
|
||||||
background-color: @white;
|
background-color: @white;
|
||||||
border: 1px solid #999;
|
border: 1px solid #999;
|
||||||
border: 1px solid rgba(0,0,0,.3);
|
border: 1px solid rgba(0,0,0,.3);
|
||||||
|
@ -1,8 +1,60 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
define(['app'], function () {
|
define(['app', 'Episode/Summary/View'], function () {
|
||||||
|
|
||||||
NzbDrone.Episode.Layout = Backbone.Marionette.ItemView.extend({
|
NzbDrone.Episode.Layout = Backbone.Marionette.Layout.extend({
|
||||||
template: 'Episode/Search/LayoutTemplate'
|
template: 'Episode/LayoutTemplate',
|
||||||
|
|
||||||
|
|
||||||
|
regions: {
|
||||||
|
summary : '#episode-summary',
|
||||||
|
activity: '#episode-activity',
|
||||||
|
search : '#episode-search'
|
||||||
|
},
|
||||||
|
|
||||||
|
ui: {
|
||||||
|
summary : '.x-episode-summary',
|
||||||
|
activity: '.x-episode-activity',
|
||||||
|
search : '.x-episode-search'
|
||||||
|
},
|
||||||
|
|
||||||
|
events: {
|
||||||
|
|
||||||
|
'click .x-episode-summary' : 'showSummary',
|
||||||
|
'click .x-episode-activity': 'showActivity',
|
||||||
|
'click .x-episode-search' : 'showSearch'
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
onShow: function () {
|
||||||
|
this.showSummary();
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
showSummary: function (e) {
|
||||||
|
if (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ui.summary.tab('show');
|
||||||
|
this.summary.show(new NzbDrone.Episode.Summary.View({model: this.model}));
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
showActivity: function (e) {
|
||||||
|
if (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ui.activity.tab('show');
|
||||||
|
},
|
||||||
|
|
||||||
|
showSearch: function (e) {
|
||||||
|
if (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ui.search.tab('show');
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
21
UI/Episode/LayoutTemplate.html
Normal file
21
UI/Episode/LayoutTemplate.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<div class="episode-detail-modal">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
|
<h3>{{title}}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<ul class="nav nav-tabs" id="myTab">
|
||||||
|
<li><a href="#episode-summary" class="x-episode-summary">Summary</a></li>
|
||||||
|
<li><a href="#episode-activity" class="x-episode-activity">Activity</a></li>
|
||||||
|
<li><a href="#episode-search" class="x-episode-search">Search Indexers</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane" id="episode-summary"/>
|
||||||
|
<div class="tab-pane" id="episode-activity"/>
|
||||||
|
<div class="tab-pane" id="episode-search"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn" data-dismiss="modal">close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,12 +1 @@
|
|||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
||||||
<h3>Delete: {{title}}</h3>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<h1>Searching for episodes!!!</h1>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button class="btn" data-dismiss="modal">cancel</button>
|
|
||||||
<button class="btn btn-danger x-confirm-delete">delete</button>
|
|
||||||
</div>
|
|
||||||
|
|
8
UI/Episode/Summary/View.js
Normal file
8
UI/Episode/Summary/View.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
|
define(['app'], function () {
|
||||||
|
|
||||||
|
NzbDrone.Episode.Summary.View = Backbone.Marionette.ItemView.extend({
|
||||||
|
template: 'Episode/Summary/ViewTemplate'
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
29
UI/Episode/Summary/ViewTemplate.html
Normal file
29
UI/Episode/Summary/ViewTemplate.html
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<div class="episode-overview">
|
||||||
|
{{overview}}
|
||||||
|
</div>
|
||||||
|
<div class="episode-file-info">
|
||||||
|
{{#if episodeFile}}
|
||||||
|
{{#with episodeFile}}
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Path</th>
|
||||||
|
<th>Size</th>
|
||||||
|
<th>Quality</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>{{path}}</td>
|
||||||
|
<td>{{size}}</td>
|
||||||
|
<td>{{quality.quality.name}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{{/with}}
|
||||||
|
{{else}}
|
||||||
|
<p class="text-warning">
|
||||||
|
No file available for this episode.
|
||||||
|
</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
@ -19,7 +19,7 @@
|
|||||||
<link href="/content/menu.css" rel='stylesheet' type='text/css'/>
|
<link href="/content/menu.css" rel='stylesheet' type='text/css'/>
|
||||||
<link href="/content/form.css" rel='stylesheet' type='text/css'/>
|
<link href="/content/form.css" rel='stylesheet' type='text/css'/>
|
||||||
<link href="/series/series.css" rel='stylesheet' type='text/css'/>
|
<link href="/series/series.css" rel='stylesheet' type='text/css'/>
|
||||||
|
<link href="/series/details.css" rel='stylesheet' type='text/css'/>
|
||||||
<link href="/content/base.css" rel='stylesheet' type='text/css'/>
|
<link href="/content/base.css" rel='stylesheet' type='text/css'/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -5,9 +5,6 @@ define(['app', 'Episode/Layout'], function () {
|
|||||||
|
|
||||||
className: 'episode-status-cell',
|
className: 'episode-status-cell',
|
||||||
|
|
||||||
events: {
|
|
||||||
'click': 'showDetails'
|
|
||||||
},
|
|
||||||
render: function () {
|
render: function () {
|
||||||
this.$el.empty();
|
this.$el.empty();
|
||||||
|
|
||||||
@ -32,11 +29,6 @@ define(['app', 'Episode/Layout'], function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
|
||||||
|
|
||||||
showDetails: function () {
|
|
||||||
var view = new NzbDrone.Episode.Layout({ model: this.model });
|
|
||||||
NzbDrone.modalRegion.show(view);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
17
UI/Series/Details/EpisodeTitleCell.js
Normal file
17
UI/Series/Details/EpisodeTitleCell.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
define(['app', 'Episode/Layout'], function () {
|
||||||
|
NzbDrone.Series.Details.EpisodeTitleCell = Backgrid.StringCell.extend({
|
||||||
|
|
||||||
|
className: 'episode-title-cell',
|
||||||
|
|
||||||
|
events: {
|
||||||
|
'click': 'showDetails'
|
||||||
|
},
|
||||||
|
|
||||||
|
showDetails: function () {
|
||||||
|
var view = new NzbDrone.Episode.Layout({ model: this.model });
|
||||||
|
NzbDrone.modalRegion.show(view);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
@ -1,5 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
define(['app', 'Series/Details/EpisodeStatusCell'], function () {
|
define(['app', 'Series/Details/EpisodeStatusCell', 'Series/Details/EpisodeTitleCell'], function () {
|
||||||
NzbDrone.Series.Details.SeasonLayout = Backbone.Marionette.Layout.extend({
|
NzbDrone.Series.Details.SeasonLayout = Backbone.Marionette.Layout.extend({
|
||||||
template: 'Series/Details/SeasonLayoutTemplate',
|
template: 'Series/Details/SeasonLayoutTemplate',
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ define(['app', 'Series/Details/EpisodeStatusCell'], function () {
|
|||||||
{
|
{
|
||||||
name : 'title',
|
name : 'title',
|
||||||
label: 'Title',
|
label: 'Title',
|
||||||
cell : 'string'
|
cell : NzbDrone.Series.Details.EpisodeTitleCell
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : 'airDate',
|
name : 'airDate',
|
||||||
|
30
UI/Series/details.less
Normal file
30
UI/Series/details.less
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
.series-season {
|
||||||
|
.episode-number-cell {
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
.episode-air-date-cell {
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.episode-status-cell {
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.episode-title-cell {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.episode-detail-modal {
|
||||||
|
|
||||||
|
.episode-overview {
|
||||||
|
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.episode-file-info {
|
||||||
|
|
||||||
|
margin-top: 30px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
@ -107,16 +107,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.series-season {
|
|
||||||
.episode-number-cell {
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
.episode-air-date-cell {
|
|
||||||
width: 150px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.episode-status-cell {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user