1
0
mirror of https://github.com/moparisthebest/SickRage synced 2024-08-13 16:53:54 -04:00
SickRage/gui/slick/interfaces/default/comingEpisodes.tmpl
Supremicus 2c510aa210 Improve UI to display fluidly on different screen sizes.
Fixes the issue where top menu items would disappear on smaller screens.
Add Bootstrap v3.2.0 with Normalize v3.0.1 from github.com/twbs/bootstrap.
Add a modified jquery pnotify stylesheet.
Various UI tweaks.
Update CHANGES.md and TODO.txt
2014-10-23 23:23:56 +01:00

539 lines
22 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">
#SubMenu {display:none;}
#contentWrapper {padding-top:30px;}
</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/setComingEpsLayout/?layout=poster" #if $sickbeard.COMING_EPS_LAYOUT == "poster" then "selected=\"selected\"" else ""#>Poster</option>
<option value="$sbRoot/setComingEpsLayout/?layout=calendar" #if $sickbeard.COMING_EPS_LAYOUT == "calendar" then "selected=\"selected\"" else ""#>Calendar</option>
<option value="$sbRoot/setComingEpsLayout/?layout=banner" #if $sickbeard.COMING_EPS_LAYOUT == "banner" then "selected=\"selected\"" else ""#>Banner</option>
<option value="$sbRoot/setComingEpsLayout/?layout=list" #if $sickbeard.COMING_EPS_LAYOUT == "list" then "selected=\"selected\"" else ""#>List</option>
</select>
</span>
&nbsp;
<span> Sort By:
<select name="sort" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
<option value="$sbRoot/setComingEpsSort/?sort=date" #if $sickbeard.COMING_EPS_SORT == "date" then "selected=\"selected\"" else ""#>Date</option>
<option value="$sbRoot/setComingEpsSort/?sort=network" #if $sickbeard.COMING_EPS_SORT == "network" then "selected=\"selected\"" else ""#>Network</option>
<option value="$sbRoot/setComingEpsSort/?sort=show" #if $sickbeard.COMING_EPS_SORT == "show" then "selected=\"selected\"" else ""#>Show</option>
</select>
</span>
&nbsp;
<span> View Paused:
<select name="viewpaused" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
<option value="$sbRoot/toggleComingEpsDisplayPaused" #if $sickbeard.COMING_EPS_DISPLAY_PAUSED == "0" then "selected=\"selected\"" else ""#>Hide</option>
<option value="$sbRoot/toggleComingEpsDisplayPaused" #if $sickbeard.COMING_EPS_DISPLAY_PAUSED == "1" then "selected=\"selected\"" else ""#>Show</option>
</select>
</span>
</div>
<div class="key pull-right">
#if $layout != 'calendar':
<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="icon-calendar icon-white"></i>Subscribe</a>
</div>
<br>
#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 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"]
#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">
<%="S%02i" % int(cur_result["season"])+"E%02i" % int(cur_result["episode"]) %>
</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"])%>" />
#else:
<img src="$sbRoot/images/info32.png" width="16" height="16" class="plotInfoNone" alt="" />
#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" style="vertical-align: middle;">
#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>
</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/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">&nbsp</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.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 : true,
dtGlue : ' at ',
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 $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"]:
<div class="comingepheader">
<br><h2 class="network">$cur_result["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 $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 /><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">$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime("%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">$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime("%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="comingepheader">
<br /><h2 class="day">$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime("%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:
#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 == "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 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
<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\""# 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">
<span 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></span>
<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/search16.png" id="forceUpdateImage-${cur_result["showid"]}" /></a></span>
</span>
</div>
<span class="title">Next Episode:</span> <span><%="S%02i" % int(cur_result["season"])+"E%02i" % int(cur_result["episode"]) %> - $cur_result["name"]</span>
<div class="clearfix">
<span class="title">Airs: </span><span class="${fuzzydate}">$sbdatetime.sbdatetime.sbfdatetime($cur_result["localtime"]).decode($sickbeard.SYS_ENCODING)</span><span> 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"] != "" and $cur_result["description"] != None:
<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 $layout == 'calendar':
#set $today = datetime.date.today()
#set $dates = [$today + datetime.timedelta(days=$i) for $i in range(7)]
#set $tbl_day = 0
<br>
<br>
<div class="calendarWrapper">
<input type="hidden" id="sbRoot" value="$sbRoot" />
#for $day in $dates
#set $tbl_day += 1
<table class="sickbeardTable tablesorter calendarTable <%= 'cal-%s' % ('odd' if 1 == tbl_day % 2 else 'even') %>" cellspacing="0" border="0" cellpadding="0">
<thead><tr><th>$day.strftime("%A").decode($sickbeard.SYS_ENCODING).capitalize()</th></tr></thead>
<tbody>
#set $day_has_show = False
#for $cur_result in $sql_results:
#set $cur_indexer = int($cur_result["indexer"])
#set $runtime = $cur_result["runtime"]
#set $airday = $cur_result["localtime"].date()
#if $airday == $day:
#set $day_has_show = True
#set $airtime = $sbdatetime.sbdatetime.fromtimestamp($time.mktime($cur_result["localtime"].timetuple())).sbftime().decode($sickbeard.SYS_ENCODING)
#if $sickbeard.TRIM_ZERO:
#set $airtime = re.sub(r"0(\d:\d\d)", r"\1", $airtime, 0, re.IGNORECASE | re.MULTILINE)
#end if
<tr>
<td class="calendarShow">
<div class="poster">
<a title="${cur_result["show_name"]}" href="$sbRoot/home/displayShow?show=${cur_result["showid"]}"><img alt="" src="$sbRoot/showPoster/?show=${cur_result["showid"]}&amp;which=poster_thumb" /></a>
</div>
<div class="text">
<span class="airtime">
${airtime} on $cur_result["network"]
</span>
<span class="episode-title" title="$cur_result["name"]">
<%= "S%02i" % int(cur_result["season"]) + "E%02i" % int(cur_result["episode"]) %> - $cur_result["name"]
</span>
</div>
</td> <!-- end $cur_result["show_name"] -->
</tr>
#end if
#end for
#if not $day_has_show:
<tr><td class="calendarShow"><span class="show-status">No shows for this day</span></td></tr>
#end if
</tbody>
</table>
#end for
<!-- end calender view //-->
</div>
#end if
<div class="clearfix"></div>
<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")