Documentation ¶
Overview ¶
Package greener provides more efficient ways of building web applications
Index ¶
- func GenerateETag(content []byte) string
- func HTMLPrintf(h string, hws ...template.HTML) template.HTML
- func NewCompressedFileHandler(root http.FileSystem) http.Handler
- func StaticContentHandler(logger Logger, content []byte, contentType string) http.HandlerFunc
- func StaticFaviconHandler(logger Logger, icon512 *image.Image) http.HandlerFunc
- func StaticIconHandler(logger Logger, icon512 *image.Image, etag string, sizes []int) http.HandlerFunc
- func Text(t string) template.HTML
- type App
- type ContentHandler
- type DefaultApp
- func (app *DefaultApp) Handle(path string, handler http.Handler)
- func (app *DefaultApp) HandleFunc(path string, handler http.HandlerFunc)
- func (app *DefaultApp) HandleWithServices(path string, handler func(Services))
- func (app *DefaultApp) Handler() http.Handler
- func (app *DefaultApp) NewServices(w http.ResponseWriter, r *http.Request) Services
- func (app *DefaultApp) Serve(ctx context.Context)
- type DefaultEmptyPageProvider
- type DefaultIconsInjector
- type DefaultLogger
- type DefaultManifestInjector
- type DefaultRequestProvider
- type DefaultResponseWriterProvider
- type DefaultScriptInjector
- type DefaultScriptProvider
- type DefaultServeConfigProvider
- type DefaultServiceWorkerInjector
- type DefaultServiceWorkerProvider
- type DefaultServices
- type DefaultStyleInjector
- type DefaultStyleProvider
- type DefaultThemeColorInjector
- type DefaultUISupport
- type EmptyPageProvider
- type HandleFuncProvider
- type HandleProvider
- type HandleWithServicesProvider
- type ImageData
- type Injector
- type Logger
- type NewServicesProvider
- type RequestProvider
- type ResponseWriterProvider
- type ScriptProvider
- type ServeConfigProvider
- type Server
- type ServiceWorkerProvider
- type Services
- type StyleProvider
- type UISupport
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GenerateETag ¶
func HTMLPrintf ¶
HTMLPrintf takes a string containing %s characters and a set of template.HTML strings and returns an template.HTML with the placeholders substituted. This is faster than using template/html Template objects by about 8x but less safe in that no context specific checks about where you are substituing things are made.
func NewCompressedFileHandler ¶
func NewCompressedFileHandler(root http.FileSystem) http.Handler
func StaticContentHandler ¶
func StaticContentHandler(logger Logger, content []byte, contentType string) http.HandlerFunc
func StaticFaviconHandler ¶
func StaticFaviconHandler(logger Logger, icon512 *image.Image) http.HandlerFunc
func StaticIconHandler ¶
Types ¶
type App ¶
type App interface { Logger Server HandleProvider HandleFuncProvider HandleWithServicesProvider EmptyPageProvider NewServicesProvider }
type ContentHandler ¶ added in v0.1.1
type ContentHandler interface { Hash() string ServeHTTP(http.ResponseWriter, *http.Request) }
ContentHandler handles brotli and gzip compression of content as well as generating a hash so that smallet content possible can be served to the client based on the request Content-Encoding. The response is set with 1 year cache max age with the intention that the URL the handler is registered with includes the content hash so that if the content changes, so would the URL.
func NewContentHandler ¶ added in v0.1.1
func NewContentHandler(logger Logger, content []byte, contentType, salt string) ContentHandler
NewContentHandler returns a struct containing a hash of the content as well as gzip and brotli compressed content encodings. It implements http.Handler for serving the most appropriate content encoding based on the request.
type DefaultApp ¶
type DefaultApp struct { ServeConfigProvider Logger EmptyPageProvider // contains filtered or unexported fields }
DefaultApp implements Server in such a way that the style, script and service worker content are only generated once. If there is any service worker then code is added to the script to register the service worker. Handlers for /script.js, /style.css and /service-worker.js are all added if needed. The server will serve from either a host and port or a UNIX domain socket based on the ServeConfigProvider.
func NewDefaultApp ¶
func NewDefaultApp(serveConfigProvider ServeConfigProvider, logger Logger, emptyPageProvider EmptyPageProvider) *DefaultApp
func (*DefaultApp) HandleFunc ¶
func (app *DefaultApp) HandleFunc(path string, handler http.HandlerFunc)
func (*DefaultApp) HandleWithServices ¶ added in v0.1.1
func (app *DefaultApp) HandleWithServices(path string, handler func(Services))
func (*DefaultApp) Handler ¶
func (app *DefaultApp) Handler() http.Handler
func (*DefaultApp) NewServices ¶
func (app *DefaultApp) NewServices(w http.ResponseWriter, r *http.Request) Services
func (*DefaultApp) Serve ¶
func (app *DefaultApp) Serve(ctx context.Context)
type DefaultEmptyPageProvider ¶
type DefaultEmptyPageProvider struct {
// contains filtered or unexported fields
}
Injectors prepares an HTML page string (to be used with HTMLPrintf) from a slice of Injector.
func NewDefaultEmptyPageProvider ¶
func NewDefaultEmptyPageProvider(injectors []Injector) *DefaultEmptyPageProvider
func (*DefaultEmptyPageProvider) PerformInjections ¶
func (d *DefaultEmptyPageProvider) PerformInjections(app App)
type DefaultIconsInjector ¶
type DefaultIconsInjector struct { Logger // contains filtered or unexported fields }
func NewDefaultIconsInjector ¶
func NewDefaultIconsInjector(logger Logger, wwwFS fs.FS) *DefaultIconsInjector
type DefaultLogger ¶
type DefaultLogger struct {
// contains filtered or unexported fields
}
DefaultLogger implements Logger.
func NewDefaultLogger ¶
func NewDefaultLogger(logf func(string, ...interface{})) *DefaultLogger
func (*DefaultLogger) Errorf ¶
func (cl *DefaultLogger) Errorf(m string, a ...interface{})
func (*DefaultLogger) Logf ¶
func (cl *DefaultLogger) Logf(m string, a ...interface{})
type DefaultManifestInjector ¶
type DefaultManifestInjector struct { Logger // contains filtered or unexported fields }
func NewDefaultManifestInjector ¶
func NewDefaultManifestInjector(logger Logger, appShortName string) *DefaultManifestInjector
type DefaultRequestProvider ¶
type DefaultRequestProvider struct {
// contains filtered or unexported fields
}
DefaultRequestProvider implements RequestProvider
func NewDefaultRequestProvider ¶
func NewDefaultRequestProvider(r *http.Request) *DefaultRequestProvider
func (*DefaultRequestProvider) R ¶
func (d *DefaultRequestProvider) R() *http.Request
type DefaultResponseWriterProvider ¶
type DefaultResponseWriterProvider struct {
// contains filtered or unexported fields
}
DefaultResponseWriterProvider implements ResponseWriterProvider
func NewDefaultResponseWriterProvider ¶
func NewDefaultResponseWriterProvider(w http.ResponseWriter) *DefaultResponseWriterProvider
func (*DefaultResponseWriterProvider) W ¶
func (d *DefaultResponseWriterProvider) W() http.ResponseWriter
type DefaultScriptInjector ¶
type DefaultScriptInjector struct { Logger // contains filtered or unexported fields }
func NewDefaultScriptInjector ¶
func NewDefaultScriptInjector(logger Logger, uiSupports []UISupport) *DefaultScriptInjector
type DefaultScriptProvider ¶
type DefaultScriptProvider struct {
// contains filtered or unexported fields
}
DefaultScriptProvider implements ScriptProvider
func (*DefaultScriptProvider) Script ¶
func (dsp *DefaultScriptProvider) Script() string
type DefaultServeConfigProvider ¶
type DefaultServeConfigProvider struct {
// contains filtered or unexported fields
}
DefaultServeConfigProvider implments ServeConfigProvider for returning the configuration needed for serving the app
func NewDefaultServeConfigProviderFromEnvironment ¶
func NewDefaultServeConfigProviderFromEnvironment() *DefaultServeConfigProvider
func (*DefaultServeConfigProvider) Host ¶
func (dscp *DefaultServeConfigProvider) Host() string
func (*DefaultServeConfigProvider) Port ¶
func (dscp *DefaultServeConfigProvider) Port() int
func (*DefaultServeConfigProvider) UDS ¶
func (dscp *DefaultServeConfigProvider) UDS() string
type DefaultServiceWorkerInjector ¶
type DefaultServiceWorkerInjector struct { Logger // contains filtered or unexported fields }
func NewDefaultServiceWorkerInjector ¶
func NewDefaultServiceWorkerInjector(logger Logger, uiSupports []UISupport) *DefaultServiceWorkerInjector
type DefaultServiceWorkerProvider ¶
type DefaultServiceWorkerProvider struct {
// contains filtered or unexported fields
}
DefaultServiceWorkerProvider implements ServiceWorkerProvider
func (*DefaultServiceWorkerProvider) ServiceWorker ¶
func (dsp *DefaultServiceWorkerProvider) ServiceWorker() string
type DefaultServices ¶
type DefaultServices struct { ServeConfigProvider Logger ResponseWriterProvider RequestProvider }
DefaultServices embeds other interfaces for providing services to a request handler
type DefaultStyleInjector ¶
type DefaultStyleInjector struct { Logger // contains filtered or unexported fields }
func NewDefaultStyleInjector ¶
func NewDefaultStyleInjector(logger Logger, uiSupports []UISupport) *DefaultStyleInjector
type DefaultStyleProvider ¶
type DefaultStyleProvider struct {
// contains filtered or unexported fields
}
DefaultStyleProvider implements StyleProvider
func (*DefaultStyleProvider) Style ¶
func (dsp *DefaultStyleProvider) Style() string
type DefaultThemeColorInjector ¶
type DefaultThemeColorInjector struct { Logger // contains filtered or unexported fields }
func NewDefaultThemeColorInjector ¶
func NewDefaultThemeColorInjector(logger Logger, themeColor string) *DefaultThemeColorInjector
type DefaultUISupport ¶
type DefaultUISupport struct { StyleProvider ScriptProvider ServiceWorkerProvider }
DefaultUISupport implements UISupport by embedding StyleProvider ScriptProvider and ServiceWorkerProvider
func NewDefaultUISupport ¶
func NewDefaultUISupport(style, script, serviceWorker string) *DefaultUISupport
NewDefaultUISupport creates a DefaultUISupport from strings representing the style, the script and the serviceworker fragments for the component. Each can be "" to indicate the conponent doesn't need them.
type EmptyPageProvider ¶
type EmptyPageProvider interface { PerformInjections(App) Page(title string, body template.HTML) template.HTML }
EmptyPageProvider
type HandleFuncProvider ¶
type HandleFuncProvider interface {
HandleFunc(string, http.HandlerFunc)
}
Server interface
type HandleProvider ¶
type HandleWithServicesProvider ¶ added in v0.1.1
type NewServicesProvider ¶
type NewServicesProvider interface {
NewServices(http.ResponseWriter, *http.Request) Services
}
type RequestProvider ¶
RequestProvider interface
type ResponseWriterProvider ¶
type ResponseWriterProvider interface {
W() http.ResponseWriter
}
ResponseWriterProvider interface
type ScriptProvider ¶
type ScriptProvider interface {
Script() string
}
type ServeConfigProvider ¶
ServeConfigProvider interface for server configuration handling
type Server ¶
type Server interface { ServeConfigProvider Serve(context.Context) Handler() http.Handler }
type ServiceWorkerProvider ¶
type ServiceWorkerProvider interface {
ServiceWorker() string
}
type Services ¶
type Services interface { Logger ResponseWriterProvider RequestProvider }
func NewDefaultServices ¶
func NewDefaultServices( serveConfigProvider ServeConfigProvider, logger Logger, responseWriterProvider ResponseWriterProvider, requestProvider RequestProvider, ) Services
type StyleProvider ¶
type StyleProvider interface {
Style() string
}
type UISupport ¶
type UISupport interface { StyleProvider ScriptProvider ServiceWorkerProvider }