package main import ( "encoding/json" "fmt" "io/ioutil" "os" "strings" "github.com/Jeffail/gabs" "github.com/fatih/color" ) //dataEntry is the map used to create the array of maps, where the templatejson data is stored type dataEntry map[string]string 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 readFile(path string) string { dat, err := ioutil.ReadFile(path) check(err) return string(dat) } func getDataFromJson(path string) ([]dataEntry, *gabs.Container) { var entries []dataEntry file, err := ioutil.ReadFile(path) check(err) content := string(file) var rawEntries []*json.RawMessage json.Unmarshal([]byte(content), &rawEntries) for i := 0; i < len(rawEntries); i++ { rawEntryMarshaled, err := json.Marshal(rawEntries[i]) check(err) var newDataEntry map[string]string json.Unmarshal(rawEntryMarshaled, &newDataEntry) entries = append(entries, newDataEntry) } jsonData := jsonGabs(path) return entries, jsonData } func jsonGabs(path string) *gabs.Container { file, err := ioutil.ReadFile(path) check(err) jsonParsed, err := gabs.ParseJSON(file) //img := "img" //fmt.Println(jsonParsed.S(img)) return jsonParsed } func writeFile(path string, newContent string) { err := ioutil.WriteFile(path, []byte(newContent), 0644) check(err) color.Green(path + ":") //color.Blue(newContent) } /*func generatePageFromTemplateAndData(templateContent string, entry dataEntry) string { var entryContent string entryContent = templateContent //first, get the map keys var keys []string for key, _ := range entry { keys = append(keys, key) } //now, replace the keys with the values for j := 0; j < len(keys); j++ { entryContent = strings.Replace(entryContent, "{{"+keys[j]+"}}", entry[keys[j]], -1) } return entryContent }*/ func getHtmlAndDataFromRepeatPages(page RepeatPages) (string, []dataEntry, *gabs.Container) { templateContent := readFile(rawFolderPath + "/" + page.HtmlPage) data, jsonData := getDataFromJson(rawFolderPath + "/" + page.Data) return templateContent, data, jsonData }