diff --git a/models/issue.go b/models/issue.go index 62db35d48a6..c9883a25e60 100644 --- a/models/issue.go +++ b/models/issue.go @@ -8,10 +8,12 @@ import ( "bytes" "errors" "fmt" + "html/template" "io" "mime/multipart" "os" "path" + "strconv" "strings" "time" @@ -958,6 +960,26 @@ func (m *Label) CalOpenIssues() { m.NumOpenIssues = m.NumIssues - m.NumClosedIssues } +// ForegroundColor calculates the text color for labels based +// on their background color +func (l *Label) ForegroundColor() template.CSS { + if strings.HasPrefix(l.Color, "#") { + if color, err := strconv.ParseUint(l.Color[1:], 16, 64); err == nil { + r := float32(0xFF & (color >> 16)) + g := float32(0xFF & (color >> 8)) + b := float32(0xFF & color) + luminance := (0.2126*r + 0.7152*g + 0.0722*b) / 255 + + if luminance < 0.5 { + return template.CSS("rgba(255,255,255,.8)") + } + } + } + + // default to black + return template.CSS("rgba(0,0,0,.8)") +} + // NewLabel creates new label of repository. func NewLabel(l *Label) error { _, err := x.Insert(l) diff --git a/templates/repo/issue/labels.tmpl b/templates/repo/issue/labels.tmpl index d7f758ae653..7fef4390c89 100644 --- a/templates/repo/issue/labels.tmpl +++ b/templates/repo/issue/labels.tmpl @@ -39,7 +39,7 @@