mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Add template func FileSize
This commit is contained in:
		| @@ -21,6 +21,7 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{ | ||||
| 	}, | ||||
| 	"str2html":   Str2html, | ||||
| 	"TimeSince":  TimeSince, | ||||
| 	"FileSize":   FileSize, | ||||
| 	"Subtract":   Subtract, | ||||
| 	"ActionIcon": ActionIcon, | ||||
| 	"ActionDesc": ActionDesc, | ||||
|   | ||||
| @@ -8,6 +8,7 @@ import ( | ||||
| 	"crypto/md5" | ||||
| 	"encoding/hex" | ||||
| 	"fmt" | ||||
| 	"math" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| @@ -80,6 +81,51 @@ func TimeSince(then time.Time) string { | ||||
| 	return then.String() | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	Byte  = 1 | ||||
| 	KByte = Byte * 1024 | ||||
| 	MByte = KByte * 1024 | ||||
| 	GByte = MByte * 1024 | ||||
| 	TByte = GByte * 1024 | ||||
| 	PByte = TByte * 1024 | ||||
| 	EByte = PByte * 1024 | ||||
| ) | ||||
|  | ||||
| var bytesSizeTable = map[string]uint64{ | ||||
| 	"b":  Byte, | ||||
| 	"kb": KByte, | ||||
| 	"mb": MByte, | ||||
| 	"gb": GByte, | ||||
| 	"tb": TByte, | ||||
| 	"pb": PByte, | ||||
| 	"eb": EByte, | ||||
| } | ||||
|  | ||||
| func logn(n, b float64) float64 { | ||||
| 	return math.Log(n) / math.Log(b) | ||||
| } | ||||
|  | ||||
| func humanateBytes(s uint64, base float64, sizes []string) string { | ||||
| 	if s < 10 { | ||||
| 		return fmt.Sprintf("%dB", s) | ||||
| 	} | ||||
| 	e := math.Floor(logn(float64(s), base)) | ||||
| 	suffix := sizes[int(e)] | ||||
| 	val := float64(s) / math.Pow(base, math.Floor(e)) | ||||
| 	f := "%.0f" | ||||
| 	if val < 10 { | ||||
| 		f = "%.1f" | ||||
| 	} | ||||
|  | ||||
| 	return fmt.Sprintf(f+"%s", val, suffix) | ||||
| } | ||||
|  | ||||
| // FileSize calculates the file size and generate user-friendly string. | ||||
| func FileSize(s uint64) string { | ||||
| 	sizes := []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"} | ||||
| 	return humanateBytes(uint64(s), 1024, sizes) | ||||
| } | ||||
|  | ||||
| // Subtract deals with subtraction of all types of number. | ||||
| func Subtract(left interface{}, right interface{}) interface{} { | ||||
| 	var rleft, rright int64 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user