From 4bda9da441a68afdf5fa6249d140a23b547da649 Mon Sep 17 00:00:00 2001 From: Reindert Vetter Date: Mon, 5 Apr 2021 00:09:34 +0200 Subject: [PATCH] #108 use embed to load templates --- app/providers/view_service_provider.go | 10 +++++----- config/embed.go | 13 +++++++++++++ config/index.go | 1 + go.mod | 12 ++++++------ go.sum | 14 ++++++++++++++ resources/views/error.go | 9 +++++---- resources/views/homepage.go | 7 +++++-- resources/views/index.go | 8 ++++++++ 8 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 config/embed.go create mode 100644 resources/views/index.go diff --git a/app/providers/view_service_provider.go b/app/providers/view_service_provider.go index ff08dfe..b959dd2 100644 --- a/app/providers/view_service_provider.go +++ b/app/providers/view_service_provider.go @@ -34,17 +34,17 @@ func addFunctions(templateBuilder *template.Template) *template.Template { // Register your view templates. func addTemplates(templateBuilder *template.Template) (*template.Template, error) { - if t, _ := templateBuilder.ParseGlob(config.Path.Views + "/*/*/*/*/*.gohtml"); t != nil { + if t, _ := templateBuilder.ParseFS(config.Embed.Views, "*/*/*/*/*.gohtml"); t != nil { templateBuilder = t } - if t, _ := templateBuilder.ParseGlob(config.Path.Views + "/*/*/*/*.gohtml"); t != nil { + if t, _ := templateBuilder.ParseFS(config.Embed.Views, "*/*/*/*.gohtml"); t != nil { templateBuilder = t } - if t, _ := templateBuilder.ParseGlob(config.Path.Views + "/*/*/*.gohtml"); t != nil { + if t, _ := templateBuilder.ParseFS(config.Embed.Views, "*/*/*.gohtml"); t != nil { templateBuilder = t } - if t, _ := templateBuilder.ParseGlob(config.Path.Views + "/*/*.gohtml"); t != nil { + if t, _ := templateBuilder.ParseFS(config.Embed.Views, "*/*.gohtml"); t != nil { templateBuilder = t } - return templateBuilder.ParseGlob(config.Path.Views + "/*.gohtml") + return templateBuilder.ParseFS(config.Embed.Views, "*.gohtml") } diff --git a/config/embed.go b/config/embed.go new file mode 100644 index 0000000..8694e13 --- /dev/null +++ b/config/embed.go @@ -0,0 +1,13 @@ +package config + +import ( + "embed" + "src/resources/views" +) + +// Embed contains fields of all resources to be loaded during compile time. +var Embed = struct { + Views embed.FS +}{ + Views: views.Views, +} diff --git a/config/index.go b/config/index.go index c0b7c6a..633105c 100644 --- a/config/index.go +++ b/config/index.go @@ -7,4 +7,5 @@ var Index = map[string]interface{}{ "Path": Path, "Errors": Errors, "Logging": Logging, + "Embed": Embed, } diff --git a/go.mod b/go.mod index aa5a912..08b98fc 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module src -go 1.15 +go 1.16 require ( github.com/confetti-framework/contract v0.2.1 @@ -9,9 +9,9 @@ require ( github.com/confetti-framework/support v0.3.1 github.com/confetti-framework/syslog v0.1.1 github.com/confetti-framework/validation v0.1.0 - github.com/lunixbochs/vtclean v1.0.0 // indirect - github.com/mattn/go-colorable v0.1.8 // indirect - github.com/tidwall/pretty v1.1.0 // indirect - golang.org/x/text v0.3.5 - golang.org/x/tools v0.1.0 // indirect + golang.org/x/text v0.3.6 ) + +replace ( + github.com/confetti-framework/foundation v0.7.1 => ../foundation +) \ No newline at end of file diff --git a/go.sum b/go.sum index 2541941..7a57635 100644 --- a/go.sum +++ b/go.sum @@ -20,11 +20,15 @@ github.com/confetti-framework/foundation v0.6.0 h1:MbIDJAmz6E7ypR7lJs2rqViIJjdLP github.com/confetti-framework/foundation v0.6.0/go.mod h1:j12Lh6+sisa/+qNmIjIUcmVOo1c+iEZ0ReZxHcs6HGw= github.com/confetti-framework/foundation v0.7.0 h1:y+ZJhX1NNCBTQleYb/9y/cSeA0w7O3t3aGURoXj71jg= github.com/confetti-framework/foundation v0.7.0/go.mod h1:vf/AFYTJUvSij3Y0RPVvpqJ52ODX61obF/+hTPInLNk= +github.com/confetti-framework/foundation v0.7.1 h1:SDT8vUnxZJprkwahG+cNrR7yEe0xy3ZZTUfT4ERKPWo= +github.com/confetti-framework/foundation v0.7.1/go.mod h1:hfByJjIm3tUYmxXnu8enjXq2gVyvyPxV7LCVKoweA6g= github.com/confetti-framework/support v0.2.0-rc.1/go.mod h1:uwOTcc+vAtkzr5GihkCzjv11YVI15UJMhfU2HLRCk/A= github.com/confetti-framework/support v0.2.3 h1:AOzZVtPeJlZBExW2SjYY3R3973ytve2FvmZoETqluN8= github.com/confetti-framework/support v0.2.3/go.mod h1:HtyauB5vd5R+85mwosRpD0h6InS39HDJfKpkjXzdU3s= github.com/confetti-framework/support v0.3.0 h1:Pg1g7rX5RgmyKQ3ZD1i1KXv5Llo16JGBTsbRtaAR8z4= github.com/confetti-framework/support v0.3.0/go.mod h1:uKZGENz+fvUglW6uEq070WDA/scgByuxcfQOyiuScgM= +github.com/confetti-framework/support v0.3.1 h1:gLk8oqjvZ5dcK3GGCl9hKIBVQG1GakZOeAGzu/vsCDY= +github.com/confetti-framework/support v0.3.1/go.mod h1:uKZGENz+fvUglW6uEq070WDA/scgByuxcfQOyiuScgM= github.com/confetti-framework/syslog v0.1.0-rc/go.mod h1:O6eT3y5cYDGQSVT6lrhScB5NKdylG0R304PmGiChm7Y= github.com/confetti-framework/syslog v0.1.1 h1:ZYea1UXjp/m1DajS6regPislq+kUhe6+/RpNzCaJ8js= github.com/confetti-framework/syslog v0.1.1/go.mod h1:O6eT3y5cYDGQSVT6lrhScB5NKdylG0R304PmGiChm7Y= @@ -68,6 +72,8 @@ github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/motemen/go-quickfix v0.0.0-20200118031250-2a6e54e79a50 h1:LKXuJ8pSlacZRgcNFoN2OHehByrDxJesflgC/tH7aBM= @@ -95,6 +101,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tidwall/gjson v1.6.8 h1:CTmXMClGYPAmln7652e69B7OLXfTi5ABcPPwjIWUv7w= github.com/tidwall/gjson v1.6.8/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= +github.com/tidwall/gjson v1.7.4 h1:19cchw8FOxkG5mdLRkGf9jqIqEyqdZhPqW60XfyFxk8= +github.com/tidwall/gjson v1.7.4/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -113,6 +121,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqt golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670 h1:gzMM0EjIYiRmJI3+jBdFuoynZlpxa2JQZsolKu09BXo= golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -145,6 +155,8 @@ golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEq golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210319071255-635bc2c9138d h1:jbzgAvDZn8aEnytae+4ou0J0GwFZoHR0hOrTg4qH8GA= golang.org/x/sys v0.0.0-20210319071255-635bc2c9138d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 h1:F5Gozwx4I1xtr/sr/8CFbb57iKi3297KFs0QDbGN60A= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -157,6 +169,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= diff --git a/resources/views/error.go b/resources/views/error.go index 89d4f3e..13db3fc 100644 --- a/resources/views/error.go +++ b/resources/views/error.go @@ -1,14 +1,17 @@ package views import ( + _ "embed" "fmt" "github.com/confetti-framework/contract/inter" "github.com/confetti-framework/errors" "github.com/confetti-framework/support/str" - "src/config" "strings" ) +//go:embed error.gohtml +var errorHtml string + // Error provide an error view func Error(app inter.App, err error) inter.View { status, _ := errors.FindStatus(err) @@ -19,7 +22,6 @@ func Error(app inter.App, err error) inter.View { Status: status, AppName: AppName(app), Locale: Locale(app), - template: config.Path.Views + "/error.gohtml", } } @@ -30,10 +32,9 @@ type ErrorView struct { Status int AppName string Locale string - template string } // Template returns the template path func (e ErrorView) Template() string { - return e.template + return errorHtml } diff --git a/resources/views/homepage.go b/resources/views/homepage.go index 6b2916a..fe88a29 100644 --- a/resources/views/homepage.go +++ b/resources/views/homepage.go @@ -1,10 +1,13 @@ package views import ( + _ "embed" "github.com/confetti-framework/contract/inter" - "src/config" ) +//go:embed homepage.gohtml +var homepageHtml string + // Homepage provide the homepage view func Homepage(app inter.App, title string, description string) *HomepageView { return &HomepageView{ @@ -23,5 +26,5 @@ type HomepageView struct { // Template returns the template path func (h HomepageView) Template() string { - return config.Path.Views + "/homepage.gohtml" + return homepageHtml } diff --git a/resources/views/index.go b/resources/views/index.go new file mode 100644 index 0000000..5454a9b --- /dev/null +++ b/resources/views/index.go @@ -0,0 +1,8 @@ +package views + +import "embed" + +// Views provides a collection of all views and templates. This is to load all +// predefined templates. +//go:embed * +var Views embed.FS