Skip to content

Commit 3de9e63

Browse files
authored
Hide target selector if tag exists when creating new release (#23171)
Close #22649. |status|screenshot| |-|-| |empty tag name|<img src="https://user-images.githubusercontent.com/15528715/221490165-fd3abd2e-6dc5-4562-bece-d1d6a305479e.png" width="300px"/>| |new tag|<img src="https://user-images.githubusercontent.com/15528715/221490450-49b2a48e-b206-49f4-bd79-34b1ea64156f.png" width="300px"/>| |existing tag|<img src="https://user-images.githubusercontent.com/15528715/221490301-4d1879dd-4947-4abc-9b9a-e77be1806981.png" width="300px"/>|
1 parent 5155ec3 commit 3de9e63

File tree

4 files changed

+60
-18
lines changed

4 files changed

+60
-18
lines changed

options/locale/locale_en-US.ini

+2
Original file line numberDiff line numberDiff line change
@@ -2290,6 +2290,8 @@ release.edit_subheader = Releases organize project versions.
22902290
release.tag_name = Tag name
22912291
release.target = Target
22922292
release.tag_helper = Choose an existing tag or create a new tag.
2293+
release.tag_helper_new = New tag. This tag will be created from the target.
2294+
release.tag_helper_existing = Existing tag.
22932295
release.title = Title
22942296
release.content = Content
22952297
release.prerelease_desc = Mark as Pre-Release

templates/repo/release/new.tmpl

+19-14
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+
<div id="tag-target-selector" class="gt-dib">
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>
3740
</div>
38-
<span class="help">{{.locale.Tr "repo.release.tag_helper"}}</span>
41+
<div>
42+
<span id="tag-helper" class="help gt-mt-2">{{.locale.Tr "repo.release.tag_helper"}}</span>
43+
</div>
3944
{{end}}
4045
</div>
4146
</div>

web_src/js/features/repo-release.js

+37-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {attachTribute} from './tribute.js';
33
import {initCompMarkupContentPreviewTab} from './comp/MarkupContentPreview.js';
44
import {initEasyMDEImagePaste} from './comp/ImagePaste.js';
55
import {createCommentEasyMDE} from './comp/EasyMDE.js';
6-
import {hideElem} from '../utils/dom.js';
6+
import {hideElem, showElem} from '../utils/dom.js';
77

88
export function initRepoRelease() {
99
$(document).on('click', '.remove-rel-attach', function() {
@@ -14,8 +14,43 @@ export function initRepoRelease() {
1414
});
1515
}
1616

17+
export function initRepoReleaseNew() {
18+
const $repoReleaseNew = $('.repository.new.release');
19+
if (!$repoReleaseNew.length) return;
1720

18-
export function initRepoReleaseEditor() {
21+
initTagNameEditor();
22+
initRepoReleaseEditor();
23+
}
24+
25+
function initTagNameEditor() {
26+
const el = document.getElementById('tag-name-editor');
27+
if (!el) return;
28+
29+
const existingTags = JSON.parse(el.getAttribute('data-existing-tags'));
30+
if (!Array.isArray(existingTags)) return;
31+
32+
const defaultTagHelperText = el.getAttribute('data-tag-helper');
33+
const newTagHelperText = el.getAttribute('data-tag-helper-new');
34+
const existingTagHelperText = el.getAttribute('data-tag-helper-existing');
35+
36+
document.getElementById('tag-name').addEventListener('keyup', (e) => {
37+
const value = e.target.value;
38+
if (existingTags.includes(value)) {
39+
// If the tag already exists, hide the target branch selector.
40+
hideElem('#tag-target-selector');
41+
document.getElementById('tag-helper').innerText = existingTagHelperText;
42+
} else {
43+
showElem('#tag-target-selector');
44+
if (value) {
45+
document.getElementById('tag-helper').innerText = newTagHelperText;
46+
} else {
47+
document.getElementById('tag-helper').innerText = defaultTagHelperText;
48+
}
49+
}
50+
});
51+
}
52+
53+
function initRepoReleaseEditor() {
1954
const $editor = $('.repository.new.release .content-editor');
2055
if ($editor.length === 0) {
2156
return;

web_src/js/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ import {
7676
import {initViewedCheckboxListenerFor} from './features/pull-view-file.js';
7777
import {initOrgTeamSearchRepoBox, initOrgTeamSettings} from './features/org-team.js';
7878
import {initUserAuthWebAuthn, initUserAuthWebAuthnRegister} from './features/user-auth-webauthn.js';
79-
import {initRepoRelease, initRepoReleaseEditor} from './features/repo-release.js';
79+
import {initRepoRelease, initRepoReleaseNew} from './features/repo-release.js';
8080
import {initRepoEditor} from './features/repo-editor.js';
8181
import {initCompSearchUserBox} from './features/comp/SearchUserBox.js';
8282
import {initInstall} from './features/install.js';
@@ -179,7 +179,7 @@ $(document).ready(() => {
179179
initRepoPullRequestAllowMaintainerEdit();
180180
initRepoPullRequestReview();
181181
initRepoRelease();
182-
initRepoReleaseEditor();
182+
initRepoReleaseNew();
183183
initRepoSettingGitHook();
184184
initRepoSettingSearchTeamBox();
185185
initRepoSettingsCollaboration();

0 commit comments

Comments
 (0)