mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-26 09:24:07 -05:00
eed6b28fc0
Rendering of Allow Edits from Maintainers did not check if the head repo exists, while other parts of the page handle it gracefully.
709 lines
30 KiB
Handlebars
709 lines
30 KiB
Handlebars
<div class="four wide column">
|
|
<div class="ui segment metas">
|
|
{{template "repo/issue/branch_selector_field" .}}
|
|
|
|
{{if .Issue.IsPull}}
|
|
|
|
<input id="reviewer_id" name="reviewer_id" type="hidden" value="{{.reviewer_id}}">
|
|
<div class="ui {{if or (not .Reviewers) (not .CanChooseReviewer) .Repository.IsArchived}}disabled{{end}} floating jump select-reviewers-modify dropdown">
|
|
<a class="text gt-df gt-ac muted">
|
|
<strong>{{.locale.Tr "repo.issues.review.reviewers"}}</strong>
|
|
{{if and .CanChooseReviewer (not .Repository.IsArchived)}}
|
|
{{svg "octicon-gear" 16 "gt-ml-2"}}
|
|
{{end}}
|
|
</a>
|
|
<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
|
|
<div class="header" style="text-transform: none;font-size:16px;">{{.locale.Tr "repo.issues.new.add_reviewer_title"}}</div>
|
|
{{if .Reviewers}}
|
|
<div class="ui icon search input">
|
|
<i class="icon gt-df gt-ac gt-jc">{{svg "octicon-search" 16}}</i>
|
|
<input type="text" placeholder="{{.locale.Tr "repo.issues.filter_reviewers"}}">
|
|
</div>
|
|
{{end}}
|
|
{{if .Reviewers}}
|
|
{{range .Reviewers}}
|
|
{{if .User}}
|
|
<a class="{{if not .CanChange}}ui{{end}} item {{if .Checked}}checked{{end}} {{if not .CanChange}}ban-change{{end}}" href="#" data-id="{{.ItemID}}" data-id-selector="#review_request_{{.ItemID}}" {{if not .CanChange}} data-tooltip-content="{{$.locale.Tr "repo.issues.remove_request_review_block"}}"{{end}}>
|
|
<span class="octicon-check {{if not .Checked}}invisible{{end}}">{{svg "octicon-check"}}</span>
|
|
<span class="text">
|
|
{{avatar $.Context .User 28 "gt-mr-3"}}{{template "repo/search_name" .User}}
|
|
</span>
|
|
</a>
|
|
{{end}}
|
|
{{end}}
|
|
{{end}}
|
|
{{if .TeamReviewers}}
|
|
<div class="ui divider"></div>
|
|
{{range .TeamReviewers}}
|
|
{{if .Team}}
|
|
<a class="{{if not .CanChange}}ui{{end}} item {{if .Checked}}checked{{end}} {{if not .CanChange}}ban-change{{end}}" href="#" data-id="{{.ItemID}}" data-id-selector="#review_request_team_{{.Team.ID}}" {{if not .CanChange}} data-tooltip-content="{{$.locale.Tr "repo.issues.remove_request_review_block"}}"{{end}}>
|
|
<span class="octicon-check {{if not .Checked}}invisible{{end}}">{{svg "octicon-check" 16}}</span>
|
|
<span class="text">
|
|
{{svg "octicon-people" 16 "gt-ml-4 gt-mr-2"}}{{$.Issue.Repo.OwnerName}}/{{.Team.Name}}
|
|
</span>
|
|
</a>
|
|
{{end}}
|
|
{{end}}
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ui assignees list">
|
|
<span class="no-select item {{if or .OriginalReviews .PullReviewers}}gt-hidden{{end}}">{{.locale.Tr "repo.issues.new.no_reviewers"}}</span>
|
|
<div class="selected">
|
|
{{range .PullReviewers}}
|
|
<div class="item gt-mb-2">
|
|
{{if .User}}
|
|
<a class="muted sidebar-item-link" href="{{.User.HomeLink}}">
|
|
{{avatar $.Context .User 28 "gt-mr-3"}}
|
|
{{.User.GetDisplayName}}
|
|
</a>
|
|
{{else if .Team}}
|
|
<span class="text">{{svg "octicon-people" 16 "teamavatar"}}{{$.Issue.Repo.OwnerName}}/{{.Team.Name}}</span>
|
|
{{end}}
|
|
<span class="ui right type-icon text {{if eq .Review.Type 1}}green
|
|
{{- else if eq .Review.Type 2}}grey
|
|
{{- else if eq .Review.Type 3}}red
|
|
{{- else if eq .Review.Type 4}}yellow
|
|
{{- else}}grey{{end}} right ">
|
|
|
|
{{if .CanChange}}
|
|
<a href="#" class="ui icon re-request-review {{if .Checked}}checked{{end}}" data-tooltip-content="{{if .Checked}} {{$.locale.Tr "repo.issues.remove_request_review"}} {{else}} {{$.locale.Tr "repo.issues.re_request_review"}} {{end}}" data-issue-id="{{$.Issue.ID}}" data-id="{{.ItemID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
|
|
{{if .Checked}} {{svg "octicon-trash"}} {{else}} {{svg "octicon-sync"}} {{end}}
|
|
</a>
|
|
{{end}}
|
|
{{svg (printf "octicon-%s" .Review.Type.Icon)}}
|
|
</span>
|
|
</div>
|
|
{{end}}
|
|
{{range .OriginalReviews}}
|
|
<div class="item" style="margin-bottom: 10px;">
|
|
<a href="{{$.Repository.OriginalURL}}" data-tooltip-content="{{$.locale.Tr "repo.migrated_from_fake" ($.Repository.GetOriginalURLHostname|Escape) | Safe}}">
|
|
<span class="text black">
|
|
{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
|
|
{{.OriginalAuthor}}
|
|
</span>
|
|
</a>
|
|
<span class="ui right type-icon text {{if eq .Type 1}}green
|
|
{{- else if eq .Type 2}}grey
|
|
{{- else if eq .Type 3}}red
|
|
{{- else if eq .Type 4}}yellow
|
|
{{- else}}grey{{end}} right ">
|
|
{{svg (printf "octicon-%s" .Type.Icon)}}
|
|
</span>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed) (not .IsPullWorkInProgress)}}
|
|
<div class="toggle-wip" data-title="{{.Issue.Title}}" data-wip-prefix="{{(index .PullRequestWorkInProgressPrefixes 0| Escape)}}" data-update-url="{{.Issue.Link}}/title">
|
|
<a class="muted">
|
|
{{.locale.Tr "repo.pulls.still_in_progress"}} {{.locale.Tr "repo.pulls.add_prefix" (index .PullRequestWorkInProgressPrefixes 0| Escape) | Safe}}
|
|
</a>
|
|
</div>
|
|
{{end}}
|
|
<div class="ui divider"></div>
|
|
{{end}}
|
|
|
|
{{template "repo/issue/labels/labels_selector_field" .}}
|
|
{{template "repo/issue/labels/labels_sidebar" dict "root" $}}
|
|
|
|
<div class="ui divider"></div>
|
|
|
|
<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-milestone dropdown">
|
|
<a class="text gt-df gt-ac muted">
|
|
<strong>{{.locale.Tr "repo.issues.new.milestone"}}</strong>
|
|
{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
|
|
{{svg "octicon-gear" 16 "gt-ml-2"}}
|
|
{{end}}
|
|
</a>
|
|
<div class="menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/milestone">
|
|
<div class="header" style="text-transform: none;font-size:16px;">{{.locale.Tr "repo.issues.new.add_milestone_title"}}</div>
|
|
{{if or .OpenMilestones .ClosedMilestones}}
|
|
<div class="ui icon search input">
|
|
<i class="icon gt-df gt-ac gt-jc">{{svg "octicon-search" 16}}</i>
|
|
<input type="text" placeholder="{{.locale.Tr "repo.issues.filter_milestones"}}">
|
|
</div>
|
|
{{end}}
|
|
<div class="no-select item">{{.locale.Tr "repo.issues.new.clear_milestone"}}</div>
|
|
{{if and (not .OpenMilestones) (not .ClosedMilestones)}}
|
|
<div class="header" style="text-transform: none;font-size:14px;">
|
|
{{.locale.Tr "repo.issues.new.no_items"}}
|
|
</div>
|
|
{{else}}
|
|
{{if .OpenMilestones}}
|
|
<div class="divider"></div>
|
|
<div class="header">
|
|
{{.locale.Tr "repo.issues.new.open_milestone"}}
|
|
</div>
|
|
{{range .OpenMilestones}}
|
|
<a class="item" data-id="{{.ID}}" data-href="{{$.RepoLink}}/issues?milestone={{.ID}}">
|
|
{{svg "octicon-milestone" 16 "gt-mr-2"}}
|
|
{{.Name}}
|
|
</a>
|
|
{{end}}
|
|
{{end}}
|
|
{{if .ClosedMilestones}}
|
|
<div class="divider"></div>
|
|
<div class="header">
|
|
{{.locale.Tr "repo.issues.new.closed_milestone"}}
|
|
</div>
|
|
{{range .ClosedMilestones}}
|
|
<a class="item" data-id="{{.ID}}" data-href="{{$.RepoLink}}/issues?milestone={{.ID}}">
|
|
{{svg "octicon-milestone" 16 "gt-mr-2"}}
|
|
{{.Name}}
|
|
</a>
|
|
{{end}}
|
|
{{end}}
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<div class="ui select-milestone list">
|
|
<span class="no-select item {{if .Issue.Milestone}}gt-hidden{{end}}">{{.locale.Tr "repo.issues.new.no_milestone"}}</span>
|
|
<div class="selected">
|
|
{{if .Issue.Milestone}}
|
|
<a class="item muted sidebar-item-link" href="{{.RepoLink}}/milestone/{{.Issue.Milestone.ID}}">
|
|
{{svg "octicon-milestone" 18 "gt-mr-3"}}
|
|
{{.Issue.Milestone.Name}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
|
|
{{if .IsProjectsEnabled}}
|
|
<div class="ui divider"></div>
|
|
|
|
<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-project dropdown">
|
|
<a class="text gt-df gt-ac muted">
|
|
<strong>{{.locale.Tr "repo.issues.new.projects"}}</strong>
|
|
{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
|
|
{{svg "octicon-gear" 16 "gt-ml-2"}}
|
|
{{end}}
|
|
</a>
|
|
<div class="menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/projects">
|
|
<div class="header" style="text-transform: none;font-size:16px;">{{.locale.Tr "repo.issues.new.add_project_title"}}</div>
|
|
{{if or .OpenProjects .ClosedProjects}}
|
|
<div class="ui icon search input">
|
|
<i class="icon gt-df gt-ac gt-jc">{{svg "octicon-search" 16}}</i>
|
|
<input type="text" placeholder="{{.locale.Tr "repo.issues.filter_projects"}}">
|
|
</div>
|
|
{{end}}
|
|
<div class="no-select item">{{.locale.Tr "repo.issues.new.clear_projects"}}</div>
|
|
{{if .OpenProjects}}
|
|
<div class="divider"></div>
|
|
<div class="header">
|
|
{{.locale.Tr "repo.issues.new.open_projects"}}
|
|
</div>
|
|
{{range .OpenProjects}}
|
|
<a class="item muted sidebar-item-link" data-id="{{.ID}}" data-href="{{.Link}}">
|
|
{{svg .IconName 18 "gt-mr-3"}}{{.Title}}
|
|
</a>
|
|
{{end}}
|
|
{{end}}
|
|
{{if .ClosedProjects}}
|
|
<div class="divider"></div>
|
|
<div class="header">
|
|
{{.locale.Tr "repo.issues.new.closed_projects"}}
|
|
</div>
|
|
{{range .ClosedProjects}}
|
|
<a class="item muted sidebar-item-link" data-id="{{.ID}}" data-href="{{.Link}}">
|
|
{{svg .IconName 18 "gt-mr-3"}}{{.Title}}
|
|
</a>
|
|
{{end}}
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<div class="ui select-project list">
|
|
<span class="no-select item {{if .Issue.ProjectID}}gt-hidden{{end}}">{{.locale.Tr "repo.issues.new.no_projects"}}</span>
|
|
<div class="selected">
|
|
{{if .Issue.ProjectID}}
|
|
<a class="item muted sidebar-item-link" href="{{.Issue.Project.Link}}">
|
|
{{svg .Issue.Project.IconName 18 "gt-mr-3"}}{{.Issue.Project.Title}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="ui divider"></div>
|
|
|
|
<input id="assignee_id" name="assignee_id" type="hidden" value="{{.assignee_id}}">
|
|
<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-assignees-modify dropdown">
|
|
<a class="text gt-df gt-ac muted">
|
|
<strong>{{.locale.Tr "repo.issues.new.assignees"}}</strong>
|
|
{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
|
|
{{svg "octicon-gear" 16 "gt-ml-2"}}
|
|
{{end}}
|
|
</a>
|
|
<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/assignee">
|
|
<div class="header" style="text-transform: none;font-size:16px;">{{.locale.Tr "repo.issues.new.add_assignees_title"}}</div>
|
|
<div class="ui icon search input">
|
|
<i class="icon gt-df gt-ac gt-jc">{{svg "octicon-search" 16}}</i>
|
|
<input type="text" placeholder="{{.locale.Tr "repo.issues.filter_assignees"}}">
|
|
</div>
|
|
<div class="no-select item">{{.locale.Tr "repo.issues.new.clear_assignees"}}</div>
|
|
{{range .Assignees}}
|
|
|
|
{{$AssigneeID := .ID}}
|
|
<a class="item{{range $.Issue.Assignees}}{{if eq .ID $AssigneeID}} checked{{end}}{{end}}" href="#" data-id="{{.ID}}" data-id-selector="#assignee_{{.ID}}">
|
|
{{$checked := false}}
|
|
{{range $.Issue.Assignees}}
|
|
{{if eq .ID $AssigneeID}}
|
|
{{$checked = true}}
|
|
{{end}}
|
|
{{end}}
|
|
<span class="octicon-check {{if not $checked}}invisible{{end}}">{{svg "octicon-check"}}</span>
|
|
<span class="text">
|
|
{{avatar $.Context . 20 "gt-mr-3"}}{{template "repo/search_name" .}}
|
|
</span>
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<div class="ui assignees list">
|
|
<span class="no-select item {{if .Issue.Assignees}}gt-hidden{{end}}">{{.locale.Tr "repo.issues.new.no_assignees"}}</span>
|
|
<div class="selected">
|
|
{{range .Issue.Assignees}}
|
|
<div class="item">
|
|
<a class="muted sidebar-item-link" href="{{$.RepoLink}}/{{if $.Issue.IsPull}}pulls{{else}}issues{{end}}?assignee={{.ID}}">
|
|
{{avatar $.Context . 28 "gt-mr-3"}}
|
|
{{.GetDisplayName}}
|
|
</a>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ui divider"></div>
|
|
|
|
{{if .Participants}}
|
|
<span class="text"><strong>{{.locale.Tr "repo.issues.num_participants" .NumParticipants}}</strong></span>
|
|
<div class="ui list gt-df gt-fw">
|
|
{{range .Participants}}
|
|
<a {{if gt .ID 0}}href="{{.HomeLink}}"{{end}} data-tooltip-content="{{.GetDisplayName}}">
|
|
{{avatar $.Context . 28 "gt-my-1 gt-mr-2"}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
{{if and $.IssueWatch (not .Repository.IsArchived)}}
|
|
<div class="ui divider"></div>
|
|
|
|
<div class="ui watching">
|
|
<span class="text"><strong>{{.locale.Tr "notification.notifications"}}</strong></span>
|
|
<div class="gt-mt-3">
|
|
<form method="POST" action="{{.Issue.Link}}/watch">
|
|
<input type="hidden" name="watch" value="{{if $.IssueWatch.IsWatching}}0{{else}}1{{end}}">
|
|
{{$.CsrfTokenHtml}}
|
|
<button class="fluid ui button gt-df gt-jc">
|
|
{{if $.IssueWatch.IsWatching}}
|
|
{{svg "octicon-mute" 16 "gt-mr-3"}}
|
|
{{.locale.Tr "repo.issues.unsubscribe"}}
|
|
{{else}}
|
|
{{svg "octicon-unmute" 16 "gt-mr-3"}}
|
|
{{.locale.Tr "repo.issues.subscribe"}}
|
|
{{end}}
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{if .Repository.IsTimetrackerEnabled $.Context}}
|
|
{{if and .CanUseTimetracker (not .Repository.IsArchived)}}
|
|
<div class="ui divider"></div>
|
|
<div class="ui timetrack">
|
|
<span class="text"><strong>{{.locale.Tr "repo.issues.tracker"}}</strong></span>
|
|
<div class="gt-mt-3">
|
|
<form method="POST" action="{{.Issue.Link}}/times/stopwatch/toggle" id="toggle_stopwatch_form">
|
|
{{$.CsrfTokenHtml}}
|
|
</form>
|
|
<form method="POST" action="{{.Issue.Link}}/times/stopwatch/cancel" id="cancel_stopwatch_form">
|
|
{{$.CsrfTokenHtml}}
|
|
</form>
|
|
{{if $.IsStopwatchRunning}}
|
|
<button class="ui fluid button issue-stop-time">{{.locale.Tr "repo.issues.stop_tracking"}}</button>
|
|
<button class="ui fluid negative button issue-cancel-time gt-mt-3">{{.locale.Tr "repo.issues.cancel_tracking"}}</button>
|
|
{{else}}
|
|
{{if .HasUserStopwatch}}
|
|
<div class="ui warning message">
|
|
{{.locale.Tr "repo.issues.tracking_already_started" (.OtherStopwatchURL|Escape) | Safe}}
|
|
</div>
|
|
{{end}}
|
|
<button class="ui fluid button issue-start-time" data-tooltip-content='{{.locale.Tr "repo.issues.start_tracking"}}'>{{.locale.Tr "repo.issues.start_tracking_short"}}</button>
|
|
<div class="ui mini modal issue-start-time-modal">
|
|
<div class="header">{{.locale.Tr "repo.issues.add_time"}}</div>
|
|
<div class="content">
|
|
<form method="POST" id="add_time_manual_form" action="{{.Issue.Link}}/times/add" class="ui action input fluid">
|
|
{{$.CsrfTokenHtml}}
|
|
<input placeholder='{{.locale.Tr "repo.issues.add_time_hours"}}' type="number" name="hours">
|
|
<input placeholder='{{.locale.Tr "repo.issues.add_time_minutes"}}' type="number" name="minutes" class="ui compact">
|
|
</form>
|
|
</div>
|
|
<div class="actions">
|
|
<button class="ui green approve button">{{.locale.Tr "repo.issues.add_time_short"}}</button>
|
|
<button class="ui red cancel button">{{.locale.Tr "repo.issues.add_time_cancel"}}</button>
|
|
</div>
|
|
</div>
|
|
<button class="ui fluid button green issue-add-time gt-mt-3" data-tooltip-content='{{.locale.Tr "repo.issues.add_time"}}'>{{.locale.Tr "repo.issues.add_time_short"}}</button>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{if gt (len .WorkingUsers) 0}}
|
|
<div class="ui divider"></div>
|
|
<div class="ui comments">
|
|
<span class="text"><strong>{{.locale.Tr "repo.issues.time_spent_from_all_authors" ($.Issue.TotalTrackedTime | Sec2Time) | Safe}}</strong></span>
|
|
<div>
|
|
{{range $user, $trackedtime := .WorkingUsers}}
|
|
<div class="comment gt-mt-3">
|
|
<a class="avatar">
|
|
{{avatar $.Context $user}}
|
|
</a>
|
|
<div class="content">
|
|
{{template "shared/user/authorlink" $user}}
|
|
<div class="text">
|
|
{{$trackedtime}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{end}}
|
|
|
|
<div class="ui divider"></div>
|
|
<span class="text"><strong>{{.locale.Tr "repo.issues.due_date"}}</strong></span>
|
|
<div class="ui form" id="deadline-loader">
|
|
<div class="ui negative message gt-hidden" id="deadline-err-invalid-date">
|
|
{{svg "octicon-x" 16 "close icon"}}
|
|
{{.locale.Tr "repo.issues.due_date_invalid"}}
|
|
</div>
|
|
{{if ne .Issue.DeadlineUnix 0}}
|
|
<p>
|
|
<div class="gt-df gt-sb gt-ac">
|
|
<div class="due-date {{if .Issue.IsOverdue}}text red{{end}}" {{if .Issue.IsOverdue}}data-tooltip-content="{{.locale.Tr "repo.issues.due_date_overdue"}}"{{end}}>
|
|
{{svg "octicon-calendar" 16 "gt-mr-3"}}
|
|
{{template "shared/datetime/long" (dict "Datetime" .Issue.DeadlineUnix.FormatDate "Fallback" .Issue.DeadlineUnix.FormatDate)}}
|
|
</div>
|
|
<div>
|
|
{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
|
|
<a class="issue-due-edit muted" data-tooltip-content="{{$.locale.Tr "repo.issues.due_date_form_edit"}}">{{svg "octicon-pencil" 16 "gt-mr-2"}}</a>
|
|
<a class="issue-due-remove muted" data-tooltip-content="{{$.locale.Tr "repo.issues.due_date_form_remove"}}">{{svg "octicon-trash"}}</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</p>
|
|
{{else}}
|
|
<p>{{.locale.Tr "repo.issues.due_date_not_set"}}</p>
|
|
{{end}}
|
|
|
|
{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
|
|
<div {{if ne .Issue.DeadlineUnix 0}} class="gt-hidden"{{end}} id="deadlineForm">
|
|
<form class="ui fluid action input issue-due-form" action="{{AppSubUrl}}/{{PathEscape .Repository.Owner.Name}}/{{PathEscape .Repository.Name}}/issues/{{.Issue.Index}}/deadline" method="post" id="update-issue-deadline-form">
|
|
{{$.CsrfTokenHtml}}
|
|
<input required placeholder="{{.locale.Tr "repo.issues.due_date_form"}}" {{if gt .Issue.DeadlineUnix 0}}value="{{.Issue.DeadlineUnix.Format "2006-01-02"}}"{{end}} type="date" name="deadlineDate" id="deadlineDate">
|
|
<button class="ui green icon button">
|
|
{{if ne .Issue.DeadlineUnix 0}}
|
|
{{svg "octicon-pencil"}}
|
|
{{else}}
|
|
{{svg "octicon-plus"}}
|
|
{{end}}
|
|
</button>
|
|
</form>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
{{if .Repository.IsDependenciesEnabled $.Context}}
|
|
<div class="ui divider"></div>
|
|
|
|
<div class="ui depending">
|
|
{{if (and (not .BlockedByDependencies) (not .BlockedByDependenciesNotPermitted) (not .BlockingDependencies) (not .BlockingDependenciesNotPermitted))}}
|
|
<span class="text"><strong>{{.locale.Tr "repo.issues.dependency.title"}}</strong></span>
|
|
<br>
|
|
<p>
|
|
{{if .Issue.IsPull}}
|
|
{{.locale.Tr "repo.issues.dependency.pr_no_dependencies"}}
|
|
{{else}}
|
|
{{.locale.Tr "repo.issues.dependency.issue_no_dependencies"}}
|
|
{{end}}
|
|
</p>
|
|
{{end}}
|
|
|
|
{{if or .BlockingDependencies .BlockingDependenciesNotPermitted}}
|
|
<span class="text" data-tooltip-content="{{if .Issue.IsPull}}{{.locale.Tr "repo.issues.dependency.pr_close_blocks"}}{{else}}{{.locale.Tr "repo.issues.dependency.issue_close_blocks"}}{{end}}">
|
|
<strong>{{.locale.Tr "repo.issues.dependency.blocks_short"}}</strong>
|
|
</span>
|
|
<div class="ui relaxed divided list">
|
|
{{range .BlockingDependencies}}
|
|
<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} gt-df gt-ac gt-sb">
|
|
<div class="item-left gt-df gt-jc gt-fc gt-f1">
|
|
<a class="title" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
|
|
#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
|
|
</a>
|
|
<div class="text small">
|
|
{{.Repository.OwnerName}}/{{.Repository.Name}}
|
|
</div>
|
|
</div>
|
|
<div class="item-right gt-df gt-ac">
|
|
{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
|
|
<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blocking" data-tooltip-content="{{$.locale.Tr "repo.issues.dependency.remove_info"}}">
|
|
{{svg "octicon-trash" 16}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{if .BlockingDependenciesNotPermitted}}
|
|
<div class="item gt-df gt-ac gt-sb">
|
|
<span>{{$.locale.TrN (len .BlockingDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockingDependenciesNotPermitted)}}</span>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
{{if or .BlockedByDependencies .BlockedByDependenciesNotPermitted}}
|
|
<span class="text" data-tooltip-content="{{if .Issue.IsPull}}{{.locale.Tr "repo.issues.dependency.pr_closing_blockedby"}}{{else}}{{.locale.Tr "repo.issues.dependency.issue_closing_blockedby"}}{{end}}">
|
|
<strong>{{.locale.Tr "repo.issues.dependency.blocked_by_short"}}</strong>
|
|
</span>
|
|
<div class="ui relaxed divided list">
|
|
{{range .BlockedByDependencies}}
|
|
<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} gt-df gt-ac gt-sb">
|
|
<div class="item-left gt-df gt-jc gt-fc gt-f1">
|
|
<a class="title" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
|
|
#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
|
|
</a>
|
|
<div class="text small">
|
|
{{.Repository.OwnerName}}/{{.Repository.Name}}
|
|
</div>
|
|
</div>
|
|
<div class="item-right gt-df gt-ac">
|
|
{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
|
|
<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blockedBy" data-tooltip-content="{{$.locale.Tr "repo.issues.dependency.remove_info"}}">
|
|
{{svg "octicon-trash" 16}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{if $.CanCreateIssueDependencies}}
|
|
{{range .BlockedByDependenciesNotPermitted}}
|
|
<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} gt-df gt-ac gt-sb">
|
|
<div class="item-left gt-df gt-jc gt-fc gt-f1">
|
|
<div>
|
|
<span data-tooltip-content="{{$.locale.Tr "repo.issues.dependency.no_permission.can_remove"}}">{{svg "octicon-lock" 16}}</span>
|
|
<span class="title" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
|
|
#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
|
|
</span>
|
|
</div>
|
|
<div class="text small">
|
|
{{.Repository.OwnerName}}/{{.Repository.Name}}
|
|
</div>
|
|
</div>
|
|
<div class="item-right gt-df gt-ac">
|
|
{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
|
|
<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blocking" data-tooltip-content="{{$.locale.Tr "repo.issues.dependency.remove_info"}}">
|
|
{{svg "octicon-trash" 16}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{else if .BlockedByDependenciesNotPermitted}}
|
|
<div class="item gt-df gt-ac gt-sb">
|
|
<span>{{$.locale.TrN (len .BlockedByDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockedByDependenciesNotPermitted)}}</span>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
|
|
<div>
|
|
<form method="POST" action="{{.Issue.Link}}/dependency/add" id="addDependencyForm">
|
|
{{$.CsrfTokenHtml}}
|
|
<div class="ui fluid action input">
|
|
<div class="ui search selection dropdown" id="new-dependency-drop-list" data-issue-id="{{.Issue.ID}}">
|
|
<input name="newDependency" type="hidden">
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<input type="text" class="search">
|
|
<div class="default text">{{.locale.Tr "repo.issues.dependency.add"}}</div>
|
|
</div>
|
|
<button class="ui green icon button">
|
|
{{svg "octicon-plus"}}
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
|
|
<input type="hidden" id="crossRepoSearch" value="{{.AllowCrossRepositoryDependencies}}">
|
|
|
|
<div class="ui basic modal remove-dependency">
|
|
<div class="ui icon header">
|
|
{{svg "octicon-trash"}}
|
|
{{.locale.Tr "repo.issues.dependency.remove_header"}}
|
|
</div>
|
|
<div class="content">
|
|
<form method="POST" action="{{.Issue.Link}}/dependency/delete" id="removeDependencyForm">
|
|
{{$.CsrfTokenHtml}}
|
|
<input type="hidden" value="" name="removeDependencyID" id="removeDependencyID">
|
|
<input type="hidden" value="" name="dependencyType" id="dependencyType">
|
|
</form>
|
|
<p>{{if .Issue.IsPull}}
|
|
{{.locale.Tr "repo.issues.dependency.pr_remove_text"}}
|
|
{{else}}
|
|
{{.locale.Tr "repo.issues.dependency.issue_remove_text"}}
|
|
{{end}}</p>
|
|
</div>
|
|
<div class="actions">
|
|
<button class="ui red cancel inverted button">
|
|
{{svg "octicon-x"}}
|
|
{{.locale.Tr "repo.issues.dependency.cancel"}}
|
|
</button>
|
|
<button class="ui green ok inverted button">
|
|
{{svg "octicon-check"}}
|
|
{{.locale.Tr "repo.issues.dependency.remove"}}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{end}}
|
|
|
|
<div class="ui divider"></div>
|
|
<div class="ui equal width compact grid">
|
|
{{$issueReferenceLink := printf "%s#%d" .Issue.Repo.FullName .Issue.Index}}
|
|
<div class="row gt-ac" data-tooltip-content="{{$issueReferenceLink}}">
|
|
<span class="text column truncate">{{.locale.Tr "repo.issues.reference_link" $issueReferenceLink}}</span>
|
|
<button class="ui two wide button column gt-p-3" data-clipboard-text="{{$issueReferenceLink}}">{{svg "octicon-copy" 14}}</button>
|
|
</div>
|
|
</div>
|
|
|
|
{{if and .IsRepoAdmin (not .Repository.IsArchived)}}
|
|
<div class="ui divider"></div>
|
|
<div class="ui watching">
|
|
<button class="fluid ui show-modal button {{if .Issue.IsLocked}} negative {{end}}" data-modal="#lock">
|
|
{{if .Issue.IsLocked}}
|
|
{{svg "octicon-key"}}
|
|
{{.locale.Tr "repo.issues.unlock"}}
|
|
{{else}}
|
|
{{svg "octicon-lock"}}
|
|
{{.locale.Tr "repo.issues.lock"}}
|
|
{{end}}
|
|
</button>
|
|
</div>
|
|
<div class="ui tiny modal" id="lock">
|
|
<div class="header">
|
|
{{if .Issue.IsLocked}}
|
|
{{.locale.Tr "repo.issues.unlock.title"}}
|
|
{{else}}
|
|
{{.locale.Tr "repo.issues.lock.title"}}
|
|
{{end}}
|
|
</div>
|
|
<div class="content">
|
|
<div class="ui warning message text left">
|
|
{{if .Issue.IsLocked}}
|
|
{{.locale.Tr "repo.issues.unlock.notice_1"}}<br>
|
|
{{.locale.Tr "repo.issues.unlock.notice_2"}}<br>
|
|
{{else}}
|
|
{{.locale.Tr "repo.issues.lock.notice_1"}}<br>
|
|
{{.locale.Tr "repo.issues.lock.notice_2"}}<br>
|
|
{{.locale.Tr "repo.issues.lock.notice_3"}}<br>
|
|
{{end}}
|
|
</div>
|
|
|
|
<form class="ui form" action="{{.Issue.Link}}{{if .Issue.IsLocked}}/unlock{{else}}/lock{{end}}"
|
|
method="post">
|
|
{{.CsrfTokenHtml}}
|
|
|
|
{{if not .Issue.IsLocked}}
|
|
<div class="field">
|
|
<strong> {{.locale.Tr "repo.issues.lock.reason"}} </strong>
|
|
</div>
|
|
|
|
<div class="field">
|
|
<div class="ui fluid dropdown selection" tabindex="0">
|
|
|
|
<select name="reason">
|
|
<option value=""> </option>
|
|
{{range .LockReasons}}
|
|
<option value="{{.}}">{{.}}</option>
|
|
{{end}}
|
|
</select>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
|
|
<div class="default text"> </div>
|
|
|
|
<div class="menu">
|
|
{{range .LockReasons}}
|
|
<div class="item" data-value="{{.}}">{{.}}</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="text right actions">
|
|
<button class="ui cancel button">{{.locale.Tr "settings.cancel"}}</button>
|
|
<button class="ui red button">
|
|
{{if .Issue.IsLocked}}
|
|
{{.locale.Tr "repo.issues.unlock_confirm"}}
|
|
{{else}}
|
|
{{.locale.Tr "repo.issues.lock_confirm"}}
|
|
{{end}}
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<button class="fluid ui show-modal button negative gt-mt-3" data-modal="#delete">
|
|
{{svg "octicon-trash"}}
|
|
{{.locale.Tr "repo.issues.delete"}}
|
|
</button>
|
|
<div class="ui basic modal" id="delete">
|
|
<div class="ui icon header">
|
|
{{if .Issue.IsPull}}
|
|
{{.locale.Tr "repo.pulls.delete.title"}}
|
|
{{else}}
|
|
{{.locale.Tr "repo.issues.delete.title"}}
|
|
{{end}}
|
|
</div>
|
|
<div class="content center">
|
|
<p>
|
|
{{if .Issue.IsPull}}
|
|
{{.locale.Tr "repo.pulls.delete.text"}}
|
|
{{else}}
|
|
{{.locale.Tr "repo.issues.delete.text"}}
|
|
{{end}}
|
|
</p>
|
|
</div>
|
|
<form action="{{.Issue.Link}}/delete" method="post">
|
|
{{.CsrfTokenHtml}}
|
|
<div class="center actions">
|
|
<button class="ui basic cancel inverted button">{{.locale.Tr "settings.cancel"}}</button>
|
|
<button class="ui basic red inverted button">{{.locale.Tr "modal.yes"}}</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
{{end}}
|
|
|
|
{{if and .Issue.IsPull .IsIssuePoster (not .Issue.IsClosed) .Issue.PullRequest.HeadRepo}}
|
|
{{if and (not (eq .Issue.PullRequest.HeadRepo.FullName .Issue.PullRequest.BaseRepo.FullName)) .CanWriteToHeadRepo}}
|
|
<div class="ui divider"></div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="allow-edits-from-maintainers"
|
|
data-url="{{.Issue.Link}}"
|
|
data-tooltip-content="{{.locale.Tr "repo.pulls.allow_edits_from_maintainers_desc"}}"
|
|
data-prompt-error="{{.locale.Tr "repo.pulls.allow_edits_from_maintainers_err"}}"
|
|
>
|
|
<label><strong>{{.locale.Tr "repo.pulls.allow_edits_from_maintainers"}}</strong></label>
|
|
<input type="checkbox" {{if .Issue.PullRequest.AllowMaintainerEdit}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{end}}
|
|
</div>
|
|
</div>
|