Merge branch 'markus101'
This commit is contained in:
commit
2e893284a2
|
@ -29,11 +29,12 @@ namespace NzbDrone.Web.Controllers
|
||||||
private readonly AutoConfigureProvider _autoConfigureProvider;
|
private readonly AutoConfigureProvider _autoConfigureProvider;
|
||||||
private readonly NotificationProvider _notificationProvider;
|
private readonly NotificationProvider _notificationProvider;
|
||||||
private readonly DiskProvider _diskProvider;
|
private readonly DiskProvider _diskProvider;
|
||||||
|
private readonly SeriesProvider _seriesProvider;
|
||||||
|
|
||||||
public SettingsController(ConfigProvider configProvider, IndexerProvider indexerProvider,
|
public SettingsController(ConfigProvider configProvider, IndexerProvider indexerProvider,
|
||||||
QualityProvider qualityProvider, RootDirProvider rootDirProvider,
|
QualityProvider qualityProvider, RootDirProvider rootDirProvider,
|
||||||
AutoConfigureProvider autoConfigureProvider, NotificationProvider notificationProvider,
|
AutoConfigureProvider autoConfigureProvider, NotificationProvider notificationProvider,
|
||||||
DiskProvider diskProvider)
|
DiskProvider diskProvider, SeriesProvider seriesProvider)
|
||||||
{
|
{
|
||||||
_configProvider = configProvider;
|
_configProvider = configProvider;
|
||||||
_indexerProvider = indexerProvider;
|
_indexerProvider = indexerProvider;
|
||||||
|
@ -42,6 +43,7 @@ namespace NzbDrone.Web.Controllers
|
||||||
_autoConfigureProvider = autoConfigureProvider;
|
_autoConfigureProvider = autoConfigureProvider;
|
||||||
_notificationProvider = notificationProvider;
|
_notificationProvider = notificationProvider;
|
||||||
_diskProvider = diskProvider;
|
_diskProvider = diskProvider;
|
||||||
|
_seriesProvider = seriesProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Test()
|
public ActionResult Test()
|
||||||
|
@ -131,21 +133,19 @@ namespace NzbDrone.Web.Controllers
|
||||||
|
|
||||||
ViewData["Qualities"] = qualityTypes;
|
ViewData["Qualities"] = qualityTypes;
|
||||||
|
|
||||||
var userProfiles = _qualityProvider.GetAllProfiles().Where(q => q.UserProfile).ToList();
|
|
||||||
var profiles = _qualityProvider.GetAllProfiles().ToList();
|
var profiles = _qualityProvider.GetAllProfiles().ToList();
|
||||||
|
|
||||||
var defaultQualityQualityProfileId = Convert.ToInt32(_configProvider.DefaultQualityProfile);
|
var defaultQualityQualityProfileId = Convert.ToInt32(_configProvider.DefaultQualityProfile);
|
||||||
var downloadPropers = _configProvider.DownloadPropers;
|
var downloadPropers = _configProvider.DownloadPropers;
|
||||||
|
|
||||||
var selectList = new SelectList(profiles, "QualityProfileId", "Name");
|
var qualityProfileSelectList = new SelectList(profiles, "QualityProfileId", "Name");
|
||||||
|
|
||||||
var model = new QualityModel
|
var model = new QualityModel
|
||||||
{
|
{
|
||||||
Profiles = profiles,
|
Profiles = profiles,
|
||||||
UserProfiles = userProfiles,
|
|
||||||
DefaultQualityProfileId = defaultQualityQualityProfileId,
|
DefaultQualityProfileId = defaultQualityQualityProfileId,
|
||||||
DownloadPropers = downloadPropers,
|
DownloadPropers = downloadPropers,
|
||||||
SelectList = selectList
|
QualityProfileSelectList = qualityProfileSelectList
|
||||||
};
|
};
|
||||||
|
|
||||||
return View("Index", model);
|
return View("Index", model);
|
||||||
|
@ -199,7 +199,7 @@ namespace NzbDrone.Web.Controllers
|
||||||
return View("Index", model);
|
return View("Index", model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ViewResult AddUserProfile()
|
public ViewResult AddProfile()
|
||||||
{
|
{
|
||||||
var qualityTypes = new List<QualityTypes>();
|
var qualityTypes = new List<QualityTypes>();
|
||||||
|
|
||||||
|
@ -208,12 +208,11 @@ namespace NzbDrone.Web.Controllers
|
||||||
qualityTypes.Add(qual);
|
qualityTypes.Add(qual);
|
||||||
}
|
}
|
||||||
|
|
||||||
ViewData["Qualities"] = qualityTypes;
|
ViewData["Qualities"] = new SelectList(qualityTypes);
|
||||||
|
|
||||||
var qualityProfile = new QualityProfile
|
var qualityProfile = new QualityProfile
|
||||||
{
|
{
|
||||||
Name = "New Profile",
|
Name = "New Profile",
|
||||||
UserProfile = true,
|
|
||||||
Allowed = new List<QualityTypes> { QualityTypes.Unknown },
|
Allowed = new List<QualityTypes> { QualityTypes.Unknown },
|
||||||
Cutoff = QualityTypes.Unknown,
|
Cutoff = QualityTypes.Unknown,
|
||||||
};
|
};
|
||||||
|
@ -224,7 +223,7 @@ namespace NzbDrone.Web.Controllers
|
||||||
|
|
||||||
ViewData["ProfileId"] = id;
|
ViewData["ProfileId"] = id;
|
||||||
|
|
||||||
return View("UserProfileSection", qualityProfile);
|
return View("QualityProfileItem", qualityProfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult GetQualityProfileView(QualityProfile profile)
|
public ActionResult GetQualityProfileView(QualityProfile profile)
|
||||||
|
@ -235,10 +234,11 @@ namespace NzbDrone.Web.Controllers
|
||||||
{
|
{
|
||||||
qualityTypes.Add(qual);
|
qualityTypes.Add(qual);
|
||||||
}
|
}
|
||||||
|
|
||||||
ViewData["Qualities"] = qualityTypes;
|
ViewData["Qualities"] = qualityTypes;
|
||||||
ViewData["ProfileId"] = profile.QualityProfileId;
|
ViewData["ProfileId"] = profile.QualityProfileId;
|
||||||
|
|
||||||
return PartialView("UserProfileSection", profile);
|
return PartialView("QualityProfileItem", profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ViewResult AddRootDir()
|
public ViewResult AddRootDir()
|
||||||
|
@ -287,13 +287,16 @@ namespace NzbDrone.Web.Controllers
|
||||||
Convert.ToInt32(_configProvider.GetValue("DefaultQualityProfile", profiles[0].QualityProfileId, true));
|
Convert.ToInt32(_configProvider.GetValue("DefaultQualityProfile", profiles[0].QualityProfileId, true));
|
||||||
var selectList = new SelectList(profiles, "QualityProfileId", "Name");
|
var selectList = new SelectList(profiles, "QualityProfileId", "Name");
|
||||||
|
|
||||||
return new QualityModel { DefaultQualityProfileId = defaultQualityQualityProfileId, SelectList = selectList };
|
return new QualityModel { DefaultQualityProfileId = defaultQualityQualityProfileId, QualityProfileSelectList = selectList };
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsonResult DeleteQualityProfile(int profileId)
|
public JsonResult DeleteQualityProfile(int profileId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (_seriesProvider.GetAllSeries().Where(s => s.QualityProfileId == profileId).Count() != 0)
|
||||||
|
return new JsonResult { Data = "Unable to delete Profile, it is still in use." };
|
||||||
|
|
||||||
_qualityProvider.Delete(profileId);
|
_qualityProvider.Delete(profileId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,14 +463,18 @@ namespace NzbDrone.Web.Controllers
|
||||||
_configProvider.DownloadPropers = data.DownloadPropers;
|
_configProvider.DownloadPropers = data.DownloadPropers;
|
||||||
|
|
||||||
//Saves only the Default Quality, skips User Profiles since none exist
|
//Saves only the Default Quality, skips User Profiles since none exist
|
||||||
if (data.UserProfiles == null)
|
if (data.Profiles == null)
|
||||||
return Content(SETTINGS_SAVED);
|
return Content(SETTINGS_SAVED);
|
||||||
|
|
||||||
foreach (var profile in data.UserProfiles)
|
foreach (var profile in data.Profiles)
|
||||||
{
|
{
|
||||||
Logger.Debug(String.Format("Updating User Profile: {0}", profile));
|
Logger.Debug(String.Format("Updating Profile: {0}", profile));
|
||||||
|
|
||||||
profile.Allowed = new List<QualityTypes>();
|
profile.Allowed = new List<QualityTypes>();
|
||||||
|
|
||||||
|
//Remove the extra comma from the end and replace double commas with a single one (the Javascript gets a little crazy)
|
||||||
|
profile.AllowedString = profile.AllowedString.Replace(",,", ",").Trim(',');
|
||||||
|
|
||||||
foreach (var quality in profile.AllowedString.Split(','))
|
foreach (var quality in profile.AllowedString.Split(','))
|
||||||
{
|
{
|
||||||
var qType = (QualityTypes)Enum.Parse(typeof(QualityTypes), quality);
|
var qType = (QualityTypes)Enum.Parse(typeof(QualityTypes), quality);
|
||||||
|
|
|
@ -8,7 +8,6 @@ namespace NzbDrone.Web.Models
|
||||||
public class QualityModel
|
public class QualityModel
|
||||||
{
|
{
|
||||||
public List<QualityProfile> Profiles { get; set; }
|
public List<QualityProfile> Profiles { get; set; }
|
||||||
public List<QualityProfile> UserProfiles { get; set; }
|
|
||||||
|
|
||||||
[DisplayName("Default Quality Profile")]
|
[DisplayName("Default Quality Profile")]
|
||||||
[Description("The default quality to use when adding series to NzbDrone")]
|
[Description("The default quality to use when adding series to NzbDrone")]
|
||||||
|
@ -18,6 +17,6 @@ namespace NzbDrone.Web.Models
|
||||||
[Description("Should NzbDrone download proper releases (to replace non-proper files)?")]
|
[Description("Should NzbDrone download proper releases (to replace non-proper files)?")]
|
||||||
public bool DownloadPropers { get; set; }
|
public bool DownloadPropers { get; set; }
|
||||||
|
|
||||||
public SelectList SelectList { get; set; }
|
public SelectList QualityProfileSelectList { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
|
using NzbDrone.Core.Repository.Quality;
|
||||||
|
|
||||||
|
namespace NzbDrone.Web.Models
|
||||||
|
{
|
||||||
|
public class QualityTypeModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public QualityTypes Name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -237,6 +237,7 @@
|
||||||
<Compile Include="Models\AddExistingManualModel.cs" />
|
<Compile Include="Models\AddExistingManualModel.cs" />
|
||||||
<Compile Include="Models\AddExistingSeriesModel.cs" />
|
<Compile Include="Models\AddExistingSeriesModel.cs" />
|
||||||
<Compile Include="Models\AddNewSeriesModel.cs" />
|
<Compile Include="Models\AddNewSeriesModel.cs" />
|
||||||
|
<Compile Include="Models\QualityTypeModel.cs" />
|
||||||
<Compile Include="Models\RootDirModel.cs" />
|
<Compile Include="Models\RootDirModel.cs" />
|
||||||
<Compile Include="Models\SabnzbdSettingsModel.cs" />
|
<Compile Include="Models\SabnzbdSettingsModel.cs" />
|
||||||
<Compile Include="Models\EpisodeSortingModel.cs" />
|
<Compile Include="Models\EpisodeSortingModel.cs" />
|
||||||
|
@ -712,7 +713,7 @@
|
||||||
<Content Include="Views\Series\SubMenu.cshtml" />
|
<Content Include="Views\Series\SubMenu.cshtml" />
|
||||||
<Content Include="Views\Series\SeriesSearchResults.cshtml" />
|
<Content Include="Views\Series\SeriesSearchResults.cshtml" />
|
||||||
<Content Include="Views\Shared\Error.cshtml" />
|
<Content Include="Views\Shared\Error.cshtml" />
|
||||||
<Content Include="Views\Settings\UserProfileSection.cshtml" />
|
<Content Include="Views\Settings\QualityProfileItem.cshtml" />
|
||||||
<Content Include="Views\System\Indexers.cshtml" />
|
<Content Include="Views\System\Indexers.cshtml" />
|
||||||
<Content Include="Views\System\Config.cshtml" />
|
<Content Include="Views\System\Config.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
<div class="config-section">
|
<div class="config-section">
|
||||||
<div class="config-group">
|
<div class="config-group">
|
||||||
<div class="config-title">@Html.LabelFor(m => m.DefaultQualityProfileId)</div>
|
<div class="config-title">@Html.LabelFor(m => m.DefaultQualityProfileId)</div>
|
||||||
<div class="config-value">@Html.DropDownListFor(m => m.DefaultQualityProfileId, Model.SelectList)</div>
|
<div class="config-value">@Html.DropDownListFor(m => m.DefaultQualityProfileId, Model.QualityProfileSelectList)</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="config-group2">
|
<div class="config-group2">
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.DefaultQualityProfileId)</div>
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.DefaultQualityProfileId)</div>
|
||||||
|
@ -74,13 +74,13 @@
|
||||||
<div id="leftSide" style="width:35%;">
|
<div id="leftSide" style="width:35%;">
|
||||||
<div style="padding-top: 10px;">
|
<div style="padding-top: 10px;">
|
||||||
<div style="padding-left: 7px; margin-bottom: 5px;">
|
<div style="padding-left: 7px; margin-bottom: 5px;">
|
||||||
<a id="addItem" style="text-decoration:none;" href="@Url.Action("AddUserProfile", "Settings")">
|
<a id="addItem" style="text-decoration:none;" href="@Url.Action("AddProfile", "Settings")">
|
||||||
<img src="../../Content/Images/Plus.png" alt="Add New Profile" />
|
<img src="../../Content/Images/Plus.png" alt="Add New Profile" />
|
||||||
<h4 style="margin-left: 3px; display: inline; color: Black;">Add New Profile</h4></a>
|
<h4 style="margin-left: 3px; display: inline; color: Black;">Add New Profile</h4></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="user-profiles">
|
<div id="profiles">
|
||||||
@foreach (var item in Model.UserProfiles)
|
@foreach (var item in Model.Profiles)
|
||||||
{
|
{
|
||||||
Html.RenderAction("GetQualityProfileView", item);
|
Html.RenderAction("GetQualityProfileView", item);
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
url: this.href,
|
url: this.href,
|
||||||
cache: false,
|
cache: false,
|
||||||
success: function (html) {
|
success: function (html) {
|
||||||
$("#user-profiles").prepend(html);
|
$("#profiles").prepend(html);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -114,8 +114,6 @@
|
||||||
|
|
||||||
function deleteProfile(id) {
|
function deleteProfile(id) {
|
||||||
sendToServer(id);
|
sendToServer(id);
|
||||||
$("#div_" + id).remove();
|
|
||||||
removeOption(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendToServer(id) {
|
function sendToServer(id) {
|
||||||
|
@ -125,6 +123,16 @@
|
||||||
data: jQuery.param({ profileId: id }),
|
data: jQuery.param({ profileId: id }),
|
||||||
error: function (req, status, error) {
|
error: function (req, status, error) {
|
||||||
alert("Sorry! We could not delete your Profile at this time. " + error);
|
alert("Sorry! We could not delete your Profile at this time. " + error);
|
||||||
|
},
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data == "ok") {
|
||||||
|
$("#div_" + id).remove();
|
||||||
|
removeOption(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
alert(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
@model NzbDrone.Core.Repository.Quality.QualityProfile
|
||||||
|
@using System.Collections
|
||||||
|
@using NzbDrone.Core.Repository.Quality
|
||||||
|
@using NzbDrone.Web.Helpers
|
||||||
|
|
||||||
|
@{
|
||||||
|
Layout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function () {
|
||||||
|
addOption('@Model.Name', '@ViewData["ProfileId"]');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@using (Html.BeginCollectionItem("Profiles"))
|
||||||
|
{
|
||||||
|
var idClean = ViewData.TemplateInfo.HtmlFieldPrefix.Replace('[', '_').Replace(']', '_');
|
||||||
|
var ugly = ViewData.TemplateInfo.HtmlFieldPrefix;
|
||||||
|
|
||||||
|
string selectable = String.Format("{0}_selectable", idClean);
|
||||||
|
string allowedStringName = String.Format("{0}_AllowedString", idClean);
|
||||||
|
string title = String.Format("{0}_Title", idClean);
|
||||||
|
string nameBox = String.Format("{0}_Name", idClean);
|
||||||
|
string cutoff = String.Format("{0}.Cutoff", ugly);
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.selectableList .ui-selecting { background: #85AEF9; }
|
||||||
|
.selectableList .ui-selected { background: #065EFE; color: white; }
|
||||||
|
.selectableList { list-style-type: none; margin: 0; padding: 0; }
|
||||||
|
.selectableList li { margin: 3px; margin-left: 10px; padding-left: 0.4em; padding-bottom: 1.5em; padding-top: 0em; float: left; font-size: 1.2em; width: 110px; height: 6px; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function () {
|
||||||
|
$("#@selectable").selectable({
|
||||||
|
create: function () {
|
||||||
|
var result = "";
|
||||||
|
$(".ui-selected", this).each(function () {
|
||||||
|
result += this.id + ",";
|
||||||
|
});
|
||||||
|
$("#@allowedStringName").empty().val(result);
|
||||||
|
},
|
||||||
|
|
||||||
|
stop: function () {
|
||||||
|
var result = "";
|
||||||
|
$(".ui-selected", this).each(function () {
|
||||||
|
result += this.id + ",";
|
||||||
|
});
|
||||||
|
$("#@allowedStringName").empty().val(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="profileSectionEditor" id="div_@(ViewData["ProfileId"])">
|
||||||
|
|
||||||
|
<fieldset style="width:264px; margin:5px; margin-top: 0px; border-color:#CCCCCD">
|
||||||
|
<div class="header">
|
||||||
|
<div id="qualityHeader" style="padding-bottom: 5px; margin: 0px;">
|
||||||
|
<h2 style="display:inline; padding-right: 4px; margin-left: 4px;" id="@title">@{Html.DisplayTextFor(m => m.Name);}</h2>
|
||||||
|
<a href="#" id="@Model.QualityProfileId" class="deleteRow" onclick="deleteProfile('@ViewData["ProfileId"]'); return false;" style="float:right; padding-top:15px; padding-right: 5px;"><img src="../../Content/Images/X.png" alt="Delete"/></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-group" style="width: 255px; margin-bottom: 5px; margin-left: 5px;">
|
||||||
|
<div class="config-title">@Html.LabelFor(x => x.Name)</div>
|
||||||
|
<div class="config-value">@Html.TextBoxFor(x => x.Name, new { maxlength = 16 })</div>
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(x => x.Name)</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-group" style="width: 255px; margin-bottom: 5px; margin-left: 5px;">
|
||||||
|
<div class="config-title">@Html.LabelFor(x => x.Cutoff)</div>
|
||||||
|
<div class="config-value">@Html.DropDownListFor(m => m.Cutoff, new SelectList(ViewData["Qualities"] as IEnumerable, Model.Cutoff))</div>
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(x => x.Cutoff)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="selectableDiv" style="margin-top: 30px;">
|
||||||
|
<ol id="@selectable" class="selectableList">
|
||||||
|
|
||||||
|
@{var qualitiesList = (List<QualityTypes>)ViewData["Qualities"];}
|
||||||
|
|
||||||
|
@for (int i = 0; i < qualitiesList.Count(); i++)
|
||||||
|
{
|
||||||
|
if (Model.Allowed != null)
|
||||||
|
{
|
||||||
|
if (Model.Allowed.Contains(qualitiesList[i]))
|
||||||
|
{
|
||||||
|
<li class="ui-widget-content ui-selected" id="@qualitiesList[i].ToString()">
|
||||||
|
@Html.Label(qualitiesList[i].ToString())
|
||||||
|
</li>
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
<li class="ui-widget-content" id="@qualitiesList[i].ToString()">
|
||||||
|
@Html.Label(qualitiesList[i].ToString())
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hiddenProfileDetails2">
|
||||||
|
@Html.HiddenFor(x => x.QualityProfileId)
|
||||||
|
@Html.HiddenFor(x => x.UserProfile)
|
||||||
|
@Html.HiddenFor(m => m.AllowedString)
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$("#@nameBox").keyup(function () {
|
||||||
|
var value = $(this).val();
|
||||||
|
$("#@title").text(value);
|
||||||
|
renameOption(value, '@ViewData["ProfileId"]');
|
||||||
|
}).keyup();
|
||||||
|
</script>
|
||||||
|
}
|
|
@ -1 +1,58 @@
|
||||||
Hello World
|
Hello World
|
||||||
|
|
||||||
|
<input type="checkbox" id="id_chk1" class="chkbox" value="1" />Check 1<br/>
|
||||||
|
<input type="checkbox" id="id_chk2" class="chkbox" value="2" />Check 2<br/>
|
||||||
|
<input type="checkbox" id="id_chk3" class="chkbox" value="3" />Check 3<br/>
|
||||||
|
<input type="checkbox" id="id_chk4" class="chkbox" value="4" />Check 4<br/>
|
||||||
|
<input type="checkbox" id="id_chk5" class="chkbox" value="5" />Check 5<br/>
|
||||||
|
<input type="checkbox" id="id_chk6" class="chkbox" value="6" />Check 6<br/>
|
||||||
|
<input type="checkbox" id="id_chk7" class="chkbox" value="7" />Check 7<br/>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var lastChecked = null;
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('.chkbox').click(function (event) {
|
||||||
|
if (!lastChecked) {
|
||||||
|
lastChecked = this;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.shiftKey) {
|
||||||
|
var start = $('.chkbox').index(this);
|
||||||
|
var end = $('.chkbox').index(lastChecked);
|
||||||
|
|
||||||
|
for (i = Math.min(start, end); i <= Math.max(start, end); i++) {
|
||||||
|
$('.chkbox')[i].checked = lastChecked.checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastChecked = this;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#selectable .ui-selecting { background: #85AEF9; }
|
||||||
|
#selectable .ui-selected { background: #065EFE; color: white; }
|
||||||
|
#selectable { list-style-type: none; margin: 0; padding: 0; width: 110px; }
|
||||||
|
#selectable li { margin: 3px; padding-left: 0.4em; padding-bottom: 1.5em; padding-top: 0em; font-size: 1.2em; height: 6px; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function () {
|
||||||
|
$("#selectable").selectable();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<ol id="selectable">
|
||||||
|
<li class="ui-widget-content">Unknown</li>
|
||||||
|
<li class="ui-widget-content">SDTV</li>
|
||||||
|
<li class="ui-widget-content">DVD</li>
|
||||||
|
<li class="ui-widget-content">HDTV</li>
|
||||||
|
<li class="ui-widget-content">WEBDL</li>
|
||||||
|
<li class="ui-widget-content">Bluray720p</li>
|
||||||
|
<li class="ui-widget-content">Bluray1080p</li>
|
||||||
|
</ol>
|
|
@ -1,148 +0,0 @@
|
||||||
@model NzbDrone.Core.Repository.Quality.QualityProfile
|
|
||||||
@using NzbDrone.Core.Repository.Quality
|
|
||||||
@using NzbDrone.Web.Helpers
|
|
||||||
|
|
||||||
@{
|
|
||||||
Layout = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function () {
|
|
||||||
addOption('@Model.Name', '@ViewData["ProfileId"]');
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@using (Html.BeginCollectionItem("UserProfiles"))
|
|
||||||
{
|
|
||||||
var idClean = ViewData.TemplateInfo.HtmlFieldPrefix.Replace('[', '_').Replace(']', '_');
|
|
||||||
var ugly = ViewData.TemplateInfo.HtmlFieldPrefix;
|
|
||||||
|
|
||||||
string sortable1 = String.Format("{0}_sortable1", idClean);
|
|
||||||
string sortable2 = String.Format("{0}_sortable2", idClean);
|
|
||||||
string allowedStringName = String.Format("{0}_AllowedString", idClean);
|
|
||||||
string connectedSortable = String.Format("connected{0}", idClean);
|
|
||||||
string title = String.Format("{0}_Title", idClean);
|
|
||||||
string nameBox = String.Format("{0}_Name", idClean);
|
|
||||||
string cutoff = String.Format("{0}.Cutoff", ugly);
|
|
||||||
|
|
||||||
<style type="text/css">
|
|
||||||
.sortable1, .sortable2 { list-style-type: none; margin-right: 10px; background: #eee; padding-left: 5px; padding-right: 5px; padding-top: 0px; padding-bottom: 6px; width: 117px; margin-bottom: 3px; }
|
|
||||||
.allowedQualities, .otherQualities { list-style-type: none; float: left; margin-right: 10px; background: #eee; padding-left: 5px; padding-right: 5px; padding-top:6px; width: 122px; -khtml-border-radius:8px;border-radius:8px;-moz-border-radius:8px;-webkit-border-radius:8px; }
|
|
||||||
.sortable1 li, .sortable2 li { margin: 5px; margin-left: 0px; padding: 0px; font-size: 1.2em; width: 110px; -khtml-border-radius:8px;border-radius:8px;-moz-border-radius:8px;-webkit-border-radius:8px; }
|
|
||||||
.sortable1 li { background: #ddd; }
|
|
||||||
.sortable2 li { background: #DAA2A2; }
|
|
||||||
.sortableHeader { margin:2px; margin-left:12px }
|
|
||||||
.sortable1 li.ui-state-highlight, .sortable2 li.ui-state-highlight { background: #fbf5d0; border-color: #065EFE; }
|
|
||||||
.removeDiv { float: left; display:block; }
|
|
||||||
.ui-state-highlight { height: 1.5em; line-height: 1.2em; }
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(function () {
|
|
||||||
$("#@sortable1, #@sortable2").sortable({
|
|
||||||
connectWith: ".@connectedSortable",
|
|
||||||
placeholder: "ui-state-highlight",
|
|
||||||
dropOnEmpty: true,
|
|
||||||
|
|
||||||
create: function (event, ui) {
|
|
||||||
var order = $('#@sortable1').sortable("toArray");
|
|
||||||
$("#@allowedStringName").val(order);
|
|
||||||
},
|
|
||||||
|
|
||||||
update: function (event, ui) {
|
|
||||||
var order = $('#@sortable1').sortable("toArray");
|
|
||||||
$("#@allowedStringName").val(order);
|
|
||||||
|
|
||||||
//If this is the first QualityType added to the Profile select it as the cutoff value (in-case the user forgets)
|
|
||||||
var $list = $('#@sortable1 li');
|
|
||||||
if ($list.length == 1) {
|
|
||||||
var $radios = $('input[name="@cutoff"]');
|
|
||||||
$radios.filter('[value=' + order + ']').attr('checked', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).disableSelection();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="userProfileSectionEditor" id="div_@(ViewData["ProfileId"])">
|
|
||||||
|
|
||||||
<fieldset style="width:285px; max-width:285px; margin:5px; margin-top: 0px; border-color:#CCCCCD">
|
|
||||||
<div id="tester"></div>
|
|
||||||
|
|
||||||
<div id="qualityHeader" style="padding-bottom: 5px; margin: 0px;">
|
|
||||||
<h2 style="display:inline; padding-right: 4px; margin-left: 4px;" id="@title">@{Html.DisplayTextFor(m => m.Name);}</h2>
|
|
||||||
<a href="#" id="@Model.QualityProfileId" class="deleteRow" onclick="deleteProfile('@ViewData["ProfileId"]')" style="float:right; padding-top:15px;"><img src="../../Content/Images/X.png" alt="Delete"/></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-group" style="width: 270px; margin-bottom: 5px; margin-left: 5px;">
|
|
||||||
<div class="config-title">@Html.LabelFor(x => x.Name)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(x => x.Name, new { maxlength = 16})</div>
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(x => x.Name)</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="sortablesDiv" style="margin: 0px;">
|
|
||||||
<div class="allowedQualities">
|
|
||||||
<h4 class="sortableHeader">Allowed</h4>
|
|
||||||
<ul id="@sortable1" class="@connectedSortable sortable1">
|
|
||||||
@if (Model.Allowed != null)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < Model.Allowed.Count(); i++)
|
|
||||||
{
|
|
||||||
<li class="ui-state-default" id="@Model.Allowed[i].ToString()">
|
|
||||||
@Html.RadioButtonFor(x => x.Cutoff, Model.Allowed[i])
|
|
||||||
@Html.DisplayTextFor(c => c.Allowed[i])
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="otherQualities">
|
|
||||||
<h4 class="sortableHeader">Not-Allowed</h4>
|
|
||||||
<ul id="@sortable2" class="@connectedSortable sortable2">
|
|
||||||
|
|
||||||
@{var qualitiesList = (List<QualityTypes>)ViewData["Qualities"];}
|
|
||||||
|
|
||||||
@for (int i = 0; i < qualitiesList.Count(); i++)
|
|
||||||
{
|
|
||||||
//Skip Unknown and any item that is in the allowed list
|
|
||||||
//if (qualitiesList[i].ToString() == "Unknown")
|
|
||||||
//{
|
|
||||||
// continue;
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (Model.Allowed != null)
|
|
||||||
{
|
|
||||||
if (Model.Allowed.Contains(qualitiesList[i]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
<li class="ui-state-default" id="@qualitiesList[i].ToString()">
|
|
||||||
@Html.RadioButtonFor(x => x.Cutoff, qualitiesList[i])
|
|
||||||
@Html.Label(qualitiesList[i].ToString())
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@Html.ValidationMessageFor(x => x.Cutoff)
|
|
||||||
|
|
||||||
<div class="hiddenProfileDetails">
|
|
||||||
@Html.TextBoxFor(x => x.QualityProfileId, new { @style = "display:none" })
|
|
||||||
@Html.CheckBoxFor(x => x.UserProfile, new { @style = "display:none" })
|
|
||||||
@Html.TextBoxFor(m => m.AllowedString, new { @style = "display:none" })
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
$("#@nameBox").keyup(function () {
|
|
||||||
var value = $(this).val();
|
|
||||||
$("#@title").text(value);
|
|
||||||
renameOption(value, '@ViewData["ProfileId"]');
|
|
||||||
}).keyup();
|
|
||||||
</script>
|
|
||||||
}
|
|
Loading…
Reference in New Issue