feat: 整合elements主题

This commit is contained in:
2026-01-08 11:20:30 +08:00
parent b174a57b7f
commit e673ee2479
9 changed files with 92 additions and 31 deletions

View File

@@ -13,8 +13,8 @@ import (
"strings"
"git.zhangdeman.cn/zhangdeman/api-doc/enums"
"git.zhangdeman.cn/zhangdeman/api-doc/theme"
"git.zhangdeman.cn/zhangdeman/consts"
"git.zhangdeman.cn/zhangdeman/gin/router/theme"
"github.com/gin-gonic/gin"
knife4goFiles "github.com/go-webtools/knife4go"
knife4goGin "github.com/go-webtools/knife4go/gin"
@@ -23,7 +23,7 @@ import (
)
// NewSwaggerUI ...
func NewSwaggerUI(docTitle string, docBaseUri string, uiTheme enums.SwaggerUITheme) *SwaggerUI {
func NewSwaggerUI(docTitle string, docBaseUri string, uiTheme consts.SwaggerUITheme) *SwaggerUI {
return &SwaggerUI{
baseUri: docBaseUri,
docTitle: docTitle,
@@ -34,27 +34,55 @@ func NewSwaggerUI(docTitle string, docBaseUri string, uiTheme enums.SwaggerUIThe
type SwaggerUI struct {
baseUri string
docTitle string
uiTheme enums.SwaggerUITheme // 文档主题, swaggerUI / knife4go, 默认 knife4go
uiTheme consts.SwaggerUITheme // 文档主题, swaggerUI / knife4go, 默认 knife4go
}
// Handler 访问文档的接口处理
func (su *SwaggerUI) Handler() func(ctx *gin.Context) {
switch su.uiTheme {
case enums.SwaggerUIThemeKnife4go:
case consts.SwaggerUIThemeKnife4go:
return su.HandleKnife4goUI()
case enums.SwaggerUIThemeYDocLucky:
case consts.SwaggerUIThemeYDocLucky:
// YDoc-Lucky-UI 主题处理
return su.HandleLuckyUI()
case enums.SwaggerUIThemeDefault:
case consts.SwaggerUIThemeDefault:
return su.HandleSwaggerUI()
case enums.SwaggerUIThemeRedocFree:
case consts.SwaggerUIThemeRedocFree:
// redoc免费版
return su.HandleRedocFreeUI()
case consts.SwaggerUIThemeElements:
return su.HandleElements()
default:
return su.HandleSwaggerUI()
}
}
func (su *SwaggerUI) HandleElements() gin.HandlerFunc {
return func(ctx *gin.Context) {
fileRealPath := strings.TrimPrefix(ctx.Request.RequestURI, su.baseUri)
byteData, _ := theme.ElementsFiles.ReadFile(filepath.Join("elements", fileRealPath))
if strings.Contains(ctx.Request.RequestURI, ".html") {
byteData = []byte(strings.ReplaceAll(string(byteData), "{{BASE_URI}}", su.baseUri))
byteData = []byte(strings.ReplaceAll(string(byteData), "{{DOC_TITLE}}", su.docTitle))
byteData = []byte(strings.ReplaceAll(string(byteData), "{{DOC_PATH}}", "doc.json"))
ctx.Header(consts.HeaderKeyContentType.String(), "text/html; charset=utf-8")
ctx.String(http.StatusOK, string(byteData))
ctx.Abort()
return
}
uriArr := strings.Split(ctx.Request.RequestURI, ".")
contentType := "text/" + uriArr[len(uriArr)-1]
if strings.HasSuffix(ctx.Request.RequestURI, "png") {
contentType = "image/png"
} else if strings.HasSuffix(ctx.Request.RequestURI, "js") {
contentType = "application/javascript"
}
ctx.Header(consts.HeaderKeyContentType.String(), contentType)
ctx.String(http.StatusOK, string(byteData))
ctx.Abort()
}
}
// HandleLuckyUI ...
func (su *SwaggerUI) HandleLuckyUI() func(ctx *gin.Context) {
// su.router.StaticFS(su.baseUri+"/assets", http.FS(ydocUIFiles))