Skip to content

Commit 155b8b5

Browse files
committed
hide target selector if tag exists
1 parent ea1d097 commit 155b8b5

File tree

4 files changed

+53
-14
lines changed

4 files changed

+53
-14
lines changed

options/locale/locale_en-US.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2288,6 +2288,8 @@ release.edit_subheader = Releases organize project versions.
22882288
release.tag_name = Tag name
22892289
release.target = Target
22902290
release.tag_helper = Choose an existing tag or create a new tag.
2291+
release.tag_helper_new = New tag. This tag will be created from the target.
2292+
release.tag_helper_existing = Existing tag.
22912293
release.title = Title
22922294
release.content = Content
22932295
release.prerelease_desc = Mark as Pre-Release

templates/repo/release/new.tmpl

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,27 @@
2020
<b>{{.tag_name}}</b><span class="at">@</span><strong>{{.tag_target}}</strong>
2121
{{else}}
2222
<input id="tag-name" name="tag_name" value="{{.tag_name}}" placeholder="{{.locale.Tr "repo.release.tag_name"}}" autofocus required maxlength="255">
23-
<span class="at">@</span>
24-
<div class="ui selection dropdown">
25-
<input type="hidden" name="tag_target" value="{{.tag_target}}"/>
26-
{{svg "octicon-git-branch"}}
27-
<div class="text">
28-
{{.locale.Tr "repo.release.target"}} :
29-
<strong id="repo-branch-current">{{.Repository.DefaultBranch}}</strong>
30-
</div>
31-
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
32-
<div class="menu">
33-
{{range .Branches}}
34-
<div class="item" data-value="{{.}}">{{.}}</div>
35-
{{end}}
23+
<input id="tag-name-editor" type="hidden" data-existing-tags={{Json .Tags}} data-tag-helper={{ .locale.Tr "repo.release.tag_helper" }} data-tag-helper-new={{ .locale.Tr "repo.release.tag_helper_new" }} data-tag-helper-existing={{ .locale.Tr "repo.release.tag_helper_existing" }} />
24+
<span id="tag-target-selector">
25+
<span class="at">@</span>
26+
<div class="ui selection dropdown">
27+
<input type="hidden" name="tag_target" value="{{.tag_target}}"/>
28+
{{svg "octicon-git-branch"}}
29+
<div class="text">
30+
{{.locale.Tr "repo.release.target"}} :
31+
<strong id="repo-branch-current">{{.Repository.DefaultBranch}}</strong>
32+
</div>
33+
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
34+
<div class="menu">
35+
{{range .Branches}}
36+
<div class="item" data-value="{{.}}">{{.}}</div>
37+
{{end}}
38+
</div>
3639
</div>
40+
</span>
41+
<div>
42+
<span id="tag-helper" class="help">{{.locale.Tr "repo.release.tag_helper"}}</span>
3743
</div>
38-
<span class="help">{{.locale.Tr "repo.release.tag_helper"}}</span>
3944
{{end}}
4045
</div>
4146
</div>

web_src/js/features/tag-editor.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import $ from 'jquery';
2+
3+
export function initTagNameEditor() {
4+
const el = document.getElementById('tag-name-editor');
5+
if (!el) return;
6+
7+
const existingTags = JSON.parse(el.getAttribute('data-existing-tags'))
8+
if (!Array.isArray(existingTags)) return
9+
10+
const defaultTagHelperText = el.getAttribute('data-tag-helper')
11+
const newTagHelperText = el.getAttribute('data-tag-helper-new')
12+
const existingTagHelperText = el.getAttribute('data-tag-helper-existing')
13+
14+
$('#tag-name').on('keyup', function(e) {
15+
const value = e.target.value
16+
if (existingTags.includes(value)) {
17+
// If the tag already exists, hide the target branch selector.
18+
$('#tag-target-selector').hide()
19+
$('#tag-helper').text(existingTagHelperText)
20+
} else {
21+
$('#tag-target-selector').show()
22+
if (typeof value == 'string' && value.length > 0) {
23+
$('#tag-helper').text(newTagHelperText)
24+
} else {
25+
$('#tag-helper').text(defaultTagHelperText)
26+
}
27+
}
28+
})
29+
}

web_src/js/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ import {initFormattingReplacements} from './features/formatting.js';
9090
import {initCopyContent} from './features/copycontent.js';
9191
import {initCaptcha} from './features/captcha.js';
9292
import {initRepositoryActionView} from './components/RepoActionView.vue';
93+
import {initTagNameEditor} from './features/tag-editor.js';
9394

9495
// Run time-critical code as soon as possible. This is safe to do because this
9596
// script appears at the end of <body> and rendered HTML is accessible at that point.
@@ -198,4 +199,6 @@ $(document).ready(() => {
198199
initUserAuthWebAuthnRegister();
199200
initUserSettings();
200201
initViewedCheckboxListenerFor();
202+
203+
initTagNameEditor();
201204
});

0 commit comments

Comments
 (0)