mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-25 01:24:13 +02:00 
			
		
		
		
	replace #27187 close #23688 The badge has two parts: label(workflow name) and message(action status). 5 colors are provided with 7 statuses. Color mapping: ```go 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 } ``` preview:      --------- Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Giteabot <teabot@gitea.io> Co-authored-by: delvh <dev.lh@web.de>
		
			
				
	
	
		
			105 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2024 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package badge
 | |
| 
 | |
| import (
 | |
| 	actions_model "code.gitea.io/gitea/models/actions"
 | |
| )
 | |
| 
 | |
| // The Badge layout: |offset|label|message|
 | |
| // We use 10x scale to calculate more precisely
 | |
| // Then scale down to normal size in tmpl file
 | |
| 
 | |
| type Label struct {
 | |
| 	text  string
 | |
| 	width int
 | |
| }
 | |
| 
 | |
| func (l Label) Text() string {
 | |
| 	return l.text
 | |
| }
 | |
| 
 | |
| func (l Label) Width() int {
 | |
| 	return l.width
 | |
| }
 | |
| 
 | |
| func (l Label) TextLength() int {
 | |
| 	return int(float64(l.width-defaultOffset) * 9.5)
 | |
| }
 | |
| 
 | |
| func (l Label) X() int {
 | |
| 	return l.width*5 + 10
 | |
| }
 | |
| 
 | |
| type Message struct {
 | |
| 	text  string
 | |
| 	width int
 | |
| 	x     int
 | |
| }
 | |
| 
 | |
| func (m Message) Text() string {
 | |
| 	return m.text
 | |
| }
 | |
| 
 | |
| func (m Message) Width() int {
 | |
| 	return m.width
 | |
| }
 | |
| 
 | |
| func (m Message) X() int {
 | |
| 	return m.x
 | |
| }
 | |
| 
 | |
| func (m Message) TextLength() int {
 | |
| 	return int(float64(m.width-defaultOffset) * 9.5)
 | |
| }
 | |
| 
 | |
| type Badge struct {
 | |
| 	Color    string
 | |
| 	FontSize int
 | |
| 	Label    Label
 | |
| 	Message  Message
 | |
| }
 | |
| 
 | |
| func (b Badge) Width() int {
 | |
| 	return b.Label.width + b.Message.width
 | |
| }
 | |
| 
 | |
| const (
 | |
| 	defaultOffset    = 9
 | |
| 	defaultFontSize  = 11
 | |
| 	DefaultColor     = "#9f9f9f" // Grey
 | |
| 	defaultFontWidth = 7         // approximate speculation
 | |
| )
 | |
| 
 | |
| 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
 | |
| }
 | |
| 
 | |
| // GenerateBadge generates badge with given template
 | |
| func GenerateBadge(label, message, color string) Badge {
 | |
| 	lw := defaultFontWidth*len(label) + defaultOffset
 | |
| 	mw := defaultFontWidth*len(message) + defaultOffset
 | |
| 	x := lw*10 + mw*5 - 10
 | |
| 	return Badge{
 | |
| 		Label: Label{
 | |
| 			text:  label,
 | |
| 			width: lw,
 | |
| 		},
 | |
| 		Message: Message{
 | |
| 			text:  message,
 | |
| 			width: mw,
 | |
| 			x:     x,
 | |
| 		},
 | |
| 		FontSize: defaultFontSize * 10,
 | |
| 		Color:    color,
 | |
| 	}
 | |
| }
 |