|
|
|
@ -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)
|
|
|
|
|