aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2024-07-14 07:38:45 -0700
committerGitHub <noreply@github.com>2024-07-14 16:38:45 +0200
commit1064e817c4a6fa6eb5170143150505503c4ef6ed (patch)
tree601686fa6c4fa88705f25b840cb9357b2f380ef6
parent957c75bfd21b7ff15c37eae5c8cd86bae974ac5d (diff)
downloadgitea-1064e817c4a6fa6eb5170143150505503c4ef6ed.tar.gz
gitea-1064e817c4a6fa6eb5170143150505503c4ef6ed.zip
Issue Templates: add option to have dropdown printed list (#31577)
Issue template dropdown can have many entries, and it could be better to have them rendered as list later on if multi-select is enabled. so this adds an option to the issue template engine to do so. DOCS: https://gitea.com/gitea/docs/pulls/19 --- ## demo: ```yaml name: Name title: Title about: About labels: ["label1", "label2"] ref: Ref body: - type: dropdown id: id6 attributes: label: Label of dropdown (list) description: Description of dropdown multiple: true list: true options: - Option 1 of dropdown - Option 2 of dropdown - Option 3 of dropdown - Option 4 of dropdown - Option 5 of dropdown - Option 6 of dropdown - Option 7 of dropdown - Option 8 of dropdown - Option 9 of dropdown ``` ![image](https://github.com/user-attachments/assets/102ed0f4-89da-420b-ab2a-1788b59676f9) ![image](https://github.com/user-attachments/assets/a2bdb14e-43ff-4cc6-9bbe-20244830453c) --- *Sponsored by Kithara Software GmbH*
-rw-r--r--modules/issue/template/template.go11
-rw-r--r--modules/issue/template/template_test.go43
2 files changed, 48 insertions, 6 deletions
diff --git a/modules/issue/template/template.go b/modules/issue/template/template.go
index cf5fcf28e5..0a105c723c 100644
--- a/modules/issue/template/template.go
+++ b/modules/issue/template/template.go
@@ -88,6 +88,9 @@ func validateYaml(template *api.IssueTemplate) error {
if err := validateBoolItem(position, field.Attributes, "multiple"); err != nil {
return err
}
+ if err := validateBoolItem(position, field.Attributes, "list"); err != nil {
+ return err
+ }
if err := validateOptions(field, idx); err != nil {
return err
}
@@ -340,7 +343,13 @@ func (f *valuedField) WriteTo(builder *strings.Builder) {
}
}
if len(checkeds) > 0 {
- _, _ = fmt.Fprintf(builder, "%s\n", strings.Join(checkeds, ", "))
+ if list, ok := f.Attributes["list"].(bool); ok && list {
+ for _, check := range checkeds {
+ _, _ = fmt.Fprintf(builder, "- %s\n", check)
+ }
+ } else {
+ _, _ = fmt.Fprintf(builder, "%s\n", strings.Join(checkeds, ", "))
+ }
} else {
_, _ = fmt.Fprint(builder, blankPlaceholder)
}
diff --git a/modules/issue/template/template_test.go b/modules/issue/template/template_test.go
index 481058754d..349dbeabb0 100644
--- a/modules/issue/template/template_test.go
+++ b/modules/issue/template/template_test.go
@@ -217,6 +217,20 @@ body:
wantErr: "body[0](dropdown): 'multiple' should be a bool",
},
{
+ name: "dropdown invalid list",
+ content: `
+name: "test"
+about: "this is about"
+body:
+ - type: "dropdown"
+ id: "1"
+ attributes:
+ label: "a"
+ list: "on"
+`,
+ wantErr: "body[0](dropdown): 'list' should be a bool",
+ },
+ {
name: "checkboxes invalid description",
content: `
name: "test"
@@ -807,7 +821,7 @@ body:
- type: dropdown
id: id5
attributes:
- label: Label of dropdown
+ label: Label of dropdown (one line)
description: Description of dropdown
multiple: true
options:
@@ -816,9 +830,22 @@ body:
- Option 3 of dropdown
validations:
required: true
- - type: checkboxes
+ - type: dropdown
id: id6
attributes:
+ label: Label of dropdown (list)
+ description: Description of dropdown
+ multiple: true
+ list: true
+ options:
+ - Option 1 of dropdown
+ - Option 2 of dropdown
+ - Option 3 of dropdown
+ validations:
+ required: true
+ - type: checkboxes
+ id: id7
+ attributes:
label: Label of checkboxes
description: Description of checkboxes
options:
@@ -836,8 +863,9 @@ body:
"form-field-id3": {"Value of id3"},
"form-field-id4": {"Value of id4"},
"form-field-id5": {"0,1"},
- "form-field-id6-0": {"on"},
- "form-field-id6-2": {"on"},
+ "form-field-id6": {"1,2"},
+ "form-field-id7-0": {"on"},
+ "form-field-id7-2": {"on"},
},
},
@@ -849,10 +877,15 @@ body:
Value of id4
-### Label of dropdown
+### Label of dropdown (one line)
Option 1 of dropdown, Option 2 of dropdown
+### Label of dropdown (list)
+
+- Option 2 of dropdown
+- Option 3 of dropdown
+
### Label of checkboxes
- [x] Option 1 of checkboxes