// Package resources provides Resources package resources import ( "html/template" "io" "strings" "github.com/tkw1536/goprogram/lib/collection" "golang.org/x/net/html" ) // Resources represents resources found inside a "html" file type Resources struct { JSModules []string // ") // WriteCSS writes all link tags to writer func (resources *Resources) WriteCSS(writer io.Writer) { for _, href := range resources.CSS { writer.Write(openLinkBytes) writer.Write([]byte(attributeValue(href))) writer.Write(closeLinkBytes) } } func (resources *Resources) CSSTemplate() template.HTML { var buffer strings.Builder resources.WriteCSS(&buffer) return template.HTML(buffer.String()) } // WriteJS writes all JavaScript tags to writer func (resources *Resources) WriteJS(writer io.Writer) { for _, href := range resources.JSModules { writer.Write(openModuleBytes) writer.Write([]byte(attributeValue(href))) writer.Write(closeScriptBytes) } for _, href := range resources.JSRegular { writer.Write(openRegularBytes) writer.Write([]byte(attributeValue(href))) writer.Write(closeScriptBytes) } } func (resources *Resources) JSTemplate() template.HTML { var buffer strings.Builder resources.WriteJS(&buffer) return template.HTML(buffer.String()) } // Parse parses resources from reader func Parse(r io.Reader) (src Resources) { z := html.NewTokenizer(r) for { // read the next token z.Next() token := z.Token() switch { case token.Type == html.ErrorToken: return case token.Type == html.StartTagToken && token.Data == "script": //