forked from forgejo/forgejo
Support Issue forms and PR forms (#20987)
* feat: extend issue template for yaml * feat: support yaml template * feat: render form to markdown * feat: support yaml template for pr * chore: rename to Fields * feat: template unmarshal * feat: split template * feat: render to markdown * feat: use full name as template file name * chore: remove useless file * feat: use dropdown of fomantic ui * feat: update input style * docs: more comments * fix: render text without render * chore: fix lint error * fix: support use description as about in markdown * fix: add field class in form * chore: generate swagger * feat: validate template * feat: support is_nummber and regex * test: fix broken unit tests * fix: ignore empty body of md template * fix: make multiple easymde editors work in one page * feat: better UI * fix: js error in pr form * chore: generate swagger * feat: support regex validation * chore: generate swagger * fix: refresh each markdown editor * chore: give up required validation * fix: correct issue template candidates * fix: correct checkboxes style * chore: ignore .hugo_build.lock in docs * docs: separate out a new doc for merge templates * docs: introduce syntax of yaml template * feat: show a alert for invalid templates * test: add case for a valid template * fix: correct attributes of required checkbox * fix: add class not-under-easymde for dropzone * fix: use more back-quotes * chore: remove translation in zh-CN * fix EasyMDE statusbar margin * fix: remove repeated blocks * fix: reuse regex for quotes Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
parent
b7a4b45ff8
commit
84447df4d3
30 changed files with 1776 additions and 176 deletions
|
@ -2,6 +2,7 @@
|
|||
<div class="page-content repository new issue">
|
||||
{{template "repo/header" .}}
|
||||
<div class="ui container">
|
||||
{{template "base/alert" .}}
|
||||
<div class="navbar">
|
||||
{{template "repo/issue/navbar" .}}
|
||||
</div>
|
||||
|
|
|
@ -1,17 +1,34 @@
|
|||
<div class="ui top tabular menu" data-write="write" data-preview="preview">
|
||||
<a class="active item" data-tab="write">{{.locale.Tr "write"}}</a>
|
||||
<a class="item" data-tab="preview" data-url="{{.Repository.HTMLURL}}/markdown" data-context="{{.RepoLink}}">{{.locale.Tr "preview"}}</a>
|
||||
</div>
|
||||
<div class="field">
|
||||
<div class="ui bottom active tab" data-tab="write">
|
||||
{{if .Fields}}
|
||||
<input type="hidden" name="template-file" value="{{.TemplateFile}}">
|
||||
{{range .Fields}}
|
||||
{{if eq .Type "input"}}
|
||||
{{template "repo/issue/fields/input" .}}
|
||||
{{else if eq .Type "markdown"}}
|
||||
{{template "repo/issue/fields/markdown" .}}
|
||||
{{else if eq .Type "textarea"}}
|
||||
{{template "repo/issue/fields/textarea" .}}
|
||||
{{else if eq .Type "dropdown"}}
|
||||
{{template "repo/issue/fields/dropdown" .}}
|
||||
{{else if eq .Type "checkboxes"}}
|
||||
{{template "repo/issue/fields/checkboxes" .}}
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{else}}
|
||||
<div class="ui top tabular menu" data-write="write" data-preview="preview">
|
||||
<a class="active item" data-tab="write">{{.locale.Tr "write"}}</a>
|
||||
<a class="item" data-tab="preview" data-url="{{.Repository.HTMLURL}}/markdown" data-context="{{.RepoLink}}">{{.locale.Tr "preview"}}</a>
|
||||
</div>
|
||||
<div class="field">
|
||||
<div class="ui bottom active tab" data-tab="write">
|
||||
<textarea id="content" class="edit_area js-quick-submit" name="content" tabindex="4" data-id="issue-{{.RepoName}}" data-url="{{.Repository.HTMLURL}}/markdown" data-context="{{.Repo.RepoLink}}">
|
||||
{{- if .BodyQuery}}{{.BodyQuery}}{{else if .IssueTemplate}}{{.IssueTemplate}}{{else if .PullRequestTemplate}}{{.PullRequestTemplate}}{{else}}{{.content}}{{end -}}
|
||||
</textarea>
|
||||
</div>
|
||||
<div class="ui bottom tab markup" data-tab="preview">
|
||||
{{.locale.Tr "loading"}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui bottom tab markup" data-tab="preview">
|
||||
{{.locale.Tr "loading"}}
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
{{if .IsAttachmentEnabled}}
|
||||
<div class="field">
|
||||
{{template "repo/upload" .}}
|
||||
|
|
12
templates/repo/issue/fields/checkboxes.tmpl
Normal file
12
templates/repo/issue/fields/checkboxes.tmpl
Normal file
|
@ -0,0 +1,12 @@
|
|||
<div class="field">
|
||||
{{template "repo/issue/fields/header" .}}
|
||||
{{$field := .}}
|
||||
{{range $i, $opt := .Attributes.options}}
|
||||
<div class="field">
|
||||
<div class="ui checkbox">
|
||||
<input type="checkbox" name="form-field-{{$field.ID}}-{{$i}}" {{if $opt.required}}readonly checked{{end}}>
|
||||
<label>{{$opt.label}}</label>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
14
templates/repo/issue/fields/dropdown.tmpl
Normal file
14
templates/repo/issue/fields/dropdown.tmpl
Normal file
|
@ -0,0 +1,14 @@
|
|||
<div class="field">
|
||||
{{template "repo/issue/fields/header" .}}
|
||||
{{/* FIXME: required validation */}}
|
||||
<div class="ui fluid selection dropdown {{if .Attributes.multiple}}multiple clearable{{end}}">
|
||||
<input type="hidden" name="form-field-{{.ID}}" value="0">
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="default text"></div>
|
||||
<div class="menu">
|
||||
{{range $i, $opt := .Attributes.options}}
|
||||
<div class="item" data-value="{{$i}}">{{$opt}}</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
6
templates/repo/issue/fields/header.tmpl
Normal file
6
templates/repo/issue/fields/header.tmpl
Normal file
|
@ -0,0 +1,6 @@
|
|||
{{if .Attributes.label}}
|
||||
<h3>{{.Attributes.label}}{{if .Validations.required}}<label class="required"></label>{{end}}</h3>
|
||||
{{end}}
|
||||
{{if .Attributes.description}}
|
||||
<span class="help">{{RenderMarkdownToHtml .Attributes.description}}</span>
|
||||
{{end}}
|
4
templates/repo/issue/fields/input.tmpl
Normal file
4
templates/repo/issue/fields/input.tmpl
Normal file
|
@ -0,0 +1,4 @@
|
|||
<div class="field">
|
||||
{{template "repo/issue/fields/header" .}}
|
||||
<input type="{{if .Validations.is_number}}number{{else}}text{{end}}" name="form-field-{{.ID}}" placeholder="{{.Attributes.placeholder}}" value="{{.Attributes.value}}" {{if .Validations.required}}required{{end}} {{if .Validations.regex}}pattern="{{.Validations.regex}}" title="{{.Validations.regex}}"{{end}}>
|
||||
</div>
|
3
templates/repo/issue/fields/markdown.tmpl
Normal file
3
templates/repo/issue/fields/markdown.tmpl
Normal file
|
@ -0,0 +1,3 @@
|
|||
<div class="field">
|
||||
<div>{{RenderMarkdownToHtml .Attributes.value}}</div>
|
||||
</div>
|
6
templates/repo/issue/fields/textarea.tmpl
Normal file
6
templates/repo/issue/fields/textarea.tmpl
Normal file
|
@ -0,0 +1,6 @@
|
|||
<div class="field">
|
||||
{{template "repo/issue/fields/header" .}}
|
||||
{{/* FIXME: preview markdown result */}}
|
||||
{{/* FIXME: required validation for markdown editor */}}
|
||||
<textarea name="form-field-{{.ID}}" placeholder="{{.Attributes.placeholder}}" class="edit_area {{if .Attributes.render}}no-easymde{{end}}" {{if and .Validations.required .Attributes.render}}required{{end}}>{{.Attributes.value}}</textarea>
|
||||
</div>
|
|
@ -6,6 +6,14 @@
|
|||
{{template "repo/issue/navbar" .}}
|
||||
</div>
|
||||
<div class="ui divider"></div>
|
||||
{{if .Flash.WarningMsg}}
|
||||
{{/*
|
||||
There's alreay a importing of alert.tmpl in new_form.tmpl,
|
||||
but only the negative message will be displayed within forms for some reasons, see semantic.css:10659.
|
||||
To avoid repeated negative messages, the importing here if for .Flash.WarningMsg only.
|
||||
*/}}
|
||||
{{template "base/alert" .}}
|
||||
{{end}}
|
||||
{{template "repo/issue/new_form" .}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue