SickGear/gui/slick/interfaces/default/comingEpisodes.tmpl
JackDandy cf1d88343d Add feature to General Config to display fuzzy dates instead of absolute dates. Add feature to General Config to trim the leading number "0" shown on hour of day and date of month.
Affects UI dates on the Coming Episodes, Display Show, Manage > Backlog Overview, Home and History pages.

Widen the General Config tab widths and tweak, format and align some texts.

The many 'test date' variations in the General Config -> "Date and Time" drop down are useless during the month of May as both short and long styles are the same. Change the 'test date' to January 1 of the next year so short and long month styles are distinguishable.
2014-05-23 16:20:44 +01:00

394 lines
17 KiB
Cheetah

#import sickbeard
#import datetime
#from sickbeard.common import *
#from sickbeard import sbdatetime
#set global $title="Coming Episodes"
#set global $header="Coming Episodes"
#set global $sbPath=".."
#set global $topmenu="comingEpisodes"
#import os.path
#include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_top.tmpl")
#set $sort = $sickbeard.COMING_EPS_SORT
<script type="text/javascript" src="$sbRoot/js/ajaxEpSearch.js?$sbPID"></script>
#if $varExists('header')
<h1 class="header">$header</h1>
#else
<h1 class="title">$title</h1>
#end if
<style type="text/css">
.sort_data {display:none}
</style>
<div class="h2footer align-right">
<b>Key:</b>
<span class="listing_overdue">Missed</span>
<span class="listing_current">Current</span>
<span class="listing_default">Future</span>
<span class="listing_toofar">Distant</span>
<a class="btn btn-mini btn-inverse forceBacklog" href="webcal://$sbHost:$sbHttpPort/calendar">
<i class="icon-calendar icon-white"></i>Subscribe</a>
<!-- <span class="listing_unknown">Unknown</span> //-->
</div>
#if $layout == 'list':
<!-- start list view //-->
<script type="text/javascript" src="$sbRoot/js/plotTooltip.js?$sbPID"></script>
<script type="text/javascript" charset="utf-8">
<!--
\$.tablesorter.addParser({
id: 'loadingNames',
is: function(s) {
return false;
},
format: function(s) {
if (s.indexOf('Loading...') == 0)
return s.replace('Loading...','000');
#if not $sickbeard.SORT_ARTICLE:
return (s || '').replace(/^(The|A|An)\s/i,'');
#else:
return (s || '');
#end if
},
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(){
#set $sort_codes = {'date': 0, 'show': 1, 'network': 4}
#if $sort not in $sort_codes:
$sort = 'date'
#end if
sortList = [[$sort_codes[$sort],0]];
\$("#showListTable:has(tbody tr)").tablesorter({
widgets: ['stickyHeaders'],
sortList: sortList,
textExtraction: {
0: function(node) { return \$(node).find("span").text().toLowerCase(); },
4: function(node) { return \$(node).find("img").attr("alt"); },
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 : true,
dateFormat : '${sickbeard.DATE_PRESET}',
timeFormat : '${sickbeard.TIME_PRESET}',
trimZero : #if $sickbeard.TRIM_ZERO then "true" else "false"#
});
#end if
});
//-->
</script>
#set $show_div = "listing_default"
<input type="hidden" id="sbRoot" value="$sbRoot" />
<table id="showListTable" class="sickbeardTable tablesorter" 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>IMDb</th><th>Indexer</th><th>Search</th></tr></thead>
<tbody>
#for $cur_result in $sql_results:
#set $cur_indexer = int($cur_result["indexer"])
#set $runtime = $cur_result["runtime"]
#if int($cur_result["paused"]) and not $sickbeard.COMING_EPS_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
<!-- start $cur_result["show_name"] //-->
<tr class="$show_div">
## 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">$time.mktime($cur_result["localtime"].timetuple())</span></td>
<td class="tvShow"><a href="$sbRoot/home/displayShow?show=${cur_result["showid"]}">$cur_result["show_name"]</a>
#if int($cur_result["paused"]):
<span class="pause">[paused]</span>
#end if
</td>
<td class="nowrap" align="center" style="color: #555555; font-size: 16px;"><b><%="%02ix%02i" % (int(cur_result["season"]), int(cur_result["episode"])) %></b></td>
<td>
#if $cur_result["description"] != "" and $cur_result["description"] != None:
<img alt="" src="$sbRoot/images/info32.png" height="16" width="16" class="plotInfo" id="plot_info_<%=str(cur_result["showid"])+"_"+str(cur_result["season"])+"_"+str(cur_result["episode"])%>" style="padding-top: 6px;"/>
#end if
$cur_result["name"]
</td>
<td align="center">$cur_result["network"]</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">
#if $cur_result["imdb_id"]:
<a href="http://www.imdb.com/title/${cur_result["imdb_id"]}" 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
</td>
<td align="center"><a href="$sickbeard.indexerApi($cur_indexer).config["show_url"]${cur_result["showid"]}"
rel="noreferrer" onclick="window.open('${sickbeard.ANON_REDIRECT}' + 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"]}&amp;season=$cur_result["season"]&amp;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/search32.png" id="forceUpdateImage-${cur_result["showid"]}" /></a>
</td>
</tr>
<!-- end $cur_result["show_name"] //-->
#end for
</tbody>
</table>
<!-- end list view //-->
#else:
<!-- start non list view //-->
<script type="text/javascript" charset="utf-8">
<!--
\$(document).ready(function(){
\$('#sbRoot').ajaxEpSearch({'size': 16, 'loadingImage': 'loading16.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');
});
});
});
});
//-->
</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 $sort == "show":
<br /><br />
#end if
#for $cur_result in $sql_results:
#set $cur_indexer = int($cur_result["indexer"])
<!-- start $cur_result["show_name"] //-->
#if int($cur_result["paused"]) and not $sickbeard.COMING_EPS_DISPLAY_PAUSED:
#continue
#end if
#set $runtime = $cur_result["runtime"]
#if $sort == "network":
#if $cur_result["network"] and $cur_segment != $cur_result["network"]:
<h1 class="network">$cur_result["network"]</h1>
#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 $sort == "date":
#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 /><h1 class="day">Missed</h1>
#set $missed_header = True
#elif $cur_ep_airdate >= $next_week.date() and not $too_late_header:
<br /><h1 class="day">Later</h1>
#set $too_late_header = True
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
#if $cur_ep_airdate == $today.date():
<br /><h1 class="day">$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime("%A").decode($sickbeard.SYS_ENCODING).capitalize() <span style="font-size: 12px;">[today]</span></h1>
#set $today_header = True
#else:
<br /><h1 class="day">$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime("%A").decode($sickbeard.SYS_ENCODING).capitalize()</h1>
#end if
#end if
#end if
#set $cur_segment = $cur_ep_airdate
#end if
#if $cur_ep_airdate == $today.date() and not $today_header:
<br /><h1 class="day">$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime("%A").decode($sickbeard.SYS_ENCODING).capitalize() <span style="font-size: 12px;">[today]</span></h1>
#set $today_header = True
#end if
#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
#elif $sort == "show":
#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
#end if
<div class="$show_div" id="listing_${cur_result["showid"]}">
<div class="tvshowDiv">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<th #if $layout == 'banner' then "class=\"nobg\"" else "rowspan=\"2\""# style="background-color: #efefef;" valign="top">
<a href="$sbRoot/home/displayShow?show=${cur_result["showid"]}"><img alt="" class="#if $layout == 'banner' then "bannerThumb" else "posterThumb"#" src="$sbRoot/showPoster/?show=${cur_result["showid"]}&amp;which=#if $layout == 'poster' then "poster_thumb" else $layout#" /></a>
</th>
#if $layout == 'banner':
</tr>
<tr>
#end if
<td class="next_episode">
<div class="clearfix">
<h2 class="tvshowTitle"><a href="$sbRoot/home/displayShow?show=${cur_result["showid"]}">$cur_result["show_name"]
#if int($cur_result["paused"]):
<span class="pause">[paused]</span>
#end if
</a></h2>
<span class="tvshowTitleIcons">
#if $cur_result["imdb_id"]:
<a href="http://www.imdb.com/title/${cur_result["imdb_id"]}" rel="noreferrer" onclick="window.open('${sickbeard.ANON_REDIRECT}' + 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="$sickbeard.indexerApi($cur_indexer).config["show_url"]${cur_result["showid"]}"
rel="noreferrer" onclick="window.open('${sickbeard.ANON_REDIRECT}' + 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"]}&amp;season=$cur_result["season"]&amp;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/search32.png" id="forceUpdateImage-${cur_result["showid"]}" /></a></span>
</span>
</div>
<span class="title">Next Episode:</span> <span><%=str(cur_result["season"])+"x"+"%02i" % int(cur_result["episode"]) %> - $cur_result["name"] ($sbdatetime.sbdatetime.fromtimestamp($time.mktime($cur_result["localtime"].timetuple())).sbfdate().decode($sickbeard.SYS_ENCODING))</span>
<div class="clearfix">
<span class="title">Airs:</span> <span>$sbdatetime.sbdatetime.fromtimestamp($time.mktime($cur_result["localtime"].timetuple())).sbftime().decode($sickbeard.SYS_ENCODING) on $cur_result["network"]</span>
</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">Plot:</span>
<img class="ep_summaryTrigger" src="$sbRoot/images/plus.png" height="16" width="16" alt="" title="Toggle Summary" /><div class="ep_summary">[There is no summary added for this episode]</div>
#else:
<span class="title">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>
#end if
</div>
</td>
</tr>
</table>
</div>
</div>
<!-- end $cur_result["show_name"] //-->
#end for
<!-- end non list view //-->
#end if
<script type="text/javascript" charset="utf-8">
<!--
window.setInterval( "location.reload(true)", 600000); // Refresh every 10 minutes
//-->
</script>
#include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_bottom.tmpl")