diff --git a/common/files.go b/common/files.go index 07be03b8..ede72b64 100644 --- a/common/files.go +++ b/common/files.go @@ -221,7 +221,7 @@ func (list SFileList) JSTmplInit() error { }`, "=[]") rep("o += ", "o+=") rep(shortName+"_frags[", "fr[") - rep("function Tmpl_"+shortName+"(t_v) {","var Tmpl_"+shortName+"=(t_v)=>{") + rep("function Tmpl_"+shortName+"(t_v) {", "var Tmpl_"+shortName+"=(t_v)=>{") fragset := tmpl.GetFrag(shortName) if fragset != nil { @@ -293,6 +293,9 @@ func (list SFileList) Init() error { } path = strings.TrimPrefix(path, "public/") ext := filepath.Ext("/public/" + path) + if ext == ".js" { + data = bytes.Replace(data, []byte("\r"), []byte(""), -1) + } mimetype := mime.TypeByExtension(ext) // Get a checksum for CSPs and cache busting diff --git a/common/theme.go b/common/theme.go index 8ea36276..a340192d 100644 --- a/common/theme.go +++ b/common/theme.go @@ -133,7 +133,60 @@ func (t *Theme) LoadStaticFiles() error { } t.ResourceTemplates.Funcs(fmap) // TODO: Minify these - template.Must(t.ResourceTemplates.ParseGlob("./themes/" + t.Name + "/public/*.css")) + //template.Must(t.ResourceTemplates.ParseGlob("./themes/" + t.Name + "/public/*.css")) + fnames, err := filepath.Glob("./themes/" + t.Name + "/public/*.css") + if err != nil { + return err + } + for _, fname := range fnames { + b, err := ioutil.ReadFile(fname) + if err != nil { + return err + } + //b := []byte("trolololol") + //b = bytes.ReplaceAll(b, []byte{10}, []byte("")) + //b = bytes.Replace(b, []byte("\n\n"), []byte(""), -1) + //b = bytes.Replace(b, []byte("}\n."), []byte("}."), -1) + //b = bytes.Replace(b, []byte("}\n:"), []byte("}:"), -1) + s := func() string { + s := string(b) + rep := func(from, to string) { + s = strings.Replace(s, from, to, -1) + } + rep("\r", "") + rep("}\n", "}") + rep("\n{", "{") + rep("\n", "") + rep(` +`, "") + rep(": {{", ":{{") + rep("display: ", "display:") + rep("float: ", "float:") + rep("-left: ", "-left:") + rep("-right: ", "-right:") + rep("-top: ", "-top:") + rep("-bottom: ", "-bottom:") + rep("border: ", "border:") + rep("radius: ", "radius:") + rep("content: ", "content:") + rep("width: ", "width:") + rep("padding: ", "padding:") + rep("-size: ", "-size:") + return s + }() + name := filepath.Base(fname) + t := t.ResourceTemplates + var tmpl *template.Template + /*if name == t.Name() { + tmpl = t + } else {*/ + tmpl = t.New(name) + //} + _, err = tmpl.Parse(s) + if err != nil { + return err + } + } // It should be safe for us to load the files for all the themes in memory, as-long as the admin hasn't setup a ridiculous number of themes return t.AddThemeStaticFiles() @@ -158,6 +211,9 @@ func (t *Theme) AddThemeStaticFiles() error { } ext := filepath.Ext(path) + if ext == ".js" { + data = bytes.Replace(data, []byte("\r"), []byte(""), -1) + } if ext == ".css" && len(data) != 0 { var b bytes.Buffer pieces := strings.Split(path, "/") @@ -169,6 +225,26 @@ func (t *Theme) AddThemeStaticFiles() error { return err } data = b.Bytes() + rep := func(from, to string) { + data = bytes.Replace(data, []byte(from), []byte(to), -1) + } + rep("\t", "") + //rep("\n\n", "") + rep("\n", "") + rep("\n", "") + rep(` +`, "") + rep("}\n.", "}.") + rep("}\n:", "}:") + rep(": #", ":#") + rep(" {", "{") + rep("{\n", "{") + rep(",\n", ",") + rep(";\n", ";") + rep(";\n}", ";}") + rep(": 0px;", ":0;") + rep("; }", ";}") + rep(", #", ",#") } path = strings.TrimPrefix(path, "themes/"+t.Name+"/public")