statping/core/assets.go

135 lines
4.2 KiB
Go
Raw Normal View History

2018-06-30 00:57:05 +00:00
package core
import (
"fmt"
"github.com/GeertJohan/go.rice"
"github.com/hunterlong/statup/utils"
"io/ioutil"
"os"
"os/exec"
)
2018-07-27 04:45:42 +00:00
func RenderBoxes() {
SqlBox = rice.MustFindBox("../source/sql")
CssBox = rice.MustFindBox("../source/css")
ScssBox = rice.MustFindBox("../source/scss")
JsBox = rice.MustFindBox("../source/js")
TmplBox = rice.MustFindBox("../source/tmpl")
}
2018-06-30 00:57:05 +00:00
func CopyToPublic(box *rice.Box, folder, file string) {
2018-07-28 01:50:13 +00:00
assetFolder := fmt.Sprintf("%v/%v", folder, file)
utils.Log(1, fmt.Sprintf("Copying %v to %v", file, assetFolder))
2018-06-30 00:57:05 +00:00
base, err := box.String(file)
if err != nil {
utils.Log(3, fmt.Sprintf("Failed to copy %v to %v, %v.", file, assetFolder, err))
}
err = ioutil.WriteFile(assetFolder, []byte(base), 0644)
if err != nil {
utils.Log(3, fmt.Sprintf("Failed to write file %v to %v, %v.", file, assetFolder, err))
2018-06-30 00:57:05 +00:00
}
}
func MakePublicFolder(folder string) {
2018-07-28 02:36:34 +00:00
utils.Log(1, fmt.Sprintf("Creating folder '%v'", folder))
2018-06-30 00:57:05 +00:00
if _, err := os.Stat(folder); os.IsNotExist(err) {
err = os.MkdirAll(folder, 0755)
if err != nil {
utils.Log(3, fmt.Sprintf("Failed to created %v directory, %v", folder, err))
}
}
}
2018-07-28 01:50:13 +00:00
func CompileSASS(folder string) error {
2018-06-30 00:57:05 +00:00
sassBin := os.Getenv("SASS")
shell := os.Getenv("CMD_FILE")
2018-07-28 01:50:13 +00:00
scssFile := fmt.Sprintf("%v/%v", folder, "assets/scss/base.scss")
baseFile := fmt.Sprintf("%v/%v", folder, "assets/css/base.css")
utils.Log(1, fmt.Sprintf("Compiling SASS %v into %v", scssFile, baseFile))
command := fmt.Sprintf("%v %v %v", sassBin, scssFile, baseFile)
2018-06-30 00:57:05 +00:00
testCmd := exec.Command(shell, command)
_, err := testCmd.Output()
if err != nil {
utils.Log(3, fmt.Sprintf("Failed to compile assets with SASS %v", err))
2018-07-28 01:50:13 +00:00
utils.Log(3, fmt.Sprintf("%v %v %v", sassBin, scssFile, baseFile))
2018-06-30 00:57:05 +00:00
return err
}
utils.Log(1, "SASS Compiling is complete!")
return err
}
2018-07-28 01:50:13 +00:00
func HasAssets(folder string) bool {
if _, err := os.Stat(folder + "/assets"); err == nil {
2018-06-30 00:57:05 +00:00
utils.Log(1, "Assets folder was found!")
UsingAssets = true
return true
} else {
assetEnv := os.Getenv("USE_ASSETS")
if assetEnv == "true" {
utils.Log(1, "Environment variable USE_ASSETS was found.")
2018-07-28 01:50:13 +00:00
CreateAllAssets(folder)
err := CompileSASS(folder)
if err != nil {
CopyToPublic(CssBox, folder+"/css", "base.css")
utils.Log(2, "Default 'base.css' was insert because SASS did not work.")
return true
}
2018-06-30 00:57:05 +00:00
UsingAssets = true
return true
}
}
return false
}
2018-07-28 01:50:13 +00:00
func SaveAsset(data, folder, file string) {
utils.Log(1, fmt.Sprintf("Saving %v/%v into assets folder", folder, file))
err := ioutil.WriteFile(folder+"/assets/"+file, []byte(data), 0644)
2018-06-30 00:57:05 +00:00
if err != nil {
2018-07-28 01:50:13 +00:00
utils.Log(3, fmt.Sprintf("Failed to save %v/%v, %v", folder, file, err))
2018-06-30 00:57:05 +00:00
}
}
2018-07-28 01:50:13 +00:00
func OpenAsset(folder, file string) string {
dat, err := ioutil.ReadFile(folder + "/assets/" + file)
2018-06-30 00:57:05 +00:00
if err != nil {
utils.Log(3, fmt.Sprintf("Failed to open %v, %v", file, err))
return ""
}
return string(dat)
}
2018-07-28 01:50:13 +00:00
func CreateAllAssets(folder string) error {
utils.Log(1, fmt.Sprintf("Dump Statup assets into %v/assets", folder))
MakePublicFolder(folder + "/assets")
MakePublicFolder(folder + "/assets/js")
MakePublicFolder(folder + "/assets/css")
MakePublicFolder(folder + "/assets/scss")
2018-07-28 02:36:34 +00:00
utils.Log(1, "Inserting scss, css, and javascript files into assets folder")
2018-07-28 01:50:13 +00:00
CopyToPublic(ScssBox, folder+"/assets/scss", "base.scss")
CopyToPublic(ScssBox, folder+"/assets/scss", "variables.scss")
CopyToPublic(CssBox, folder+"/assets/css", "bootstrap.min.css")
2018-07-28 02:36:34 +00:00
CopyToPublic(CssBox, folder+"/assets/css", "base.css")
2018-07-28 01:50:13 +00:00
CopyToPublic(JsBox, folder+"/assets/js", "bootstrap.min.js")
CopyToPublic(JsBox, folder+"/assets/js", "Chart.bundle.min.js")
CopyToPublic(JsBox, folder+"/assets/js", "jquery-3.3.1.slim.min.js")
CopyToPublic(JsBox, folder+"/assets/js", "main.js")
CopyToPublic(JsBox, folder+"/assets/js", "setup.js")
2018-07-28 02:36:34 +00:00
CopyToPublic(TmplBox, folder+"/assets", "robots.txt")
CopyToPublic(TmplBox, folder+"/assets", "favicon.ico")
2018-06-30 00:57:05 +00:00
utils.Log(1, "Compiling CSS from SCSS style...")
2018-07-28 01:50:13 +00:00
err := utils.Log(1, "Statup assets have been inserted")
2018-07-27 04:45:42 +00:00
return err
2018-06-30 00:57:05 +00:00
}
2018-07-22 22:17:38 +00:00
2018-07-28 01:50:13 +00:00
func DeleteAllAssets(folder string) error {
err := os.RemoveAll(folder + "/assets")
2018-07-22 22:17:38 +00:00
if err != nil {
utils.Log(1, fmt.Sprintf("There was an issue deleting Statup Assets, %v", err))
2018-07-27 04:45:42 +00:00
return err
2018-07-22 22:17:38 +00:00
}
utils.Log(1, "Statup assets have been deleted")
2018-07-27 04:45:42 +00:00
return err
2018-07-22 22:17:38 +00:00
}