aboutsummaryrefslogtreecommitdiffstats
path: root/modules/badge
diff options
context:
space:
mode:
Diffstat (limited to 'modules/badge')
-rw-r--r--modules/badge/badge.go40
-rw-r--r--modules/badge/badge_glyph_width.go6
2 files changed, 31 insertions, 15 deletions
diff --git a/modules/badge/badge.go b/modules/badge/badge.go
index fdf9866f60..d2e9bd9d1b 100644
--- a/modules/badge/badge.go
+++ b/modules/badge/badge.go
@@ -5,6 +5,7 @@ package badge
import (
"strings"
+ "sync"
"unicode"
actions_model "code.gitea.io/gitea/models/actions"
@@ -49,23 +50,40 @@ func (b Badge) Width() int {
return b.Label.width + b.Message.width
}
+// Style follows https://shields.io/badges
+const (
+ StyleFlat = "flat"
+ StyleFlatSquare = "flat-square"
+)
+
const (
defaultOffset = 10
defaultFontSize = 11
DefaultColor = "#9f9f9f" // Grey
DefaultFontFamily = "DejaVu Sans,Verdana,Geneva,sans-serif"
+ DefaultStyle = StyleFlat
)
-var StatusColorMap = map[actions_model.Status]string{
- actions_model.StatusSuccess: "#4c1", // Green
- actions_model.StatusSkipped: "#dfb317", // Yellow
- actions_model.StatusUnknown: "#97ca00", // Light Green
- actions_model.StatusFailure: "#e05d44", // Red
- actions_model.StatusCancelled: "#fe7d37", // Orange
- actions_model.StatusWaiting: "#dfb317", // Yellow
- actions_model.StatusRunning: "#dfb317", // Yellow
- actions_model.StatusBlocked: "#dfb317", // Yellow
-}
+var GlobalVars = sync.OnceValue(func() (ret struct {
+ StatusColorMap map[actions_model.Status]string
+ DejaVuGlyphWidthData map[rune]uint8
+ AllStyles []string
+},
+) {
+ ret.StatusColorMap = map[actions_model.Status]string{
+ actions_model.StatusSuccess: "#4c1", // Green
+ actions_model.StatusSkipped: "#dfb317", // Yellow
+ actions_model.StatusUnknown: "#97ca00", // Light Green
+ actions_model.StatusFailure: "#e05d44", // Red
+ actions_model.StatusCancelled: "#fe7d37", // Orange
+ actions_model.StatusWaiting: "#dfb317", // Yellow
+ actions_model.StatusRunning: "#dfb317", // Yellow
+ actions_model.StatusBlocked: "#dfb317", // Yellow
+ }
+ ret.DejaVuGlyphWidthData = dejaVuGlyphWidthDataFunc()
+ ret.AllStyles = []string{StyleFlat, StyleFlatSquare}
+ return ret
+})
// GenerateBadge generates badge with given template
func GenerateBadge(label, message, color string) Badge {
@@ -93,7 +111,7 @@ func GenerateBadge(label, message, color string) Badge {
func calculateTextWidth(text string) int {
width := 0
- widthData := DejaVuGlyphWidthData()
+ widthData := GlobalVars().DejaVuGlyphWidthData
for _, char := range strings.TrimSpace(text) {
charWidth, ok := widthData[char]
if !ok {
diff --git a/modules/badge/badge_glyph_width.go b/modules/badge/badge_glyph_width.go
index e8e43ec9cb..0d950c5a70 100644
--- a/modules/badge/badge_glyph_width.go
+++ b/modules/badge/badge_glyph_width.go
@@ -3,8 +3,6 @@
package badge
-import "sync"
-
// DejaVuGlyphWidthData is generated by `sfnt.Face.GlyphAdvance(nil, <rune>, 11, font.HintingNone)` with DejaVu Sans
// v2.37 (https://github.com/dejavu-fonts/dejavu-fonts/releases/download/version_2_37/dejavu-sans-ttf-2.37.zip).
//
@@ -13,7 +11,7 @@ import "sync"
//
// A devtest page "/devtest/badge-actions-svg" could be used to check the rendered images.
-var DejaVuGlyphWidthData = sync.OnceValue(func() map[rune]uint8 {
+func dejaVuGlyphWidthDataFunc() map[rune]uint8 {
return map[rune]uint8{
32: 3,
33: 4,
@@ -205,4 +203,4 @@ var DejaVuGlyphWidthData = sync.OnceValue(func() map[rune]uint8 {
254: 7,
255: 7,
}
-})
+}