mirror of
https://github.com/jlelse/GoBlog
synced 2024-06-14 13:37:10 +00:00
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package minify
|
|
|
|
import (
|
|
"io"
|
|
"sync"
|
|
|
|
"github.com/tdewolff/minify/v2"
|
|
mCss "github.com/tdewolff/minify/v2/css"
|
|
mHtml "github.com/tdewolff/minify/v2/html"
|
|
mJs "github.com/tdewolff/minify/v2/js"
|
|
mJson "github.com/tdewolff/minify/v2/json"
|
|
mXml "github.com/tdewolff/minify/v2/xml"
|
|
"go.goblog.app/app/pkgs/contenttype"
|
|
)
|
|
|
|
type Minifier struct {
|
|
i sync.Once
|
|
m *minify.M
|
|
}
|
|
|
|
func (m *Minifier) init() {
|
|
m.i.Do(func() {
|
|
m.m = minify.New()
|
|
m.m.AddFunc(contenttype.HTML, mHtml.Minify)
|
|
m.m.AddFunc(contenttype.CSS, mCss.Minify)
|
|
m.m.AddFunc(contenttype.XML, mXml.Minify)
|
|
m.m.AddFunc(contenttype.JS, mJs.Minify)
|
|
m.m.AddFunc(contenttype.RSS, mXml.Minify)
|
|
m.m.AddFunc(contenttype.ATOM, mXml.Minify)
|
|
m.m.AddFunc(contenttype.JSONFeed, mJson.Minify)
|
|
m.m.AddFunc(contenttype.AS, mJson.Minify)
|
|
})
|
|
}
|
|
|
|
func (m *Minifier) Get() *minify.M {
|
|
m.init()
|
|
return m.m
|
|
}
|
|
|
|
func (m *Minifier) Write(w io.Writer, mediatype string, b []byte) (int, error) {
|
|
mw := m.Writer(mediatype, w)
|
|
defer mw.Close()
|
|
return mw.Write(b)
|
|
}
|
|
|
|
func (m *Minifier) Minify(mediatype string, w io.Writer, r io.Reader) error {
|
|
return m.Get().Minify(mediatype, w, r)
|
|
}
|
|
|
|
func (m *Minifier) Writer(mediatype string, w io.Writer) io.WriteCloser {
|
|
return m.Get().Writer(mediatype, w)
|
|
}
|
|
|
|
func (m *Minifier) Reader(mediatype string, r io.Reader) io.Reader {
|
|
return m.Get().Reader(mediatype, r)
|
|
}
|