diff --git a/models/issues/label.go b/models/issues/label.go
index 35c649e8f24d9..e8a2dddd05462 100644
--- a/models/issues/label.go
+++ b/models/issues/label.go
@@ -187,10 +187,7 @@ func (l *Label) UseLightTextColor() bool {
}
// Return scope substring of label name, or empty string if none exists
-func (l *Label) ExclusiveScope() string {
- if !l.Exclusive {
- return ""
- }
+func (l *Label) Scope() string {
lastIndex := strings.LastIndex(l.Name, "/")
if lastIndex == -1 || lastIndex == 0 || lastIndex == len(l.Name)-1 {
return ""
@@ -198,6 +195,14 @@ func (l *Label) ExclusiveScope() string {
return l.Name[:lastIndex]
}
+// Return scope for exclusive labels, or empty string if none exists
+func (l *Label) ExclusiveScope() string {
+ if !l.Exclusive {
+ return ""
+ }
+ return l.Scope()
+}
+
// NewLabel creates a new label
func NewLabel(ctx context.Context, l *Label) error {
color, err := label.NormalizeColor(l.Color)
diff --git a/modules/templates/helper.go b/modules/templates/helper.go
index 19893c7c9d4de..a82ff8b3c0c2c 100644
--- a/modules/templates/helper.go
+++ b/modules/templates/helper.go
@@ -809,7 +809,7 @@ func RenderIssueTitle(ctx context.Context, text, urlPrefix string, metas map[str
// RenderLabel renders a label
func RenderLabel(ctx context.Context, label *issues_model.Label) string {
- labelScope := label.ExclusiveScope()
+ labelScope := label.Scope()
textColor := "#111"
if label.UseLightTextColor() {
@@ -834,7 +834,7 @@ func RenderLabel(ctx context.Context, label *issues_model.Label) string {
// Make scope and item background colors slightly darker and lighter respectively.
// More contrast needed with higher luminance, empirically tweaked.
luminance := (0.299*r + 0.587*g + 0.114*b) / 255
- contrast := 0.01 + luminance*0.06
+ contrast := 0.01 + luminance*0.03
// Ensure we add the same amount of contrast also near 0 and 1.
darken := contrast + math.Max(luminance+contrast-1.0, 0.0)
lighten := contrast + math.Max(contrast-luminance, 0.0)
@@ -859,12 +859,10 @@ func RenderLabel(ctx context.Context, label *issues_model.Label) string {
return fmt.Sprintf(""+
"%s
"+
- "
"+
"%s
"+
"",
description,
textColor, scopeColor, scopeText,
- itemColor, scopeColor,
textColor, itemColor, itemText)
}
diff --git a/templates/repo/issue/labels/labels_selector_field.tmpl b/templates/repo/issue/labels/labels_selector_field.tmpl
new file mode 100644
index 0000000000000..e003e79b56772
--- /dev/null
+++ b/templates/repo/issue/labels/labels_selector_field.tmpl
@@ -0,0 +1,45 @@
+
diff --git a/templates/repo/issue/list.tmpl b/templates/repo/issue/list.tmpl
index ca05264e77b62..a0291fc6b701b 100644
--- a/templates/repo/issue/list.tmpl
+++ b/templates/repo/issue/list.tmpl
@@ -50,14 +50,14 @@
{{.locale.Tr "repo.issues.filter_label_exclude" | Safe}}
{{.locale.Tr "repo.issues.filter_label_no_select"}}
- {{$previousExclusiveScope := "_no_scope"}}
+ {{$previousScope := "_no_scope"}}
{{range .Labels}}
- {{$exclusiveScope := .ExclusiveScope}}
- {{if and (ne $previousExclusiveScope "_no_scope") (ne $previousExclusiveScope $exclusiveScope)}}
+ {{$scope := .Scope}}
+ {{if and (ne $previousScope "_no_scope") (ne $previousScope $scope)}}
{{end}}
- {{$previousExclusiveScope = $exclusiveScope}}
- {{if .IsExcluded}}{{svg "octicon-circle-slash"}}{{else if .IsSelected}}{{if $exclusiveScope}}{{svg "octicon-dot-fill"}}{{else}}{{svg "octicon-check"}}{{end}}{{end}} {{RenderLabel $.Context .}}
+ {{$previousScope = $scope}}
+ {{if .IsExcluded}}{{svg "octicon-circle-slash"}}{{else if .IsSelected}}{{if .ExclusiveScope}}{{svg "octicon-dot-fill"}}{{else}}{{svg "octicon-check"}}{{end}}{{end}} {{RenderLabel $.Context .}}
{{end}}
@@ -224,15 +224,15 @@
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
diff --git a/templates/repo/issue/new_form.tmpl b/templates/repo/issue/new_form.tmpl
index 9fd6c99a5b3f0..a99ceb0451484 100644
--- a/templates/repo/issue/new_form.tmpl
+++ b/templates/repo/issue/new_form.tmpl
@@ -36,50 +36,7 @@
{{template "repo/issue/branch_selector_field" .}}
-
-
- {{.locale.Tr "repo.issues.new.labels"}}
- {{if .HasIssuesOrPullsWritePermission}}
- {{svg "octicon-gear"}}
- {{end}}
-
-
-
+ {{template "repo/issue/labels/labels_selector_field" .}}
{{template "repo/issue/labels/labels_sidebar" dict "root" $}}
diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 29bfac7c27ea2..e58f94aff389d 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -106,49 +106,7 @@
{{end}}
-
+ {{template "repo/issue/labels/labels_selector_field" .}}
{{template "repo/issue/labels/labels_sidebar" dict "root" $}}
diff --git a/web_src/less/_repository.less b/web_src/less/_repository.less
index 2c47135a2452b..0069a31cecb40 100644
--- a/web_src/less/_repository.less
+++ b/web_src/less/_repository.less
@@ -2838,11 +2838,11 @@
.labels-list .label {
margin: 2px 0;
- display: inline-block !important;
+ display: inline-flex !important;
line-height: 1.3em; // there is a `font-size: 1.25em` for inside emoji, so here the line-height needs to be larger slightly
}
-// Scoped labels with different colors on left and right, and slanted divider in the middle
+// Scoped labels with different colors on left and right
.scope-parent {
background: none !important;
padding: 0 !important;
@@ -2851,23 +2851,12 @@
.ui.label.scope-left {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
- padding-right: 0;
- margin-right: 0;
-}
-
-.ui.label.scope-middle {
- width: 12px;
- border-radius: 0;
- padding-left: 0;
- padding-right: 0;
- margin-left: 0;
margin-right: 0;
}
.ui.label.scope-right {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
- padding-left: 0;
margin-left: 0;
}