mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-01 08:53:37 +00:00
Merge pull request #123 from JackDandy/feature/EpisodeView
Feature/Episode View
This commit is contained in:
commit
9d4122247e
16 changed files with 1311 additions and 1070 deletions
15
CHANGES.md
15
CHANGES.md
|
@ -1,4 +1,4 @@
|
|||
### 0.x.x (2014-12-xx xx:xx:xx UTC)
|
||||
### 0.x.x (2015-01-xx xx:xx:xx UTC)
|
||||
|
||||
* Add network logos BBC Canada, Crackle, El Rey Network, SKY Atlantic, and Watch
|
||||
* Change Yahoo! screen network logo
|
||||
|
@ -20,6 +20,19 @@
|
|||
* Fix anime searches on BTN provider
|
||||
* Change replace "Daily-Search" with "Recent-Search"
|
||||
* Add daily search to recent search renaming to config migration code
|
||||
* Change Coming Episodes calendar view to a fluid layout, change episode layout design, and add day and month in column headers
|
||||
* Add isotope plug-in to Coming Episodes calendar view to enable sort columns by Date, Network, and Show name
|
||||
* Add imagesLoaded plug-in to prevent layout breakage by calling isotope to update content after a page auto-refresh
|
||||
* Change Coming Episodes to "Episodes" page (API endpoint is not renamed)
|
||||
* Add coming episodes to episode view renaming to config migration code
|
||||
* Change Layout term "Calender" to "Day by Day" on Episodes page
|
||||
* Fix saving of sort modes to config file on Episodes page
|
||||
* Add qTip episode plots to "Day by Day" on Episodes page
|
||||
* Add article sorting to networks on Episodes page
|
||||
* Add toggle sort direction and multidimensional sort to isotope on Episodes page
|
||||
* Add text "[paused]" where appropriate to shows on layout Day by Day on Episodes page
|
||||
* Change Epsiodes page auto refresh from 10 to 30 mins
|
||||
* Add UI tweaks
|
||||
|
||||
[develop changelog]
|
||||
|
||||
|
|
|
@ -149,10 +149,6 @@ inc_top.tmpl
|
|||
margin-bottom: -15px;
|
||||
}
|
||||
|
||||
#contentWrapper {
|
||||
/* background: url("../images/bg.png") repeat 0 0 transparent; */
|
||||
}
|
||||
|
||||
[class^="icon-"],
|
||||
[class*=" icon-"] {
|
||||
background-image: url("../images/glyphicons-halflings.png");
|
||||
|
@ -301,18 +297,18 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.ui-tabs {
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
background: none;
|
||||
border-width: 0px;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-nav {
|
||||
padding-left: 0px;
|
||||
padding-left: 0;
|
||||
background: transparent;
|
||||
border-width: 0px 0px 0px 0px;
|
||||
-moz-border-radius: 0px;
|
||||
-webkit-border-radius: 0px;
|
||||
border-radius: 0px;
|
||||
border-width: 0 0 0 0;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-panel {
|
||||
|
@ -331,15 +327,6 @@ inc_top.tmpl
|
|||
border-top-right-radius: 5px;
|
||||
}
|
||||
|
||||
#content {
|
||||
width: 95%;
|
||||
min-width: 875px;
|
||||
padding: 15px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#SubMenu {
|
||||
padding-right: 20px;
|
||||
clear: both;
|
||||
|
@ -353,7 +340,7 @@ inc_top.tmpl
|
|||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-top: 50px;
|
||||
margin-bottom: 0px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
[class^="menu-icon-"], [class*=" menu-icon-"] {
|
||||
|
@ -379,83 +366,83 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.menu-icon-addshow {
|
||||
background-position: 0px 0px;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.menu-icon-anime {
|
||||
background-position: -21px 0px;
|
||||
background-position: -21px 0;
|
||||
}
|
||||
|
||||
.menu-icon-backlog-view {
|
||||
background-position: -42px 0px;
|
||||
background-position: -42px 0;
|
||||
}
|
||||
|
||||
.menu-icon-backlog {
|
||||
background-position: -63px 0px;
|
||||
background-position: -63px 0;
|
||||
}
|
||||
|
||||
.menu-icon-bittorrent {
|
||||
background-position: -84px 0px;
|
||||
background-position: -84px 0;
|
||||
}
|
||||
|
||||
.menu-icon-config-index {
|
||||
background-position: -105px 0px;
|
||||
background-position: -105px 0;
|
||||
}
|
||||
|
||||
.menu-icon-config {
|
||||
background-position: -126px 0px;
|
||||
background-position: -126px 0;
|
||||
}
|
||||
|
||||
.menu-icon-failed-download {
|
||||
background-position: -147px 0px;
|
||||
background-position: -147px 0;
|
||||
}
|
||||
|
||||
.menu-icon-home {
|
||||
background-position: -168px 0px;
|
||||
background-position: -168px 0;
|
||||
}
|
||||
|
||||
.menu-icon-manage {
|
||||
background-position: -189px 0px;
|
||||
background-position: -189px 0;
|
||||
}
|
||||
|
||||
.menu-icon-manage-searches {
|
||||
background-position: -210px 0px;
|
||||
background-position: -210px 0;
|
||||
}
|
||||
|
||||
.menu-icon-poster {
|
||||
background-position: -231px 0px;
|
||||
background-position: -231px 0;
|
||||
}
|
||||
|
||||
.menu-icon-postprocess {
|
||||
background-position: -252px 0px;
|
||||
background-position: -252px 0;
|
||||
}
|
||||
|
||||
.menu-icon-restart {
|
||||
background-position: -273px 0px;
|
||||
background-position: -273px 0;
|
||||
}
|
||||
|
||||
.menu-icon-shutdown {
|
||||
background-position: -294px 0px;
|
||||
background-position: -294px 0;
|
||||
}
|
||||
|
||||
.menu-icon-update {
|
||||
background-position: -315px 0px;
|
||||
background-position: -315px 0;
|
||||
}
|
||||
|
||||
.menu-icon-viewlog-errors {
|
||||
background-position: -336px 0px;
|
||||
background-position: -336px 0;
|
||||
}
|
||||
|
||||
.menu-icon-viewlog {
|
||||
background-position: -357px 0px;
|
||||
background-position: -357px 0;
|
||||
}
|
||||
|
||||
.menu-icon-xbmc {
|
||||
background-position: -378px 0px;
|
||||
background-position: -378px 0;
|
||||
}
|
||||
|
||||
.menu-icon-help {
|
||||
background-position: -399px 0px;
|
||||
background-position: -399px 0;
|
||||
}
|
||||
|
||||
[class^="submenu-icon-"], [class*=" submenu-icon-"] {
|
||||
|
@ -465,27 +452,27 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.submenu-icon-anime {
|
||||
background-position: -21px 0px;
|
||||
background-position: -21px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-bittorrent {
|
||||
background-position: -84px 0px;
|
||||
background-position: -84px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-failed-download {
|
||||
background-position: -147px 0px;
|
||||
background-position: -147px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-restart {
|
||||
background-position: -273px 0px;
|
||||
background-position: -273px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-shutdown {
|
||||
background-position: -294px 0px;
|
||||
background-position: -294px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-xbmc {
|
||||
background-position: -378px 0px;
|
||||
background-position: -378px 0;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
|
@ -622,42 +609,42 @@ home.tmpl
|
|||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {
|
||||
border-bottom-right-radius: 0px;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl {
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr {
|
||||
border-top-right-radius: 0px;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl {
|
||||
border-top-left-radius: 0px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-widget-content {
|
||||
border-top: 1px solid #111;
|
||||
border-bottom: 1px solid #111;
|
||||
border-left: 0px;
|
||||
border-right: 0px;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.show .progress-80 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-60 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-40 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-20 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show-title {
|
||||
|
@ -665,7 +652,7 @@ home.tmpl
|
|||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
font-size: 11px;
|
||||
margin: 4px 4px 0px 4px;
|
||||
margin: 4px 4px 0 4px;
|
||||
}
|
||||
|
||||
.show-title:after {
|
||||
|
@ -688,7 +675,7 @@ home.tmpl
|
|||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
font-size: 11px;
|
||||
margin: 0px 4px 4px 4px;
|
||||
margin: 0 4px 4px 4px;
|
||||
}
|
||||
|
||||
.show-date:after {
|
||||
|
@ -828,7 +815,7 @@ home_trendingShows.tmpl
|
|||
white-space: nowrap;
|
||||
font-size: 12px;
|
||||
overflow: hidden;
|
||||
/* text-shadow: 1px 1px 0px #000;*/
|
||||
/* text-shadow: 1px 1px 0 #000;*/
|
||||
padding-left: 4px;
|
||||
margin: 0;
|
||||
}
|
||||
|
@ -928,7 +915,7 @@ ul.tags li {
|
|||
border: 1px solid #111;
|
||||
color: #FFF;
|
||||
font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
||||
text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.8);
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
@ -1168,7 +1155,7 @@ td.col-search {
|
|||
}
|
||||
|
||||
/* =======================================================================
|
||||
comingEpisodes.tmpl
|
||||
episodeView.tmpl
|
||||
========================================================================== */
|
||||
|
||||
.sort_data {
|
||||
|
@ -1227,7 +1214,7 @@ h2.day, h2.network {
|
|||
letter-spacing: 1px;
|
||||
color: #FFF;
|
||||
text-align: center;
|
||||
text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3);
|
||||
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
|
||||
background-color: #15528F;
|
||||
}
|
||||
|
||||
|
@ -1236,7 +1223,7 @@ h2.day, h2.network {
|
|||
clear: both;
|
||||
border: 1px solid #ccc;
|
||||
margin: auto;
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
width: 750px;
|
||||
border-radius: 5px;
|
||||
|
@ -1325,17 +1312,42 @@ h2.day, h2.network {
|
|||
color: #09A2FF;
|
||||
}
|
||||
|
||||
table.cal-odd {
|
||||
.day-of-week .day-number {
|
||||
background-color: #15528F;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.today .day-number .number, .today .day-number .month, .today .day-number .day {
|
||||
color: #8dbeee;
|
||||
}
|
||||
|
||||
.odd .daybyday-show {
|
||||
background-color: #333;
|
||||
}
|
||||
table.cal-even {
|
||||
|
||||
.even .daybyday-show {
|
||||
background-color: #3d3d3d;
|
||||
}
|
||||
.calendarShow .text .airtime {
|
||||
color:#fff
|
||||
.daybyday-show .episode-blank {
|
||||
background-color: rgba(0,0,0,.1);
|
||||
border-radius: 3px;
|
||||
}
|
||||
.calendarShow .text .episode-title {
|
||||
color:#aaa
|
||||
|
||||
.day-of-week .poster img {
|
||||
border-color: #111;
|
||||
}
|
||||
|
||||
.day-of-week .text .airtime,
|
||||
.day-of-week .text .episode,
|
||||
.day-of-week .text .episode .name {
|
||||
color: #fff;
|
||||
}
|
||||
.day-of-week .text .episode .season,
|
||||
.day-of-week .text .episode .number {
|
||||
color: rgb(9, 162, 255);
|
||||
}
|
||||
.day-of-week .text .episode {
|
||||
color: rgb(141, 190, 238);
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
|
@ -1372,7 +1384,7 @@ config*.tmpl
|
|||
}
|
||||
|
||||
#config div.field-pair {
|
||||
padding: 12px 0px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
#config .nocheck, #config div #customQuality, .metadataDiv {
|
||||
|
@ -1557,7 +1569,7 @@ td.tableright {
|
|||
text-align: left;
|
||||
vertical-align: middle;
|
||||
width: 225px;
|
||||
padding: 6px 0px;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
.optionWrapper div.selectChoices {
|
||||
|
@ -1591,7 +1603,6 @@ Global
|
|||
========================================================================== */
|
||||
|
||||
span.path {
|
||||
padding: 3px 6px;
|
||||
color: #09A2FF;
|
||||
background-color: #333;
|
||||
}
|
||||
|
@ -1609,7 +1620,7 @@ span.quality {
|
|||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
|
||||
-webkit-box-shadow:inset 0 1px rgba(255, 255, 255, 0.1),inset 0 -1px 3px rgba(0, 0, 0, 0.3),inset 0 0 0 1px rgba(255, 255, 255, 0.08),0 1px 2px rgba(0, 0, 0, 0.15);
|
||||
box-shadow:inset 0 1px rgba(255, 255, 255, 0.1),inset 0 -1px 3px rgba(0, 0, 0, 0.3),inset 0 0 0 1px rgba(255, 255, 255, 0.08),0 1px 2px rgba(0, 0, 0, 0.15);
|
||||
text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.8);
|
||||
color: #FFFFFF;
|
||||
display: inline-block;
|
||||
padding: 2px 4px;
|
||||
|
@ -1729,7 +1740,7 @@ div.blackwhitelist span {
|
|||
}
|
||||
|
||||
div.blackwhitelist.anidb, div.blackwhitelist.manual {
|
||||
margin: 7px 0px;
|
||||
margin: 7px 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1746,7 +1757,7 @@ body {
|
|||
}
|
||||
|
||||
input[type="radio"] {
|
||||
margin: 2px 0px 0px;
|
||||
margin: 2px 0 0;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
|
@ -1761,7 +1772,7 @@ input, textarea, select, .uneditable-input {
|
|||
}
|
||||
|
||||
.navbar-brand {
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* navbar styling */
|
||||
|
@ -1901,7 +1912,7 @@ fieldset[disabled] .navbar-default .btn-link:focus {
|
|||
.dropdown-menu {
|
||||
background-color: #333;
|
||||
border: 1px solid rgba(0, 0, 0, 0.15);
|
||||
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.176);
|
||||
}
|
||||
|
||||
.form-control {
|
||||
|
@ -2379,10 +2390,10 @@ pnotify.css
|
|||
background-image: -o-linear-gradient(#333, #3d3d3d) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
|
||||
-moz-box-shadow: 0px 0px 2px #000;
|
||||
-webkit-box-shadow: 0px 0px 2px #000;
|
||||
-o-box-shadow: 0px 0px 2px #000;
|
||||
box-shadow: 0px 0px 2px #000;
|
||||
-moz-box-shadow: 0 0 2px #000;
|
||||
-webkit-box-shadow: 0 0 2px #000;
|
||||
-o-box-shadow: 0 0 2px #000;
|
||||
box-shadow: 0 0 2px #000;
|
||||
}
|
||||
|
||||
.ui-pnotify-title {
|
||||
|
@ -2643,10 +2654,19 @@ span.token-input-delete-token {
|
|||
background-color: rgb(40, 40, 40);
|
||||
}
|
||||
|
||||
/*.episodeview-daybyday .time .time-min,*/
|
||||
.episodeview-daybyday .time .time-hr-min,
|
||||
.episodeview-daybyday .time .time-am-pm,
|
||||
#addRootDirTable td label .filepath,
|
||||
.grey-text {
|
||||
color:#999
|
||||
}
|
||||
/*.episodeview-daybyday .time .time-hr-min{
|
||||
display:none
|
||||
}
|
||||
.episodeview-daybyday .time .time-min{
|
||||
font-size: 11px;
|
||||
}*/
|
||||
|
||||
#newShowPortal #displayText .show-name,
|
||||
#newShowPortal #displayText .show-dest,
|
||||
|
@ -2682,7 +2702,7 @@ jquery.confirm.css
|
|||
top: 50%;
|
||||
margin: -130px 0 0 -230px;
|
||||
border: 1px solid #111;
|
||||
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
|
||||
box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);
|
||||
}
|
||||
|
||||
#confirmBox h1,
|
||||
|
@ -2696,13 +2716,13 @@ jquery.confirm.css
|
|||
color: #fff;
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
|
||||
}
|
||||
|
||||
#confirmBox p {
|
||||
padding-top: 20px;
|
||||
color: #fff;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
|
||||
}
|
||||
|
||||
#confirmButtons {
|
||||
|
@ -2717,7 +2737,7 @@ jquery.confirm.css
|
|||
display: inline-block;
|
||||
color: #fff;
|
||||
text-align:center;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #111;
|
||||
border-radius: 3px;
|
||||
|
|
|
@ -149,10 +149,6 @@ inc_top.tmpl
|
|||
margin-bottom: -15px;
|
||||
}
|
||||
|
||||
#contentWrapper {
|
||||
/* background: url("../images/bg.png") repeat 0 0 transparent; */
|
||||
}
|
||||
|
||||
[class^="icon-"],
|
||||
[class*=" icon-"] {
|
||||
background-image: url("../images/glyphicons-halflings.png");
|
||||
|
@ -289,18 +285,18 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.ui-tabs {
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
background: none;
|
||||
border-width: 0px;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-nav {
|
||||
padding-left: 0px;
|
||||
padding-left: 0;
|
||||
background: transparent;
|
||||
border-width: 0px 0px 0px 0px;
|
||||
-moz-border-radius: 0px;
|
||||
-webkit-border-radius: 0px;
|
||||
border-radius: 0px;
|
||||
border-width: 0 0 0 0;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-panel {
|
||||
|
@ -318,15 +314,6 @@ inc_top.tmpl
|
|||
border-top-right-radius: 5px;
|
||||
}
|
||||
|
||||
#content {
|
||||
width: 95%;
|
||||
min-width: 875px;
|
||||
padding: 15px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#SubMenu {
|
||||
padding-right: 20px;
|
||||
clear: both;
|
||||
|
@ -340,7 +327,7 @@ inc_top.tmpl
|
|||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-top: 50px;
|
||||
margin-bottom: 0px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
[class^="menu-icon-"], [class*=" menu-icon-"] {
|
||||
|
@ -366,83 +353,83 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.menu-icon-addshow {
|
||||
background-position: 0px 0px;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.menu-icon-anime {
|
||||
background-position: -21px 0px;
|
||||
background-position: -21px 0;
|
||||
}
|
||||
|
||||
.menu-icon-backlog-view {
|
||||
background-position: -42px 0px;
|
||||
background-position: -42px 0;
|
||||
}
|
||||
|
||||
.menu-icon-backlog {
|
||||
background-position: -63px 0px;
|
||||
background-position: -63px 0;
|
||||
}
|
||||
|
||||
.menu-icon-bittorrent {
|
||||
background-position: -84px 0px;
|
||||
background-position: -84px 0;
|
||||
}
|
||||
|
||||
.menu-icon-config-index {
|
||||
background-position: -105px 0px;
|
||||
background-position: -105px 0;
|
||||
}
|
||||
|
||||
.menu-icon-config {
|
||||
background-position: -126px 0px;
|
||||
background-position: -126px 0;
|
||||
}
|
||||
|
||||
.menu-icon-failed-download {
|
||||
background-position: -147px 0px;
|
||||
background-position: -147px 0;
|
||||
}
|
||||
|
||||
.menu-icon-home {
|
||||
background-position: -168px 0px;
|
||||
background-position: -168px 0;
|
||||
}
|
||||
|
||||
.menu-icon-manage {
|
||||
background-position: -189px 0px;
|
||||
background-position: -189px 0;
|
||||
}
|
||||
|
||||
.menu-icon-manage-searches {
|
||||
background-position: -210px 0px;
|
||||
background-position: -210px 0;
|
||||
}
|
||||
|
||||
.menu-icon-poster {
|
||||
background-position: -231px 0px;
|
||||
background-position: -231px 0;
|
||||
}
|
||||
|
||||
.menu-icon-postprocess {
|
||||
background-position: -252px 0px;
|
||||
background-position: -252px 0;
|
||||
}
|
||||
|
||||
.menu-icon-restart {
|
||||
background-position: -273px 0px;
|
||||
background-position: -273px 0;
|
||||
}
|
||||
|
||||
.menu-icon-shutdown {
|
||||
background-position: -294px 0px;
|
||||
background-position: -294px 0;
|
||||
}
|
||||
|
||||
.menu-icon-update {
|
||||
background-position: -315px 0px;
|
||||
background-position: -315px 0;
|
||||
}
|
||||
|
||||
.menu-icon-viewlog-errors {
|
||||
background-position: -336px 0px;
|
||||
background-position: -336px 0;
|
||||
}
|
||||
|
||||
.menu-icon-viewlog {
|
||||
background-position: -357px 0px;
|
||||
background-position: -357px 0;
|
||||
}
|
||||
|
||||
.menu-icon-xbmc {
|
||||
background-position: -378px 0px;
|
||||
background-position: -378px 0;
|
||||
}
|
||||
|
||||
.menu-icon-help {
|
||||
background-position: -399px 0px;
|
||||
background-position: -399px 0;
|
||||
}
|
||||
|
||||
[class^="submenu-icon-"], [class*=" submenu-icon-"] {
|
||||
|
@ -452,27 +439,27 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.submenu-icon-anime {
|
||||
background-position: -21px 0px;
|
||||
background-position: -21px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-bittorrent {
|
||||
background-position: -84px 0px;
|
||||
background-position: -84px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-failed-download {
|
||||
background-position: -147px 0px;
|
||||
background-position: -147px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-restart {
|
||||
background-position: -273px 0px;
|
||||
background-position: -273px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-shutdown {
|
||||
background-position: -294px 0px;
|
||||
background-position: -294px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-xbmc {
|
||||
background-position: -378px 0px;
|
||||
background-position: -378px 0;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
|
@ -609,42 +596,42 @@ home.tmpl
|
|||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {
|
||||
border-bottom-right-radius: 0px;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl {
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr {
|
||||
border-top-right-radius: 0px;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl {
|
||||
border-top-left-radius: 0px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-widget-content {
|
||||
border-top: 1px solid #111;
|
||||
border-bottom: 1px solid #111;
|
||||
border-left: 0px;
|
||||
border-right: 0px;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.show .progress-80 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-60 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-40 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-20 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show-title {
|
||||
|
@ -652,7 +639,7 @@ home.tmpl
|
|||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
font-size: 11px;
|
||||
margin: 4px 4px 0px 4px;
|
||||
margin: 4px 4px 0 4px;
|
||||
}
|
||||
|
||||
.show-title:after {
|
||||
|
@ -675,7 +662,7 @@ home.tmpl
|
|||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
font-size: 11px;
|
||||
margin: 0px 4px 4px 4px;
|
||||
margin: 0 4px 4px 4px;
|
||||
}
|
||||
|
||||
.show-date:after {
|
||||
|
@ -815,7 +802,7 @@ home_trendingShows.tmpl
|
|||
white-space: nowrap;
|
||||
font-size: 12px;
|
||||
overflow: hidden;
|
||||
/* text-shadow: 1px 1px 0px #000;*/
|
||||
/* text-shadow: 1px 1px 0 #000;*/
|
||||
padding-left: 4px;
|
||||
margin: 0;
|
||||
}
|
||||
|
@ -917,7 +904,7 @@ ul.tags li {
|
|||
border: 1px solid #111;
|
||||
color: #FFF;
|
||||
font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
||||
text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.8);
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
@ -1074,7 +1061,7 @@ tr.seasonheader {
|
|||
padding-top: 10px;
|
||||
text-align: left;
|
||||
border: none;
|
||||
color: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
th.col-checkbox,
|
||||
|
@ -1157,7 +1144,7 @@ td.col-search {
|
|||
}
|
||||
|
||||
/* =======================================================================
|
||||
comingEpisodes.tmpl
|
||||
episodeView.tmpl
|
||||
========================================================================== */
|
||||
|
||||
.sort_data {
|
||||
|
@ -1219,7 +1206,7 @@ h2.day, h2.network {
|
|||
letter-spacing: 1px;
|
||||
color: #FFF;
|
||||
text-align: center;
|
||||
text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3);
|
||||
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
|
@ -1228,7 +1215,7 @@ h2.day, h2.network {
|
|||
clear: both;
|
||||
border: 1px solid #ccc;
|
||||
margin: auto;
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
width: 750px;
|
||||
border-radius: 5px;
|
||||
|
@ -1307,17 +1294,39 @@ h2.day, h2.network {
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table.cal-odd {
|
||||
background-color: #ddd;
|
||||
.day-of-week .day-number {
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
}
|
||||
table.cal-even {
|
||||
background-color: #d2d2d2;
|
||||
|
||||
.today .day-number .number, .today .day-number .month, .today .day-number .day {
|
||||
color: #c7db40;
|
||||
}
|
||||
.calendarShow .text .airtime {
|
||||
color:#000
|
||||
|
||||
.odd .daybyday-show {
|
||||
background-color: #F5F1E4;
|
||||
}
|
||||
.calendarShow .text .episode-title {
|
||||
color:#888
|
||||
|
||||
.even .daybyday-show {
|
||||
background-color: #DFDACF;
|
||||
}
|
||||
|
||||
.day-of-week .poster img {
|
||||
border-color: #CCC;
|
||||
}
|
||||
|
||||
.day-of-week .text .airtime,
|
||||
.day-of-week .text .episode,
|
||||
.day-of-week .text .episode .name {
|
||||
color: #000;
|
||||
}
|
||||
.day-of-week .text .episode .season,
|
||||
.day-of-week .text .episode .number {
|
||||
color: rgb(9, 133, 225);
|
||||
/*color: #3d3d3d;*/
|
||||
}
|
||||
.day-of-week .text .episode {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
|
@ -1355,7 +1364,7 @@ config*.tmpl
|
|||
}
|
||||
|
||||
#config div.field-pair {
|
||||
padding: 12px 0px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
#config .nocheck, #config div #customQuality, .metadataDiv {
|
||||
|
@ -1533,7 +1542,7 @@ td.tableright {
|
|||
text-align: left;
|
||||
vertical-align: middle;
|
||||
width: 225px;
|
||||
padding: 6px 0px;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
.optionWrapper div.selectChoices {
|
||||
|
@ -1567,7 +1576,6 @@ Global
|
|||
========================================================================== */
|
||||
|
||||
span.path {
|
||||
padding: 3px 6px;
|
||||
color: #8b0000;
|
||||
background-color: #f5f1e4;
|
||||
}
|
||||
|
@ -1589,7 +1597,7 @@ span.quality {
|
|||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
|
||||
-webkit-box-shadow:inset 0 1px rgba(255, 255, 255, 0.1),inset 0 -1px 3px rgba(0, 0, 0, 0.3),inset 0 0 0 1px rgba(255, 255, 255, 0.08),0 1px 2px rgba(0, 0, 0, 0.15);
|
||||
box-shadow:inset 0 1px rgba(255, 255, 255, 0.1),inset 0 -1px 3px rgba(0, 0, 0, 0.3),inset 0 0 0 1px rgba(255, 255, 255, 0.08),0 1px 2px rgba(0, 0, 0, 0.15);
|
||||
text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.8);
|
||||
color: #FFFFFF;
|
||||
display: inline-block;
|
||||
padding: 2px 4px;
|
||||
|
@ -1709,7 +1717,7 @@ div.blackwhitelist span {
|
|||
}
|
||||
|
||||
div.blackwhitelist.anidb, div.blackwhitelist.manual {
|
||||
margin: 7px 0px;
|
||||
margin: 7px 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1725,7 +1733,7 @@ body {
|
|||
}
|
||||
|
||||
input[type="radio"] {
|
||||
margin: 2px 0px 0px;
|
||||
margin: 2px 0 0;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
|
@ -1740,7 +1748,7 @@ input, textarea, select, .uneditable-input {
|
|||
}
|
||||
|
||||
.navbar-brand {
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* navbar styling */
|
||||
|
@ -1879,7 +1887,7 @@ fieldset[disabled] .navbar-default .btn-link:focus {
|
|||
.dropdown-menu {
|
||||
background-color: #F5F1E4;
|
||||
border: 1px solid rgba(0, 0, 0, 0.15);
|
||||
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.176);
|
||||
}
|
||||
|
||||
.form-control {
|
||||
|
@ -2591,6 +2599,8 @@ span.token-input-delete-token {
|
|||
background-color: rgb(245, 245, 245);
|
||||
}
|
||||
|
||||
.episodeview-daybyday .time .time-min,
|
||||
.episodeview-daybyday .time .time-am-pm,
|
||||
#addRootDirTable td label .filepath,
|
||||
.grey-text {
|
||||
color:#666
|
||||
|
@ -2630,7 +2640,7 @@ jquery.confirm.css
|
|||
top: 50%;
|
||||
margin: -130px 0 0 -230px;
|
||||
border: 1px solid #111;
|
||||
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
|
||||
box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);
|
||||
}
|
||||
|
||||
#confirmBox h1,
|
||||
|
@ -2644,13 +2654,13 @@ jquery.confirm.css
|
|||
color: #fff;
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
|
||||
}
|
||||
|
||||
#confirmBox p {
|
||||
padding-top: 20px;
|
||||
color: #000;
|
||||
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.75);
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
}
|
||||
|
||||
#confirmButtons {
|
||||
|
@ -2665,7 +2675,7 @@ jquery.confirm.css
|
|||
display: inline-block;
|
||||
color: #fff;
|
||||
text-align:center;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #111;
|
||||
border-radius: 3px;
|
||||
|
|
|
@ -149,8 +149,11 @@ inc_top.tmpl
|
|||
margin-bottom: -15px;
|
||||
}
|
||||
|
||||
#contentWrapper {
|
||||
/* background: url("../images/bg.png") repeat 0 0 transparent; */
|
||||
#contentWrapper .episodeview-banner,
|
||||
#contentWrapper .episodeview-daybyday,
|
||||
#contentWrapper .episodeview-list,
|
||||
#contentWrapper .episodeview-poster{
|
||||
padding-top:45px;
|
||||
}
|
||||
|
||||
[class^="icon-"],
|
||||
|
@ -285,18 +288,18 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.ui-tabs {
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
background: none;
|
||||
border-width: 0px;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-nav {
|
||||
padding-left: 0px;
|
||||
padding-left: 0;
|
||||
background: transparent;
|
||||
border-width: 0px 0px 0px 0px;
|
||||
-moz-border-radius: 0px;
|
||||
-webkit-border-radius: 0px;
|
||||
border-radius: 0px;
|
||||
border-width: 0 0 0 0;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-panel {
|
||||
|
@ -336,7 +339,7 @@ inc_top.tmpl
|
|||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-top: 50px;
|
||||
margin-bottom: 0px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
[class^="menu-icon-"], [class*=" menu-icon-"] {
|
||||
|
@ -362,83 +365,83 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.menu-icon-addshow {
|
||||
background-position: 0px 0px;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.menu-icon-anime {
|
||||
background-position: -21px 0px;
|
||||
background-position: -21px 0;
|
||||
}
|
||||
|
||||
.menu-icon-backlog-view {
|
||||
background-position: -42px 0px;
|
||||
background-position: -42px 0;
|
||||
}
|
||||
|
||||
.menu-icon-backlog {
|
||||
background-position: -63px 0px;
|
||||
background-position: -63px 0;
|
||||
}
|
||||
|
||||
.menu-icon-bittorrent {
|
||||
background-position: -84px 0px;
|
||||
background-position: -84px 0;
|
||||
}
|
||||
|
||||
.menu-icon-config-index {
|
||||
background-position: -105px 0px;
|
||||
background-position: -105px 0;
|
||||
}
|
||||
|
||||
.menu-icon-config {
|
||||
background-position: -126px 0px;
|
||||
background-position: -126px 0;
|
||||
}
|
||||
|
||||
.menu-icon-failed-download {
|
||||
background-position: -147px 0px;
|
||||
background-position: -147px 0;
|
||||
}
|
||||
|
||||
.menu-icon-home {
|
||||
background-position: -168px 0px;
|
||||
background-position: -168px 0;
|
||||
}
|
||||
|
||||
.menu-icon-manage {
|
||||
background-position: -189px 0px;
|
||||
background-position: -189px 0;
|
||||
}
|
||||
|
||||
.menu-icon-manage-searches {
|
||||
background-position: -210px 0px;
|
||||
background-position: -210px 0;
|
||||
}
|
||||
|
||||
.menu-icon-poster {
|
||||
background-position: -231px 0px;
|
||||
background-position: -231px 0;
|
||||
}
|
||||
|
||||
.menu-icon-postprocess {
|
||||
background-position: -252px 0px;
|
||||
background-position: -252px 0;
|
||||
}
|
||||
|
||||
.menu-icon-restart {
|
||||
background-position: -273px 0px;
|
||||
background-position: -273px 0;
|
||||
}
|
||||
|
||||
.menu-icon-shutdown {
|
||||
background-position: -294px 0px;
|
||||
background-position: -294px 0;
|
||||
}
|
||||
|
||||
.menu-icon-update {
|
||||
background-position: -315px 0px;
|
||||
background-position: -315px 0;
|
||||
}
|
||||
|
||||
.menu-icon-viewlog-errors {
|
||||
background-position: -336px 0px;
|
||||
background-position: -336px 0;
|
||||
}
|
||||
|
||||
.menu-icon-viewlog {
|
||||
background-position: -357px 0px;
|
||||
background-position: -357px 0;
|
||||
}
|
||||
|
||||
.menu-icon-xbmc {
|
||||
background-position: -378px 0px;
|
||||
background-position: -378px 0;
|
||||
}
|
||||
|
||||
.menu-icon-help {
|
||||
background-position: -399px 0px;
|
||||
background-position: -399px 0;
|
||||
}
|
||||
|
||||
[class^="submenu-icon-"], [class*=" submenu-icon-"] {
|
||||
|
@ -448,27 +451,27 @@ inc_top.tmpl
|
|||
}
|
||||
|
||||
.submenu-icon-anime {
|
||||
background-position: -21px 0px;
|
||||
background-position: -21px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-bittorrent {
|
||||
background-position: -84px 0px;
|
||||
background-position: -84px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-failed-download {
|
||||
background-position: -147px 0px;
|
||||
background-position: -147px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-restart {
|
||||
background-position: -273px 0px;
|
||||
background-position: -273px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-shutdown {
|
||||
background-position: -294px 0px;
|
||||
background-position: -294px 0;
|
||||
}
|
||||
|
||||
.submenu-icon-xbmc {
|
||||
background-position: -378px 0px;
|
||||
background-position: -378px 0;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
|
@ -626,26 +629,26 @@ home.tmpl
|
|||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {
|
||||
border-bottom-right-radius: 0px;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl {
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr {
|
||||
border-top-right-radius: 0px;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl {
|
||||
border-top-left-radius: 0px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
|
||||
.show .ui-widget-content {
|
||||
border-top: 1px solid #111;
|
||||
border-bottom: 1px solid #111;
|
||||
border-left: 0px;
|
||||
border-right: 0px;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
.ui-progressbar .ui-progressbar-value {
|
||||
height:20px
|
||||
|
@ -661,19 +664,19 @@ home.tmpl
|
|||
}
|
||||
|
||||
.show .progress-80 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-60 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-40 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show .progress-20 {
|
||||
border-radius: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.show-title {
|
||||
|
@ -681,7 +684,7 @@ home.tmpl
|
|||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
font-size: 11px;
|
||||
margin: 4px 4px 0px 4px;
|
||||
margin: 4px 4px 0 4px;
|
||||
}
|
||||
|
||||
.show-title:after {
|
||||
|
@ -704,7 +707,7 @@ home.tmpl
|
|||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
font-size: 11px;
|
||||
margin: 0px 4px 4px 4px;
|
||||
margin: 0 4px 4px 4px;
|
||||
}
|
||||
|
||||
.show-date:after {
|
||||
|
@ -791,34 +794,27 @@ home_addShows.tmpl
|
|||
========================================================================== */
|
||||
|
||||
#addShowPortal {
|
||||
width: 750px;
|
||||
width: 748px;
|
||||
padding: 10px 0;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
#addShowPortal a {
|
||||
/* padding: 10px;*/
|
||||
padding: 0px 20px;
|
||||
padding: 0 20px;
|
||||
width: 360px;
|
||||
|
||||
float: left;
|
||||
margin: 0 15px 15px 0;
|
||||
margin: 0 7px 14px;
|
||||
}
|
||||
|
||||
div.button {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
/* padding-left: 10px;*/
|
||||
}
|
||||
|
||||
div.buttontext {
|
||||
display: table-cell;
|
||||
/*
|
||||
padding-left: 20px;
|
||||
padding: 10px 15px;
|
||||
*/
|
||||
padding: 10px 0px 10px 15px;
|
||||
padding: 10px 0 10px 15px;
|
||||
text-align: left;
|
||||
white-space: normal;
|
||||
}
|
||||
|
@ -826,7 +822,7 @@ div.buttontext p {
|
|||
margin: 0
|
||||
}
|
||||
div.buttontext h3 {
|
||||
margin-top: 0px;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
div.buttontext p {
|
||||
|
@ -970,7 +966,6 @@ home_trendingShows.tmpl
|
|||
white-space: nowrap;
|
||||
font-size: 12px;
|
||||
overflow: hidden;
|
||||
/* text-shadow: 1px 1px 0px #000;*/
|
||||
padding-left: 4px;
|
||||
margin: 0;
|
||||
}
|
||||
|
@ -1104,7 +1099,7 @@ ul.tags li {
|
|||
border: 1px solid #111;
|
||||
color: #FFF;
|
||||
font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
||||
text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.8);
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
@ -1347,7 +1342,7 @@ td.col-search {
|
|||
}
|
||||
|
||||
/* =======================================================================
|
||||
comingEpisodes.tmpl
|
||||
episodeView.tmpl
|
||||
========================================================================== */
|
||||
|
||||
.sort_data {
|
||||
|
@ -1409,7 +1404,7 @@ h2.day, h2.network {
|
|||
letter-spacing: 1px;
|
||||
color: #FFF;
|
||||
text-align: center;
|
||||
text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3);
|
||||
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
|
@ -1418,7 +1413,7 @@ h2.day, h2.network {
|
|||
clear: both;
|
||||
border: 1px solid #ccc;
|
||||
margin: auto;
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
width: 750px;
|
||||
border-radius: 5px;
|
||||
|
@ -1497,46 +1492,87 @@ h2.day, h2.network {
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.calendarWrapper {
|
||||
width:1000px;
|
||||
.daybydayWrapper {
|
||||
max-width: 1400px;
|
||||
margin: 0 auto;
|
||||
padding:0 3px
|
||||
padding: 0 /*3px*/
|
||||
}
|
||||
|
||||
.calendarTable {
|
||||
.day-of-week {
|
||||
float: left;
|
||||
width:142px !important;
|
||||
white-space:nowrap;
|
||||
table-layout:fixed !important;
|
||||
width: 14.28%;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.calendarShow {
|
||||
padding:0 !important
|
||||
.day-of-week .day-number {
|
||||
position: relative;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.calendarShow .poster {
|
||||
padding-bottom:2px
|
||||
}
|
||||
.calendarShow .poster img {
|
||||
width:142px;
|
||||
height:auto
|
||||
.day-of-week .day-number .number {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
font-weight: bold;
|
||||
font-size: 32px;
|
||||
line-height: 38px;
|
||||
}
|
||||
|
||||
.calendarShow .text {
|
||||
padding:0 5px 10px 5px
|
||||
.day-of-week .day-number .day {
|
||||
position: absolute;
|
||||
left: 5px;
|
||||
top: 3px;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.calendarShow .text .airtime,
|
||||
.calendarShow .text .episode-title {
|
||||
.day-of-week .day-number .month {
|
||||
position: absolute;
|
||||
left: 5px;
|
||||
bottom: 3px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.daybyday-show {
|
||||
margin-top: 4px;
|
||||
padding: 4px;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.day-of-week .poster img {
|
||||
border: 1px solid;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 2px;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.day-of-week .text .airtime,
|
||||
.day-of-week .text .episode {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: block;
|
||||
font-size:11px
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.calendarShow .show-status {
|
||||
padding:5px 10px 10px;
|
||||
text-align:center
|
||||
.day-of-week .text .episode .season,
|
||||
.day-of-week .text .episode .number {
|
||||
font-weight: 900;
|
||||
}
|
||||
.day-of-week .text .episode .season {
|
||||
margin-right: 2px;
|
||||
}
|
||||
.day-of-week .text .episode .number {
|
||||
margin-left: 2px;
|
||||
}
|
||||
.day-of-week .episode-blank {
|
||||
width: 250px;
|
||||
height: 32px;
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
|
@ -1873,7 +1909,7 @@ div.metadata_example label {
|
|||
line-height: 21px;
|
||||
display: block;
|
||||
padding: 3px;
|
||||
margin: 0px;
|
||||
margin: 0;
|
||||
}
|
||||
div.metadata_options input {
|
||||
margin-right: 3px;
|
||||
|
@ -1886,7 +1922,7 @@ div.metadataDiv .disabled {
|
|||
|
||||
.notifier-icon {
|
||||
float: left;
|
||||
margin: 6px 4px 0px 0px;
|
||||
margin: 6px 4px 0 0;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
|
@ -1918,7 +1954,7 @@ td.tableright {
|
|||
text-align: left;
|
||||
vertical-align: middle;
|
||||
width: 225px;
|
||||
padding: 6px 0px;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
.optionWrapper div.selectChoices {
|
||||
|
@ -1952,9 +1988,8 @@ Global
|
|||
========================================================================== */
|
||||
|
||||
span.path {
|
||||
padding: 3px 6px;
|
||||
color: #8b0000;
|
||||
background-color: #f5f1e4;
|
||||
padding: 3px;
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
|
@ -1974,7 +2009,7 @@ span.quality {
|
|||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
|
||||
-webkit-box-shadow:inset 0 1px rgba(255, 255, 255, 0.1),inset 0 -1px 3px rgba(0, 0, 0, 0.3),inset 0 0 0 1px rgba(255, 255, 255, 0.08),0 1px 2px rgba(0, 0, 0, 0.15);
|
||||
box-shadow:inset 0 1px rgba(255, 255, 255, 0.1),inset 0 -1px 3px rgba(0, 0, 0, 0.3),inset 0 0 0 1px rgba(255, 255, 255, 0.08),0 1px 2px rgba(0, 0, 0, 0.15);
|
||||
text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.8);
|
||||
color: #FFFFFF;
|
||||
display: inline-block;
|
||||
padding: 2px 4px;
|
||||
|
@ -2094,7 +2129,7 @@ div.blackwhitelist span {
|
|||
}
|
||||
|
||||
div.blackwhitelist.anidb, div.blackwhitelist.manual {
|
||||
margin: 7px 0px;
|
||||
margin: 7px 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2114,12 +2149,12 @@ html * {
|
|||
}
|
||||
|
||||
input[type="checkbox"] {
|
||||
margin: 2px 0px 0px;
|
||||
margin: 2px 0 0;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
input[type="radio"] {
|
||||
margin: 2px 0px 0px;
|
||||
margin: 2px 0 0;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
|
@ -2134,7 +2169,7 @@ input, textarea, select, .uneditable-input {
|
|||
}
|
||||
|
||||
.navbar-brand {
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* navbar styling */
|
||||
|
@ -2261,7 +2296,7 @@ fieldset[disabled] .navbar-default .btn-link:focus {
|
|||
.dropdown-menu {
|
||||
background-color: #F5F1E4;
|
||||
border: 1px solid rgba(0, 0, 0, 0.15);
|
||||
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.176);
|
||||
}
|
||||
|
||||
.form-control {
|
||||
|
@ -2818,7 +2853,7 @@ div.formpaginate .prev, div.formpaginate .next {
|
|||
.stepDiv.parent-folder {
|
||||
padding: 15px 0 0;
|
||||
width: 430px;
|
||||
margin: 0px auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.stepDiv .nocheck {
|
||||
|
@ -3160,6 +3195,10 @@ span.token-input-delete-token {
|
|||
.time-am-pm {
|
||||
margin-left: 2px;
|
||||
}
|
||||
#content.episodeview-banner .time-am-pm,
|
||||
#content.episodeview-poster .time-am-pm {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
jquery.confirm.css
|
||||
|
@ -3185,7 +3224,7 @@ jquery.confirm.css
|
|||
top: 50%;
|
||||
margin: -130px 0 0 -230px;
|
||||
border: 1px solid #111;
|
||||
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
|
||||
box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);
|
||||
}
|
||||
|
||||
#confirmBox h1,
|
||||
|
@ -3220,7 +3259,7 @@ jquery.confirm.css
|
|||
display: inline-block;
|
||||
color: #fff;
|
||||
text-align:center;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #111;
|
||||
border-radius: 3px;
|
||||
|
|
|
@ -90,8 +90,8 @@ addOption("postprocess", "process_method", "&process_method=copy");
|
|||
addOption("postprocess", "type", "&type=manual")
|
||||
|
||||
addOption("sb.setdefaults", "Optional Param", "", 1);
|
||||
addList("sb.setdefaults", "Exclude Paused Shows on ComingEps", "&future_show_paused=0", "sb.setdefaults-status");
|
||||
addList("sb.setdefaults", "Include Paused Shows on ComingEps", "&future_show_paused=1", "sb.setdefaults-status");
|
||||
addList("sb.setdefaults", "Exclude Paused Shows on EpisodeView", "&future_show_paused=0", "sb.setdefaults-status");
|
||||
addList("sb.setdefaults", "Include Paused Shows on EpisodeView", "&future_show_paused=1", "sb.setdefaults-status");
|
||||
|
||||
addOption("sb.setdefaults-status", "Optional Param", "", 1);
|
||||
addList("sb.setdefaults-status", "Wanted", "&status=wanted", "sb.setdefaults-opt");
|
||||
|
|
|
@ -1,549 +0,0 @@
|
|||
#import sickbeard
|
||||
#import datetime
|
||||
#from sickbeard.common import *
|
||||
#from sickbeard import sbdatetime
|
||||
#from sickbeard.helpers import anon_url
|
||||
|
||||
#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 'poster' == $sickbeard.COMING_EPS_LAYOUT then 'selected="selected"' else ''#>Poster</option>
|
||||
<option value="$sbRoot/setComingEpsLayout/?layout=calendar" #if 'calendar' == $sickbeard.COMING_EPS_LAYOUT then 'selected="selected"' else ''#>Calendar</option>
|
||||
<option value="$sbRoot/setComingEpsLayout/?layout=banner" #if 'banner' == $sickbeard.COMING_EPS_LAYOUT then 'selected="selected"' else ''#>Banner</option>
|
||||
<option value="$sbRoot/setComingEpsLayout/?layout=list" #if 'list' == $sickbeard.COMING_EPS_LAYOUT then 'selected="selected"' else ''#>List</option>
|
||||
</select>
|
||||
</span>
|
||||
|
||||
|
||||
<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 'date' == $sickbeard.COMING_EPS_SORT then 'selected="selected"' else ''#>Date</option>
|
||||
<option value="$sbRoot/setComingEpsSort/?sort=network" #if 'network' == $sickbeard.COMING_EPS_SORT then 'selected="selected"' else ''#>Network</option>
|
||||
<option value="$sbRoot/setComingEpsSort/?sort=show" #if 'show' == $sickbeard.COMING_EPS_SORT then 'selected="selected"' else ''#>Show</option>
|
||||
</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/toggleComingEpsDisplayPaused"<%= (' selected="selected"', '')[True == sickbeard.COMING_EPS_DISPLAY_PAUSED] %>>Hidden</option>
|
||||
<option value="$sbRoot/toggleComingEpsDisplayPaused"<%= ('', ' selected="selected"')[True == sickbeard.COMING_EPS_DISPLAY_PAUSED] %>>Shown</option>
|
||||
</select>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="key pull-right">
|
||||
#if 'calendar' != $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="icon-calendar icon-white"></i>Subscribe</a>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
#if 'list' == $layout:
|
||||
<!-- 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 (0 == s.indexOf('Loading...'))
|
||||
return s.replace('Loading...', '000')
|
||||
#if not $sickbeard.SORT_ARTICLE:
|
||||
return (s || '').replace(/^(?:(?:A(?!\s+to)n?)|The)\s(\w)/i, '$1')
|
||||
#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%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_info_<%= '%s_%s_%s' % (str(cur_result['showid']), str(cur_result['season']), str(cur_result['episode'])) %>" />
|
||||
#else:
|
||||
<img alt="" src="$sbRoot/images/info32.png" width="16" height="16" class="plotInfoNone" />
|
||||
#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="<%= 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>
|
||||
</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 : 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 'show' == $sort:
|
||||
<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 'network' == $sort:
|
||||
#set $show_network = $cur_result['network'] if $cur_result['network'] else 'no network'
|
||||
#if $cur_segment != $show_network:
|
||||
<div class="comingepheader">
|
||||
<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 'date' == $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="comingepheader">
|
||||
<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
|
||||
|
||||
<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']}">$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="<%= 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">Airs: </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 'calendar' == $layout:
|
||||
|
||||
#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' % (('even', 'odd')[1 == tbl_day % 2]) %>" cellspacing="0" border="0" cellpadding="0">
|
||||
<thead><tr><th>$sbdatetime.sbdatetime.sbfdate($day, '%A').decode($sickbeard.SYS_ENCODING).capitalize()</th></tr></thead>
|
||||
<tbody>
|
||||
#set $day_has_show = False
|
||||
#for $cur_result in $sql_results:
|
||||
#if int($cur_result['paused']) and not $sickbeard.COMING_EPS_DISPLAY_PAUSED:
|
||||
#continue
|
||||
#end if
|
||||
|
||||
#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.sbftime($cur_result['localtime']).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']}&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%02iE%02i' % (int(cur_result['season']), 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')
|
|
@ -570,7 +570,7 @@
|
|||
</div><!-- /component-group3 //-->
|
||||
|
||||
<br/>
|
||||
<h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">$sickbeard.DATA_DIR</span></b> </h6>
|
||||
<h6 class="pull-right"><b class="boldest">All non-absolute folder locations are relative to <span class="path">$sickbeard.DATA_DIR</span></b></h6>
|
||||
<input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
|
||||
|
||||
</div><!-- /config-components -->
|
||||
|
|
695
gui/slick/interfaces/default/episodeView.tmpl
Normal file
695
gui/slick/interfaces/default/episodeView.tmpl
Normal file
|
@ -0,0 +1,695 @@
|
|||
#import sickbeard
|
||||
#import datetime
|
||||
#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?$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?$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());
|
||||
});
|
||||
});
|
||||
//-->
|
||||
</script>
|
||||
#end if
|
||||
|
||||
<style type="text/css">
|
||||
#SubMenu {display:none}
|
||||
#if 'daybyday' == $layout:
|
||||
.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 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="icon-calendar icon-white"></i>Subscribe</a>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
|
||||
#if 'list' == $layout:
|
||||
<!-- 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(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 : 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.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
|
||||
|
||||
<!-- 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']}" data-name="$cur_result['data_show_name']">$cur_result['show_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_info_<%= '%s_%s_%s' % (str(cur_result['showid']), str(cur_result['season']), str(cur_result['episode'])) %>" />
|
||||
#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 $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>
|
||||
</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 : 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 'show' == $sort:
|
||||
<br /><br />
|
||||
#end if
|
||||
|
||||
#for $cur_result in $sql_results:
|
||||
#set $cur_indexer = int($cur_result['indexer'])
|
||||
|
||||
#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']">$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="<%= 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 $today = datetime.date.today()
|
||||
#set $dates = [$today + datetime.timedelta(days = $i) for $i in range(7)]
|
||||
#set $tbl_day = 0
|
||||
|
||||
<input type="hidden" id="sbRoot" value="$sbRoot" />
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<div class="daybydayWrapper"> <!-- style="width:1600px" -->
|
||||
#for $day in $dates
|
||||
#set $tbl_day += 1
|
||||
|
||||
#set $col_class = ''
|
||||
#if 1 == $tbl_day
|
||||
#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%w')">
|
||||
|
||||
#set $day_has_show = False
|
||||
#for $cur_result in $sql_results:
|
||||
#if int($cur_result['paused']) and not $sickbeard.EPISODE_VIEW_DISPLAY_PAUSED:
|
||||
#continue
|
||||
#end if
|
||||
|
||||
#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.sbftime($cur_result['localtime'], markup=True).decode($sickbeard.SYS_ENCODING)
|
||||
#set $img_tag = '<img'
|
||||
#set $plot_class = 'class="img-responsive'
|
||||
#set $title_text = ''
|
||||
#if $cur_result['description']:
|
||||
#set $img_tag += ' id="plot_info_%s_%s_%s"' % (str($cur_result['showid']), str($cur_result['season']), str($cur_result['episode']))
|
||||
#set $plot_class += ' plot-daybyday'
|
||||
#else
|
||||
#set $title_text = $cur_result['show_name']
|
||||
#end if
|
||||
|
||||
<div id="show-$cur_result['showid']" 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="$time.mktime($cur_result['localtime'].timetuple())">
|
||||
<div class="poster">
|
||||
<a title="${title_text}" href="$sbRoot/home/displayShow?show=${cur_result['showid']}">
|
||||
${img_tag} ${plot_class}" alt="" src="$sbRoot/showPoster/?show=${cur_result['showid']}&which=poster_thumb" /></a>
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="airtime">
|
||||
<span class="time">${airtime}</span> <span class="network pull-right grey-text">$cur_result['network']</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>
|
||||
#if int($cur_result['paused']):
|
||||
<span class="pause">[paused]</span>
|
||||
#end if
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- end show-$cur_result['showid'] //-->
|
||||
|
||||
#end if
|
||||
|
||||
#end for
|
||||
#if not $day_has_show:
|
||||
<div class="daybyday-show">
|
||||
<span class="episode-blank">No shows for this day</span>
|
||||
</div>
|
||||
#end if
|
||||
</div>
|
||||
</div>
|
||||
#end for
|
||||
</div>
|
||||
|
||||
<!-- 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
|
||||
//-->
|
||||
</script>
|
||||
|
||||
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl')
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#set global $sbPath='..'
|
||||
|
||||
#set global $topmenu='comingEpisodes'
|
||||
#set global $topmenu='episodeView'
|
||||
#import os.path
|
||||
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl')
|
||||
|
||||
|
|
|
@ -57,6 +57,7 @@
|
|||
<script type="text/javascript" src="$sbRoot/js/lib/jquery.form-3.35.js?$sbPID"></script>
|
||||
<script type="text/javascript" src="$sbRoot/js/lib/jquery.ui.touch-punch-0.2.2.min.js?$sbPID"></script>
|
||||
<script type="text/javascript" src="$sbRoot/js/lib/isotope.pkgd.min.js?$sbPID"></script>
|
||||
<script type="text/javascript" src="$sbRoot/js/lib/imagesloaded.pkgd.min.js?$sbPID"></script>
|
||||
<script type="text/javascript" src="$sbRoot/js/lib/jquery.confirm.js?$sbPID"></script>
|
||||
<script type="text/javascript" src="$sbRoot/js/script.js?$sbPID"></script>
|
||||
|
||||
|
@ -149,8 +150,8 @@
|
|||
</ul>
|
||||
</li>
|
||||
|
||||
<li id="NAVcomingEpisodes">
|
||||
<a href="$sbRoot/comingEpisodes/" tabindex="$tab#set $tab += 1#">Coming Episodes</a>
|
||||
<li id="NAVepisodeView">
|
||||
<a href="$sbRoot/episodeView/" tabindex="$tab#set $tab += 1#">Episodes</a>
|
||||
</li>
|
||||
|
||||
<li id="NAVhistory">
|
||||
|
@ -261,6 +262,6 @@
|
|||
#except (NameError, NotFound):
|
||||
#pass
|
||||
#end try
|
||||
#set $page_class = ('', ' class="%s"' % '_'.join($items).lower().replace(' ', '-'))[0 < len($items)]
|
||||
#set $page_class = ('', ' class="%s"' % '_'.join($items).lower().replace(' ', '-').replace('_', '-'))[0 < len($items)]
|
||||
<div id="contentWrapper">
|
||||
<div id="content"$page_class>
|
||||
|
|
7
gui/slick/js/lib/imagesloaded.pkgd.min.js
vendored
Normal file
7
gui/slick/js/lib/imagesloaded.pkgd.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
|||
$(function () {
|
||||
$('.plotInfo').each(function () {
|
||||
$('.plotInfo, .plot-daybyday').each(function () {
|
||||
var match = $(this).attr('id').match(/^plot_info_(\d+)_(\d+)_(\d+)$/);
|
||||
$(this).qtip({
|
||||
content: {
|
||||
|
|
|
@ -58,7 +58,7 @@ CFG = None
|
|||
CONFIG_FILE = None
|
||||
|
||||
# This is the version of the config we EXPECT to find
|
||||
CONFIG_VERSION = 6
|
||||
CONFIG_VERSION = 7
|
||||
|
||||
# Default encryption version (0 for None)
|
||||
ENCRYPTION_VERSION = 0
|
||||
|
@ -419,10 +419,10 @@ GUI_NAME = None
|
|||
HOME_LAYOUT = None
|
||||
HISTORY_LAYOUT = None
|
||||
DISPLAY_SHOW_SPECIALS = False
|
||||
COMING_EPS_LAYOUT = None
|
||||
COMING_EPS_DISPLAY_PAUSED = False
|
||||
COMING_EPS_SORT = None
|
||||
COMING_EPS_MISSED_RANGE = None
|
||||
EPISODE_VIEW_LAYOUT = None
|
||||
EPISODE_VIEW_SORT = None
|
||||
EPISODE_VIEW_DISPLAY_PAUSED = False
|
||||
EPISODE_VIEW_MISSED_RANGE = None
|
||||
FUZZY_DATING = False
|
||||
TRIM_ZERO = False
|
||||
DATE_PRESET = None
|
||||
|
@ -499,7 +499,7 @@ def initialize(consoleLogging=True):
|
|||
USE_EMAIL, EMAIL_HOST, EMAIL_PORT, EMAIL_TLS, EMAIL_USER, EMAIL_PASSWORD, EMAIL_FROM, EMAIL_NOTIFY_ONSNATCH, EMAIL_NOTIFY_ONDOWNLOAD, EMAIL_NOTIFY_ONSUBTITLEDOWNLOAD, EMAIL_LIST, \
|
||||
USE_LISTVIEW, METADATA_XBMC, METADATA_XBMC_12PLUS, METADATA_MEDIABROWSER, METADATA_PS3, metadata_provider_dict, \
|
||||
NEWZBIN, NEWZBIN_USERNAME, NEWZBIN_PASSWORD, GIT_PATH, MOVE_ASSOCIATED_FILES, POSTPONE_IF_SYNC_FILES, recentSearchScheduler, NFO_RENAME, \
|
||||
GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \
|
||||
GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, EPISODE_VIEW_LAYOUT, EPISODE_VIEW_SORT, EPISODE_VIEW_DISPLAY_PAUSED, EPISODE_VIEW_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \
|
||||
POSTER_SORTBY, POSTER_SORTDIR, \
|
||||
METADATA_WDTV, METADATA_TIVO, METADATA_MEDE8ER, IGNORE_WORDS, REQUIRE_WORDS, CALENDAR_UNPROTECTED, CREATE_MISSING_SHOW_DIRS, \
|
||||
ADD_SHOWS_WO_DIR, USE_SUBTITLES, SUBTITLES_LANGUAGES, SUBTITLES_DIR, SUBTITLES_SERVICES_LIST, SUBTITLES_SERVICES_ENABLED, SUBTITLES_HISTORY, SUBTITLES_FINDER_FREQUENCY, subtitlesFinderScheduler, \
|
||||
|
@ -944,10 +944,10 @@ def initialize(consoleLogging=True):
|
|||
HOME_LAYOUT = check_setting_str(CFG, 'GUI', 'home_layout', 'poster')
|
||||
HISTORY_LAYOUT = check_setting_str(CFG, 'GUI', 'history_layout', 'detailed')
|
||||
DISPLAY_SHOW_SPECIALS = bool(check_setting_int(CFG, 'GUI', 'display_show_specials', 1))
|
||||
COMING_EPS_LAYOUT = check_setting_str(CFG, 'GUI', 'coming_eps_layout', 'banner')
|
||||
COMING_EPS_DISPLAY_PAUSED = bool(check_setting_int(CFG, 'GUI', 'coming_eps_display_paused', 0))
|
||||
COMING_EPS_SORT = check_setting_str(CFG, 'GUI', 'coming_eps_sort', 'date')
|
||||
COMING_EPS_MISSED_RANGE = check_setting_int(CFG, 'GUI', 'coming_eps_missed_range', 7)
|
||||
EPISODE_VIEW_LAYOUT = check_setting_str(CFG, 'GUI', 'episode_view_layout', 'banner')
|
||||
EPISODE_VIEW_SORT = check_setting_str(CFG, 'GUI', 'episode_view_sort', 'time')
|
||||
EPISODE_VIEW_DISPLAY_PAUSED = bool(check_setting_int(CFG, 'GUI', 'episode_view_display_paused', 0))
|
||||
EPISODE_VIEW_MISSED_RANGE = check_setting_int(CFG, 'GUI', 'episode_view_missed_range', 7)
|
||||
FUZZY_DATING = bool(check_setting_int(CFG, 'GUI', 'fuzzy_dating', 0))
|
||||
TRIM_ZERO = bool(check_setting_int(CFG, 'GUI', 'trim_zero', 0))
|
||||
DATE_PRESET = check_setting_str(CFG, 'GUI', 'date_preset', '%x')
|
||||
|
@ -1763,10 +1763,10 @@ def save_config():
|
|||
new_config['GUI']['home_layout'] = HOME_LAYOUT
|
||||
new_config['GUI']['history_layout'] = HISTORY_LAYOUT
|
||||
new_config['GUI']['display_show_specials'] = int(DISPLAY_SHOW_SPECIALS)
|
||||
new_config['GUI']['coming_eps_layout'] = COMING_EPS_LAYOUT
|
||||
new_config['GUI']['coming_eps_display_paused'] = int(COMING_EPS_DISPLAY_PAUSED)
|
||||
new_config['GUI']['coming_eps_sort'] = COMING_EPS_SORT
|
||||
new_config['GUI']['coming_eps_missed_range'] = int(COMING_EPS_MISSED_RANGE)
|
||||
new_config['GUI']['episode_view_layout'] = EPISODE_VIEW_LAYOUT
|
||||
new_config['GUI']['episode_view_display_paused'] = int(EPISODE_VIEW_DISPLAY_PAUSED)
|
||||
new_config['GUI']['episode_view_sort'] = EPISODE_VIEW_SORT
|
||||
new_config['GUI']['episode_view_missed_range'] = int(EPISODE_VIEW_MISSED_RANGE)
|
||||
new_config['GUI']['fuzzy_dating'] = int(FUZZY_DATING)
|
||||
new_config['GUI']['trim_zero'] = int(TRIM_ZERO)
|
||||
new_config['GUI']['date_preset'] = DATE_PRESET
|
||||
|
|
|
@ -448,7 +448,8 @@ class ConfigMigrator():
|
|||
3: 'Rename omgwtfnzb variables',
|
||||
4: 'Add newznab catIDs',
|
||||
5: 'Metadata update',
|
||||
6: 'Rename daily search to recent search'
|
||||
6: 'Rename daily search to recent search',
|
||||
7: 'Rename coming episodes to episode view'
|
||||
}
|
||||
|
||||
def migrate_config(self):
|
||||
|
@ -730,3 +731,12 @@ class ConfigMigrator():
|
|||
if hasattr(curProvider, 'enable_recentsearch'):
|
||||
curProvider.enable_recentsearch = bool(check_setting_int(self.config_obj, curProvider.getID().upper(),
|
||||
curProvider.getID() + '_enable_dailysearch', 1))
|
||||
|
||||
def _migrate_v7(self):
|
||||
|
||||
sickbeard.EPISODE_VIEW_LAYOUT = check_setting_str(self.config_obj, 'GUI', 'coming_eps_layout', 'banner')
|
||||
sickbeard.EPISODE_VIEW_SORT = check_setting_str(self.config_obj, 'GUI', 'coming_eps_sort', 'time')
|
||||
if 'date' == sickbeard.EPISODE_VIEW_SORT:
|
||||
sickbeard.EPISODE_VIEW_SORT = 'time'
|
||||
sickbeard.EPISODE_VIEW_DISPLAY_PAUSED = bool(check_setting_int(self.config_obj, 'GUI', 'coming_eps_display_paused', 0))
|
||||
sickbeard.EPISODE_VIEW_MISSED_RANGE = check_setting_int(self.config_obj, 'GUI', 'coming_eps_missed_range', 7)
|
||||
|
|
|
@ -711,7 +711,7 @@ class CMD_ComingEpisodes(ApiCall):
|
|||
self.sort, args = self.check_params(args, kwargs, "sort", "date", False, "string", ["date", "show", "network"])
|
||||
self.type, args = self.check_params(args, kwargs, "type", "today|missed|soon|later", False, "list",
|
||||
["missed", "later", "today", "soon"])
|
||||
self.paused, args = self.check_params(args, kwargs, "paused", sickbeard.COMING_EPS_DISPLAY_PAUSED, False, "int",
|
||||
self.paused, args = self.check_params(args, kwargs, "paused", sickbeard.EPISODE_VIEW_DISPLAY_PAUSED, False, "int",
|
||||
[0, 1])
|
||||
# super, missing, help
|
||||
ApiCall.__init__(self, handler, args, kwargs)
|
||||
|
@ -725,7 +725,7 @@ class CMD_ComingEpisodes(ApiCall):
|
|||
tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).toordinal()
|
||||
next_week_dt = (datetime.date.today() + datetime.timedelta(days=7))
|
||||
next_week = (next_week_dt + datetime.timedelta(days=1)).toordinal()
|
||||
recently = (yesterday_dt - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal()
|
||||
recently = (yesterday_dt - datetime.timedelta(days=sickbeard.EPISODE_VIEW_MISSED_RANGE)).toordinal()
|
||||
|
||||
done_show_list = []
|
||||
qualList = Quality.DOWNLOADED + Quality.SNATCHED + [ARCHIVED, IGNORED]
|
||||
|
@ -758,31 +758,27 @@ class CMD_ComingEpisodes(ApiCall):
|
|||
# multi dimension sort
|
||||
sorts = {
|
||||
'date': (lambda a, b: cmp(
|
||||
(a['parsed_datetime'],
|
||||
(a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
a['season'], a['episode']),
|
||||
(b['parsed_datetime'],
|
||||
(b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
b['season'], b['episode']))),
|
||||
'show': (lambda a, b: cmp(
|
||||
((a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
a['parsed_datetime'], a['season'], a['episode']),
|
||||
((b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
b['parsed_datetime'], b['season'], b['episode']))),
|
||||
(a['parsed_datetime'], a['data_show_name'], a['season'], a['episode']),
|
||||
(b['parsed_datetime'], b['data_show_name'], b['season'], b['episode']))),
|
||||
'network': (lambda a, b: cmp(
|
||||
(a['network'], a['parsed_datetime'],
|
||||
(a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
a['season'], a['episode']),
|
||||
(b['network'], b['parsed_datetime'],
|
||||
(b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
b['season'], b['episode'])))
|
||||
(a['data_network'], a['parsed_datetime'], a['data_show_name'], a['season'], a['episode']),
|
||||
(b['data_network'], b['parsed_datetime'], b['data_show_name'], b['season'], b['episode']))),
|
||||
'show': (lambda a, b: cmp(
|
||||
(a['data_show_name'], a['parsed_datetime'], a['season'], a['episode']),
|
||||
(b['data_show_name'], b['parsed_datetime'], b['season'], b['episode'])))
|
||||
}
|
||||
|
||||
def value_maybe_article(value=''):
|
||||
return (remove_article(value.lower()), value.lower())[sickbeard.SORT_ARTICLE]
|
||||
|
||||
# add parsed_datetime to the dict
|
||||
for index, item in enumerate(sql_results):
|
||||
sql_results[index]['parsed_datetime'] = network_timezones.parse_date_time(item['airdate'], item['airs'], item['network'])
|
||||
sql_results[index]['data_show_name'] = value_maybe_article(item['show_name'])
|
||||
sql_results[index]['data_network'] = value_maybe_article(item['network'])
|
||||
|
||||
sql_results.sort(sorts[self.sort])
|
||||
|
||||
finalEpResults = {}
|
||||
|
||||
# add all requested types or all
|
||||
|
@ -1507,7 +1503,7 @@ class CMD_SickBeardGetDefaults(ApiCall):
|
|||
|
||||
data = {"status": statusStrings[sickbeard.STATUS_DEFAULT].lower(),
|
||||
"flatten_folders": int(sickbeard.FLATTEN_FOLDERS_DEFAULT), "initial": anyQualities,
|
||||
"archive": bestQualities, "future_show_paused": int(sickbeard.COMING_EPS_DISPLAY_PAUSED)}
|
||||
"archive": bestQualities, "future_show_paused": int(sickbeard.EPISODE_VIEW_DISPLAY_PAUSED)}
|
||||
return _responds(RESULT_SUCCESS, data)
|
||||
|
||||
|
||||
|
@ -1756,7 +1752,7 @@ class CMD_SickBeardSetDefaults(ApiCall):
|
|||
sickbeard.FLATTEN_FOLDERS_DEFAULT = int(self.flatten_folders)
|
||||
|
||||
if self.future_show_paused != None:
|
||||
sickbeard.COMING_EPS_DISPLAY_PAUSED = int(self.future_show_paused)
|
||||
sickbeard.EPISODE_VIEW_DISPLAY_PAUSED = int(self.future_show_paused)
|
||||
|
||||
return _responds(RESULT_SUCCESS, msg="Saved defaults")
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ from lib.dateutil import tz
|
|||
from lib.unrar2 import RarFile
|
||||
|
||||
from lib import subliminal
|
||||
from trakt import TraktCall
|
||||
from lib.trakt import TraktCall
|
||||
|
||||
try:
|
||||
import json
|
||||
|
@ -300,7 +300,7 @@ class MainHandler(RequestHandler):
|
|||
|
||||
def setPosterSortBy(self, sort):
|
||||
|
||||
if sort not in ('name', 'date', 'network', 'progress'):
|
||||
if sort not in ('name', 'time', 'network', 'progress'):
|
||||
sort = 'name'
|
||||
|
||||
sickbeard.POSTER_SORTBY = sort
|
||||
|
@ -326,36 +326,40 @@ class MainHandler(RequestHandler):
|
|||
|
||||
redirect("/home/displayShow?show=" + show)
|
||||
|
||||
def setComingEpsLayout(self, layout):
|
||||
if layout not in ('poster', 'banner', 'list', 'calendar'):
|
||||
def setEpisodeViewLayout(self, layout):
|
||||
if layout not in ('poster', 'banner', 'list', 'daybyday'):
|
||||
layout = 'banner'
|
||||
|
||||
if layout == 'calendar':
|
||||
sickbeard.COMING_EPS_SORT = 'date'
|
||||
if 'daybyday' == layout:
|
||||
sickbeard.EPISODE_VIEW_SORT = 'time'
|
||||
|
||||
sickbeard.COMING_EPS_LAYOUT = layout
|
||||
sickbeard.EPISODE_VIEW_LAYOUT = layout
|
||||
|
||||
redirect("/comingEpisodes/")
|
||||
sickbeard.save_config()
|
||||
|
||||
def toggleComingEpsDisplayPaused(self, *args, **kwargs):
|
||||
redirect("/episodeView/")
|
||||
|
||||
sickbeard.COMING_EPS_DISPLAY_PAUSED = not sickbeard.COMING_EPS_DISPLAY_PAUSED
|
||||
def toggleEpisodeViewDisplayPaused(self, *args, **kwargs):
|
||||
|
||||
redirect("/comingEpisodes/")
|
||||
sickbeard.EPISODE_VIEW_DISPLAY_PAUSED = not sickbeard.EPISODE_VIEW_DISPLAY_PAUSED
|
||||
|
||||
def setComingEpsSort(self, sort):
|
||||
if sort not in ('date', 'network', 'show'):
|
||||
sort = 'date'
|
||||
sickbeard.save_config()
|
||||
|
||||
if sickbeard.COMING_EPS_LAYOUT == 'calendar':
|
||||
sort = 'date'
|
||||
redirect("/episodeView/")
|
||||
|
||||
sickbeard.COMING_EPS_SORT = sort
|
||||
def setEpisodeViewSort(self, sort, redir=1):
|
||||
if sort not in ('time', 'network', 'show'):
|
||||
sort = 'time'
|
||||
|
||||
redirect("/comingEpisodes/")
|
||||
sickbeard.EPISODE_VIEW_SORT = sort
|
||||
|
||||
def comingEpisodes(self, layout="None"):
|
||||
""" display the coming episodes """
|
||||
sickbeard.save_config()
|
||||
|
||||
if int(redir):
|
||||
redirect("/episodeView/")
|
||||
|
||||
def episodeView(self, layout="None"):
|
||||
""" display the episodes """
|
||||
today_dt = datetime.date.today()
|
||||
#today = today_dt.toordinal()
|
||||
yesterday_dt = today_dt - datetime.timedelta(days=1)
|
||||
|
@ -363,8 +367,8 @@ class MainHandler(RequestHandler):
|
|||
tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).toordinal()
|
||||
next_week_dt = (datetime.date.today() + datetime.timedelta(days=7))
|
||||
next_week = (next_week_dt + datetime.timedelta(days=1)).toordinal()
|
||||
if not (layout and layout in ('calendar')) and not (sickbeard.COMING_EPS_LAYOUT and sickbeard.COMING_EPS_LAYOUT in ('calendar')):
|
||||
recently = (yesterday_dt - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal()
|
||||
if not (layout and layout in 'daybyday') and not (sickbeard.EPISODE_VIEW_LAYOUT and sickbeard.EPISODE_VIEW_LAYOUT in 'daybyday'):
|
||||
recently = (yesterday_dt - datetime.timedelta(days=sickbeard.EPISODE_VIEW_MISSED_RANGE)).toordinal()
|
||||
else:
|
||||
recently = yesterday
|
||||
|
||||
|
@ -379,7 +383,7 @@ class MainHandler(RequestHandler):
|
|||
for cur_result in sql_results:
|
||||
done_show_list.append(int(cur_result["showid"]))
|
||||
|
||||
if not (layout and layout in ('calendar')) and not (sickbeard.COMING_EPS_LAYOUT and sickbeard.COMING_EPS_LAYOUT in ('calendar')):
|
||||
if not (layout and layout in 'daybyday') and not (sickbeard.EPISODE_VIEW_LAYOUT and sickbeard.EPISODE_VIEW_LAYOUT in 'daybyday'):
|
||||
more_sql_results = myDB.select(
|
||||
"SELECT *, tv_shows.status as show_status FROM tv_episodes outer_eps, tv_shows WHERE season != 0 AND showid NOT IN (" + ','.join(
|
||||
['?'] * len(
|
||||
|
@ -395,49 +399,44 @@ class MainHandler(RequestHandler):
|
|||
|
||||
sql_results = list(set(sql_results))
|
||||
|
||||
# multi dimension sort
|
||||
sorts = {
|
||||
'date': (lambda a, b: cmp(
|
||||
(a['localtime'],
|
||||
(a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
a['season'], a['episode']),
|
||||
(b['localtime'],
|
||||
(b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
b['season'], b['episode']))),
|
||||
'show': (lambda a, b: cmp(
|
||||
((a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
a['localtime'], a['season'], a['episode']),
|
||||
((b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
b['localtime'], b['season'], b['episode']))),
|
||||
'network': (lambda a, b: cmp(
|
||||
(a['network'], a['localtime'],
|
||||
(a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
a['season'], a['episode']),
|
||||
(b['network'], b['localtime'],
|
||||
(b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE],
|
||||
b['season'], b['episode'])))
|
||||
}
|
||||
|
||||
# make a dict out of the sql results
|
||||
sql_results = [dict(row) for row in sql_results]
|
||||
|
||||
# multi dimension sort
|
||||
sorts = {
|
||||
'network': (lambda a, b: cmp(
|
||||
(a['data_network'], a['localtime'], a['data_show_name'], a['season'], a['episode']),
|
||||
(b['data_network'], b['localtime'], b['data_show_name'], b['season'], b['episode']))),
|
||||
'show': (lambda a, b: cmp(
|
||||
(a['data_show_name'], a['localtime'], a['season'], a['episode']),
|
||||
(b['data_show_name'], b['localtime'], b['season'], b['episode']))),
|
||||
'time': (lambda a, b: cmp(
|
||||
(a['localtime'], a['data_show_name'], a['season'], a['episode']),
|
||||
(b['localtime'], b['data_show_name'], b['season'], b['episode'])))
|
||||
}
|
||||
|
||||
def value_maybe_article(value=''):
|
||||
return (remove_article(value.lower()), value.lower())[sickbeard.SORT_ARTICLE]
|
||||
|
||||
# add localtime to the dict
|
||||
for index, item in enumerate(sql_results):
|
||||
sql_results[index]['localtime'] = sbdatetime.sbdatetime.convert_to_setting(network_timezones.parse_date_time(item['airdate'],
|
||||
item['airs'], item['network']))
|
||||
sql_results[index]['data_show_name'] = value_maybe_article(item['show_name'])
|
||||
sql_results[index]['data_network'] = value_maybe_article(item['network'])
|
||||
|
||||
sql_results.sort(sorts[sickbeard.COMING_EPS_SORT])
|
||||
sql_results.sort(sorts[sickbeard.EPISODE_VIEW_SORT])
|
||||
|
||||
t = PageTemplate(headers=self.request.headers, file="comingEpisodes.tmpl")
|
||||
t = PageTemplate(headers=self.request.headers, file="episodeView.tmpl")
|
||||
t.next_week = datetime.datetime.combine(next_week_dt, datetime.time(tzinfo=network_timezones.sb_timezone))
|
||||
t.today = datetime.datetime.now(network_timezones.sb_timezone)
|
||||
t.sql_results = sql_results
|
||||
|
||||
# Allow local overriding of layout parameter
|
||||
if layout and layout in ('poster', 'banner', 'list','calendar'):
|
||||
if layout and layout in ('banner', 'daybyday', 'list', 'poster'):
|
||||
t.layout = layout
|
||||
else:
|
||||
t.layout = sickbeard.COMING_EPS_LAYOUT
|
||||
t.layout = sickbeard.EPISODE_VIEW_LAYOUT
|
||||
|
||||
return _munge(t)
|
||||
|
||||
|
@ -549,7 +548,7 @@ class PageTemplate(Template):
|
|||
self.sbPID = str(sickbeard.PID)
|
||||
self.menu = [
|
||||
{'title': 'Home', 'key': 'home'},
|
||||
{'title': 'Coming Episodes', 'key': 'comingEpisodes'},
|
||||
{'title': 'Episodes', 'key': 'episodeView'},
|
||||
{'title': 'History', 'key': 'history'},
|
||||
{'title': 'Manage', 'key': 'manage'},
|
||||
{'title': 'Config', 'key': 'config'},
|
||||
|
|
Loading…
Reference in a new issue