mirror of
https://github.com/go-gitea/gitea.git
synced 2024-11-23 09:53:58 +08:00
Be more lenient with label colors (#17752)
Accept 12-bit color specifications.
This commit is contained in:
parent
3a91f845e8
commit
9911b66aea
|
@ -22,7 +22,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// LabelColorPattern is a regexp witch can validate LabelColor
|
// LabelColorPattern is a regexp witch can validate LabelColor
|
||||||
var LabelColorPattern = regexp.MustCompile("^#[0-9a-fA-F]{6}$")
|
var LabelColorPattern = regexp.MustCompile("^#?(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{3})$")
|
||||||
|
|
||||||
// Label represents a label of repository for issues.
|
// Label represents a label of repository for issues.
|
||||||
type Label struct {
|
type Label struct {
|
||||||
|
@ -258,6 +258,23 @@ func NewLabel(label *Label) error {
|
||||||
if !LabelColorPattern.MatchString(label.Color) {
|
if !LabelColorPattern.MatchString(label.Color) {
|
||||||
return fmt.Errorf("bad color code: %s", label.Color)
|
return fmt.Errorf("bad color code: %s", label.Color)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// normalize case
|
||||||
|
label.Color = strings.ToLower(label.Color)
|
||||||
|
|
||||||
|
// add leading hash
|
||||||
|
if label.Color[0] != '#' {
|
||||||
|
label.Color = "#" + label.Color
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert 3-character shorthand into 6-character version
|
||||||
|
if len(label.Color) == 4 {
|
||||||
|
r := label.Color[1]
|
||||||
|
g := label.Color[2]
|
||||||
|
b := label.Color[3]
|
||||||
|
label.Color = fmt.Sprintf("#%c%c%c%c%c%c", r, r, g, g, b, b)
|
||||||
|
}
|
||||||
|
|
||||||
return newLabel(db.GetEngine(db.DefaultContext), label)
|
return newLabel(db.GetEngine(db.DefaultContext), label)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,11 +38,15 @@ func TestNewLabels(t *testing.T) {
|
||||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
labels := []*Label{
|
labels := []*Label{
|
||||||
{RepoID: 2, Name: "labelName2", Color: "#123456"},
|
{RepoID: 2, Name: "labelName2", Color: "#123456"},
|
||||||
{RepoID: 3, Name: "labelName3", Color: "#23456F"},
|
{RepoID: 3, Name: "labelName3", Color: "#123"},
|
||||||
|
{RepoID: 4, Name: "labelName4", Color: "ABCDEF"},
|
||||||
|
{RepoID: 5, Name: "labelName5", Color: "DEF"},
|
||||||
}
|
}
|
||||||
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: ""}))
|
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: ""}))
|
||||||
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "123456"}))
|
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "#45G"}))
|
||||||
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "#12345G"}))
|
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "#12345G"}))
|
||||||
|
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "45G"}))
|
||||||
|
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "12345G"}))
|
||||||
for _, label := range labels {
|
for _, label := range labels {
|
||||||
unittest.AssertNotExistsBean(t, label)
|
unittest.AssertNotExistsBean(t, label)
|
||||||
}
|
}
|
||||||
|
|
|
@ -549,7 +549,7 @@ type CreateLabelForm struct {
|
||||||
ID int64
|
ID int64
|
||||||
Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_title"`
|
Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_title"`
|
||||||
Description string `binding:"MaxSize(200)" locale:"repo.issues.label_description"`
|
Description string `binding:"MaxSize(200)" locale:"repo.issues.label_description"`
|
||||||
Color string `binding:"Required;Size(7)" locale:"repo.issues.label_color"`
|
Color string `binding:"Required;MaxSize(7)" locale:"repo.issues.label_color"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate validates the fields
|
// Validate validates the fields
|
||||||
|
|
Loading…
Reference in New Issue
Block a user