mirror of
https://github.com/lidarr/Lidarr
synced 2024-12-28 02:27:13 +00:00
8e214029c9
Moved Download Propers to Quality settings. Cleaned up Quality UI and enhanced it with some jQuery goodness. Mmmmm jQuery.
148 lines
No EOL
6.6 KiB
Text
148 lines
No EOL
6.6 KiB
Text
@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>
|
|
} |