You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

list.tmpl 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. {{template "base/head" .}}
  2. <div role="main" aria-label="{{.Title}}" class="page-content ui repository branches">
  3. {{template "repo/header" .}}
  4. <div class="ui container">
  5. {{template "base/alert" .}}
  6. {{template "repo/sub_menu" .}}
  7. {{if .DefaultBranchBranch}}
  8. <h4 class="ui top attached header">
  9. {{.locale.Tr "repo.default_branch"}}
  10. {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
  11. <a role="button" class="right" href="{{.RepoLink}}/settings/branches" data-tooltip-content="{{.locale.Tr "repo.settings.branches.switch_default_branch"}}">
  12. {{svg "octicon-arrow-switch"}}
  13. </a>
  14. {{end}}
  15. </h4>
  16. <div class="ui attached table segment">
  17. <table class="ui very basic striped fixed table single line">
  18. <tbody>
  19. <tr>
  20. <td>
  21. {{if .DefaultBranchBranch.IsProtected}}
  22. {{svg "octicon-shield-lock"}}
  23. {{end}}
  24. <div class="gt-df gt-ac">
  25. <a class="gt-ellipsis" href="{{.RepoLink}}/src/branch/{{PathEscapeSegments .DefaultBranchBranch.DBBranch.Name}}">{{.DefaultBranchBranch.DBBranch.Name}}</a>
  26. <button class="btn interact-fg gt-p-3" data-clipboard-text="{{.DefaultBranchBranch.DBBranch.Name}}">{{svg "octicon-copy" 14}}</button>
  27. {{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DefaultBranchBranch.DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DefaultBranchBranch.DBBranch.CommitID)}}
  28. </div>
  29. <p class="info gt-df gt-ac gt-my-2">{{svg "octicon-git-commit" 16 "gt-mr-2"}}<a href="{{.RepoLink}}/commit/{{PathEscape .DefaultBranchBranch.DBBranch.CommitID}}">{{ShortSha .DefaultBranchBranch.DBBranch.CommitID}}</a> · <span class="commit-message">{{RenderCommitMessage $.Context .DefaultBranchBranch.DBBranch.CommitMessage .RepoLink .Repository.ComposeMetas}}</span> · {{.locale.Tr "org.repo_updated"}} {{TimeSince .DefaultBranchBranch.DBBranch.CommitTime.AsTime .locale}}{{if .DefaultBranchBranch.DBBranch.Pusher}} &nbsp;{{template "shared/user/avatarlink" dict "Context" $.Context "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}</p>
  30. </td>
  31. <td class="right aligned middle aligned overflow-visible">
  32. {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
  33. <button class="btn interact-bg show-create-branch-modal gt-p-3"
  34. data-modal="#create-branch-modal"
  35. data-branch-from="{{$.DefaultBranchBranch.DBBranch.Name}}"
  36. data-branch-from-urlcomponent="{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}"
  37. data-tooltip-content="{{$.locale.Tr "repo.branch.new_branch_from" ($.DefaultBranchBranch.DBBranch.Name)}}"
  38. >
  39. {{svg "octicon-git-branch"}}
  40. </button>
  41. {{end}}
  42. {{if .EnableFeed}}
  43. <a role="button" class="btn interact-bg gt-p-3" href="{{$.FeedURL}}/rss/branch/{{PathEscapeSegments .DefaultBranchBranch.DBBranch.Name}}">{{svg "octicon-rss"}}</a>
  44. {{end}}
  45. {{if not $.DisableDownloadSourceArchives}}
  46. <div class="ui dropdown btn interact-bg gt-p-3" data-tooltip-content="{{$.locale.Tr "repo.branch.download" ($.DefaultBranchBranch.DBBranch.Name)}}">
  47. {{svg "octicon-download"}}
  48. <div class="menu">
  49. <a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}.zip" rel="nofollow">{{svg "octicon-file-zip"}}&nbsp;ZIP</a>
  50. <a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}.tar.gz" rel="nofollow">{{svg "octicon-file-zip"}}&nbsp;TAR.GZ</a>
  51. </div>
  52. </div>
  53. {{end}}
  54. {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted) (not $.IsMirror)}}
  55. <button class="btn interact-bg gt-p-3 show-modal show-rename-branch-modal"
  56. data-is-default-branch="true"
  57. data-modal="#rename-branch-modal"
  58. data-old-branch-name="{{$.DefaultBranchBranch.DBBranch.Name}}"
  59. data-tooltip-content="{{$.locale.Tr "repo.branch.rename" ($.DefaultBranchBranch.DBBranch.Name)}}"
  60. >
  61. {{svg "octicon-pencil"}}
  62. </button>
  63. {{end}}
  64. </td>
  65. </tr>
  66. </tbody>
  67. </table>
  68. </div>
  69. {{end}}
  70. {{if .Branches}}
  71. <h4 class="ui top attached header">
  72. {{.locale.Tr "repo.branches"}}
  73. </h4>
  74. <div class="ui attached table segment">
  75. <table class="ui very basic striped fixed table single line">
  76. <tbody>
  77. {{range .Branches}}
  78. <tr>
  79. <td class="eight wide">
  80. {{if .DBBranch.IsDeleted}}
  81. <div class="gt-df gt-ac">
  82. <a class="gt-ellipsis" href="{{$.RepoLink}}/src/branch/{{PathEscapeSegments .DBBranch.Name}}">{{.DBBranch.Name}}</a>
  83. <button class="btn interact-fg gt-p-3" data-clipboard-text="{{.DBBranch.Name}}">{{svg "octicon-copy" 14}}</button>
  84. </div>
  85. <p class="info">{{$.locale.Tr "repo.branch.deleted_by" .DBBranch.DeletedBy.Name}} {{TimeSinceUnix .DBBranch.DeletedUnix $.locale}}</p>
  86. {{else}}
  87. {{if .IsProtected}}
  88. {{svg "octicon-shield-lock"}}
  89. {{end}}
  90. <div class="gt-df gt-ac">
  91. <a class="gt-ellipsis" href="{{$.RepoLink}}/src/branch/{{PathEscapeSegments .DBBranch.Name}}">{{.DBBranch.Name}}</a>
  92. <button class="btn interact-fg gt-p-3" data-clipboard-text="{{.DBBranch.Name}}">{{svg "octicon-copy" 14}}</button>
  93. {{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DBBranch.CommitID)}}
  94. </div>
  95. <p class="info gt-df gt-ac gt-my-2">{{svg "octicon-git-commit" 16 "gt-mr-2"}}<a href="{{$.RepoLink}}/commit/{{PathEscape .DBBranch.CommitID}}">{{ShortSha .DBBranch.CommitID}}</a> · <span class="commit-message">{{RenderCommitMessage $.Context .DBBranch.CommitMessage $.RepoLink $.Repository.ComposeMetas}}</span> · {{$.locale.Tr "org.repo_updated"}} {{TimeSince .DBBranch.CommitTime.AsTime $.locale}}{{if .DBBranch.Pusher}} &nbsp;{{template "shared/user/avatarlink" dict "Context" $.Context "user" .DBBranch.Pusher}} &nbsp;{{template "shared/user/namelink" .DBBranch.Pusher}}{{end}}</p>
  96. {{end}}
  97. </td>
  98. <td class="two wide ui">
  99. {{if and (not .DBBranch.IsDeleted) $.DefaultBranchBranch}}
  100. <div class="commit-divergence">
  101. <div class="bar-group">
  102. <div class="count count-behind">{{.CommitsBehind}}</div>
  103. {{/* old code bears 0/0.0 = NaN output, so it might output invalid "width: NaNpx", it just works and doesn't caues any problem. */}}
  104. <div class="bar bar-behind" style="width: {{Eval 100 "*" .CommitsBehind "/" "(" .CommitsBehind "+" .CommitsAhead "+" 0.0 ")"}}%"></div>
  105. </div>
  106. <div class="bar-group">
  107. <div class="count count-ahead">{{.CommitsAhead}}</div>
  108. <div class="bar bar-ahead" style="width: {{Eval 100 "*" .CommitsAhead "/" "(" .CommitsBehind "+" .CommitsAhead "+" 0.0 ")"}}%"></div>
  109. </div>
  110. </div>
  111. {{end}}
  112. </td>
  113. <td class="two wide right aligned">
  114. {{if not .LatestPullRequest}}
  115. {{if .IsIncluded}}
  116. <span class="ui orange large label" data-tooltip-content="{{$.locale.Tr "repo.branch.included_desc"}}">
  117. {{svg "octicon-git-pull-request"}} {{$.locale.Tr "repo.branch.included"}}
  118. </span>
  119. {{else if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
  120. <a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}">
  121. <button id="new-pull-request" class="ui compact basic button gt-mr-0">{{if $.CanPull}}{{$.locale.Tr "repo.pulls.compare_changes"}}{{else}}{{$.locale.Tr "action.compare_branch"}}{{end}}</button>
  122. </a>
  123. {{end}}
  124. {{else if and .LatestPullRequest.HasMerged .MergeMovedOn}}
  125. {{if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
  126. <a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}">
  127. <button id="new-pull-request" class="ui compact basic button gt-mr-0">{{if $.CanPull}}{{$.locale.Tr "repo.pulls.compare_changes"}}{{else}}{{$.locale.Tr "action.compare_branch"}}{{end}}</button>
  128. </a>
  129. {{end}}
  130. {{else}}
  131. <a href="{{.LatestPullRequest.Issue.Link}}" class="gt-vm ref-issue">{{if not .LatestPullRequest.IsSameRepo}}{{.LatestPullRequest.BaseRepo.FullName}}{{end}}#{{.LatestPullRequest.Issue.Index}}</a>
  132. {{if .LatestPullRequest.HasMerged}}
  133. <a href="{{.LatestPullRequest.Issue.Link}}" class="ui text-label purple large label gt-vm">{{svg "octicon-git-merge" 16 "gt-mr-2"}}{{$.locale.Tr "repo.pulls.merged"}}</a>
  134. {{else if .LatestPullRequest.Issue.IsClosed}}
  135. <a href="{{.LatestPullRequest.Issue.Link}}" class="ui text-label red large label gt-vm">{{svg "octicon-git-pull-request" 16 "gt-mr-2"}}{{$.locale.Tr "repo.issues.closed_title"}}</a>
  136. {{else}}
  137. <a href="{{.LatestPullRequest.Issue.Link}}" class="ui text-label green large label gt-vm">{{svg "octicon-git-pull-request" 16 "gt-mr-2"}}{{$.locale.Tr "repo.issues.open_title"}}</a>
  138. {{end}}
  139. {{end}}
  140. </td>
  141. <td class="three wide right aligned overflow-visible">
  142. {{if and $.IsWriter (not $.Repository.IsArchived) (not .DBBranch.IsDeleted)}}
  143. <button class="btn interact-bg gt-p-3 show-modal show-create-branch-modal"
  144. data-branch-from="{{.DBBranch.Name}}"
  145. data-branch-from-urlcomponent="{{PathEscapeSegments .DBBranch.Name}}"
  146. data-tooltip-content="{{$.locale.Tr "repo.branch.new_branch_from" .DBBranch.Name}}"
  147. data-modal="#create-branch-modal" data-name="{{.DBBranch.Name}}"
  148. >
  149. {{svg "octicon-git-branch"}}
  150. </button>
  151. {{end}}
  152. {{if $.EnableFeed}}
  153. <a role="button" class="btn interact-bg gt-p-3" href="{{$.FeedURL}}/rss/branch/{{PathEscapeSegments .DBBranch.Name}}">{{svg "octicon-rss"}}</a>
  154. {{end}}
  155. {{if and (not .DBBranch.IsDeleted) (not $.DisableDownloadSourceArchives)}}
  156. <div class="ui dropdown btn interact-bg gt-p-3" data-tooltip-content="{{$.locale.Tr "repo.branch.download" (.DBBranch.Name)}}">
  157. {{svg "octicon-download"}}
  158. <div class="menu">
  159. <a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments .DBBranch.Name}}.zip" rel="nofollow">{{svg "octicon-file-zip"}}&nbsp;ZIP</a>
  160. <a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments .DBBranch.Name}}.tar.gz" rel="nofollow">{{svg "octicon-file-zip"}}&nbsp;TAR.GZ</a>
  161. </div>
  162. </div>
  163. {{end}}
  164. {{if and $.IsWriter (not $.Repository.IsArchived) (not .DBBranch.IsDeleted) (not $.IsMirror)}}
  165. <button class="btn interact-bg gt-p-3 show-modal show-rename-branch-modal"
  166. data-is-default-branch="false"
  167. data-old-branch-name="{{.DBBranch.Name}}"
  168. data-modal="#rename-branch-modal"
  169. data-tooltip-content="{{$.locale.Tr "repo.branch.rename" (.DBBranch.Name)}}"
  170. >
  171. {{svg "octicon-pencil"}}
  172. </button>
  173. {{end}}
  174. {{if and $.IsWriter (not $.IsMirror) (not $.Repository.IsArchived) (not .IsProtected)}}
  175. {{if .DBBranch.IsDeleted}}
  176. <button class="btn interact-bg gt-p-3 link-action restore-branch-button" data-url="{{$.Link}}/restore?branch_id={{.DBBranch.ID}}&name={{.DBBranch.Name}}&page={{$.Page.Paginater.Current}}" data-tooltip-content="{{$.locale.Tr "repo.branch.restore" (.DBBranch.Name)}}">
  177. <span class="text blue">
  178. {{svg "octicon-reply"}}
  179. </span>
  180. </button>
  181. {{else}}
  182. <button class="btn interact-bg gt-p-3 delete-button delete-branch-button" data-url="{{$.Link}}/delete?name={{.DBBranch.Name}}&page={{$.Page.Paginater.Current}}" data-tooltip-content="{{$.locale.Tr "repo.branch.delete" (.DBBranch.Name)}}" data-name="{{.DBBranch.Name}}">
  183. {{svg "octicon-trash"}}
  184. </button>
  185. {{end}}
  186. {{end}}
  187. </td>
  188. </tr>
  189. {{end}}
  190. </tbody>
  191. </table>
  192. </div>
  193. {{template "base/paginate" .}}
  194. {{end}}
  195. </div>
  196. </div>
  197. <div class="ui g-modal-confirm delete modal">
  198. <div class="header">
  199. {{svg "octicon-trash"}}
  200. {{.locale.Tr "repo.branch.delete_html"}} <span class="name"></span>
  201. </div>
  202. <div class="content">
  203. <p>{{.locale.Tr "repo.branch.delete_desc" | Str2html}}</p>
  204. </div>
  205. {{template "base/modal_actions_confirm" .}}
  206. </div>
  207. <div class="ui mini modal" id="create-branch-modal">
  208. <div class="header">
  209. {{.locale.Tr "repo.branch.new_branch"}}
  210. </div>
  211. <form class="ui form" id="create-branch-form" action="" data-base-action="{{.Link}}/_new/branch/" method="post">
  212. <div class="content">
  213. {{.CsrfTokenHtml}}
  214. <div class="field">
  215. {{.locale.Tr "repo.branch.create_new_branch"}}
  216. <span id="modal-create-branch-from-span"></span>
  217. </div>
  218. <div class="required field">
  219. <label for="new_branch_name">{{.locale.Tr "repo.branch.name"}}</label>
  220. <input id="new_branch_name" name="new_branch_name" required>
  221. </div>
  222. </div>
  223. {{template "base/modal_actions_confirm" (dict "locale" $.locale "ModalButtonTypes" "confirm")}}
  224. </form>
  225. </div>
  226. <div class="ui mini modal" id="rename-branch-modal">
  227. <div class="header">
  228. {{.locale.Tr "repo.settings.rename_branch"}}
  229. </div>
  230. <form class="ui form" action="{{$.Repository.Link}}/settings/rename_branch" method="post">
  231. <div class="content">
  232. {{.CsrfTokenHtml}}
  233. <div class="field default-branch-warning">
  234. <span class="text red">{{.locale.Tr "repo.branch.warning_rename_default_branch"}}</span>
  235. </div>
  236. <div class="field">
  237. <span class="text" data-rename-branch-to="{{.locale.Tr "repo.branch.rename_branch_to"}}"></span>
  238. </div>
  239. <input name="from" type="hidden" required>
  240. <div class="required field">
  241. <input name="to" required>
  242. </div>
  243. </div>
  244. {{template "base/modal_actions_confirm" (dict "locale" $.locale "ModalButtonTypes" "confirm")}}
  245. </form>
  246. </div>
  247. {{template "base/footer" .}}