mirror of https://github.com/Jackett/Jackett
Added a "select" input type and "default" value for settings. (#1423)
* Added a selectbox and updated nyaasi to include two. * Added a "default" field for settings.
This commit is contained in:
parent
31ce2ca545
commit
a3c443e69b
|
@ -62,6 +62,10 @@ body {
|
|||
height: 20px;
|
||||
}
|
||||
|
||||
.setup-item-inputselect {
|
||||
max-width: 255px;
|
||||
}
|
||||
|
||||
[data-type=hiddendata]{
|
||||
display: none;
|
||||
}
|
||||
|
|
|
@ -527,6 +527,9 @@ function getConfigModalJson(configForm) {
|
|||
case "inputbool":
|
||||
itemEntry.value = $el.find(".setup-item-inputbool input").is(":checked");
|
||||
break;
|
||||
case "inputselect":
|
||||
itemEntry.value = $el.find(".setup-item-inputselect select").val();
|
||||
break;
|
||||
case "recaptcha":
|
||||
if (window.jackettIsLocal) {
|
||||
var version = $el.find('.jackettrecaptcha').data("version");
|
||||
|
|
|
@ -62,6 +62,10 @@ body {
|
|||
height: 20px;
|
||||
}
|
||||
|
||||
.setup-item-inputselect {
|
||||
max-width: 255px;
|
||||
}
|
||||
|
||||
[data-type=hiddendata]{
|
||||
display: none;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
<script src="../libs/handlebars.min.js"></script>
|
||||
<script src="../libs/moment.min.js"></script>
|
||||
<script src="../libs/handlebarsmoment.js"></script>
|
||||
<script src="../libs/handlebarsextend.js"></script>
|
||||
<script src="../bootstrap/bootstrap.min.js"></script>
|
||||
<script src="../libs/bootstrap-notify.js"></script>
|
||||
<script src="https://www.google.com/recaptcha/api.js?render=explicit" async defer></script>
|
||||
|
@ -178,6 +179,19 @@
|
|||
{{/if}}
|
||||
</div>
|
||||
</script>
|
||||
<script id="setup-item-inputselect" type="text/x-handlebars-template">
|
||||
<div class="setup-item-inputselect">
|
||||
<select class="form-control" data-id="{{id}}">
|
||||
{{#each options}}
|
||||
{{#ifCond ../value @key}}
|
||||
<option value="{{@key}}" selected>{{this}}</option>
|
||||
{{else}}
|
||||
<option value="{{@key}}">{{this}}</option>
|
||||
{{/ifCond}}
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</script>
|
||||
<script id="setup-item-recaptcha" type="text/x-handlebars-template">
|
||||
<div class="jackettrecaptcha">
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
Handlebars.registerHelper('ifCond', function (v1, v2, options) {
|
||||
if(v1 === v2) {
|
||||
return options.fn(this);
|
||||
}
|
||||
return options.inverse(this);
|
||||
});
|
|
@ -40,6 +40,9 @@
|
|||
case "inputbool":
|
||||
data.config[id] = $valEl.val();
|
||||
break;
|
||||
case "inputselect":
|
||||
data.config[id] = $valEl.val();
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -7,7 +7,36 @@
|
|||
links:
|
||||
- https://nyaa.si
|
||||
|
||||
settings: []
|
||||
settings:
|
||||
- name: filter-id
|
||||
type: select
|
||||
label: Filter
|
||||
default: "0"
|
||||
options:
|
||||
0: No filter
|
||||
1: No remakes
|
||||
2: Trusted only
|
||||
- name: cat-id
|
||||
type: select
|
||||
label: Category
|
||||
default: "0_0"
|
||||
options:
|
||||
0_0: "All categories"
|
||||
1_0: "Anime"
|
||||
1_1: "- Anime Music Video"
|
||||
1_2: "- English-translated"
|
||||
1_3: "- Non-English-translated"
|
||||
1_4: "- Raw"
|
||||
2_0: "Audio"
|
||||
2_1: "- Lossless"
|
||||
2_2: "- Lossy"
|
||||
3_0: "Literature"
|
||||
3_1: "- English-translated"
|
||||
3_2: "- Non-English-translated"
|
||||
3_3: "- Lossy"
|
||||
6_0: "Software"
|
||||
6_1: "- Applications"
|
||||
6_2: "- Games"
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@ -30,16 +59,16 @@
|
|||
- {id: 6_0, cat: PC, desc: "Software"}
|
||||
- {id: 6_1, cat: PC/ISO, desc: "Applications"}
|
||||
- {id: 6_2, cat: PC/Games, desc: "Games"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
|
||||
|
||||
search:
|
||||
path: /
|
||||
inputs:
|
||||
q: "{{ .Query.Keywords}}"
|
||||
f: "{{ .Config.filter-id }}"
|
||||
c: "{{ .Config.cat-id }}"
|
||||
rows:
|
||||
selector: tr.default,tr.danger,tr.success
|
||||
fields:
|
||||
|
|
|
@ -113,6 +113,8 @@ namespace Jackett.Indexers
|
|||
public string Name { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Label { get; set; }
|
||||
public string Default { get; set; }
|
||||
public Dictionary<string, string> Options { get; set; }
|
||||
}
|
||||
|
||||
public class CategorymappingBlock
|
||||
|
@ -302,18 +304,40 @@ namespace Jackett.Indexers
|
|||
foreach (var Setting in Definition.Settings)
|
||||
{
|
||||
Item item;
|
||||
if (Setting.Type != null && Setting.Type == "checkbox")
|
||||
|
||||
if (Setting.Type != null)
|
||||
{
|
||||
item = new BoolItem() { Value = false };
|
||||
}
|
||||
else if(Setting.Type != null && Setting.Type == "password")
|
||||
{
|
||||
item = new StringItem();
|
||||
switch (Setting.Type)
|
||||
{
|
||||
case "checkbox":
|
||||
item = new BoolItem {Value = false};
|
||||
|
||||
if (Setting.Default != null && Setting.Default == "true")
|
||||
{
|
||||
((BoolItem) item).Value = true;
|
||||
}
|
||||
break;
|
||||
case "password":
|
||||
case "text":
|
||||
item = new StringItem { Value = Setting.Default };
|
||||
break;
|
||||
case "select":
|
||||
if (Setting.Options == null)
|
||||
{
|
||||
throw new Exception("Options must be given for the 'select' type.");
|
||||
}
|
||||
|
||||
item = new SelectItem(Setting.Options) { Value = Setting.Default };
|
||||
break;
|
||||
default:
|
||||
throw new Exception($"Invalid setting type '{Setting.Type}' specified.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item = new StringItem();
|
||||
item = new StringItem { Value = Setting.Default }; ;
|
||||
}
|
||||
|
||||
item.Name = Setting.Label;
|
||||
configData.AddDynamic(Setting.Name, item);
|
||||
}
|
||||
|
@ -377,6 +401,10 @@ namespace Jackett.Indexers
|
|||
{
|
||||
value = (((BoolItem)item).Value == true ? "true" : "");
|
||||
}
|
||||
else if (item.GetType() == typeof(SelectItem))
|
||||
{
|
||||
value = ((SelectItem)item).Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = ((StringItem)item).Value;
|
||||
|
|
|
@ -419,6 +419,9 @@
|
|||
<None Include="Resources\test.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Content\libs\handlebarsextend.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Definitions\**\*.yml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
|
|
|
@ -4,9 +4,6 @@ using Newtonsoft.Json.Linq;
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Jackett.Models.IndexerConfig
|
||||
{
|
||||
|
@ -19,6 +16,7 @@ namespace Jackett.Models.IndexerConfig
|
|||
{
|
||||
InputString,
|
||||
InputBool,
|
||||
InputSelect,
|
||||
DisplayImage,
|
||||
DisplayInfo,
|
||||
HiddenData,
|
||||
|
@ -85,6 +83,9 @@ namespace Jackett.Models.IndexerConfig
|
|||
case ItemType.InputBool:
|
||||
((BoolItem)item).Value = arrItem.Value<bool>("value");
|
||||
break;
|
||||
case ItemType.InputSelect:
|
||||
((SelectItem)item).Value = arrItem.Value<string>("value");
|
||||
break;
|
||||
case ItemType.Recaptcha:
|
||||
((RecaptchaItem)item).Value = arrItem.Value<string>("value");
|
||||
((RecaptchaItem)item).Cookie = arrItem.Value<string>("cookie");
|
||||
|
@ -129,6 +130,15 @@ namespace Jackett.Models.IndexerConfig
|
|||
case ItemType.InputBool:
|
||||
jObject["value"] = ((BoolItem)item).Value;
|
||||
break;
|
||||
case ItemType.InputSelect:
|
||||
jObject["value"] = ((SelectItem)item).Value;
|
||||
jObject["options"] = new JObject();
|
||||
|
||||
foreach (var option in ((SelectItem)item).Options)
|
||||
{
|
||||
jObject["options"][option.Key] = option.Value;
|
||||
}
|
||||
break;
|
||||
case ItemType.DisplayImage:
|
||||
string dataUri = DataUrlUtils.BytesToDataUrl(((ImageItem)item).Value, "image/jpeg");
|
||||
jObject["value"] = dataUri;
|
||||
|
@ -156,7 +166,7 @@ namespace Jackett.Models.IndexerConfig
|
|||
if (!forDisplay)
|
||||
{
|
||||
properties = properties
|
||||
.Where(p => p.ItemType == ItemType.HiddenData || p.ItemType == ItemType.InputBool || p.ItemType == ItemType.InputString || p.ItemType == ItemType.Recaptcha || p.ItemType == ItemType.DisplayInfo)
|
||||
.Where(p => p.ItemType == ItemType.HiddenData || p.ItemType == ItemType.InputBool || p.ItemType == ItemType.InputString || p.ItemType == ItemType.InputSelect || p.ItemType == ItemType.Recaptcha || p.ItemType == ItemType.DisplayInfo)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
@ -245,6 +255,19 @@ namespace Jackett.Models.IndexerConfig
|
|||
}
|
||||
}
|
||||
|
||||
public class SelectItem : Item
|
||||
{
|
||||
public string Value { get; set; }
|
||||
|
||||
public Dictionary<string, string> Options { get; }
|
||||
|
||||
public SelectItem(Dictionary<string, string> options)
|
||||
{
|
||||
ItemType = ItemType.InputSelect;
|
||||
Options = options;
|
||||
}
|
||||
}
|
||||
|
||||
//public abstract Item[] GetItems();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue