2018-11-29 09:46:30 +08:00
{{ template "base/head" . }}
<div class="repository">
{{ template "repo/header" . }}
<div class="ui container">
<div class="ui three column stackable grid">
<div class="column">
<h3> {{ .Milestone .Name }} </h3>
2020-06-26 09:21:13 +08:00
<div class="content">
{{ .Milestone .RenderedContent | Str2html }}
</div>
2018-11-29 09:46:30 +08:00
</div>
<div class="column center aligned">
</div>
2019-01-24 02:58:38 +08:00
{{ if not .Repository .IsArchived }}
<div class="column right aligned">
2019-03-15 23:50:27 +08:00
{{ if or .CanWriteIssues .CanWritePulls }}
2019-01-24 02:58:38 +08:00
<a class="ui grey button" href=" {{ .RepoLink }} /milestones/ {{ .MilestoneID }} /edit"> {{ .i18n .Tr "repo.milestones.edit" }} </a>
2019-03-15 23:50:27 +08:00
{{ end }}
2020-09-11 22:48:39 +08:00
<a class="ui green button" href=" {{ .RepoLink }} /issues/new {{ if .NewIssueChooseTemplate }} /choose {{ end }} ?milestone= {{ .MilestoneID }} "> {{ .i18n .Tr "repo.issues.new" }} </a>
2019-01-24 02:58:38 +08:00
</div>
{{ end }}
2018-11-29 09:46:30 +08:00
</div>
<div class="ui one column stackable grid">
<div class="column">
{{ $ closedDate : = TimeSinceUnix .Milestone .ClosedDateUnix $ .Lang }}
{{ if .IsClosed }}
2020-09-12 04:19:00 +08:00
{{ svg "octicon-clock" }} {{ $ .i18n .Tr "repo.milestones.closed" $ closedDate | Str2html }}
2018-11-29 09:46:30 +08:00
{{ else }}
2020-09-12 04:19:00 +08:00
{{ svg "octicon-calendar" }}
2018-11-29 09:46:30 +08:00
{{ if .Milestone .DeadlineString }}
<span {{ if .IsOverdue }} class="overdue" {{ end }} > {{ .Milestone .DeadlineString }} </span>
{{ else }}
{{ $ .i18n .Tr "repo.milestones.no_due_date" }}
{{ end }}
{{ end }}
2020-02-12 01:02:41 +08:00
2018-11-29 09:46:30 +08:00
<b> {{ .i18n .Tr "repo.milestones.completeness" .Milestone .Completeness }} </b>
</div>
</div>
<div class="ui divider"></div>
<div id="issue-filters" class="ui stackable grid">
<div class="six wide column">
<div class="ui tiny basic status buttons">
<a class="ui {{ if not .IsShowClosed }} green active {{ end }} basic button" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort= {{ $ .SortType }} &state=open&labels= {{ .SelectLabels }} &assignee= {{ .AssigneeID }} ">
2020-09-12 04:19:00 +08:00
{{ svg "octicon-issue-opened" }}
2018-11-29 09:46:30 +08:00
{{ .i18n .Tr "repo.issues.open_tab" .IssueStats .OpenCount }}
</a>
<a class="ui {{ if .IsShowClosed }} red active {{ end }} basic button" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ .ViewType }} &sort= {{ $ .SortType }} &state=closed&labels= {{ .SelectLabels }} &assignee= {{ .AssigneeID }} ">
2020-09-12 04:19:00 +08:00
{{ svg "octicon-issue-closed" }}
2018-11-29 09:46:30 +08:00
{{ .i18n .Tr "repo.issues.close_tab" .IssueStats .ClosedCount }}
</a>
</div>
</div>
<div class="ten wide right aligned column">
2019-10-30 04:50:38 +08:00
<div class="ui secondary filter stackable menu labels">
2018-11-29 09:46:30 +08:00
<!-- Label -->
2019-10-30 04:50:38 +08:00
<div class="ui {{ if not .Labels }} disabled {{ end }} dropdown jump item label-filter" style="margin-left: auto">
2018-11-29 09:46:30 +08:00
<span class="text">
{{ .i18n .Tr "repo.issues.filter_label" }}
2020-11-01 06:15:11 +08:00
{{ svg "octicon-triangle-down" 1 4 "dropdown icon" }}
2018-11-29 09:46:30 +08:00
</span>
<div class="menu">
2019-10-30 04:50:38 +08:00
<span class="info"> {{ .i18n .Tr "repo.issues.filter_label_exclude" | Safe }} </span>
2018-11-29 09:46:30 +08:00
<a class="item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort= {{ $ .SortType }} &state= {{ $ .State }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_label_no_select" }} </a>
{{ range .Labels }}
2020-09-12 04:19:00 +08:00
<a class="item label-filter-item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort= {{ $ .SortType }} &state= {{ $ .State }} &labels= {{ .ID }} &assignee= {{ $ .AssigneeID }} " data-label-id=" {{ .ID }} "> {{ if .IsExcluded }} {{ svg "octicon-circle-slash" }} {{ else if contain $ .SelLabelIDs .ID }} {{ svg "octicon-check" }} {{ end }} <span class="label color" style="background-color: {{ .Color }} "></span> {{ .Name | RenderEmoji }} </a>
2018-11-29 09:46:30 +08:00
{{ end }}
</div>
</div>
<!-- Assignee -->
<div class="ui {{ if not .Assignees }} disabled {{ end }} dropdown jump item">
<span class="text">
{{ .i18n .Tr "repo.issues.filter_assignee" }}
2020-11-01 06:15:11 +08:00
{{ svg "octicon-triangle-down" 1 4 "dropdown icon" }}
2018-11-29 09:46:30 +08:00
</span>
<div class="menu">
<a class="item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort= {{ $ .SortType }} &state= {{ $ .State }} &labels= {{ .SelectLabels }} "> {{ .i18n .Tr "repo.issues.filter_assginee_no_select" }} </a>
{{ range .Assignees }}
2019-05-08 16:41:35 +08:00
<a class=" {{ if eq $ .AssigneeID .ID }} active selected {{ end }} item" href=" {{ $ .Link }} ?type= {{ $ .ViewType }} &sort= {{ $ .SortType }} &state= {{ $ .State }} &labels= {{ $ .SelectLabels }} &assignee= {{ .ID }} "><img src=" {{ .RelAvatarLink }} "> {{ .GetDisplayName }} </a>
2018-11-29 09:46:30 +08:00
{{ end }}
</div>
</div>
{{ if .IsSigned }}
<!-- Type -->
<div class="ui dropdown type jump item">
<span class="text">
{{ .i18n .Tr "repo.issues.filter_type" }}
2020-11-01 06:15:11 +08:00
{{ svg "octicon-triangle-down" 1 4 "dropdown icon" }}
2018-11-29 09:46:30 +08:00
</span>
<div class="menu">
<a class=" {{ if eq .ViewType "all" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type=all&sort= {{ $ .SortType }} &state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_type.all_issues" }} </a>
<a class=" {{ if eq .ViewType "assigned" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type=assigned&sort= {{ $ .SortType }} &state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ .SignedUser .ID }} "> {{ .i18n .Tr "repo.issues.filter_type.assigned_to_you" }} </a>
<a class=" {{ if eq .ViewType "created_by" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type=created_by&sort= {{ $ .SortType }} &state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_type.created_by_you" }} </a>
<a class=" {{ if eq .ViewType "mentioned" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type=mentioned&sort= {{ $ .SortType }} &state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_type.mentioning_you" }} </a>
</div>
</div>
{{ end }}
<!-- Sort -->
<div class="ui dropdown type jump item">
<span class="text">
{{ .i18n .Tr "repo.issues.filter_sort" }}
2020-11-01 06:15:11 +08:00
{{ svg "octicon-triangle-down" 1 4 "dropdown icon" }}
2018-11-29 09:46:30 +08:00
</span>
<div class="menu">
<a class=" {{ if or ( eq .SortType "latest" ) ( not .SortType ) }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort=latest&state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_sort.latest" }} </a>
<a class=" {{ if eq .SortType "oldest" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort=oldest&state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_sort.oldest" }} </a>
<a class=" {{ if eq .SortType "recentupdate" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort=recentupdate&state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_sort.recentupdate" }} </a>
<a class=" {{ if eq .SortType "leastupdate" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort=leastupdate&state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_sort.leastupdate" }} </a>
<a class=" {{ if eq .SortType "mostcomment" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort=mostcomment&state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_sort.mostcomment" }} </a>
<a class=" {{ if eq .SortType "leastcomment" }} active {{ end }} item" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort=leastcomment&state= {{ $ .State }} &labels= {{ .SelectLabels }} &assignee= {{ $ .AssigneeID }} "> {{ .i18n .Tr "repo.issues.filter_sort.leastcomment" }} </a>
</div>
</div>
</div>
</div>
</div>
2019-03-15 23:50:27 +08:00
<div id="issue-actions" class="ui stackable grid hide">
2018-11-29 09:46:30 +08:00
<div class="six wide column">
2019-03-15 23:50:27 +08:00
<div class="ui tiny basic status buttons">
<a class="ui {{ if not .IsShowClosed }} green active {{ end }} basic button" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &sort= {{ $ .SortType }} &state=open&labels= {{ .SelectLabels }} &assignee= {{ .AssigneeID }} ">
2020-09-12 04:19:00 +08:00
{{ svg "octicon-issue-opened" }}
2019-03-15 23:50:27 +08:00
{{ .i18n .Tr "repo.issues.open_tab" .IssueStats .OpenCount }}
</a>
<a class="ui {{ if .IsShowClosed }} red active {{ end }} basic button" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ .ViewType }} &sort= {{ $ .SortType }} &state=closed&labels= {{ .SelectLabels }} &assignee= {{ .AssigneeID }} ">
2020-09-12 04:19:00 +08:00
{{ svg "octicon-issue-closed" }}
2019-03-15 23:50:27 +08:00
{{ .i18n .Tr "repo.issues.close_tab" .IssueStats .ClosedCount }}
</a>
2018-11-29 09:46:30 +08:00
</div>
</div>
{{ / * Ten wide does not cope well and makes the columns stack .
This seems to be related to jQuery's hide/show: in fact, switching
issue-actions and issue-filters and having this ten wide will show
this one correctly, but not the other one. */}}
<div class="nine wide right aligned right floated column">
<div class="ui secondary filter stackable menu">
2019-03-15 23:50:27 +08:00
<!-- Action Button -->
{{ if .IsShowClosed }}
<div class="ui green active basic button issue-action" data-action="open" data-url=" {{ $ .RepoLink }} /issues/status" style="margin-left: auto"> {{ .i18n .Tr "repo.issues.action_open" }} </div>
{{ else }}
<div class="ui red active basic button issue-action" data-action="close" data-url=" {{ $ .RepoLink }} /issues/status" style="margin-left: auto"> {{ .i18n .Tr "repo.issues.action_close" }} </div>
{{ end }}
2018-11-29 09:46:30 +08:00
<!-- Labels -->
2019-03-15 23:50:27 +08:00
<div class="ui {{ if not .Labels }} disabled {{ end }} dropdown jump item">
2018-11-29 09:46:30 +08:00
<span class="text">
{{ .i18n .Tr "repo.issues.action_label" }}
2020-11-01 06:15:11 +08:00
{{ svg "octicon-triangle-down" 1 4 "dropdown icon" }}
2018-11-29 09:46:30 +08:00
</span>
<div class="menu">
{{ range .Labels }}
2020-05-02 01:58:45 +08:00
<div class="item issue-action" data-action="toggle" data-element-id=" {{ .ID }} " data-url=" {{ $ .RepoLink }} /issues/labels">
2020-09-12 04:19:00 +08:00
{{ if contain $ .SelLabelIDs .ID }} {{ svg "octicon-check" }} {{ end }} <span class="label color" style="background-color: {{ .Color }} "></span> {{ .Name | RenderEmoji }}
2018-11-29 09:46:30 +08:00
</div>
{{ end }}
</div>
</div>
<!-- Assignees -->
<div class="ui {{ if not .Assignees }} disabled {{ end }} dropdown jump item">
<span class="text">
{{ .i18n .Tr "repo.issues.action_assignee" }}
2020-11-01 06:15:11 +08:00
{{ svg "octicon-triangle-down" 1 4 "dropdown icon" }}
2018-11-29 09:46:30 +08:00
</span>
<div class="menu">
<div class="item issue-action" data-element-id="0" data-url=" {{ $ .Link }} /assignee">
{{ .i18n .Tr "repo.issues.action_assignee_no_select" }}
</div>
{{ range .Assignees }}
<div class="item issue-action" data-element-id=" {{ .ID }} " data-url=" {{ $ .RepoLink }} /issues/assignee">
2019-05-08 16:41:35 +08:00
<img src=" {{ .RelAvatarLink }} "> {{ .GetDisplayName }}
2018-11-29 09:46:30 +08:00
</div>
{{ end }}
</div>
</div>
</div>
</div>
</div>
<div class="issue list">
2020-03-06 11:44:06 +08:00
{{ $ approvalCounts : = .ApprovalCounts }}
2018-11-29 09:46:30 +08:00
{{ range .Issues }}
{{ $ timeStr : = TimeSinceUnix .CreatedUnix $ .Lang }}
<li class="item">
2019-03-15 23:50:27 +08:00
{{ if or ( and $ .CanWriteIssues ( not .IsPull ) ) ( and $ .CanWritePulls .IsPull ) }}
2018-11-29 09:46:30 +08:00
<div class="ui checkbox issue-checkbox">
<input type="checkbox" data-issue-id= {{ .ID }} ></input>
</div>
2019-03-15 23:50:27 +08:00
{{ end }}
2020-08-18 03:11:42 +08:00
{{ if .IsClosed }}
{{ if .IsPull }}
{{ if .PullRequest .HasMerged }}
<div class="ui purple label"># {{ .Index }} </div>
2020-09-12 04:19:00 +08:00
<a class="ui purple text"> {{ svg "octicon-git-pull-request" }} </a>
2020-08-18 03:11:42 +08:00
{{ else }}
<div class="ui red label"># {{ .Index }} </div>
2020-09-12 04:19:00 +08:00
<a class="ui red text"> {{ svg "octicon-git-pull-request" }} </a>
2020-08-18 03:11:42 +08:00
{{ end }}
{{ else }}
<div class="ui red label"># {{ .Index }} </div>
2020-09-12 04:19:00 +08:00
<a class="ui red text"> {{ svg "octicon-issue-closed" }} </a>
2020-08-18 03:11:42 +08:00
{{ end }}
{{ else }}
{{ if .IsRead }}
<div class="ui white label"># {{ .Index }} </div>
{{ else }}
<div class="ui green label"># {{ .Index }} </div>
{{ end }}
{{ if .IsPull }}
2020-09-12 04:19:00 +08:00
<a class="ui green text"> {{ svg "octicon-git-pull-request" }} </a>
2020-08-18 03:11:42 +08:00
{{ else }}
2020-09-12 04:19:00 +08:00
<a class="ui green text"> {{ svg "octicon-issue-opened" }} </a>
2020-08-18 03:11:42 +08:00
{{ end }}
{{ end }}
2020-05-02 01:58:45 +08:00
<a class="title" href=" {{ $ .RepoLink }} /issues/ {{ .Index }} "> {{ .Title | RenderEmoji }} </a>
2018-11-29 09:46:30 +08:00
2020-03-06 11:44:06 +08:00
{{ if .IsPull }}
{{ if ( in dex $ .CommitStatus .PullRequest .ID ) }}
{{ template "repo/commit_status" ( in dex $ .CommitStatus .PullRequest .ID ) }}
{{ end }}
{{ end }}
2018-11-29 09:46:30 +08:00
{{ range .Labels }}
2020-05-02 01:58:45 +08:00
<a class="ui label" href=" {{ $ .Link }} ?q= {{ $ .Keyword }} &type= {{ $ .ViewType }} &state= {{ $ .State }} &labels= {{ .ID }} &assignee= {{ $ .AssigneeID }} " style="color: {{ .ForegroundColor }} ; background-color: {{ .Color }} " title=" {{ .Description }} "> {{ .Name | RenderEmoji }} </a>
2018-11-29 09:46:30 +08:00
{{ end }}
{{ if .NumComments }}
2020-09-12 04:19:00 +08:00
<span class="comment ui right"> {{ svg "octicon-comment" }} {{ .NumComments }} </span>
2018-11-29 09:46:30 +08:00
{{ end }}
{{ if .TotalTrackedTime }}
2020-09-12 04:19:00 +08:00
<span class="comment ui right"> {{ svg "octicon-clock" }} {{ .TotalTrackedTime | Sec2Time }} </span>
2018-11-29 09:46:30 +08:00
{{ end }}
<p class="desc">
2020-03-06 11:44:06 +08:00
{{ $ timeStr : = TimeSinceUnix .GetLastEventTimestamp $ .Lang }}
{{ if .OriginalAuthor }}
{{ $ .i18n .Tr .GetLastEventLabelFake $ timeStr .OriginalAuthor | Safe }}
{{ else if gt .Poster .ID 0 }}
{{ $ .i18n .Tr .GetLastEventLabel $ timeStr .Poster .HomeLink ( .Poster .GetDisplayName | Escape ) | Safe }}
2019-03-28 06:22:39 +08:00
{{ else }}
2020-03-06 11:44:06 +08:00
{{ $ .i18n .Tr .GetLastEventLabelFake $ timeStr ( .Poster .GetDisplayName | Escape ) | Safe }}
2019-03-28 06:22:39 +08:00
{{ end }}
2020-03-06 11:44:06 +08:00
2019-09-12 17:31:36 +08:00
{{ if .Ref }}
2020-05-15 06:55:43 +08:00
<a class="ref" href=" {{ in dex $ .IssueRefURLs .ID }} ">
2020-09-12 04:19:00 +08:00
{{ svg "octicon-git-branch" }} {{ in dex $ .IssueRefEndNames .ID }}
2019-09-12 17:31:36 +08:00
</a>
{{ end }}
2018-11-29 09:46:30 +08:00
{{ $ tasks : = .GetTasks }}
{{ if gt $ tasks 0 }}
{{ $ tasksDone : = .GetTasksDone }}
<span class="checklist">
2020-09-12 04:19:00 +08:00
{{ svg "octicon-checklist" }} {{ $ tasksDone }} / {{ $ tasks }} <span class="progress-bar"><span class="progress" style="width:calc(100% * {{ $ tasksDone }} / {{ $ tasks }} );"></span></span>
2018-11-29 09:46:30 +08:00
</span>
{{ end }}
{{ if ne .DeadlineUnix 0 }}
2020-09-12 04:19:00 +08:00
{{ svg "octicon-calendar" }}
2018-11-29 09:46:30 +08:00
<span {{ if .IsOverdue }} class="overdue" {{ end }} > {{ .DeadlineUnix .FormatShort }} </span>
{{ end }}
{{ range .Assignees }}
2020-11-04 17:11:19 +08:00
<a class="ui right assignee poping up" href=" {{ .HomeLink }} " data-content=" {{ .GetDisplayName }} " data-variation="inverted" data-position="left center">
2018-11-29 09:46:30 +08:00
<img class="ui avatar image" src=" {{ .RelAvatarLink }} ">
</a>
{{ end }}
2020-03-06 11:44:06 +08:00
{{ if .IsPull }}
{{ $ approveOfficial : = call $ approvalCounts .ID "approve" }}
{{ $ rejectOfficial : = call $ approvalCounts .ID "reject" }}
2020-04-07 00:33:34 +08:00
{{ $ waitingOfficial : = call $ approvalCounts .ID "waiting" }}
{{ if gt $ approveOfficial 0 }}
2020-09-12 04:19:00 +08:00
<span class="approvals"> {{ svg "octicon-check" }}
2020-03-06 11:44:06 +08:00
{{ $ .i18n .Tr ( TrN $ .i18n .Lang $ approveOfficial "repo.pulls.approve_count_1" "repo.pulls.approve_count_n" ) $ approveOfficial }}
2020-04-07 00:33:34 +08:00
</span>
2020-03-06 11:44:06 +08:00
{{ end }}
2020-04-07 00:33:34 +08:00
{{ if gt $ rejectOfficial 0 }}
2020-09-12 04:19:00 +08:00
<span class="rejects"> {{ svg "octicon-diff" }}
2020-04-07 00:33:34 +08:00
{{ $ .i18n .Tr ( TrN $ .i18n .Lang $ rejectOfficial "repo.pulls.reject_count_1" "repo.pulls.reject_count_n" ) $ rejectOfficial }}
</span>
{{ end }}
{{ if gt $ waitingOfficial 0 }}
2020-09-12 04:19:00 +08:00
<span class="waiting"> {{ svg "octicon-eye" }}
2020-04-07 00:33:34 +08:00
{{ $ .i18n .Tr ( TrN $ .i18n .Lang $ waitingOfficial "repo.pulls.waiting_count_1" "repo.pulls.waiting_count_n" ) $ waitingOfficial }}
</span>
{{ end }}
2020-03-26 01:08:00 +08:00
{{ if and ( not .PullRequest .HasMerged ) ( gt ( len .PullRequest .ConflictedFiles ) 0 ) }}
2020-09-12 04:19:00 +08:00
<span class="conflicting"> {{ svg "octicon-x" }} {{ $ .i18n .Tr ( TrN $ .i18n .Lang ( len .PullRequest .ConflictedFiles ) "repo.pulls.num_conflicting_files_1" "repo.pulls.num_conflicting_files_n" ) ( len .PullRequest .ConflictedFiles ) }} </span>
2020-03-06 11:44:06 +08:00
{{ end }}
{{ end }}
2018-11-29 09:46:30 +08:00
</p>
</li>
{{ end }}
2019-04-20 12:15:19 +08:00
{{ template "base/paginate" . }}
2018-11-29 09:46:30 +08:00
</div>
</div>
</div>
{{ template "base/footer" . }}