diff options
author | Mike Crute <mike@crute.us> | 2023-11-28 19:05:54 -0800 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2023-11-28 19:05:54 -0800 |
commit | 12dc40e069ef8358fb88057adcd93191a313dbb0 (patch) | |
tree | ebb5fb18e9d8f6ad014c510555d09059d7b99b35 | |
parent | 30ae390089feb1be634f921deda3fd5e945f2dac (diff) | |
download | golib-12dc40e069ef8358fb88057adcd93191a313dbb0.tar.bz2 golib-12dc40e069ef8358fb88057adcd93191a313dbb0.tar.xz golib-12dc40e069ef8358fb88057adcd93191a313dbb0.zip |
echo: add css preprocessor controller
-rw-r--r-- | echo/controller/css_preprocessor.go | 41 | ||||
-rw-r--r-- | echo/go.mod | 5 | ||||
-rw-r--r-- | echo/go.sum | 9 |
3 files changed, 54 insertions, 1 deletions
diff --git a/echo/controller/css_preprocessor.go b/echo/controller/css_preprocessor.go new file mode 100644 index 0000000..a00beb8 --- /dev/null +++ b/echo/controller/css_preprocessor.go | |||
@@ -0,0 +1,41 @@ | |||
1 | package controller | ||
2 | |||
3 | import ( | ||
4 | "bytes" | ||
5 | "io/fs" | ||
6 | "net/http" | ||
7 | |||
8 | "github.com/labstack/echo/v4" | ||
9 | |||
10 | "code.crute.us/mcrute/golib/web/css" | ||
11 | ) | ||
12 | |||
13 | type CSSMinifierController struct { | ||
14 | Debug bool | ||
15 | Name string | ||
16 | Files fs.FS | ||
17 | cache []byte | ||
18 | } | ||
19 | |||
20 | func (m *CSSMinifierController) Load() error { | ||
21 | if !m.Debug { | ||
22 | c := &bytes.Buffer{} | ||
23 | err := css.ParseWriteSheet(m.Files, m.Name, c) | ||
24 | m.cache = c.Bytes() | ||
25 | return err | ||
26 | } | ||
27 | return nil | ||
28 | } | ||
29 | |||
30 | func (m *CSSMinifierController) Handle(c echo.Context) error { | ||
31 | r := c.Response() | ||
32 | r.Header().Set("Content-Type", "text/css") | ||
33 | r.WriteHeader(http.StatusOK) | ||
34 | |||
35 | if m.Debug { | ||
36 | return css.ParseWriteSheet(m.Files, m.Name, r) | ||
37 | } else { | ||
38 | _, err := r.Write(m.cache) | ||
39 | return err | ||
40 | } | ||
41 | } | ||
diff --git a/echo/go.mod b/echo/go.mod index c19104a..23a62be 100644 --- a/echo/go.mod +++ b/echo/go.mod | |||
@@ -1,12 +1,13 @@ | |||
1 | module code.crute.us/mcrute/golib/echo | 1 | module code.crute.us/mcrute/golib/echo |
2 | 2 | ||
3 | go 1.18 | 3 | go 1.21.3 |
4 | 4 | ||
5 | require ( | 5 | require ( |
6 | code.crute.us/mcrute/golib v0.8.1 | 6 | code.crute.us/mcrute/golib v0.8.1 |
7 | code.crute.us/mcrute/golib/clients/netbox/v4 v4.1.0 | 7 | code.crute.us/mcrute/golib/clients/netbox/v4 v4.1.0 |
8 | code.crute.us/mcrute/golib/secrets v0.4.0 | 8 | code.crute.us/mcrute/golib/secrets v0.4.0 |
9 | code.crute.us/mcrute/golib/vault v0.2.6 | 9 | code.crute.us/mcrute/golib/vault v0.2.6 |
10 | code.crute.us/mcrute/golib/web/css v0.1.0 | ||
10 | github.com/elnormous/contenttype v1.0.3 | 11 | github.com/elnormous/contenttype v1.0.3 |
11 | github.com/labstack/echo/v4 v4.6.1 | 12 | github.com/labstack/echo/v4 v4.6.1 |
12 | github.com/labstack/gommon v0.3.1 | 13 | github.com/labstack/gommon v0.3.1 |
@@ -19,6 +20,7 @@ require ( | |||
19 | require ( | 20 | require ( |
20 | github.com/armon/go-metrics v0.3.9 // indirect | 21 | github.com/armon/go-metrics v0.3.9 // indirect |
21 | github.com/armon/go-radix v1.0.0 // indirect | 22 | github.com/armon/go-radix v1.0.0 // indirect |
23 | github.com/aymerick/douceur v0.2.0 // indirect | ||
22 | github.com/beorn7/perks v1.0.1 // indirect | 24 | github.com/beorn7/perks v1.0.1 // indirect |
23 | github.com/cenkalti/backoff/v3 v3.0.0 // indirect | 25 | github.com/cenkalti/backoff/v3 v3.0.0 // indirect |
24 | github.com/cespare/xxhash/v2 v2.1.1 // indirect | 26 | github.com/cespare/xxhash/v2 v2.1.1 // indirect |
@@ -29,6 +31,7 @@ require ( | |||
29 | github.com/golang/protobuf v1.5.3 // indirect | 31 | github.com/golang/protobuf v1.5.3 // indirect |
30 | github.com/golang/snappy v0.0.4 // indirect | 32 | github.com/golang/snappy v0.0.4 // indirect |
31 | github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect | 33 | github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect |
34 | github.com/gorilla/css v1.0.1 // indirect | ||
32 | github.com/hashicorp/errwrap v1.1.0 // indirect | 35 | github.com/hashicorp/errwrap v1.1.0 // indirect |
33 | github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | 36 | github.com/hashicorp/go-cleanhttp v0.5.2 // indirect |
34 | github.com/hashicorp/go-hclog v0.16.2 // indirect | 37 | github.com/hashicorp/go-hclog v0.16.2 // indirect |
diff --git a/echo/go.sum b/echo/go.sum index 48cbde5..462635f 100644 --- a/echo/go.sum +++ b/echo/go.sum | |||
@@ -38,6 +38,8 @@ code.crute.us/mcrute/golib/secrets v0.4.0 h1:tZzQEOnJshDGuzvvr0n0BMWZbu3ZMB5QRqI | |||
38 | code.crute.us/mcrute/golib/secrets v0.4.0/go.mod h1:c40ezKg/NXe5NE3PaCRIUJC6D6XCoPSu9+duZSdKsNY= | 38 | code.crute.us/mcrute/golib/secrets v0.4.0/go.mod h1:c40ezKg/NXe5NE3PaCRIUJC6D6XCoPSu9+duZSdKsNY= |
39 | code.crute.us/mcrute/golib/vault v0.2.6 h1:X+TlEGFPj6pj3OqmrJprv+wJYdo8QTR2IpP3EfVniHU= | 39 | code.crute.us/mcrute/golib/vault v0.2.6 h1:X+TlEGFPj6pj3OqmrJprv+wJYdo8QTR2IpP3EfVniHU= |
40 | code.crute.us/mcrute/golib/vault v0.2.6/go.mod h1:QBgcKiG94tPHAcxeRyNHrfiLGSKtojlRDLGRX5I6LgE= | 40 | code.crute.us/mcrute/golib/vault v0.2.6/go.mod h1:QBgcKiG94tPHAcxeRyNHrfiLGSKtojlRDLGRX5I6LgE= |
41 | code.crute.us/mcrute/golib/web/css v0.1.0 h1:VdP0i2Q+JC+TxiyWTAdqksDcKU4GKwL2Ly02ZRkyDFw= | ||
42 | code.crute.us/mcrute/golib/web/css v0.1.0/go.mod h1:USqoGbYKNDhEVZITLxSxd/vFXBihL8/N3Gg/v01hNWo= | ||
41 | dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | 43 | dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= |
42 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | 44 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= |
43 | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | 45 | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= |
@@ -53,6 +55,8 @@ github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4 | |||
53 | github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= | 55 | github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= |
54 | github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= | 56 | github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= |
55 | github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= | 57 | github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= |
58 | github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= | ||
59 | github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= | ||
56 | github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= | 60 | github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= |
57 | github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= | 61 | github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= |
58 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | 62 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= |
@@ -105,6 +109,7 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 | |||
105 | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | 109 | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= |
106 | github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= | 110 | github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= |
107 | github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= | 111 | github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= |
112 | github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||
108 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | 113 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= |
109 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= | 114 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= |
110 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= | 115 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= |
@@ -156,6 +161,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | |||
156 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 161 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
157 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 162 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
158 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | 163 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= |
164 | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||
159 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | 165 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |
160 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | 166 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= |
161 | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | 167 | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= |
@@ -172,6 +178,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 | |||
172 | github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | 178 | github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= |
173 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | 179 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= |
174 | github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | 180 | github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= |
181 | github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= | ||
182 | github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= | ||
175 | github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= | 183 | github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= |
176 | github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= | 184 | github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= |
177 | github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= | 185 | github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= |
@@ -302,6 +310,7 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ | |||
302 | github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= | 310 | github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= |
303 | github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= | 311 | github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= |
304 | github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= | 312 | github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= |
313 | github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= | ||
305 | github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= | 314 | github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= |
306 | github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= | 315 | github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= |
307 | github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= | 316 | github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= |