|
|
|
@ -121,29 +121,25 @@ func RenderIssueTitle(ctx context.Context, text string, metas map[string]string) |
|
|
|
|
// RenderLabel renders a label
|
|
|
|
|
// locale is needed due to an import cycle with our context providing the `Tr` function
|
|
|
|
|
func RenderLabel(ctx context.Context, locale translation.Locale, label *issues_model.Label) template.HTML { |
|
|
|
|
var ( |
|
|
|
|
archivedCSSClass string |
|
|
|
|
textColor = util.ContrastColor(label.Color) |
|
|
|
|
labelScope = label.ExclusiveScope() |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
description := emoji.ReplaceAliases(template.HTMLEscapeString(label.Description)) |
|
|
|
|
var extraCSSClasses string |
|
|
|
|
textColor := util.ContrastColor(label.Color) |
|
|
|
|
labelScope := label.ExclusiveScope() |
|
|
|
|
descriptionText := emoji.ReplaceAliases(label.Description) |
|
|
|
|
|
|
|
|
|
if label.IsArchived() { |
|
|
|
|
archivedCSSClass = "archived-label" |
|
|
|
|
description = fmt.Sprintf("(%s) %s", locale.TrString("archived"), description) |
|
|
|
|
extraCSSClasses = "archived-label" |
|
|
|
|
descriptionText = fmt.Sprintf("(%s) %s", locale.TrString("archived"), descriptionText) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if labelScope == "" { |
|
|
|
|
// Regular label
|
|
|
|
|
s := fmt.Sprintf("<div class='ui label %s' style='color: %s !important; background-color: %s !important;' data-tooltip-content title='%s'>%s</div>", |
|
|
|
|
archivedCSSClass, textColor, label.Color, description, RenderEmoji(ctx, label.Name)) |
|
|
|
|
return template.HTML(s) |
|
|
|
|
return HTMLFormat(`<div class="ui label %s" style="color: %s !important; background-color: %s !important;" data-tooltip-content title="%s">%s</div>`, |
|
|
|
|
extraCSSClasses, textColor, label.Color, descriptionText, RenderEmoji(ctx, label.Name)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Scoped label
|
|
|
|
|
scopeText := RenderEmoji(ctx, labelScope) |
|
|
|
|
itemText := RenderEmoji(ctx, label.Name[len(labelScope)+1:]) |
|
|
|
|
scopeHTML := RenderEmoji(ctx, labelScope) |
|
|
|
|
itemHTML := RenderEmoji(ctx, label.Name[len(labelScope)+1:]) |
|
|
|
|
|
|
|
|
|
// Make scope and item background colors slightly darker and lighter respectively.
|
|
|
|
|
// More contrast needed with higher luminance, empirically tweaked.
|
|
|
|
@ -171,14 +167,13 @@ func RenderLabel(ctx context.Context, locale translation.Locale, label *issues_m |
|
|
|
|
itemColor := "#" + hex.EncodeToString(itemBytes) |
|
|
|
|
scopeColor := "#" + hex.EncodeToString(scopeBytes) |
|
|
|
|
|
|
|
|
|
s := fmt.Sprintf("<span class='ui label %s scope-parent' data-tooltip-content title='%s'>"+ |
|
|
|
|
"<div class='ui label scope-left' style='color: %s !important; background-color: %s !important'>%s</div>"+ |
|
|
|
|
"<div class='ui label scope-right' style='color: %s !important; background-color: %s !important'>%s</div>"+ |
|
|
|
|
"</span>", |
|
|
|
|
archivedCSSClass, description, |
|
|
|
|
textColor, scopeColor, scopeText, |
|
|
|
|
textColor, itemColor, itemText) |
|
|
|
|
return template.HTML(s) |
|
|
|
|
return HTMLFormat(`<span class="ui label %s scope-parent" data-tooltip-content title="%s">`+ |
|
|
|
|
`<div class="ui label scope-left" style="color: %s !important; background-color: %s !important">%s</div>`+ |
|
|
|
|
`<div class="ui label scope-right" style="color: %s !important; background-color: %s !important">%s</div>`+ |
|
|
|
|
`</span>`, |
|
|
|
|
extraCSSClasses, descriptionText, |
|
|
|
|
textColor, scopeColor, scopeHTML, |
|
|
|
|
textColor, itemColor, itemHTML) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// RenderEmoji renders html text with emoji post processors
|
|
|
|
|