seperate styles logic
Signed-off-by: Naman Sood <mail@nsood.in>
This commit is contained in:
parent
ff9fe3d550
commit
0373431876
2 changed files with 121 additions and 88 deletions
89
style.go
Normal file
89
style.go
Normal file
|
@ -0,0 +1,89 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/wellington/go-libsass"
|
||||
)
|
||||
|
||||
func newStylesMap() (map[string]string, error) {
|
||||
folder, err := os.ReadDir("styles/")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Could not load styles directory: %s", err)
|
||||
}
|
||||
|
||||
styles := make(map[string]string)
|
||||
for _, s := range folder {
|
||||
contents, filename, err := loadStylesheet(s.Name())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not generate styles for %s: %v", s.Name(), err)
|
||||
}
|
||||
styles[filename] = contents
|
||||
log.Printf("Loaded stylesheet %s", filename)
|
||||
}
|
||||
|
||||
return styles, nil
|
||||
}
|
||||
|
||||
func newStylesListener(updateMap func(func(map[string]string))) *listener {
|
||||
ln := &listener{
|
||||
folder: "styles/",
|
||||
update: func(file string) error {
|
||||
contents, filename, err := loadStylesheet(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
updateMap(func(styles map[string]string) {
|
||||
styles[filename] = contents
|
||||
})
|
||||
return nil
|
||||
},
|
||||
clean: func(file string) error {
|
||||
updateMap(func(styles map[string]string) {
|
||||
delete(styles, file+".css")
|
||||
})
|
||||
return nil
|
||||
},
|
||||
}
|
||||
return ln
|
||||
}
|
||||
|
||||
func loadStylesheet(filename string) (string, string, error) {
|
||||
if strings.HasSuffix(filename, ".scss") {
|
||||
return loadSCSS(filename)
|
||||
}
|
||||
return loadCSS(filename)
|
||||
}
|
||||
|
||||
func loadSCSS(filename string) (string, string, error) {
|
||||
in, err := os.Open("styles/" + filename)
|
||||
if err != nil {
|
||||
return "", "", fmt.Errorf("Could not open style infile %s: %w", filename, err)
|
||||
}
|
||||
var buf strings.Builder
|
||||
comp, err := libsass.New(&buf, in)
|
||||
if err != nil {
|
||||
return "", "", fmt.Errorf("Could not start sass compiler for file %s: %w", filename, err)
|
||||
}
|
||||
if err = comp.Run(); err != nil {
|
||||
return "", "", fmt.Errorf("Could not generate stylesheet %s: %w", filename, err)
|
||||
}
|
||||
return buf.String(), strings.TrimSuffix(filename, ".scss") + ".css", nil
|
||||
}
|
||||
|
||||
func loadCSS(filename string) (string, string, error) {
|
||||
in, err := os.Open("styles/" + filename)
|
||||
if err != nil {
|
||||
return "", "", fmt.Errorf("Could not open style infile %s: %w", filename, err)
|
||||
}
|
||||
var buf strings.Builder
|
||||
_, err = io.Copy(&buf, in)
|
||||
if err != nil {
|
||||
return "", "", fmt.Errorf("Could not copy stylesheet %s: %s", filename, err)
|
||||
}
|
||||
return buf.String(), filename, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue