Coming Episodes Overhaul.

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.
Simplified sort code in webserver and in template.
Change page auto refresh from 10 to 30 mins.
Add other UI tweaks.
This commit is contained in:
JackDandy 2014-12-16 14:14:54 +00:00
parent 97ade1d621
commit ccb9bb329c
15 changed files with 1233 additions and 1151 deletions

View file

@ -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,9 +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 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]

View file

@ -149,22 +149,18 @@ 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");
}
[class^="icon-"],
[class*=" icon-"] {
background-image: url("../images/glyphicons-halflings.png");
.icon-white {
background-image: url("../images/glyphicons-halflings-white.png");
}
.icon-white {
background-image: url("../images/glyphicons-halflings-white.png");
}
.dropdown-menu li > a:hover > [class^="menu-icon-"],
.dropdown-menu li > a:hover > [class*=" menu-icon-"] {
background-image: url("../images/menu/menu-icons-white.png");
.dropdown-menu li > a:hover > [class^="menu-icon-"],
.dropdown-menu li > a:hover > [class*=" menu-icon-"] {
background-image: url("../images/menu/menu-icons-white.png");
}
.infoTableHeader .icon16-sb {
@ -172,29 +168,29 @@ inc_top.tmpl
}
.ui-autocomplete-loading {
background: white url("../images/loading16.gif") right center no-repeat;
background: white url("../images/loading16.gif") right center no-repeat;
}
.browserDialog.busy .ui-dialog-buttonpane {
background: url("../images/loading.gif") 10px 50% no-repeat !important;
.browserDialog.busy .ui-dialog-buttonpane {
background: url("../images/loading.gif") 10px 50% no-repeat !important;
}
.ui-progressbar .ui-progressbar-overlay {
background: url("../css/lib/images/animated-overlay.gif");
.ui-progressbar .ui-progressbar-overlay {
background: url("../css/lib/images/animated-overlay.gif");
}
.ui-dialog,
.ui-dialog-buttonpane {
background: #2a2a2a !important;;
.ui-dialog,
.ui-dialog-buttonpane {
background: #2a2a2a !important;;
}
.ui-accordion-content,
.ui-tabs-panel {
background: #ededed !important;
background-image: none !important;
.ui-accordion-content,
.ui-tabs-panel {
background: #ededed !important;
background-image: none !important;
}
.ui-widget-content {
.ui-widget-content {
background: #606060;
border: 1px solid #111;
color: #fff;
@ -208,82 +204,82 @@ inc_top.tmpl
color: #09A2FF;
}
.ui-widget-header {
.ui-widget-header {
background: #3d3d3d;
border: 1px solid #111;
color: #fff;
}
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default {
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default {
border: 1px solid #111;
}
.ui-state-hover,
.ui-widget-content .ui-state-hover,
.ui-widget-header .ui-state-hover,
.ui-state-focus,
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus {
background: #3d3d3d;
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active {
.ui-state-hover,
.ui-widget-content .ui-state-hover,
.ui-widget-header .ui-state-hover,
.ui-state-focus,
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus {
background: #3d3d3d;
}
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
background: #fbf9ee url("../css/lib/images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active {
background: #3d3d3d;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
background: #fef1ec url("../css/lib/images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
background: #fbf9ee url("../css/lib/images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
}
.ui-icon,
.ui-widget-content .ui-icon {
background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png");
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
background: #fef1ec url("../css/lib/images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
}
.ui-widget-header .ui-icon {
background-image: url("../css/lib/images/ui-icons_222222_256x240.png");
.ui-icon,
.ui-widget-content .ui-icon {
background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png");
}
.ui-state-default .ui-icon {
background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png');
.ui-widget-header .ui-icon {
background-image: url("../css/lib/images/ui-icons_222222_256x240.png");
}
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon {
background-image: url("../css/lib/images/ui-icons_222222_256x240.png");
.ui-state-default .ui-icon {
background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png');
}
.ui-state-active .ui-icon {
background-image: url("../css/lib/images/ui-icons_8c291d_256x240.png");
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon {
background-image: url("../css/lib/images/ui-icons_222222_256x240.png");
}
.ui-state-highlight .ui-icon {
background-image: url("../css/lib/images/ui-icons_2e83ff_256x240.png");
.ui-state-active .ui-icon {
background-image: url("../css/lib/images/ui-icons_8c291d_256x240.png");
}
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
background-image: url("../css/lib/images/ui-icons_cd0a0a_256x240.png");
.ui-state-highlight .ui-icon {
background-image: url("../css/lib/images/ui-icons_2e83ff_256x240.png");
}
.ui-widget-overlay {
background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
background-image: url("../css/lib/images/ui-icons_cd0a0a_256x240.png");
}
.ui-widget-shadow {
background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
.ui-widget-overlay {
background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
}
.ui-widget-shadow {
background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
}
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {
@ -301,21 +297,21 @@ 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 {
.ui-tabs .ui-tabs-panel {
background-color: #3d3d3d !important;
border: 1px solid #111 !important;
}
@ -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;
@ -348,12 +335,12 @@ inc_top.tmpl
}
.upgrade-notification {
width: 600px;
text-align: center;
margin-left: auto;
margin-right: auto;
margin-top: 50px;
margin-bottom: 0px;
width: 600px;
text-align: center;
margin-left: auto;
margin-right: auto;
margin-top: 50px;
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 {
@ -674,7 +661,7 @@ home.tmpl
position: absolute;
width: 20px;
height: 100%;
top: 0;
top: 0;
right: 0;
background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
@ -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 {
@ -697,7 +684,7 @@ home.tmpl
position: absolute;
width: 20px;
height: 100%;
top: 0;
top: 0;
right: 0;
background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
@ -706,8 +693,8 @@ home.tmpl
background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
}
.show-table {
text-align:center;
.show-table {
text-align:center;
vertical-align:middle;
width: 33%
}
@ -745,7 +732,7 @@ home.tmpl
#sort-by {
display: inline;
list-style-type: none;
list-style-type: none;
padding: 0;
margin-left: 5px;
}
@ -815,20 +802,20 @@ home_trendingShows.tmpl
padding-bottom: 4px;
}
.traktContainer p {
.traktContainer p {
padding-top: 2px;
}
.traktContainer p img {
.traktContainer p img {
position: relative;
top: -2px;
}
.traktContainer p, .traktContainer i {
.traktContainer p, .traktContainer i {
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;
}
@ -864,7 +851,7 @@ home_postprocess.tmpl
/* =======================================================================
displayShow.tmpl
displayShow.tmpl
========================================================================== */
#showCol {
@ -894,7 +881,7 @@ h1.title {
}
.displayspecials {
position: relative;
position: relative;
top: -24px;
}
@ -902,7 +889,7 @@ h1.title {
cursor: default;
}
#showinfo {
#showinfo {
display: inline-block;
position: relative;
top: -3px;
@ -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;
}
@ -1066,7 +1053,7 @@ span.snatched b {
white-space: nowrap;
}
.sickbeardTable th,
.sickbeardTable th,
.sickbeardTable td {
border-top: 1px solid #222;
border-left: 1px solid #222;
@ -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,7 +1312,7 @@ h2.day, h2.network {
color: #09A2FF;
}
.calendar-row .day-number {
.day-of-week .day-number {
background-color: #15528F;
color: #fff;
}
@ -1334,22 +1321,34 @@ h2.day, h2.network {
color: #8dbeee;
}
.odd .calendar-show {
.odd .daybyday-show {
background-color: #333;
}
.even .calendar-show {
.even .daybyday-show {
background-color: #3d3d3d;
}
.calendar-row .poster img {
border: 1px solid #111;
.daybyday-show .episode-blank {
background-color: rgba(0,0,0,.1);
border-radius: 3px;
}
.calendar-row .text .airtime,
.calendar-row .text .episode-title {
.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);
}
/* =======================================================================
config*.tmpl
@ -1385,7 +1384,7 @@ config*.tmpl
}
#config div.field-pair {
padding: 12px 0px;
padding: 12px 0;
}
#config .nocheck, #config div #customQuality, .metadataDiv {
@ -1423,14 +1422,14 @@ select .selected {
list-style-type: none;
}
#provider_order_list,
#provider_order_list,
#service_order_list {
width: 250px;
padding-left: 20px;
list-style-type: none;
}
#provider_order_list li,
#provider_order_list li,
#service_order_list li {
background: #333 !important;
color: #fff;
@ -1447,13 +1446,13 @@ select .selected {
width: 220px !important;
}
.infoTableHeader,
.infoTableHeader,
.infoTableCell {
padding: 5px;
}
.infoTableSeperator {
border-top: 1px dotted #666666;
.infoTableSeperator {
border-top: 1px dotted #666666;
}
/* =======================================================================
@ -1570,7 +1569,7 @@ td.tableright {
text-align: left;
vertical-align: middle;
width: 225px;
padding: 6px 0px;
padding: 6px 0;
}
.optionWrapper div.selectChoices {
@ -1604,7 +1603,6 @@ Global
========================================================================== */
span.path {
padding: 3px 6px;
color: #09A2FF;
background-color: #333;
}
@ -1616,13 +1614,13 @@ span.path {
span.quality {
font: 12px/13px "Open Sans", verdana, sans-serif;
background-image:-webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
background-image:-moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
background-image:-o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
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);
background-image:-webkit-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
background-image:-moz-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
background-image:-o-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
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: 0 1px rgba(0, 0, 0, 0.8);
color: #FFFFFF;
display: inline-block;
padding: 2px 4px;
@ -1713,7 +1711,7 @@ option.flag {
div.blackwhitelist{
float:left;
text-align: center;
text-align: center;
}
div.blackwhitelist input {
@ -1742,7 +1740,7 @@ div.blackwhitelist span {
}
div.blackwhitelist.anidb, div.blackwhitelist.manual {
margin: 7px 0px;
margin: 7px 0;
}
@ -1750,8 +1748,8 @@ div.blackwhitelist.anidb, div.blackwhitelist.manual {
bootstrap Overrides
========================================================================== */
body {
padding-top: 60px;
body {
padding-top: 60px;
overflow-y: scroll;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #fff;
@ -1759,7 +1757,7 @@ body {
}
input[type="radio"] {
margin: 2px 0px 0px;
margin: 2px 0 0;
line-height: normal;
}
@ -1774,7 +1772,7 @@ input, textarea, select, .uneditable-input {
}
.navbar-brand {
padding: 0px;
padding: 0;
}
/* navbar styling */
@ -1914,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 {
@ -2392,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 {
@ -2433,7 +2431,7 @@ tablesorter.css
.tablesorter th {
color: #fff;
text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
background-color: #15528F;
}
@ -2504,7 +2502,7 @@ thead.tablesorter-stickyHeader {
.tablesorter tfoot tr {
color: #fff;
text-align: center;
text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
background-color: #333;
border-collapse: collapse;
}
@ -2656,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,8 +2689,8 @@ jquery.confirm.css
top: 0;
left: 0;
background: url('../images/bg.gif');
background: -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)) repeat-x rgba(0,0,0,0.5);
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.5))) repeat-x rgba(0,0,0,0.5);
background: -moz-linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)) repeat-x rgba(0, 0, 0, 0.5);
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.5))) repeat-x rgba(0, 0, 0, 0.5);
z-index: 100000;
}
@ -2695,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,
@ -2709,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 {
@ -2730,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;
@ -2738,12 +2745,12 @@ jquery.confirm.css
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: -moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: -o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: linear-gradient(to bottom, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,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);
background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,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);
}
#confirmBox .button:last-child {

View file

@ -149,11 +149,7 @@ inc_top.tmpl
margin-bottom: -15px;
}
#contentWrapper {
/* background: url("../images/bg.png") repeat 0 0 transparent; */
}
[class^="icon-"],
[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,7 +1294,7 @@ h2.day, h2.network {
vertical-align: middle;
}
.calendar-row .day-number {
.day-of-week .day-number {
background-color: #333;
color: #fff;
}
@ -1316,22 +1303,31 @@ h2.day, h2.network {
color: #c7db40;
}
.odd .calendar-show {
.odd .daybyday-show {
background-color: #F5F1E4;
}
.even .calendar-show {
.even .daybyday-show {
background-color: #DFDACF;
}
.calendar-row .poster img {
border: 1px solid #CCC;
.day-of-week .poster img {
border-color: #CCC;
}
.calendar-row .text .airtime,
.calendar-row .text .episode-title {
.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;
}
/* =======================================================================
config*.tmpl
@ -1368,7 +1364,7 @@ config*.tmpl
}
#config div.field-pair {
padding: 12px 0px;
padding: 12px 0;
}
#config .nocheck, #config div #customQuality, .metadataDiv {
@ -1546,7 +1542,7 @@ td.tableright {
text-align: left;
vertical-align: middle;
width: 225px;
padding: 6px 0px;
padding: 6px 0;
}
.optionWrapper div.selectChoices {
@ -1580,7 +1576,6 @@ Global
========================================================================== */
span.path {
padding: 3px 6px;
color: #8b0000;
background-color: #f5f1e4;
}
@ -1596,13 +1591,13 @@ span.path {
span.quality {
font: 12px/13px "Open Sans", verdana, sans-serif;
background-image:-webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
background-image:-moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
background-image:-o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
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);
background-image:-webkit-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
background-image:-moz-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
background-image:-o-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
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: 0 1px rgba(0, 0, 0, 0.8);
color: #FFFFFF;
display: inline-block;
padding: 2px 4px;
@ -1693,7 +1688,7 @@ option.flag {
div.blackwhitelist{
float:left;
text-align: center;
text-align: center;
}
div.blackwhitelist input {
@ -1722,7 +1717,7 @@ div.blackwhitelist span {
}
div.blackwhitelist.anidb, div.blackwhitelist.manual {
margin: 7px 0px;
margin: 7px 0;
}
@ -1730,15 +1725,15 @@ div.blackwhitelist.anidb, div.blackwhitelist.manual {
bootstrap Overrides
========================================================================== */
body {
padding-top: 60px;
body {
padding-top: 60px;
overflow-y: scroll;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #000;
}
input[type="radio"] {
margin: 2px 0px 0px;
margin: 2px 0 0;
line-height: normal;
}
@ -1753,7 +1748,7 @@ input, textarea, select, .uneditable-input {
}
.navbar-brand {
padding: 0px;
padding: 0;
}
/* navbar styling */
@ -1892,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 {
@ -2386,7 +2381,7 @@ tablesorter.css
.tablesorter th {
color: #fff;
text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
background-color: #333;
}
@ -2457,7 +2452,7 @@ thead.tablesorter-stickyHeader {
.tablesorter tfoot tr {
color: #fff;
text-align: center;
text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
background-color: #333;
border-collapse: collapse;
}
@ -2604,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,8 +2627,8 @@ jquery.confirm.css
top: 0;
left: 0;
background: url('../images/bg.gif');
background: -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)) repeat-x rgba(0,0,0,0.5);
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.5))) repeat-x rgba(0,0,0,0.5);
background: -moz-linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)) repeat-x rgba(0, 0, 0, 0.5);
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.5))) repeat-x rgba(0, 0, 0, 0.5);
z-index: 100000;
}
@ -2643,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,
@ -2657,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 {
@ -2678,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;
@ -2686,12 +2683,12 @@ jquery.confirm.css
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: -moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: -o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: linear-gradient(to bottom, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,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);
background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,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);
}
#confirmBox .button:last-child {

View file

@ -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,26 +1492,24 @@ h2.day, h2.network {
vertical-align: middle;
}
.calendarWrapper {
.daybydayWrapper {
max-width: 1400px;
margin: 0 auto;
padding: 0 3px
padding: 0 /*3px*/
}
.calendar-row {
.day-of-week {
float: left;
width: 14.28%;
padding: 0px 2px;
padding: 0 2px;
}
.calendar-row .day-number {
.day-of-week .day-number {
position: relative;
height: 40px;
background-color: #333;
color: #fff;
}
.calendar-row .day-number .number {
.day-of-week .day-number .number {
position: absolute;
right: 5px;
font-weight: bold;
@ -1524,7 +1517,7 @@ h2.day, h2.network {
line-height: 38px;
}
.calendar-row .day-number .day {
.day-of-week .day-number .day {
position: absolute;
left: 5px;
top: 3px;
@ -1532,33 +1525,21 @@ h2.day, h2.network {
font-weight: bold;
}
.calendar-row .day-number .month {
.day-of-week .day-number .month {
position: absolute;
left: 5px;
bottom: 3px;
text-transform: uppercase;
}
.today .day-number .number, .today .day-number .month, .today .day-number .day {
color: #c7db40;
}
.calendar-show {
.daybyday-show {
margin-top: 4px;
padding: 4px;
width: 100%
}
.odd .calendar-show {
background-color: #F5F1E4;
}
.even .calendar-show {
background-color: #DFDACF;
}
.calendar-row .poster img {
border: 1px solid #CCC;
.day-of-week .poster img {
border: 1px solid;
border-radius: 5px;
margin-bottom: 2px;
display: block;
@ -1566,15 +1547,25 @@ h2.day, h2.network {
margin-right: auto;
}
.calendar-row .text .airtime,
.calendar-row .text .episode-title {
.day-of-week .text .airtime,
.day-of-week .text .episode {
overflow: hidden;
text-overflow: ellipsis;
display: block;
font-size: 12px;
}
.calendar-row .episode-blank {
.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;
@ -1918,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;
@ -1931,7 +1922,7 @@ div.metadataDiv .disabled {
.notifier-icon {
float: left;
margin: 6px 4px 0px 0px;
margin: 6px 4px 0 0;
}
/* =======================================================================
@ -1963,7 +1954,7 @@ td.tableright {
text-align: left;
vertical-align: middle;
width: 225px;
padding: 6px 0px;
padding: 6px 0;
}
.optionWrapper div.selectChoices {
@ -1997,9 +1988,8 @@ Global
========================================================================== */
span.path {
padding: 3px 6px;
color: #8b0000;
background-color: #f5f1e4;
padding: 3px;
margin-left: 3px;
}
.align-left {
@ -2013,13 +2003,13 @@ span.path {
span.quality {
font: 12px/13px "Open Sans", verdana, sans-serif;
background-image:-webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
background-image:-moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
background-image:-o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 50%,rgba(0,0,0,0.25));
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);
background-image:-webkit-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
background-image:-moz-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
background-image:-o-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 50%,rgba(0, 0, 0, 0.25));
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: 0 1px rgba(0, 0, 0, 0.8);
color: #FFFFFF;
display: inline-block;
padding: 2px 4px;
@ -2139,7 +2129,7 @@ div.blackwhitelist span {
}
div.blackwhitelist.anidb, div.blackwhitelist.manual {
margin: 7px 0px;
margin: 7px 0;
}
@ -2159,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;
}
@ -2179,7 +2169,7 @@ input, textarea, select, .uneditable-input {
}
.navbar-brand {
padding: 0px;
padding: 0;
}
/* navbar styling */
@ -2306,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 {
@ -2863,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 {
@ -2985,7 +2975,7 @@ thead.tablesorter-stickyHeader {
.tablesorter tfoot tr {
color: #fff;
text-align: center;
text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
background-color: #333;
border-collapse: collapse;
}
@ -3205,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
@ -3217,8 +3211,8 @@ jquery.confirm.css
top: 0;
left: 0;
background: url(../images/bg.gif);
background: -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)) repeat-x rgba(0,0,0,0.5);
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.5))) repeat-x rgba(0,0,0,0.5);
background: -moz-linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)) repeat-x rgba(0, 0, 0, 0.5);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.5))) repeat-x rgba(0, 0, 0, 0.5);
z-index: 100000;
}
@ -3230,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,
@ -3265,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;
@ -3273,12 +3267,12 @@ jquery.confirm.css
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: -moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: -o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
background-image: linear-gradient(to bottom, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,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);
background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,rgba(0, 0, 0, 0.25));
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.08),rgba(255, 255, 255, 0) 50%,rgba(0, 0, 0, 0) 51%,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);
}
#confirmBox .button:last-child {

View file

@ -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");

View file

@ -1,626 +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
<script type="text/javascript" charset="utf-8">
<!--
\$(document).ready(function(){
var \$container = [\$('#day0'), \$('#day1'), \$('#day2'), \$('#day3'), \$('#day4'), \$('#day5'), \$('#day6')];
jQuery.each(\$container, function (j) {
this.isotope({
itemSelector: '.calendar-show',
sortBy : '$sickbeard.COMING_EPS_SORT',
layoutMode: 'vertical',
transitionDuration: 0,
getSortData: {
show: function( itemElem ) {
var name = \$( itemElem ).attr('data-name');
#if not $sickbeard.SORT_ARTICLE:
return (name || '').replace(/^(?:(?:A(?!\s+to)n?)|The)\s(\w)/i, '$1');
#else:
return (name || '');
#end if
},
network: '[data-network]',
date: function( itemElem ) {
var date = \$( itemElem ).attr('data-date');
return date.length && parseInt( date, 10 );
}
}
});
});
imagesLoaded( '.calendar-show', function() {
jQuery.each(\$container, function (j) {
this.isotope('layout');
});
});
\$('#sort').on( 'change', function() {
var sortValue = this.value;
jQuery.each(\$container, function (j) {
this.isotope({ sortBy: sortValue });
});
\$.get(this.options[this.selectedIndex].getAttribute('data-sort'));
});
});
//-->
</script>
<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>
&nbsp;
#if 'calendar' != $layout:
<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>
&nbsp;
#else
<span>Sort By:
<select name="sort" id="sort" class="form-control form-control-inline input-sm">
<option value="date" data-sort="$sbRoot/setComingEpsSort/?sort=date" #if 'date' == $sickbeard.COMING_EPS_SORT then 'selected="selected"' else ''#>Date</option>
<option value="network" data-sort="$sbRoot/setComingEpsSort/?sort=network" #if 'network' == $sickbeard.COMING_EPS_SORT then 'selected="selected"' else ''#>Network</option>
<option value="show" data-sort="$sbRoot/setComingEpsSort/?sort=show" #if 'show' == $sickbeard.COMING_EPS_SORT then 'selected="selected"' else ''#>Show</option>
</select>
</span>
&nbsp;
#end if
<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']}&amp;season=$cur_result['season']&amp;episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="forceUpdate epSearch"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a>
</td>
</tr>
<!-- end $cur_result['show_name'] //-->
#end for
</tbody>
<tfoot>
<tr>
<th rowspan="1" colspan="10" align="center">&nbsp</th>
</tr>
</tfoot>
</table>
<!-- end list view //-->
#else if $layout in ['banner', 'poster']:
<!-- start non list view //-->
<script type="text/javascript" charset="utf-8">
<!--
\$(document).ready(function(){
\$('#sbRoot').ajaxEpSearch({'size': 16, 'loadingImage': 'loading16' + 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']}&amp;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']}&amp;season=$cur_result['season']&amp;episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="epSearch forceUpdate"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a></span>
</span>
</div>
<span class="title">Next Episode:</span> <span><%= 'S%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
#if $tbl_day == 1
#set $showtoday = 'today'
#else
#set $showtoday = ''
#end if
<div class="calendar-row $showtoday <%= '%s' % (('even', 'odd')[1 == tbl_day % 2]) %>">
<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.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
<div id="show-$cur_result['showid']" class="calendar-show" data-name="$cur_result['show_name']" data-network="$cur_result['network']" data-date="$time.mktime($cur_result['localtime'].timetuple())">
<div class="poster">
<a title="${cur_result['show_name']}" href="$sbRoot/home/displayShow?show=${cur_result['showid']}"><img class="img-responsive" alt="" src="$sbRoot/showPoster/?show=${cur_result['showid']}&amp;which=poster_thumb" /></a>
</div>
<div class="text">
<div class="episode-title" title="$cur_result['name']">
<%= 'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode'])) %> - $cur_result['name']
</div>
<div class="airtime">
${airtime} on $cur_result["network"]
</div>
</div>
</div><!-- end show-$cur_result['showid'] //-->
#end if
#end for
#if not $day_has_show:
<div class="calendar-show" data-date="0">
<span class="episode-blank">No shows for this day</span>
</div>
#end if
</div>
</div>
#end for
<!-- end calender view //-->
#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')

View file

@ -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 -->

View 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>
&nbsp;
<span>Sort
#if 'daybyday' == $layout:
<span id="sort-dir" data-sort-dir="asc" class="caret asc" title="Click to sort descending">&nbsp;</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>
&nbsp;
<span>View Paused:
<select name="viewpaused" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
<option value="$sbRoot/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']}&amp;season=$cur_result['season']&amp;episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="forceUpdate epSearch"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a>
</td>
</tr>
<!-- end $cur_result['show_name'] //-->
#end for
</tbody>
<tfoot>
<tr>
<th rowspan="1" colspan="10" align="center">&nbsp</th>
</tr>
</tfoot>
</table>
<!-- end list view //-->
#else if $layout in ['banner', 'poster']:
<!-- start non list view //-->
<script type="text/javascript" charset="utf-8">
<!--
\$(document).ready(function(){
\$('#sbRoot').ajaxEpSearch({'size': 16, 'loadingImage': 'loading16' + 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']}&amp;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']}&amp;season=$cur_result['season']&amp;episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="epSearch forceUpdate"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a></span>
</span>
</div>
<span class="title">Next Episode:</span> <span><%= 'S%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']}&amp;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')

View file

@ -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')

View file

@ -150,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">
@ -262,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>

View file

@ -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: {

View file

@ -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

View file

@ -448,8 +448,9 @@ 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):
"""
@ -729,4 +730,13 @@ class ConfigMigrator():
for curProvider in providers.sortedProviderList():
if hasattr(curProvider, 'enable_recentsearch'):
curProvider.enable_recentsearch = bool(check_setting_int(self.config_obj, curProvider.getID().upper(),
curProvider.getID() + '_enable_dailysearch', 1))
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)

View file

@ -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")

View file

@ -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'},