mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-03 01:43:37 +00:00
58ea9588a7
Change indicate when not sorting with article by dimming ("The", "A", "An") on Show List, Episode, History, Mass Update, Add with Browse and from Existing views.
817 lines
33 KiB
Cheetah
817 lines
33 KiB
Cheetah
#import sickbeard
|
|
#import datetime
|
|
#import re
|
|
#from sickbeard.common import *
|
|
#from sickbeard import sbdatetime
|
|
#from sickbeard.helpers import anon_url
|
|
##
|
|
#set global $title = 'Episode View'
|
|
#set global $header = 'Episode View'
|
|
#set global $sbPath = '..'
|
|
#set global $topmenu = 'episodeView'
|
|
##
|
|
#import os.path
|
|
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl')
|
|
|
|
#set $sort = $sickbeard.EPISODE_VIEW_SORT
|
|
#set $table_sort_header_codes = {'time': 0, 'show': 1, 'network': 4}
|
|
#if $sort not in $table_sort_header_codes:
|
|
#set $sort = 'time'
|
|
#end if
|
|
|
|
#if 'daybyday' != $layout:
|
|
<script type="text/javascript" src="$sbRoot/js/ajaxEpSearch.js?v=$sbPID"></script>
|
|
#end if
|
|
|
|
#if $varExists('header')
|
|
<h1 class="header">$header</h1>
|
|
#else
|
|
<h1 class="title">$title</h1>
|
|
#end if
|
|
|
|
#if 'daybyday' == $layout:
|
|
<script type="text/javascript" src="$sbRoot/js/plotTooltip.js?v=$sbPID"></script>
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
\$(document).ready(function(){
|
|
|
|
var \$container = [];
|
|
\$.each(\$('[id^=day]'), function(){\$container.push(\$('#' + \$(this).attr('id')))});
|
|
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope({
|
|
itemSelector: '.daybyday-show',
|
|
sortBy: '$sort',
|
|
layoutMode: 'vertical',
|
|
transitionDuration: 0,
|
|
getSortData: {
|
|
network: function(itemElem) {
|
|
return \$(itemElem).attr('data-network') || '';
|
|
},
|
|
showname: function(itemElem) {
|
|
return \$(itemElem).attr('data-name') || '';
|
|
},
|
|
season: function(itemElem) {
|
|
var season = \$(itemElem).attr('data-season') || '0';
|
|
return season.length && parseInt(season, 10);
|
|
},
|
|
episode: function(itemElem) {
|
|
var episode = \$(itemElem).attr('data-episode') || '0';
|
|
return episode.length && parseInt(episode, 10);
|
|
},
|
|
time: function(itemElem) {
|
|
var time = \$(itemElem).attr('data-time') || '0';
|
|
return time.length && parseInt(time, 10);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
imagesLoaded('.daybyday-show', function() {
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope('layout');
|
|
});
|
|
});
|
|
|
|
var uiSortBy = (function(sortBy) {
|
|
var sortCriteria;
|
|
switch (sortBy) {
|
|
case 'network':
|
|
sortCriteria = ['network', 'time', 'showname', 'season', 'episode'];
|
|
break;
|
|
case 'show':
|
|
sortCriteria = ['showname', 'time', 'season', 'episode'];
|
|
break;
|
|
case 'time':
|
|
default:
|
|
sortCriteria = ['time', 'showname', 'season', 'episode'];
|
|
break;
|
|
}
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope({
|
|
sortBy: sortCriteria,
|
|
sortAscending: 'asc' == \$('#sort-dir').attr('data-sort-dir')
|
|
});
|
|
});
|
|
});
|
|
|
|
\$('#sort').on('change', function() {
|
|
uiSortBy(this.value);
|
|
\$.get(this.options[this.selectedIndex].getAttribute('data-sort'));
|
|
});
|
|
|
|
\$('#sort-dir').on('click', function() {
|
|
var sortdir = \$(this).attr('data-sort-dir'),
|
|
newdir = ('asc' == sortdir ? 'desc' : 'asc');
|
|
\$(this).attr('data-sort-dir', newdir);
|
|
\$(this).attr('title', 'Click to sort ' + sortdir + 'ending');
|
|
\$(this).removeClass(sortdir).addClass(newdir);
|
|
uiSortBy(\$('#sort').val());
|
|
});
|
|
|
|
\$('.carousel').on('slide.bs.carousel', function () {
|
|
imagesLoaded('.daybyday-show', function() {
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope('layout');
|
|
});
|
|
});
|
|
});
|
|
|
|
\$('div[title!=""], span[title!=""]').qtip({style: {classes: 'qtip-rounded qtip-shadow'},
|
|
position: {viewport: \$(window), my: 'left center', adjust: {y: -10, x: 0}},
|
|
show: {solo: true}
|
|
});
|
|
});
|
|
//-->
|
|
</script>
|
|
#end if
|
|
|
|
<style type="text/css">
|
|
#SubMenu {display:none}
|
|
#if 'daybyday' == $layout:
|
|
.ep-caret {
|
|
cursor: pointer;
|
|
vertical-align: middle;
|
|
margin-right: 2px;
|
|
}
|
|
.asc {
|
|
border-top: 0;
|
|
border-bottom: 8px solid;
|
|
}
|
|
.desc {
|
|
border-top: 8px solid;
|
|
border-bottom: 0;
|
|
}
|
|
#end if
|
|
</style>
|
|
|
|
<div class="h2footer pull-right">
|
|
<span>Layout
|
|
<select name="layout" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=banner" #if 'banner' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>Banner</option>
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=daybyday" #if 'daybyday' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>Day by Day</option>
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=list" #if 'list' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>List</option>
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=poster" #if 'poster' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>Poster</option>
|
|
</select>
|
|
</span>
|
|
|
|
<span>Sort
|
|
#if 'daybyday' == $layout:
|
|
<span id="sort-dir" data-sort-dir="asc" class="caret ep-caret asc" title="Click to sort descending"> </span>
|
|
#end if
|
|
By
|
|
#if 'daybyday' == $layout:
|
|
<select name="sort" id="sort" class="form-control form-control-inline input-sm">
|
|
<option value="network" data-sort="$sbRoot/setEpisodeViewSort/?sort=network&redir=0" #if 'network' == $sort then 'selected="selected"' else ''#>Network</option>
|
|
<option value="show" data-sort="$sbRoot/setEpisodeViewSort/?sort=show&redir=0" #if 'show' == $sort then 'selected="selected"' else ''#>Show</option>
|
|
<option value="time" data-sort="$sbRoot/setEpisodeViewSort/?sort=time&redir=0" #if 'time' == $sort then 'selected="selected"' else ''#>Time</option>
|
|
#else
|
|
<select name="sort" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
|
|
<option value="$sbRoot/setEpisodeViewSort/?sort=time" #if 'time' == $sort then 'selected="selected"' else ''#>Date/Time</option>
|
|
<option value="$sbRoot/setEpisodeViewSort/?sort=network" #if 'network' == $sort then 'selected="selected"' else ''#>Network</option>
|
|
<option value="$sbRoot/setEpisodeViewSort/?sort=show" #if 'show' == $sort then 'selected="selected"' else ''#>Show</option>
|
|
#end if
|
|
</select>
|
|
</span>
|
|
|
|
<span>View Paused
|
|
<select name="viewpaused" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
|
|
<option value="$sbRoot/toggleEpisodeViewDisplayPaused"<%= (' selected="selected"', '')[True == sickbeard.EPISODE_VIEW_DISPLAY_PAUSED] %>>Hidden</option>
|
|
<option value="$sbRoot/toggleEpisodeViewDisplayPaused"<%= ('', ' selected="selected"')[True == sickbeard.EPISODE_VIEW_DISPLAY_PAUSED] %>>Shown</option>
|
|
</select>
|
|
</span>
|
|
</div>
|
|
|
|
<div class="key pull-right">
|
|
#if 'daybyday' != $layout:
|
|
<b>Key:</b>
|
|
<span class="listing-key listing-overdue">Missed</span>
|
|
<span class="listing-key listing-current">Current</span>
|
|
<span class="listing-key listing-default">Future</span>
|
|
<span class="listing-key listing-toofar">Distant</span>
|
|
#end if
|
|
<a class="btn btn-inline forceBacklog" href="webcal://$sbHost:$sbHttpPort/calendar">
|
|
<i class="sgicon-rss"></i> Subscribe</a>
|
|
</div>
|
|
|
|
<br>
|
|
|
|
|
|
|
|
#if 'list' == $layout:
|
|
<!-- start list view //-->
|
|
|
|
<script type="text/javascript" src="$sbRoot/js/plotTooltip.js?v=$sbPID"></script>
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
\$.tablesorter.addParser({
|
|
id: 'loadingNames',
|
|
is: function(s) {
|
|
return false
|
|
},
|
|
format: function(s) {
|
|
if(0 == s.indexOf('Loading...'))
|
|
return s.replace('Loading...', '000')
|
|
return (s || '')
|
|
},
|
|
type: 'text'
|
|
});
|
|
\$.tablesorter.addParser({
|
|
id: 'quality',
|
|
is: function(s) {
|
|
return false
|
|
},
|
|
format: function(s) {
|
|
return s.replace('hd1080p', 5).replace('hd720p', 4).replace('hd', 3).replace('sd', 2).replace('any', 1).replace('best', 0).replace('custom', 7)
|
|
},
|
|
type: 'numeric'
|
|
});
|
|
\$.tablesorter.addParser({
|
|
id: 'cDate',
|
|
is: function(s) {
|
|
return false
|
|
},
|
|
format: function(s) {
|
|
return s
|
|
},
|
|
type: 'numeric'
|
|
});
|
|
|
|
\$(document).ready(function(){
|
|
|
|
sortList = [[$table_sort_header_codes[$sort], 0]];
|
|
|
|
\$('#showListTable:has(tbody tr)').tablesorter({
|
|
widgets: ['stickyHeaders'],
|
|
sortList: sortList,
|
|
textExtraction: {
|
|
0: function(node) {return \$(node).find('span').text().toLowerCase() || ''},
|
|
1: function(node) {return \$(node).find('a').attr('data-name') || ''},
|
|
4: function(node) {return \$(node).find('span').attr('data-network') || ''},
|
|
5: function(node) {return \$(node).find('span').text().toLowerCase() || ''}
|
|
},
|
|
headers: {
|
|
0: {sorter: 'cDate'},
|
|
1: {sorter: 'loadingNames'},
|
|
2: {sorter: false},
|
|
3: {sorter: false},
|
|
4: {sorter: 'loadingNames'},
|
|
5: {sorter: 'quality'},
|
|
6: {sorter: false},
|
|
7: {sorter: false},
|
|
8: {sorter: false}
|
|
}
|
|
});
|
|
|
|
\$('#sbRoot').ajaxEpSearch();
|
|
|
|
#set $fuzzydate = 'airdate'
|
|
#if $sickbeard.FUZZY_DATING:
|
|
fuzzyMoment({
|
|
containerClass: '.${fuzzydate}',
|
|
dateHasTime: !0,
|
|
dateFormat: '${sickbeard.DATE_PRESET}',
|
|
timeFormat: '${sickbeard.TIME_PRESET}',
|
|
trimZero: #echo ('!1', '!0')[$sickbeard.TRIM_ZERO]#
|
|
});
|
|
#end if
|
|
|
|
});
|
|
//-->
|
|
</script>
|
|
|
|
#set $show_div = 'listing-default'
|
|
|
|
<input type="hidden" id="sbRoot" value="$sbRoot" />
|
|
|
|
<table id="showListTable" class="sickbeardTable tablesorter seasonstyle" cellspacing="1" border="0" cellpadding="0">
|
|
|
|
<thead>
|
|
<tr>
|
|
<th>Airdate</th>
|
|
<th>Show</th>
|
|
<th class="nowrap">Next Ep</th>
|
|
<th>Next Ep Name</th>
|
|
<th>Network</th>
|
|
<th>Quality</th>
|
|
<th>Indexers</th>
|
|
<th>Search</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody style="text-shadow:none;">
|
|
|
|
#for $cur_result in $sql_results:
|
|
#set $cur_indexer = int($cur_result['indexer'])
|
|
#set $runtime = $cur_result['runtime']
|
|
#set $display_name = (re.sub('^((?:A(?!\s+to)n?)|The)\s(\w)', r'<span class="article">\1</span> \2', $cur_result['show_name']), $cur_result['show_name'])[$sickbeard.SORT_ARTICLE]
|
|
|
|
#if int($cur_result['paused']) and not $sickbeard.EPISODE_VIEW_DISPLAY_PAUSED:
|
|
#continue
|
|
#end if
|
|
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'listing-overdue'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'listing-toofar'
|
|
#elif $cur_ep_airdate >= $today.date() and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'listing-current'
|
|
#else:
|
|
#set $show_div = 'listing-default'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
#set $show_id = '%s_%sx%s' % (str($cur_result['showid']), str($cur_result['season']), str($cur_result['episode']))
|
|
<!-- start $cur_result['show_name'] //-->
|
|
<tr id="show-${show_id}" class="$show_div" data-rawname="$cur_result['show_name']">
|
|
## forced to use a div to wrap airdate, the column sort went crazy with a span
|
|
<td align="center" class="nowrap">
|
|
<div class="${fuzzydate}">$sbdatetime.sbdatetime.sbfdatetime($cur_result['localtime']).decode($sickbeard.SYS_ENCODING)</div><span class="sort-data">$cur_result['localtime'].strftime('%Y%m%d%H%M')</span>
|
|
</td>
|
|
|
|
<td class="tvShow"><a href="$sbRoot/home/displayShow?show=${cur_result['showid']}" data-name="$cur_result['data_show_name']">$display_name</a>
|
|
#if int($cur_result['paused']):
|
|
<span class="pause">[paused]</span>
|
|
#end if
|
|
</td>
|
|
|
|
<td class="nowrap" align="center">
|
|
<%= 'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode'])) %>
|
|
</td>
|
|
|
|
<td>
|
|
#if $cur_result['description']:
|
|
<img alt="" src="$sbRoot/images/info32.png" height="16" width="16" class="plotInfo" id="plot-${show_id}" />
|
|
#else:
|
|
<img alt="" src="$sbRoot/images/info32.png" width="16" height="16" class="plotInfoNone" />
|
|
#end if
|
|
$cur_result['name']
|
|
</td>
|
|
|
|
<td align="center">
|
|
<span data-network="$cur_result['data_network']">$cur_result['network']</span>
|
|
</td>
|
|
|
|
<td align="center">
|
|
#if int($cur_result['quality']) in $qualityPresets:
|
|
<span class="quality $qualityPresetStrings[int($cur_result['quality'])]">$qualityPresetStrings[int($cur_result['quality'])]</span>
|
|
#else:
|
|
<span class="quality Custom">Custom</span>
|
|
#end if
|
|
</td>
|
|
|
|
<td align="center" style="vertical-align:middle">
|
|
#if sickbeard.USE_IMDB_INFO and $cur_result['imdb_id']:
|
|
<a href="<%= anon_url('http://www.imdb.com/title/', cur_result['imdb_id']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="http://www.imdb.com/title/${cur_result['imdb_id']}"><img alt="[imdb]" height="16" width="16" src="$sbRoot/images/imdb.png" /></a>
|
|
#end if
|
|
<a href="<%= anon_url(sickbeard.indexerApi(cur_indexer).config['show_url'], cur_result['showid']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="$sickbeard.indexerApi($cur_indexer).config['show_url']${cur_result['showid']}"><img alt="$sickbeard.indexerApi($cur_indexer).name" height="16" width="16" src="$sbRoot/images/$sickbeard.indexerApi($cur_indexer).config['icon']" /></a>
|
|
</td>
|
|
|
|
<td align="center">
|
|
<a href="$sbRoot/home/searchEpisode?show=${cur_result['showid']}&season=$cur_result['season']&episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="forceUpdate epSearch"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a>
|
|
</td>
|
|
</tr>
|
|
<!-- end $cur_result['show_name'] //-->
|
|
|
|
#end for
|
|
|
|
</tbody>
|
|
|
|
<tfoot>
|
|
<tr>
|
|
<th rowspan="1" colspan="10" align="center"> </th>
|
|
</tr>
|
|
</tfoot>
|
|
|
|
</table>
|
|
<!-- end list view //-->
|
|
|
|
|
|
|
|
#else if $layout in ['banner', 'poster']:
|
|
<!-- start non list view //-->
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
\$(document).ready(function(){
|
|
\$('#sbRoot').ajaxEpSearch({'size': 16, 'loadingImage': 'loading16' + themeSpinner + '.gif'});
|
|
\$('.ep_summary').hide();
|
|
\$('.ep_summaryTrigger').click(function() {
|
|
\$(this).next('.ep_summary').slideToggle('normal', function() {
|
|
\$(this).prev('.ep_summaryTrigger').attr('src', function(i, src) {
|
|
return \$(this).next('.ep_summary').is(':visible') ? src.replace('plus','minus') : src.replace('minus','plus')
|
|
});
|
|
});
|
|
});
|
|
|
|
#set $fuzzydate = 'airdate'
|
|
#if $sickbeard.FUZZY_DATING:
|
|
fuzzyMoment({
|
|
dtInline: !0,
|
|
dtGlue: ' at ',
|
|
containerClass: '.${fuzzydate}',
|
|
dateHasTime: !0,
|
|
dateFormat: '${sickbeard.DATE_PRESET}',
|
|
timeFormat: '${sickbeard.TIME_PRESET}',
|
|
trimZero: #echo ('!1', '!0')[$sickbeard.TRIM_ZERO]#
|
|
});
|
|
#end if
|
|
});
|
|
//-->
|
|
</script>
|
|
|
|
#set $cur_segment = None
|
|
#set $too_late_header = False
|
|
#set $missed_header = False
|
|
#set $today_header = False
|
|
#set $show_div = 'ep_listing listing-default'
|
|
|
|
#if 'show' == $sort:
|
|
<br /><br />
|
|
#end if
|
|
|
|
#for $cur_result in $sql_results:
|
|
#set $cur_indexer = int($cur_result['indexer'])
|
|
#set $display_name = (re.sub('^((?:A(?!\s+to)n?)|The)\s(\w)', r'<span class="article">\1</span> \2', $cur_result['show_name']), $cur_result['show_name'])[$sickbeard.SORT_ARTICLE]
|
|
|
|
#if int($cur_result['paused']) and not $sickbeard.EPISODE_VIEW_DISPLAY_PAUSED:
|
|
#continue
|
|
#end if
|
|
|
|
#set $runtime = $cur_result['runtime']
|
|
|
|
#if 'network' == $sort:
|
|
|
|
#set $show_network = $cur_result['network'] if $cur_result['network'] else 'no network'
|
|
#if $cur_segment != $show_network:
|
|
<div class="episode-view-header">
|
|
<br><h2 class="network">$show_network</h2>
|
|
#set $cur_segment = $cur_result['network']
|
|
#end if
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'ep_listing listing-overdue'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'ep_listing listing-toofar'
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'ep_listing listing-current'
|
|
#else:
|
|
#set $show_div = 'ep_listing listing-default'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
#elif 'time' == $sort:
|
|
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $cur_segment != $cur_ep_airdate:
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today and $cur_ep_airdate != $today.date() and not $missed_header:
|
|
<br /><h2 class="day">Missed</h2>
|
|
#set $missed_header = True
|
|
#elif $cur_ep_airdate >= $next_week.date() and not $too_late_header:
|
|
<br /><h2 class="day">Later</h2>
|
|
#set $too_late_header = True
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
<br /><h2 class="day">$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize() <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
|
|
#set $today_header = True
|
|
#else:
|
|
<br /><h2 class="day">$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize()</h2>
|
|
#end if
|
|
#end if
|
|
#end if
|
|
#set $cur_segment = $cur_ep_airdate
|
|
#end if
|
|
|
|
#if $cur_ep_airdate == $today.date() and not $today_header:
|
|
<div class="episode-view-header">
|
|
<br /><h2 class="day">$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize() <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
|
|
#set $today_header = True
|
|
#end if
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'ep_listing listing-overdue'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'ep_listing listing-toofar'
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'ep_listing listing-current'
|
|
#else:
|
|
#set $show_div = 'ep_listing listing-default'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
#elif 'show' == $sort:
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'ep_listing listing-overdue listingradius'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'ep_listing listing-toofar listingradius'
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'ep_listing listing-current listingradius'
|
|
#else:
|
|
#set $show_div = 'ep_listing listing-default listingradius'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
<!-- start $cur_result['show_name'] //-->
|
|
<div class="$show_div" id="listing-${cur_result['showid']}">
|
|
<div class="tvshowDiv">
|
|
<table width="100%" border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<th #if 'banner' == $layout then 'class="nobg"' else 'rowspan="2"'# valign="top">
|
|
<a href="$sbRoot/home/displayShow?show=${cur_result['showid']}"><img alt="" class="#if 'banner' == $layout then 'bannerThumb' else 'posterThumb'#" src="$sbRoot/showPoster/?show=${cur_result['showid']}&which=#if 'poster' == $layout then 'poster_thumb' else $layout#" /></a>
|
|
</th>
|
|
|
|
#if 'banner' == $layout:
|
|
</tr>
|
|
<tr>
|
|
#end if
|
|
|
|
<td class="next_episode">
|
|
<div class="clearfix">
|
|
<span class="tvshowTitle">
|
|
<a href="$sbRoot/home/displayShow?show=${cur_result['showid']}" data-name="$cur_result['data_show_name']">$display_name
|
|
#if int($cur_result['paused']):
|
|
<span class="pause">[paused]</span>
|
|
#end if
|
|
</a></span>
|
|
|
|
<span class="tvshowTitleIcons">
|
|
#if sickbeard.USE_IMDB_INFO and $cur_result['imdb_id']:
|
|
<a href="<%= anon_url('http://www.imdb.com/title/', cur_result['imdb_id']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="http://www.imdb.com/title/${cur_result['imdb_id']}"><img alt="[imdb]" height="16" width="16" src="$sbRoot/images/imdb.png" />
|
|
#end if
|
|
<a href="<%= anon_url(sickbeard.indexerApi(cur_indexer).config['show_url'], cur_result['showid']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="$sickbeard.indexerApi($cur_indexer).config['show_url']${cur_result['showid']}"><img alt="$sickbeard.indexerApi($cur_indexer).name" height="16" width="16" src="$sbRoot/images/$sickbeard.indexerApi($cur_indexer).config['icon']" /></a>
|
|
<span><a href="$sbRoot/home/searchEpisode?show=${cur_result['showid']}&season=$cur_result['season']&episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="epSearch forceUpdate"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a></span>
|
|
</span>
|
|
</div>
|
|
|
|
<span class="title">Next Episode:</span> <span><%= 'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode'])) %> - $cur_result['name']</span>
|
|
|
|
<div class="clearfix">
|
|
|
|
<span class="title">Airdate: </span><span class="${fuzzydate}">$sbdatetime.sbdatetime.sbfdatetime($cur_result['localtime']).decode($sickbeard.SYS_ENCODING)</span><%= ('', '<span> on %s</span>' % str(cur_result['network']))[None is not cur_result['network']] %>
|
|
</div>
|
|
|
|
<div class="clearfix">
|
|
<span class="title">Quality:</span>
|
|
#if int($cur_result['quality']) in $qualityPresets:
|
|
<span class="quality $qualityPresetStrings[int($cur_result['quality'])]">$qualityPresetStrings[int($cur_result['quality'])]</span>
|
|
#else:
|
|
<span class="quality Custom">Custom</span>
|
|
#end if
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="vertical-align: top;">
|
|
<div>
|
|
#if $cur_result['description']:
|
|
<span class="title" style="vertical-align:middle;">Plot:</span>
|
|
<img class="ep_summaryTrigger" src="$sbRoot/images/plus.png" height="16" width="16" alt="" title="Toggle Summary" /><div class="ep_summary">$cur_result['description']</div>
|
|
#else:
|
|
<span class="title ep_summaryTriggerNone" style="vertical-align:middle;">Plot:</span>
|
|
<img class="ep_summaryTriggerNone" src="$sbRoot/images/plus.png" height="16" width="16" alt="" />
|
|
#end if
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<!-- end $cur_result['show_name'] //-->
|
|
#end for
|
|
<!-- end non list view //-->
|
|
#end if
|
|
|
|
#if 'daybyday' == $layout:
|
|
|
|
#set $shows_overdue = []
|
|
#set $shows_soon = []
|
|
#set $shows_future = []
|
|
|
|
#set $state_overdue = 'listing-overdue'
|
|
#set $state_current = 'listing-current'
|
|
#set $state_soon = 'listing-soon'
|
|
#set $state_future = 'listing-default'
|
|
|
|
#for $cur_result in $sql_results:
|
|
#if int($cur_result['paused']) and not $sickbeard.EPISODE_VIEW_DISPLAY_PAUSED:
|
|
#continue
|
|
#end if
|
|
#if $cur_result['runtime']:
|
|
#set $air_date = $cur_result['localtime'].date()
|
|
#set $end_datetime = $cur_result['localtime'] + datetime.timedelta(minutes = $cur_result['runtime'])
|
|
#if $air_date >= $next_week.date():
|
|
#set $cur_result['state'] = ''
|
|
$shows_future.append($cur_result)
|
|
#elif $cur_result['localtime'] > $today
|
|
#set $cur_result['state'] = ''
|
|
$shows_soon.append($cur_result)
|
|
#elif $end_datetime > $today
|
|
#set $cur_result['state'] = $state_current
|
|
#set $cur_result['state-title'] = 'Currently On Air'
|
|
$shows_soon.append($cur_result)
|
|
#elif $air_date == $today.date():
|
|
#set $cur_result['state'] = $state_overdue
|
|
#set $cur_result['state-title'] = 'Overdue'
|
|
$shows_soon.append($cur_result)
|
|
#else
|
|
#set $cur_result['state'] = $state_overdue
|
|
#set $cur_result['state-title'] = 'Overdue'
|
|
$shows_overdue.append($cur_result)
|
|
#end if
|
|
#else
|
|
#set $cur_result['state'] = $state_soon
|
|
#set $cur_result['state-title'] = ''
|
|
$shows_soon.append($cur_result)
|
|
#end if
|
|
#end for
|
|
|
|
##set $state_init = [int(bool($shows_overdue)), ($state_soon, $state_overdue)[0 < len($shows_overdue)]] ## default overdue
|
|
#set $state_init = [int(bool($shows_overdue)), $state_soon] ## default soon
|
|
|
|
#set $dates_future = sorted({$i['localtime'].date():$i for $i in $shows_future})
|
|
#set $rounded_week = len($dates_future)/7*7 + int(bool(len($dates_future)%7))*7
|
|
#set $dates_future += [$dates_future[-1] + datetime.timedelta(days = 1 + $i) for $i in range($rounded_week - len($dates_future))]
|
|
#set $num_weeks = $rounded_week/7
|
|
|
|
<input type="hidden" id="sbRoot" value="$sbRoot" />
|
|
|
|
<div class="daybydayCarouselContainer">
|
|
<div id="Carousel" class="carousel slide">
|
|
|
|
<div class="controlsBlock">
|
|
<a class="left carousel-control" href="#Carousel" data-slide="prev"><i class="glyphicon glyphicon-chevron-left"></i></a>
|
|
<a class="right carousel-control" href="#Carousel" data-slide="next"><i class="glyphicon glyphicon-chevron-right"></i></a>
|
|
<div class="carousel-indicators">
|
|
|
|
#set $slide_id = 0
|
|
#if len($shows_overdue)
|
|
<li data-target="#Carousel" data-slide-to="$slide_id" class="$state_overdue#if $state_init[1] == $state_overdue then ' active' else ''#"></li>
|
|
#set $slide_id = 1
|
|
#end if
|
|
<li data-target="#Carousel" data-slide-to="$slide_id" class="$state_soon#if $state_init[1] == $state_soon then ' active' else ''#"></li>
|
|
#set $slide_id += 1
|
|
|
|
#for $i in range($slide_id, $slide_id + $num_weeks)
|
|
<li data-target="#Carousel" data-slide-to="${i}" class="$state_future#if $state_init[1] == $state_future and $state_init[0] == $i then ' active' else ''#"></li>
|
|
#end for
|
|
</div>
|
|
</div>
|
|
|
|
<div class="carousel-inner">
|
|
|
|
#for $shows, $state in [[$shows_overdue, $state_overdue], [$shows_soon, $state_soon], [$shows_future, $state_future]]
|
|
#if 0 == len($shows) and ($state_overdue == $state or $state_future == $state)
|
|
#continue
|
|
#end if
|
|
#set $week_num = 0
|
|
#set $num_weeks = 1
|
|
#while ($num_weeks)
|
|
#if $state_future == $state
|
|
#set $dates = $dates_future[$week_num*7:$week_num*7+7]
|
|
#if 0 == $week_num
|
|
#set $num_weeks = $rounded_week/7
|
|
#end if
|
|
#set $week_num += 1
|
|
#else
|
|
#set $dates = [($today + datetime.timedelta(days = ($i, -7+$i)[$state_overdue == $state])).date() for $i in range(7)]
|
|
#end if
|
|
#set $num_weeks -= 1
|
|
|
|
<div class="item#if $state_init[1] == $state then ' active' else ''#"> <!-- start $state -->
|
|
<div class="daybydayWrapper">
|
|
|
|
#set $tbl_day = 0
|
|
#for $day in $dates
|
|
|
|
#set $tbl_day += 1
|
|
|
|
#set $col_class = ''
|
|
#if 1 == $tbl_day and $state_soon == $state
|
|
#set $col_class = 'today'
|
|
#end if
|
|
#set $col_class = '%s %s' % ($col_class, ('even', 'odd')[1 == tbl_day % 2])
|
|
|
|
<div class="day-of-week $col_class">
|
|
<div class="day-number">
|
|
<div class="number">$sbdatetime.sbdatetime.sbfdate($day, ' %d').decode($sickbeard.SYS_ENCODING).replace(' 0', ' ')</div>
|
|
<div class="day">
|
|
<span class="visible-lg">$sbdatetime.sbdatetime.sbfdate($day, '%A').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
<span class="hidden-lg">$sbdatetime.sbdatetime.sbfdate($day, '%a').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
</div>
|
|
<div class="month">
|
|
<span class="visible-lg">$sbdatetime.sbdatetime.sbfdate($day, '%B').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
<span class="hidden-lg">$sbdatetime.sbdatetime.sbfdate($day, '%b').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="$sbdatetime.sbdatetime.sbfdate($day, 'day%j')">
|
|
|
|
#set $day_has_show = False
|
|
#for $cur_result in $shows:
|
|
#if $day == $cur_result['localtime'].date():
|
|
#set $day_has_show = True
|
|
#set $airtime = $sbdatetime.sbdatetime.sbftime($cur_result['localtime'], markup=True).decode($sickbeard.SYS_ENCODING)
|
|
#set $img_id = ''
|
|
#set $plot_class = ''
|
|
#set $title_text = ''
|
|
#set $show_id = '%s_%sx%s' % (str($cur_result['showid']), str($cur_result['season']), str($cur_result['episode']))
|
|
#set $img_id = ' id="plot-%s"' % $show_id
|
|
#set $plot_class = ' plot-daybyday'
|
|
|
|
<div id="show-${show_id}" class="daybyday-show" data-name="$cur_result['data_show_name']" data-season="$cur_result['season']" data-episode="$cur_result['episode']" data-network="$cur_result['data_network']" data-time="$cur_result['localtime'].strftime('%Y%m%d%H%M')" data-rawname="$cur_result['show_name']">
|
|
<div class="poster">
|
|
<a${title_text} href="$sbRoot/home/displayShow?show=${cur_result['showid']}">
|
|
<img${img_id} class="img-responsive${plot_class}" alt="" src="$sbRoot/showPoster/?show=${cur_result['showid']}&which=poster_thumb" /></a>
|
|
</div>
|
|
<div class="state#if len($cur_result['state']) then ' %s" title="%s"' % ($cur_result['state'], $cur_result['state-title']) else '"' #></div>
|
|
<div class="text">
|
|
<div class="airtime">
|
|
#set $match = None if not $cur_result['network'] else re.search(r'(.*)\s(\(\w+\))$', $cur_result['network'], re.I | re.M)
|
|
<span class="time">${airtime}</span> <span class="network pull-right grey-text"#echo '>%s' % $cur_result['network'] if None is $match else ' title="%s">%s' % ($match.group(2), $match.group(1))#</span>
|
|
</div>
|
|
<div class="episode" title="$cur_result['name']">
|
|
<span class="season"><%= '%i' % int(cur_result['season']) %></span>x<span class="number"><%= '%02i' % int(cur_result['episode']) %></span>
|
|
<span class="name">$cur_result['name']</span>
|
|
</div>
|
|
</div>
|
|
#if int($cur_result['paused']):
|
|
<span class="over-layer0">[paused]</span>
|
|
<span class="over-layer1">[paused]</span>
|
|
#elif $state_current == $cur_result['state']
|
|
#set $endtime = $sbdatetime.sbdatetime.sbftime($cur_result['localtime'] + datetime.timedelta(minutes = $cur_result['runtime']), markup=True).decode($sickbeard.SYS_ENCODING)
|
|
<span class="over-layer0 on-air0">On Air until<br />$endtime</span>
|
|
<span class="over-layer1 on-air1">On Air until<br />$endtime</span>
|
|
#end if
|
|
</div><!-- end show-$cur_result['showid'] //-->
|
|
|
|
#end if
|
|
#end for
|
|
#if not $day_has_show:
|
|
<div class="daybyday-show">
|
|
#set $theday = ('this ', 'to')[1 == $tbl_day and $state_soon == $state]
|
|
<span class="episode-blank">No shows ${theday}day</span>
|
|
</div>
|
|
#end if
|
|
</div>
|
|
</div>
|
|
#end for
|
|
</div> <!-- end daybydayWrapper //-->
|
|
</div> <!-- end $state //-->
|
|
#end while
|
|
#end for
|
|
|
|
</div> <!-- end carouselinner //-->
|
|
</div> <!-- end Carousel //-->
|
|
</div> <!-- end daybydayCarouselContainer //-->
|
|
|
|
<!-- end calender view //-->
|
|
#end if
|
|
|
|
<div class="clearfix"></div>
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
window.setInterval('location.reload(true)', 30*60000); // Refresh every xx minutes
|
|
|
|
\$('#Carousel').carousel({
|
|
interval: 0
|
|
});
|
|
|
|
\$(document).bind('keyup', function(e) {
|
|
if(e.which == 39){
|
|
\$('.carousel').carousel('next');
|
|
}
|
|
else if(e.which == 37){
|
|
\$('.carousel').carousel('prev');
|
|
}
|
|
});
|
|
|
|
//-->
|
|
</script>
|
|
|
|
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl')
|