Auto complete for paths added. Config text boxes are now wider.
This commit is contained in:
parent
ff673f3d7d
commit
bda226096b
|
@ -190,14 +190,14 @@ hr
|
|||
/* Config Pages */
|
||||
.config-section
|
||||
{
|
||||
width: 650px;
|
||||
width: 800px;
|
||||
height: 45px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.config-group
|
||||
{
|
||||
width: 300px;
|
||||
width: 385px;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 20px;
|
||||
|
@ -205,7 +205,7 @@ hr
|
|||
|
||||
.config-group2
|
||||
{
|
||||
width: 300px;
|
||||
width: 385px;
|
||||
display: block;
|
||||
float: right;
|
||||
height: 20px;
|
||||
|
@ -223,6 +223,11 @@ hr
|
|||
float: right;
|
||||
}
|
||||
|
||||
input[type=text]
|
||||
{
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
.config-validation
|
||||
{
|
||||
color: Red;
|
||||
|
|
|
@ -184,6 +184,7 @@ namespace NzbDrone.Web.Controllers
|
|||
return new SelectList(dataVal, "Id", "SeriesName", selectId);
|
||||
}
|
||||
|
||||
//Root Directory
|
||||
[HttpPost]
|
||||
public JsonResult SaveRootDir(int id, string path)
|
||||
{
|
||||
|
@ -202,23 +203,29 @@ namespace NzbDrone.Web.Controllers
|
|||
return new JsonResult { Data = "ok" };
|
||||
}
|
||||
|
||||
public ViewResult AddRootDir()
|
||||
public PartialViewResult AddRootDir()
|
||||
{
|
||||
var rootDir = new RootDir { Path = String.Empty };
|
||||
|
||||
var id = _rootFolderProvider.Add(rootDir);
|
||||
rootDir.Id = id;
|
||||
|
||||
ViewData["RootDirId"] = id;
|
||||
var model = new RootDirModel();
|
||||
model.Id = rootDir.Id;
|
||||
model.Path = rootDir.Path;
|
||||
model.SelectList = new SelectList(new List<string> { rootDir.Path }, rootDir.Path);
|
||||
|
||||
return View("RootDir", rootDir);
|
||||
return PartialView("RootDir", model);
|
||||
}
|
||||
|
||||
public ActionResult GetRootDirView(RootDir rootDir)
|
||||
{
|
||||
ViewData["RootDirId"] = rootDir.Id;
|
||||
var model = new RootDirModel();
|
||||
model.Id = rootDir.Id;
|
||||
model.Path = rootDir.Path;
|
||||
model.SelectList = new SelectList(new List<string> { rootDir.Path }, rootDir.Path);
|
||||
|
||||
return PartialView("RootDir", rootDir);
|
||||
return PartialView("RootDir", model);
|
||||
}
|
||||
|
||||
public JsonResult DeleteRootDir(int rootDirId)
|
||||
|
@ -235,28 +242,5 @@ namespace NzbDrone.Web.Controllers
|
|||
|
||||
return new JsonResult { Data = "ok" };
|
||||
}
|
||||
|
||||
public JsonResult JsonAutoCompletePath(string term)
|
||||
{
|
||||
var windowsSep = term.LastIndexOf('\\');
|
||||
|
||||
if (windowsSep > -1)
|
||||
{
|
||||
var start = term.Substring(windowsSep + 1);
|
||||
var dirs = _diskProvider.GetDirectories(term.Substring(0, windowsSep + 1)).Where(d => new DirectoryInfo(d).Name.ToLower().StartsWith(start.ToLower())).Take(10);
|
||||
return Json(dirs.ToArray(), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
|
||||
var index = term.LastIndexOf('/');
|
||||
|
||||
if (index > -1)
|
||||
{
|
||||
var start = term.Substring(index + 1);
|
||||
var dirs = _diskProvider.GetDirectories(term.Substring(0, index + 1)).Where(d => new DirectoryInfo(d).Name.ToLower().StartsWith(start.ToLower())).Take(10);
|
||||
return Json(dirs.ToArray(), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
|
||||
return Json(new JsonResult(), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using NzbDrone.Core.Providers.Core;
|
||||
|
||||
namespace NzbDrone.Web.Controllers
|
||||
{
|
||||
public class DirectoryController : Controller
|
||||
{
|
||||
private readonly DiskProvider _diskProvider;
|
||||
|
||||
public DirectoryController(DiskProvider diskProvider)
|
||||
{
|
||||
_diskProvider = diskProvider;
|
||||
}
|
||||
|
||||
public ActionResult Test()
|
||||
{
|
||||
return Content("Testing...");
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult _autoCompletePath(string text, int? filterMode)
|
||||
{
|
||||
var data = GetDirectories(text);
|
||||
|
||||
return new JsonResult
|
||||
{
|
||||
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
|
||||
Data = data
|
||||
};
|
||||
}
|
||||
|
||||
public SelectList GetDirectories(string text)
|
||||
{
|
||||
//Windows (Including UNC)
|
||||
var windowsSep = text.LastIndexOf('\\');
|
||||
|
||||
if (windowsSep > -1)
|
||||
{
|
||||
var dirs = _diskProvider.GetDirectories(text.Substring(0, windowsSep + 1));
|
||||
return new SelectList(dirs, dirs.FirstOrDefault());
|
||||
}
|
||||
|
||||
//Unix
|
||||
var index = text.LastIndexOf('/');
|
||||
|
||||
if (index > -1)
|
||||
{
|
||||
var dirs = _diskProvider.GetDirectories(text.Substring(0, index + 1));
|
||||
return new SelectList(dirs, dirs.FirstOrDefault());
|
||||
}
|
||||
|
||||
return new SelectList(new List<string>());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -96,6 +96,9 @@ namespace NzbDrone.Web.Controllers
|
|||
{
|
||||
ViewData["viewName"] = "Sabnzbd";
|
||||
|
||||
var sabDropDir = _configProvider.SabDropDirectory;
|
||||
var selectList = new SelectList(new List<string> {sabDropDir}, sabDropDir);
|
||||
|
||||
var model = new SabnzbdSettingsModel
|
||||
{
|
||||
SabHost = _configProvider.SabHost,
|
||||
|
@ -105,7 +108,8 @@ namespace NzbDrone.Web.Controllers
|
|||
SabPassword = _configProvider.SabPassword,
|
||||
SabTvCategory = _configProvider.SabTvCategory,
|
||||
SabTvPriority = _configProvider.SabTvPriority,
|
||||
SabDropDirectory = _configProvider.SabDropDirectory
|
||||
SabDropDirectory = sabDropDir,
|
||||
SabDropDirectorySelectList = selectList
|
||||
};
|
||||
|
||||
return View("Index", model);
|
||||
|
|
|
@ -2,12 +2,15 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace NzbDrone.Web.Models
|
||||
{
|
||||
public class RootDirModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Path { get; set; }
|
||||
public string CleanPath { get; set; }
|
||||
public SelectList SelectList { get; set; }
|
||||
}
|
||||
}
|
|
@ -56,5 +56,7 @@ namespace NzbDrone.Web.Models
|
|||
[Description("The directory where SABnzbd stores TV shows (NzbDrone will sort them for you)")]
|
||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
||||
public string SabDropDirectory { get; set; }
|
||||
|
||||
public SelectList SabDropDirectorySelectList { get; set; }
|
||||
}
|
||||
}
|
|
@ -236,6 +236,7 @@
|
|||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>UploadLocalization.en-US.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Controllers\DirectoryController.cs" />
|
||||
<Compile Include="Controllers\EpisodeController.cs" />
|
||||
<Compile Include="Controllers\HealthController.cs" />
|
||||
<Compile Include="Controllers\HistoryController.cs" />
|
||||
|
|
|
@ -153,7 +153,7 @@
|
|||
var saveRootDirUrl = '@Url.Action("SaveRootDir", "AddSeries")';
|
||||
|
||||
function saveRootDir(id) {
|
||||
var path = $('#path_' + id).val();
|
||||
var path = $("#path_" + id).data("tComboBox").value();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@model NzbDrone.Core.Repository.RootDir
|
||||
@model NzbDrone.Web.Models.RootDirModel
|
||||
|
||||
@{
|
||||
Layout = null;
|
||||
|
@ -6,8 +6,17 @@
|
|||
|
||||
<div class="rootDirSection" id="rootDir_@(Model.Id)" style="padding: 7px; padding-left: 3px;">
|
||||
<fieldset style="padding: 5px; height: 40px;">
|
||||
@Html.TextBoxFor(m => m.Path, new { @class = "root_dir_text", id = "path_" + Model.Id })
|
||||
<a href="#" class="deleteRow" onclick="deleteRootDir('@ViewData["RootDirId"]')">
|
||||
@{Html.Telerik().ComboBox()
|
||||
.Name("path_" + Model.Id)
|
||||
.BindTo(Model.SelectList)
|
||||
.DataBinding(binding => binding.Ajax().Select("_autoCompletePath", "Directory").Delay(400).Cache(false))
|
||||
.Filterable(f => f.FilterMode(AutoCompleteFilterMode.StartsWith))
|
||||
.HighlightFirstMatch(true)
|
||||
.HtmlAttributes(new { style = "width: 300px;" })
|
||||
.Render();}
|
||||
|
||||
|
||||
<a href="#RemoveRootDir" class="deleteRow" onclick="deleteRootDir(@Model.Id); return false;">
|
||||
<img src="../../Content/Images/X.png" alt="Delete" width="20px" height="20px" style="vertical-align: middle; margin-top: 7px;"/></a>
|
||||
<button style="padding: 2px 10px 2px 10px; vertical-align: middle; margin: 0px; margin-top: 7px;" onclick="saveRootDir(@Model.Id)">Save</button>
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
.indexer_group
|
||||
{
|
||||
width: 220px;
|
||||
width: 290px;
|
||||
}
|
||||
|
||||
.indexer_left
|
||||
|
@ -48,8 +48,10 @@
|
|||
|
||||
.indexer_checkbox
|
||||
{
|
||||
margin-right: 135px;
|
||||
margin-right: 205px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@using (Html.BeginForm("SaveIndexers", "Settings", FormMethod.Post, new { id = "form", name = "form" })) {
|
||||
|
@ -60,7 +62,7 @@
|
|||
<div>
|
||||
@{ Html.Telerik().PanelBar()
|
||||
.Name("PanelBar")
|
||||
.HtmlAttributes(new { style = "width: 300px; margin: 10px;" })
|
||||
.HtmlAttributes(new { style = "width: 500px; margin: 10px;" })
|
||||
.ExpandMode(PanelBarExpandMode.Single)
|
||||
.SelectedIndex(0)
|
||||
.Items(indexerItem =>
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
</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 = 15 })</div>
|
||||
<div class="config-value">@Html.TextBoxFor(x => x.Name, new { maxlength = 15, style="width: 150px" })</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;">
|
||||
|
|
|
@ -112,7 +112,14 @@
|
|||
<div class="config-section">
|
||||
<div class="config-group">
|
||||
<div class="config-title">@Html.LabelFor(m => m.SabDropDirectory)</div>
|
||||
<div class="config-value">@Html.TextBoxFor(m => m.SabDropDirectory)</div>
|
||||
<div class="config-value">@{Html.Telerik().ComboBoxFor(m => m.SabDropDirectory)
|
||||
.BindTo(Model.SabDropDirectorySelectList)
|
||||
.DataBinding(binding => binding.Ajax().Select("_autoCompletePath", "Directory").Delay(400).Cache(false))
|
||||
.Filterable(f => f.FilterMode(AutoCompleteFilterMode.StartsWith))
|
||||
.HighlightFirstMatch(true)
|
||||
.HtmlAttributes(new { style = "margin-left: -2px; width: 220px;" })
|
||||
.Render();}</div>
|
||||
|
||||
</div>
|
||||
<div class="config-group2">
|
||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabDropDirectory)</div>
|
||||
|
|
Loading…
Reference in New Issue