From 5285a3e70e0718d0df0b4acaaf41926dcef303fd Mon Sep 17 00:00:00 2001
From: Viktor Yakovchuk <viktor@yakovchuk.net>
Date: Mon, 24 May 2021 17:57:46 +0300
Subject: [PATCH] Add possibility to make branch in branch page (#15960)

* Add possibility to make branch in branch page (#15911)

Add possibility to make branch in branch page
in the area next to Download and Delete buttons.
It is a more intuitive place in the interface
compared to what is already there.

Signed-off-by: Viktor Yakovchuk <viktor@yakovchuk.net>

* Update templates/repo/branch/list.tmpl

Co-authored-by: zeripath <art27@cantab.net>
---
 options/locale/locale_en-US.ini |  4 ++++
 templates/repo/branch/list.tmpl | 36 +++++++++++++++++++++++++++++++++
 web_src/js/index.js             |  5 +++++
 3 files changed, 45 insertions(+)

diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index ab7367ba7a..d7d5abce1f 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -1977,6 +1977,10 @@ branch.restore = Restore Branch '%s'
 branch.download = Download Branch '%s'
 branch.included_desc = This branch is part of the default branch
 branch.included = Included
+branch.create_new_branch = Create branch from branch:
+branch.confirm_create_branch = Create branch
+branch.new_branch = Create new branch
+branch.new_branch_from = Create new branch from '%s'
 
 tag.create_tag = Create tag <strong>%s</strong>
 tag.create_success = Tag '%s' has been created.
diff --git a/templates/repo/branch/list.tmpl b/templates/repo/branch/list.tmpl
index 3b678e2ce1..1e21863ee1 100644
--- a/templates/repo/branch/list.tmpl
+++ b/templates/repo/branch/list.tmpl
@@ -24,6 +24,11 @@
 						{{end}}
 						</td>
 						<td class="right aligned overflow-visible">
+							{{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
+								<div class="ui basic jump button icon poping up show-create-branch-modal" data-content="{{$.i18n.Tr "repo.branch.new_branch_from" ($.DefaultBranch)}}" data-variation="tiny inverted" data-branch-from="{{EscapePound $.DefaultBranch}}" data-modal="#create-branch-modal" data-position="top right">
+									{{svg "octicon-git-branch"}}
+								</div>
+							{{end}}
 							<div class="ui basic jump dropdown icon button poping up" data-content="{{$.i18n.Tr "repo.branch.download" ($.DefaultBranch)}}" data-variation="tiny inverted" data-position="top right">
 								{{svg "octicon-download"}}
 								<div class="menu">
@@ -102,6 +107,11 @@
 										{{end}}
 									</td>
 									<td class="two wide right aligned overflow-visible">
+										{{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
+											<div class="ui basic jump button icon poping up show-create-branch-modal" data-branch-from="{{EscapePound .Name}}" data-content="{{$.i18n.Tr "repo.branch.new_branch_from" .Name}}" data-variation="tiny inverted" data-position="top right" data-modal="#create-branch-modal" data-name="{{.Name}}">
+												{{svg "octicon-git-branch"}}
+											</div>
+										{{end}}
 										{{if (not .IsDeleted)}}
 											<div class="ui basic jump dropdown icon button poping up" data-content="{{$.i18n.Tr "repo.branch.download" (.Name)}}" data-variation="tiny inverted" data-position="top right">
 												{{svg "octicon-download"}}
@@ -142,4 +152,30 @@
 	</div>
 	{{template "base/delete_modal_actions" .}}
 </div>
+
+<div class="ui small modal" id="create-branch-modal">
+	<div class="header">
+		{{.i18n.Tr "repo.branch.new_branch"}}
+	</div>
+	<div class="content">
+		<form class="ui form" id="create-branch-form" action="" data-base-action="{{.Link}}/_new/branch/" method="post">
+			{{.CsrfTokenHtml}}
+			<div class="field">
+				<label>
+					{{.i18n.Tr "repo.branch.create_new_branch"}}
+					<span class="text" id="modal-create-branch-from-span"></span>
+				</label>
+			</div>
+			<div class="required field">
+				<label for="new_branch_name">{{.i18n.Tr "repo.branch.name"}}</label>
+				<input id="new_branch_name" name="new_branch_name" required>
+			</div>
+
+			<div class="text right actions">
+				<div class="ui cancel button">{{.i18n.Tr "settings.cancel"}}</div>
+				<button class="ui green button">{{.i18n.Tr "repo.branch.confirm_create_branch"}}</button>
+			</div>
+		</form>
+	</div>
+</div>
 {{template "base/footer" .}}
diff --git a/web_src/js/index.js b/web_src/js/index.js
index c3d74b1395..5ba2662ea4 100644
--- a/web_src/js/index.js
+++ b/web_src/js/index.js
@@ -2658,6 +2658,11 @@ $(document).ready(async () => {
   $('.show-panel.button').on('click', function () {
     $($(this).data('panel')).show();
   });
+  $('.show-create-branch-modal.button').on('click', function () {
+    $('#create-branch-form')[0].action = $('#create-branch-form').data('base-action') + $(this).data('branch-from');
+    $('#modal-create-branch-from-span').text($(this).data('branch-from'));
+    $($(this).data('modal')).modal('show');
+  });
   $('.show-modal.button').on('click', function () {
     $($(this).data('modal')).modal('show');
   });