package main import ( "fmt" "io/ioutil" "os" "strings" ) const rawFolderPath = "./webInput" const newFolderPath = "./webOutput" const konstruiConfigFile = "konstruiConfig.json" func parseDir(folderPath string, newDir string) { files, _ := ioutil.ReadDir(folderPath) for _, f := range files { fileNameSplitted := strings.Split(f.Name(), ".") extension := fileNameSplitted[len(fileNameSplitted)-1] if extension == "html" { fileContent := putTemplates(folderPath, f.Name()) writeFile(newDir+"/"+f.Name(), fileContent) } else if extension == "css" { path := folderPath + "/" + f.Name() fileContent := readFile(path) writeFile(newDir+"/"+f.Name(), fileContent) } if len(fileNameSplitted) == 1 { newDir := newDir + "/" + f.Name() oldDir := rawFolderPath + "/" + f.Name() if _, err := os.Stat(newDir); os.IsNotExist(err) { _ = os.Mkdir(newDir, 0700) } parseDir(oldDir, newDir) } } } func startTemplating(folderPath string, newDir string) { //do templating for each file in konstruiConfig.Files in konstruiConfig.Files for i := 0; i < len(konstruiConfig.Files); i++ { fName := konstruiConfig.Files[i] fileNameSplitted := strings.Split(fName, ".") extension := fileNameSplitted[len(fileNameSplitted)-1] if extension == "html" { fileContent := putTemplates(folderPath, fName) writeFile(newDir+"/"+fName, fileContent) } else if extension == "css" { path := folderPath + "/" + fName fileContent := readFile(path) writeFile(newDir+"/"+fName, fileContent) } } //do templating for the file pages in konstruiConfig.RepeatPages c.Cyan("starting to generate Pages to repeat") for i := 0; i < len(konstruiConfig.RepeatPages); i++ { pageTemplate, data := getHtmlAndDataFromRepeatPages(konstruiConfig.RepeatPages[i]) for j := 0; j < len(data); j++ { fmt.Println(j) generatedPage := generatePageFromTemplateAndData(pageTemplate, data[j]) fmt.Println(data[j]) writeFile(newDir+"/"+data[j]["pageName"]+"Page.html", generatedPage) } } //copy the konstruiConfig.CopyRaw files without modificate them for i := 0; i < len(konstruiConfig.CopyRaw); i++ { fName := konstruiConfig.CopyRaw[i] c.Yellow(fName) fileNameSplitted := strings.Split(fName, ".") if len(fileNameSplitted) > 1 { //is a file copyFileRaw(folderPath, fName, newDir) } else { //is a directory c.Red(folderPath + "/" + fName) copyDirRaw(folderPath, fName, newDir) } } } func copyDirRaw(fromDir string, currentDir string, newDir string) { filesList, _ := ioutil.ReadDir("./" + fromDir + "/" + currentDir) fmt.Println(fromDir + "/" + currentDir) c.Green(newDir + "/" + currentDir) os.MkdirAll(newDir+"/"+currentDir, os.ModePerm) for _, f := range filesList { fileNameSplitted := strings.Split(f.Name(), ".") if len(fileNameSplitted) > 1 { //is a file copyFileRaw(fromDir+"/"+currentDir, f.Name(), newDir+"/"+currentDir) } else { //is a directory copyDirRaw(fromDir+"/"+currentDir, f.Name(), newDir+"/"+currentDir) } } } func copyFileRaw(fromDir string, fName string, newDir string) { c.Yellow("copying raw " + fromDir + "//" + fName) fileContent := readFile(fromDir + "/" + fName) writeFile(newDir+"/"+fName, fileContent) } func main() { c.Green("getting files from /webInput") c.Green("getting conifg from file konstruiConfig.json") //first reads the konstrui.Config.json readKonstruiConfig(rawFolderPath + "/" + konstruiConfigFile) c.Green("configuration:") fmt.Println(konstruiConfig.Files) c.Green("templating") //parseDir(rawFolderPath, newFolderPath) startTemplating(rawFolderPath, newFolderPath) c.Green("webpage finished, files at /webOutput") }