Files
EdgeCommon/pkg/serverconfigs/http_page_optimization_config.go
2024-03-14 14:24:22 +08:00

89 lines
2.1 KiB
Go

// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package serverconfigs
type HTTPPageOptimizationMimeType = string
const (
HTTPPageOptimizationMimeTypeHTML HTTPPageOptimizationMimeType = "text/html"
HTTPPageOptimizationMimeTypeJavascript HTTPPageOptimizationMimeType = "text/javascript"
HTTPPageOptimizationMimeTypeCSS HTTPPageOptimizationMimeType = "text/css"
)
type HTTPPageMinifier interface {
Bytes(mediaType string, data []byte) ([]byte, error)
}
type HTTPPageOptimizationConfig struct {
IsPrior bool `yaml:"isPrior" json:"isPrior"`
HTML *HTTPHTMLOptimizationConfig `yaml:"html" json:"html"`
Javascript *HTTPJavascriptOptimizationConfig `yaml:"javascript" json:"javascript"`
CSS *HTTPCSSOptimizationConfig `yaml:"css" json:"css"`
isOn bool
minifyInstance HTTPPageMinifier
}
func NewHTTPPageOptimizationConfig() *HTTPPageOptimizationConfig {
return &HTTPPageOptimizationConfig{
IsPrior: false,
HTML: NewHTTPHTMLOptimizationConfig(),
Javascript: NewHTTPJavascriptOptimizationConfig(),
CSS: NewHTTPCSSOptimizationConfig(),
}
}
func (this *HTTPPageOptimizationConfig) Init() error {
this.isOn = this.CheckIsOn()
if this.HTML != nil {
err := this.HTML.Init()
if err != nil {
return err
}
if this.HTML.IsOn {
this.isOn = true
}
}
if this.Javascript != nil {
err := this.Javascript.Init()
if err != nil {
return err
}
if this.Javascript.IsOn {
this.isOn = true
}
}
if this.CSS != nil {
err := this.CSS.Init()
if err != nil {
return err
}
if this.CSS.IsOn {
this.isOn = true
}
}
return nil
}
func (this *HTTPPageOptimizationConfig) IsOn() bool {
return this.isOn
}
func (this *HTTPPageOptimizationConfig) CheckIsOn() bool {
return (this.HTML != nil && this.HTML.IsOn) ||
(this.Javascript != nil && this.Javascript.IsOn) ||
(this.CSS != nil && this.CSS.IsOn)
}
func (this *HTTPPageOptimizationConfig) InternalInstance() HTTPPageMinifier {
return this.minifyInstance
}
func (this *HTTPPageOptimizationConfig) SetInternalInstance(instance HTTPPageMinifier) {
this.minifyInstance = instance
}