1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2024-11-24 08:57:03 -05:00

[v7.0/forgejo] ui: fix issue labels

* Fixes https://codeberg.org/forgejo/forgejo/issues/4522
* Fixes https://codeberg.org/forgejo/forgejo/issues/4522#issuecomment-2095542
* Fixes https://codeberg.org/forgejo/forgejo/issues/4544
* Fixes regression of https://codeberg.org/forgejo/forgejo/pulls/4486
* Fixes regression of some cherry-pick
* Fixes an overflow that wasn't even reported

* Revert changes done in https://codeberg.org/forgejo/forgejo/pulls/4486.
* Apply changes proposed in https://codeberg.org/forgejo/forgejo/issues/3875#issuecomment-1840611.
* Introduce new label `ugc-labels` to mark ui labels that are named by
users and therefore need special care. Currently the generic label
classes are used for too many things to work with them directly without
affecting other UI.
This commit is contained in:
0ko 2024-07-17 12:41:51 +05:00 committed by Gusted
parent 8d8cd3aad8
commit 2dc87d389d
No known key found for this signature in database
GPG key ID: FD821B732837125F
4 changed files with 22 additions and 26 deletions

View file

@ -5,7 +5,7 @@
{{svg "octicon-gear" 16 "tw-ml-1"}} {{svg "octicon-gear" 16 "tw-ml-1"}}
{{end}} {{end}}
</span> </span>
<div class="filter menu" {{if .Issue}}data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/labels"{{else}}data-id="#label_ids"{{end}}> <div class="filter menu ugc-labels" {{if .Issue}}data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/labels"{{else}}data-id="#label_ids"{{end}}>
{{if or .Labels .OrgLabels}} {{if or .Labels .OrgLabels}}
<div class="ui icon search input"> <div class="ui icon search input">
<i class="icon">{{svg "octicon-search" 16}}</i> <i class="icon">{{svg "octicon-search" 16}}</i>

View file

@ -1,13 +1,11 @@
<div class="ui labels list"> <div class="ui labels list">
<span class="no-select item {{if .root.HasSelectedLabel}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_label"}}</span> <span class="no-select {{if .root.HasSelectedLabel}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_label"}}</span>
{{if .root.HasSelectedLabel}} <span class="labels-list ugc-labels">
<span class="labels-list"> {{range .root.Labels}}
{{range .root.Labels}} {{template "repo/issue/labels/label" dict "root" $.root "label" .}}
{{template "repo/issue/labels/label" dict "root" $.root "label" .}} {{end}}
{{end}} {{range .root.OrgLabels}}
{{range .root.OrgLabels}} {{template "repo/issue/labels/label" dict "root" $.root "label" .}}
{{template "repo/issue/labels/label" dict "root" $.root "label" .}} {{end}}
{{end}} </span>
</span>
{{end}}
</div> </div>

View file

@ -942,10 +942,11 @@ func TestIssueUnsubscription(t *testing.T) {
func TestIssueLabelList(t *testing.T) { func TestIssueLabelList(t *testing.T) {
defer tests.PrepareTestEnv(t)() defer tests.PrepareTestEnv(t)()
// The label list should always be present. When no labels are selected, .no-select is visible, otherwise hidden.
labelListSelector := ".labels.list .labels-list" labelListSelector := ".labels.list .labels-list"
hiddenClass := "tw-hidden" hiddenClass := "tw-hidden"
t.Run("Show label list", func(t *testing.T) { t.Run("Test label list", func(t *testing.T) {
defer tests.PrintCurrentTest(t)() defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", "/user2/repo1/issues/1") req := NewRequest(t, "GET", "/user2/repo1/issues/1")
@ -953,18 +954,6 @@ func TestIssueLabelList(t *testing.T) {
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
htmlDoc.AssertElement(t, labelListSelector, true) htmlDoc.AssertElement(t, labelListSelector, true)
htmlDoc.AssertElement(t, ".labels.list .no-select.item."+hiddenClass, true) htmlDoc.AssertElement(t, ".labels.list .no-select."+hiddenClass, true)
})
t.Run("Show no label list", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
session := loginUser(t, "user2")
req := NewRequest(t, "GET", "/user2/repo2/issues/1")
resp := session.MakeRequest(t, req, http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body)
htmlDoc.AssertElement(t, labelListSelector, false)
htmlDoc.AssertElement(t, ".labels.list .no-select.item:not([class*='"+hiddenClass+"'])", true)
}) })
} }

View file

@ -98,6 +98,15 @@ a.ui.label:hover {
display: inline-block !important; display: inline-block !important;
} }
.ugc-labels .item {
text-overflow: unset !important;
}
.ugc-labels .item .ui.label {
text-wrap: auto;
overflow-wrap: anywhere;
}
.ui.basic.label { .ui.basic.label {
background: var(--color-button); background: var(--color-button);
border: 1px solid var(--color-light-border); border: 1px solid var(--color-light-border);