arnaucube
arnaucube/konstruiPublic Self-hosted repository
repeat fixed, need to clean code
arnaucode arnaucode@gmail.com
Fri, 29 Sep 2017 11:07:21 +0200
commit

2e60ad10e2b14a871c3d5b47411c876a06733f4f

parent

18477616ab27061a4e53b66e11001c91523bed84

3 files changed, 136 insertions(+), 45 deletions(-)

jump to
M fileOperations.go → fileOperations.go

@@ -6,7 +6,6 @@ "encoding/json"

"fmt" "io/ioutil" "os" - "strconv" "strings" "github.com/fatih/color"

@@ -38,26 +37,34 @@ }

return entries } -func replaceEntries(templateContent string, entries []dataEntry) string { - var newContent string +func duplicateText(original string, count int) string { + var result string + for i := 0; i < count; i++ { + result = result + original + } + return result +} +func replaceEntry(templateContent string, entry dataEntry) string { + //var newContent string //replace {{}} for data - for i := 0; i < len(entries); i++ { - var entryContent string - entryContent = templateContent - //first, get the map keys - var keys []string - for key, _ := range entries[i] { - keys = append(keys, key) - } - //now, replace the keys with the values - for j := 0; j < len(keys); j++ { - entryContent = strings.Replace(entryContent, "{{"+keys[j]+"}}", entries[i][keys[j]], -1) - entryContent = strings.Replace(entryContent, "[[i]]", strconv.Itoa(i), -1) - } - newContent = newContent + entryContent + //for i := 0; i < len(entries); i++ { + //var entryContent string + //entryContent = templateContent + //first, get the map keys + var keys []string + for key, _ := range entry { + keys = append(keys, key) } - return newContent + //now, replace the keys with the values + for j := 0; j < len(keys); j++ { + templateContent = strings.Replace(templateContent, "{{"+keys[j]+"}}", entry[keys[j]], -1) + //templateContent = strings.Replace(templateContent, "[[i]]", strconv.Itoa(i), -1) + } + //newContent = newContent + entryContent + //newContent = newContent + "\n" + //} + return templateContent } func putDataInTemplate(templateContent string, entries []dataEntry) string { var newContent string

@@ -66,23 +73,40 @@

//replace <konstrui-repeat> if strings.Contains(newContent, "<konstrui-repeat") && strings.Contains(newContent, "</konstrui-repeat>") { //repeat, _ := getTagParameters(newContent, "konstrui-repeat", "repeat", "nil") - color.Blue("repeat data") - //fmt.Println(repeat) //get content inside tags //get tags, and split by tags, get the content between tags extracted := extractText(newContent, "<konstrui-repeat", "</konstrui-repeat>") - fmt.Println(extracted) //for each project, putDataInTemplate data:entries, template: content inside tags - fragment := replaceEntries(extracted, entries) - color.Blue(fragment) - //afegir fragment al newContent - //esborrar les línies dels tags - } - newContent = replaceEntries(templateContent, entries) + //var fragment string + var replaced string + for _, entry := range entries { + color.Green(extracted) + fmt.Println(entry) + replaced = replaced + replaceEntry(extracted, entry) + } + fragmentLines := getLines(replaced) + fragmentLines = deleteArrayElementsWithString(fragmentLines, "konstrui-repeat") + //afegir fragment al newContent, substituint el fragment original + lines := getLines(templateContent) + p := locateStringInArray(lines, "konstrui-repeat") + lines = deleteLinesBetween(lines, p[0], p[1]) + lines = addElementsToArrayPosition(lines, fragmentLines, p[0]) + /*lines = deleteArrayElementsWithString(lines, "konstrui-repeat") + fmt.Println(lines)*/ + templateContent = concatStringsWithJumps(lines) + fmt.Println(templateContent) + newContent = templateContent + } + color.Red(newContent) + result := templateContent + for _, entry := range entries { + result = replaceEntry(result, entry) + } + color.Blue(result) - return newContent + return result } func getTagParameters(line string, tagname string, param1 string, param2 string) (string, string) { var param1content string

@@ -112,6 +136,11 @@ entries := getDataFromJson(rawFolderPath + "/" + dataPath)

generated := putDataInTemplate(templateContent, entries) return generated } +func useTemplateContent(templateContent string, dataPath string) string { + entries := getDataFromJson(rawFolderPath + "/" + dataPath) + generated := putDataInTemplate(templateContent, entries) + return generated +} func putTemplates(folderPath string, filename string) string { var fileContent string

@@ -123,11 +152,18 @@ for scanner.Scan() {

currentLine := scanner.Text() if strings.Contains(currentLine, "<konstrui-template") && strings.Contains(currentLine, "</konstrui-template>") { templatePath, data := getTagParameters(currentLine, "konstrui-template", "html", "data") - fileContent = fileContent + useTemplate(templatePath, data) + fileContent = fileContent + useTemplate(templatePath, data) + "\n" } else { - fileContent = fileContent + currentLine + fileContent = fileContent + currentLine + "\n" } lineCount++ + } + + if strings.Contains(fileContent, "<konstrui-repeat") { + dataPath, _ := getTagParameters(fileContent, "konstrui-repeat", "repeat", "nil") + dataPath = strings.Replace(dataPath, "\n", "", -1) + fileContent = useTemplateContent(fileContent, dataPath) + color.Red(fileContent) } return fileContent }
M main.go → main.go

@@ -11,7 +11,7 @@ const rawFolderPath = "./webInput"

const newFolderPath = "./webOutput" const konstruiConfigFile = "konstruiConfig.json" -func parseDir(folderPath string, newDir string) { +/*func parseDir(folderPath string, newDir string) { files, _ := ioutil.ReadDir(folderPath) for _, f := range files { fileNameSplitted := strings.Split(f.Name(), ".")

@@ -33,24 +33,21 @@ }

parseDir(oldDir, newDir) } } -} +}*/ func startTemplating(folderPath string, newDir string) { + //FILES //do templating for each file in konstruiConfig.Files in konstruiConfig.Files //konstrui-template 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) - } + //fileNameSplitted := strings.Split(fName, ".") + //extension := fileNameSplitted[len(fileNameSplitted)-1] + fileContent := putTemplates(folderPath, fName) + /*fmt.Println(i) + color.Red(fileContent)*/ + writeFile(newDir+"/"+fName, fileContent) } - + //REPEATPAGES //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++ {

@@ -64,7 +61,7 @@ //fmt.Println(data[j])

writeFile(newDir+"/"+data[j]["pageName"]+"Page.html", generatedPage) } } - + //COPYRAW //copy the konstruiConfig.CopyRaw files without modificate them for i := 0; i < len(konstruiConfig.CopyRaw); i++ { fName := konstruiConfig.CopyRaw[i]

@@ -107,7 +104,7 @@ c.Green("getting conifg from file konstruiConfig.json")

//first reads the konstrui.Config.json readKonstruiConfig(rawFolderPath + "/" + konstruiConfigFile) c.Green("configuration:") - fmt.Println(konstruiConfig.Files) + fmt.Println(konstruiConfig) c.Green("templating") //parseDir(rawFolderPath, newFolderPath)
A stringManipulation.go

@@ -0,0 +1,58 @@

+package main + +import ( + "strings" +) + +func getLines(text string) []string { + lines := strings.Split(text, "\n") + return lines +} + +func locateStringInArray(lines []string, s string) []int { + var positions []int + + for k, l := range lines { + if strings.Contains(l, s) { + positions = append(positions, k) + } + } + + return positions +} + +func deleteArrayElementsWithString(lines []string, s string) []string { + var result []string + for _, l := range lines { + if !strings.Contains(l, s) { + result = append(result, l) + } + } + return result +} + +func deleteLinesBetween(lines []string, from int, to int) []string { + var result []string + result = append(lines[:from], lines[to+1:]...) + return result +} + +func addElementsToArrayPosition(lines []string, newLines []string, pos int) []string { + var result []string + result = append(result, lines[:pos]...) + result = append(result, newLines...) + result = append(result, lines[pos:]...) + /* + result = append(lines[:pos], newLines...) + result = append(result, lines[pos:]...) + */ + return result +} + +func concatStringsWithJumps(lines []string) string { + var r string + for _, l := range lines { + r = r + l + "\n" + } + return r +}