From 1d1bbd3a23167e65d1003dcd870d25e8cf128a5d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 22 Aug 2011 20:52:08 -0700 Subject: [PATCH] Series/Details grids now use images for ignore/status/search/rename. --- NzbDrone.Web/Content/Images/Downloading.png | Bin 3077 -> 3239 bytes NzbDrone.Web/Content/Images/Rename.png | Bin 0 -> 1185 bytes NzbDrone.Web/Content/Images/Search.png | Bin 0 -> 743 bytes NzbDrone.Web/Controllers/CommandController.cs | 8 +- NzbDrone.Web/NzbDrone.Web.csproj | 2 + NzbDrone.Web/Scripts/seriesDetails.js | 37 +++++++ NzbDrone.Web/Views/Series/Details.cshtml | 93 +++++++++++------- 7 files changed, 103 insertions(+), 37 deletions(-) create mode 100644 NzbDrone.Web/Content/Images/Rename.png create mode 100644 NzbDrone.Web/Content/Images/Search.png diff --git a/NzbDrone.Web/Content/Images/Downloading.png b/NzbDrone.Web/Content/Images/Downloading.png index 63cacfae83f9d8db80ebf2228db57af1ad1f15fd..f49538894797c3e0e785ca9152d16b8fd4ac77f4 100644 GIT binary patch literal 3239 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 Z3;<~=(>!Q73nl;n002ovPDHLkV1hUG?+yR} literal 3077 zcmV+g4EpnlP)KY%5K74EfxC!vrBS@Gxz-OdH(NQF*7m|Kwbj(=5v>V z!E#UV`b@Y#j`gtjdf3bk8tem#+}%(*`&Yju)u}!aUNG^Ex?)B%N!oKm{93!GOdYX1uv=ee{*V z{@{&@t)HA2xm5X+&+LvxFflWpdJ4Dq`1!C@*wXXz`RX5e)2Biw{ZSw|2@p}l0rtxQ z0HpKl4b-5KD2>F=7ee<}zwz+Se=J>~@ySo(Ap-zFMC1?u?b5#jU%&*(b(L)17hUC- zLqsr|hK`!$y8Qdszp(4~nwRAOJn^l!{s8#K+KjgA^29g3c>g~^2EgzC%Y~i5IiS3@ z!N`gi>pBn*g=)ILTTc@}oDeuDgpRH0qU9s=$(Iz04j#}xnkDh0tV@8pJ}vp~}VG8b4X>T~N@X#v8W>k>Pf1=7k^T6`P8L{K%nx2E|o4T2&m zYipWj3RNQ?R&zPR3`4T-&Pm6zfQaC-RyS~xDy2q}&3fhtSYGNb1HmjihXQGU44e=K z4kutHcry|Yepw7@M>>)PoCr?R61T4q(pv}-fkxt~HaxXPvLx51o!$x;(8bswKokhQ zg@FD-NFfSPHL9^^z7|u96|XB}$ZDkR7$5>7jzZuV=#3cORN@nRwovX3IsNu6-nu!% z#9W<9BOz#s1Fm%z4KT%F6a%5u6Ed`}hkZLYaAem;W@`yQ{OP+~9Gzieu13{s+B39? zLEBltA&3~g#el7YeLVTtVM3RZ8i(#1;`BS?oIG`v@!2Y7q~;7QE|BVP2u2|kdW#X8 z%e_4IYs2i@If!!(=Nw0NZQ^hK^9&312DK!~GDdp{v}FO3`KA~Y1L5QMZzc*P;&z-%( zXAcdpm=zJ&y`@a47!U-KQR5j`Btju{9QoBDHkNx=C~uidJ@e{iMknT2s5OWakJk7W)6me2IDIaOh1p-!#C%0ru3V7a7|?=dr`vbDbFU%QF{$1)Idajvxz%x6AtjGoPAespqy z*=mDYqw~tc9b$xX3rN}B)Dl#cM-C0QfUw*hn##X=neV+h!sz7u9aSFg6dxdI$5vC% zq$=i>7tUNk1dbhC2|_Mv#xp;9hnLP>XKZSLnfW^P#Aozadj-#XNyiwWbh$f!yG&Ao z6QPkL%v5TKGydo76)-q?l%`;o6(@1;^GbCco%+RqQ*pY4! zA#mw(cj$y52%78vlC{c7;+dMS@q_atgn{s>{lhqM0L0$&{OQZQa&eT|g*x6Vp%Yvo z0CL(q4X%kAUP+6f4gk@9FMtq+E-Pdr`g;l#qM%8NV0rq3o+v~x&R?5ga<0nWdpF|M z_{sGN#wO!BQ_r5AWj3j~t>W3R@Ik?ATUvfh+IXS`6jK()!@@ zpZFNxeBmt5y>gLy!_$a;TUOAP1vqi^M2@XPB_2O|phfw-6$Z(d{jx#I;>*m->VW0n zivUPd!Ja7O@uLTL?d?&f<|OGZO<9)BaUDfyVy1;u$rPgRZ zfBACzFCwe10}MzEs*MI0M#dSNm}T40`u8!#Mdg-Of6E)A#h>Lp?=?0t%Y~6~s*MJT zdA#{myFgHW;L~4ianhgnSoTui)pw`Zy?rACr5+ZSMwUS!D~XWX1-ti}dBeDJbBcd> z`hU4}V}j}VDvdZfSeH$yjPO8$MpX{3vORXtwK(RYI>>@cUr60z1x&ixdnV!<#ed3 zuaj;c`LOL8c@cPB%#6X`dh$cLX=?J@U%TGiHaGB@KU=wN&H%{^o}8Jvo1Hx`!7?_+ zmh8%Cl_#d3`@810Id|g33E8x1lRWyhXTN2}?=C8=pdPZt&O1WNby6~d#>62KWZ(IT zy!zxno__LkUmPDFx8ui;o18p(a@+j;e18;0JTj=}!;FCRPb>Q8S>t-mxjJ8)%ucKzs7wLCFb zEqOJ!wu-*LIOlXzxo2+sVBhS0n+K*pvTgm$o-O5>AaGt)iy{(>NaUQ0R5koRrSQ#I TXfGu700000NkvXXu0mjfNZsRu diff --git a/NzbDrone.Web/Content/Images/Rename.png b/NzbDrone.Web/Content/Images/Rename.png new file mode 100644 index 0000000000000000000000000000000000000000..bfeb37431de199efae76ab06e62355d2e0e24a31 GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyoCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(3*9myU+z6=aistgPb%?u1b{{!il3=E|P3=FRl7#OT(FffScPl`Y4 z#=yYL5a1Ky%EHdRaM7ao@84gzaKYHjOhjBfDJA8=!GjMTJSZwD2@VZaR#TfeY0`#` z8=YNU8=IT||Nk#2C@3T(BrGf}A|fIxDk>%>CN3^6At50tDJdl-B`qy2BO@a#D=Q}_ zCoeCrprD|rsHmi*q^zv0qN1Xzs;Z`@rmn88p`oFvsi~!4qobp%tE;D{r?0PX zU|?WqXlP_)WNd6~Vq#)yYHDU?W^Qh7VPRouX=!C;Wo>P3V`F1$Yinm`XK!!s;Nals z=;-9+gwj^=I-w9;o;%w>FMR=+9#|=kM(9qD>*x1z6)ZE)2+uPUI*WceiVZwxo6M+#jY4YUBQ>ILrI(6!_Y15`p zpFU&8jF~fM&YCrA_Uzen=FFKpckaA-^XAW=zhJ?Fg$sc(ylC;_#Y>hfS-N!TvSrJb zFJHc5#fp_HSFT#MYW3>XYu2n;yLRomb?erzU%z1kFse6h+O%o&=FMBSY}vYX>$Yv% zwr}6QW5mU4oj-pbn9MF-ym;x-rOTHuU%7JS>eZ{) zu3fu+{rZg?H*Vg%dF$4#+qZAuxpU|4-Mjbh-MfGPJ}@0VeE9IuqeqV)KYsG$$`1tYTr%#_gfByXC%a^ZT zzkd7n?fdudKYsl9`Sa(mU%!6;{{83ApTB?q{`>b2n3yNLwgu%j!IB`qU?3L-FsQDb znFN%4=jq}YQgJIuK!JgQsiScMQv-w23I>G+4lM=_g(fbrn1KUBV)%gr4C3q@3T!f; z3Pc$gTQ0NA;A&tF z$r+@20oM-616l@8fzlm}51G^$bs$#EbO~T|U~qJqDOsQv2Xy?5Rg6p>3oyL_5@Kdh XPcsh@;w-of^f`m4tDnm{r-UW|TO122 literal 0 HcmV?d00001 diff --git a/NzbDrone.Web/Content/Images/Search.png b/NzbDrone.Web/Content/Images/Search.png new file mode 100644 index 0000000000000000000000000000000000000000..c445e5c6dd31177accbc2f881840f78b3110fed0 GIT binary patch literal 743 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWND9DoT z=lFzskoK&=l_5E!wyUh3`vL7Po6lD!FlAZLyb_!e#VdW8nr@Nd7dko8JId4 zMVMYlaBOL)5EuBb&eVJ*GtszRf=9sNh7LdDqw_9Ne1{djDn7AbP-u{tc$vY#gSqjF zl@4R6d`G$S%`*;fxQ-M>Tw!HA8}0AK!@wd?wV~em^UX?yZAS!s{TymUegB#VEoN3| zn854O|M{xJnYM6aW@dGPe0P80B_J~s*lsSC{KV4nv(u=d(NU!1{-T%L)vqx!FtVI( z3(PQ_%rWJUM~cWkwjkDwLxD%s7#kRxem-KG^jd%7oT&<&!j>X=0;|P=#wa$-S#*9< z;Iu!iLB}VyJn6W~E#TmDV9jx6Umt@HeP@h#Bjwev#54hIbWr>t+wotivvbl*21S)` z@hf(+Fgh?CeDuLA=#T9ZC#fC2YvO>mENu)v@sXX!PF<*0zC(;@dB;@_0f!SyrK&hj zcrJPW^P-bL%iIoLpnIImUKq?$ly02S&T*Q5!Aol&uP=-&0-F-k9R3KOH3<0mp!aZ5 zz}iZF@3S1Ml`!~s2$ZlmFbH}*lyk6Q>^QFw`AJ|_g0$mHwpHh5#JB^)oOx%irB0vf zX+Z`?7gKhDhaJ*4WPm1wlrmWMF>olXvTg_gDf5+aXi@e%bOq?Tvmj=RLl!Xlm+>8V z+~I0a*}$-9C-VfEk1Sa~xt=_;b6_yMw7Q%pC;5YO^IyA77C=5<$#)rr0}Lx}Xvxp6 SNIeNmlnkD(elF{r5}E++qziNa literal 0 HcmV?d00001 diff --git a/NzbDrone.Web/Controllers/CommandController.cs b/NzbDrone.Web/Controllers/CommandController.cs index 00c8e7638..7d8ae9164 100644 --- a/NzbDrone.Web/Controllers/CommandController.cs +++ b/NzbDrone.Web/Controllers/CommandController.cs @@ -19,7 +19,7 @@ namespace NzbDrone.Web.Controllers public JsonResult RssSync() { _jobProvider.QueueJob(typeof(RssSyncJob)); - return new JsonResult { Data = "ok" }; + return new JsonResult { Data = "ok", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } public JsonResult SyncEpisodesOnDisk(int seriesId) @@ -27,7 +27,7 @@ namespace NzbDrone.Web.Controllers //Syncs the episodes on disk for the specified series _jobProvider.QueueJob(typeof(DiskScanJob), seriesId); - return new JsonResult { Data = "ok" }; + return new JsonResult { Data = "ok", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } public JsonResult UpdateInfo(int seriesId) @@ -35,7 +35,7 @@ namespace NzbDrone.Web.Controllers //Syncs the episodes on disk for the specified series _jobProvider.QueueJob(typeof(UpdateInfoJob), seriesId); - return new JsonResult { Data = "ok" }; + return new JsonResult { Data = "ok", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } public JsonResult RenameSeries(int seriesId) @@ -43,7 +43,7 @@ namespace NzbDrone.Web.Controllers //Syncs the episodes on disk for the specified series //_jobProvider.QueueJob(typeof(UpdateInfoJob), seriesId); - return new JsonResult { Data = "ok" }; + return new JsonResult { Data = "ok", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } } } diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index c281c7da7..53caf1316 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -142,6 +142,8 @@ + + diff --git a/NzbDrone.Web/Scripts/seriesDetails.js b/NzbDrone.Web/Scripts/seriesDetails.js index edd0c1e86..c8320d783 100644 --- a/NzbDrone.Web/Scripts/seriesDetails.js +++ b/NzbDrone.Web/Scripts/seriesDetails.js @@ -1,5 +1,9 @@ var notIgnoredImage = '../../Content/Images/notIgnored.png'; var ignoredImage = '../../Content/Images/ignored.png'; +var notAiredImage = '../../Content/Images/NotAired.png'; +var readyImage = '../../Content/Images/Ready.png'; +var downloadingImage = '../../Content/Images/Downloading.png'; + var seriesId = 0; var saveSeasonIgnoreUrl = '../Series/SaveSeasonIgnore'; var saveEpisodeIgnoreUrl = '../Series/SaveEpisodeIgnore'; @@ -64,6 +68,8 @@ function toggleChildren(seasonNumber, ignored) { } function toggleMaster(seasonNumber) { + //Toggles all master toggles when the childen changes or the grid is loaded + var ignoreEpisodes = $('.ignoreEpisode_' + seasonNumber); var ignoredCount = ignoreEpisodes.filter('.ignored').length; var masters = $('.ignoreSeason_' + seasonNumber); @@ -82,6 +88,7 @@ function toggleMaster(seasonNumber) { } function toggleMasters(seasonNumber, ignored) { + //Toggles the other master(s) to match the one that was just changed var masters = $('.ignoreSeason_' + seasonNumber); if (ignored) { @@ -125,6 +132,7 @@ function grid_dataBound(e) { var seasonNumber = id.replace('seasons_', ''); toggleMaster(seasonNumber); + setMasterStatus(this); } //Episode Ignore Saving @@ -183,4 +191,33 @@ function searchSeason(seriesId, seasonNumber) { alert("Sorry! We could search for series: " + seriesId + " season: " + seasonNumber + " at this time. " + error); } }); +} + +//Set master status to match children +function setMasterStatus(grid) { + //Get children of this grid + var masterStatus = $(grid).find('.statusImageMaster'); + var statuses = $(grid).find('.statusImage').filter(':not(.statusImageMaster)'); + var episodeCount = statuses.length; + + //Get missing count + if (statuses.filter('.status-Missing').length == episodeCount) { + //Leave as is (default is missing) + return; + } + + if (statuses.filter('.status-NotAired').length == episodeCount) { + masterStatus.attr('src', notAiredImage); + return; + } + + if (statuses.filter('.status-Ready').length == episodeCount) { + masterStatus.attr('src', readyImage); + return; + } + + if (statuses.filter('.status-Downloading').length == episodeCount) { + masterStatus.attr('src', downloadingImage); + return; + } } \ No newline at end of file diff --git a/NzbDrone.Web/Views/Series/Details.cshtml b/NzbDrone.Web/Views/Series/Details.cshtml index d221aec72..067c9d6c6 100644 --- a/NzbDrone.Web/Views/Series/Details.cshtml +++ b/NzbDrone.Web/Views/Series/Details.cshtml @@ -7,22 +7,7 @@ - @@ -96,26 +117,32 @@ .TableHtmlAttributes(new { @class = "Grid" }) .Columns(columns => { - columns.Bound(o => o.Ignored) - .Title("") - .ClientTemplate( - "") - .Width(20) - .HtmlAttributes(new { style = "text-align:center" }); + //columns.Bound(o => o.Ignored) + // .Title("") + // .ClientTemplate( + // "") + // .Width(20) + // .HtmlAttributes(new { style = "text-align:center" }); columns.Bound(c => c.EpisodeNumber).Width(0).Title("Episode"); columns.Bound(c => c.Title).Title("Title"); columns.Bound(c => c.AirDate).Width(0); columns.Bound(c => c.Quality).Width(0); columns.Bound(c => c.Status) - .ClientTemplate("<#= Status #>") - .Width(20) - .HtmlAttributes(new { style = "text-align:center" }); - columns.Bound(o => o.EpisodeId).Title("") - .ClientTemplate("\" onclick=\"searchForEpisode('<#= EpisodeId #>'); return false;\">Search" - + " | " + - "\" onclick=\"renameEpisode('<#= EpisodeFileId #>'); return false;\">Rename" - ); + .Title("" + + "Status" + + "Search" + + "Rename") + .ClientTemplate("" + + "<#= Status #>" + + "\" onclick=\"searchForEpisode('<#= EpisodeId #>'); return false;\">Search" + + "\" onclick=\"renameEpisode('<#= EpisodeFileId #>'); return false;\">Rename") + .Width(80); + //columns.Bound(o => o.EpisodeId).Title("") + // .ClientTemplate("\" onclick=\"searchForEpisode('<#= EpisodeId #>'); return false;\">Search" + // + " | " + + // "\" onclick=\"renameEpisode('<#= EpisodeFileId #>'); return false;\">Rename" + // ); }) .DetailView(detailView => detailView.ClientTemplate("
<#= Overview #>
<#= Path #>
")) .Sortable(rows => rows.OrderBy(epSort => epSort.Add(c => c.EpisodeNumber).Descending()).Enabled(false)) @@ -124,12 +151,12 @@ d => d.Ajax().Select("_AjaxSeasonGrid", "Series", new RouteValueDictionary { { "seriesId", Model.SeriesId }, { "seasonNumber", season } })) - .ToolBar(toolbar => toolbar.Template(@ + @*.ToolBar(toolbar => toolbar.Template(@ - )) + ))*@ .ClientEvents(clientEvents => { clientEvents.OnRowDataBound("grid_rowBound");