main.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package layout
  2. import (
  3. "fmt"
  4. "os"
  5. "strings"
  6. "git.clearsky.net.au/cody/gex.git/pkg/gen/domquery"
  7. )
  8. func ProcessHTML(htmlStr string) (string, error) {
  9. dom := domquery.LoadHTML(htmlStr)
  10. layoutTag := dom.QuerySelector("layout")
  11. if layoutTag.TagName() == "" {
  12. return dom.OuterHTML(), nil
  13. }
  14. attr := layoutTag.GetAttribute("src")
  15. attr = strings.TrimPrefix(attr, "/")
  16. attr = strings.Replace(attr, ".tpl", ".gen.tpl", 1)
  17. layoutFileByt, err := os.ReadFile(attr)
  18. if err != nil {
  19. fmt.Printf("ERROR: %s", err)
  20. return "", err
  21. }
  22. // get the block values
  23. blocks := layoutTag.QuerySelectorAll("block")
  24. layoutFileHtml := string(layoutFileByt)
  25. layoutFileHtml, err = ProcessHTML(layoutFileHtml)
  26. if err != nil {
  27. fmt.Printf("ERROR: %s\n", err)
  28. }
  29. layoutFileDom := domquery.LoadHTML(layoutFileHtml)
  30. layoutFileBlocks := layoutFileDom.QuerySelectorAll("block")
  31. for _, block := range blocks {
  32. for _, layoutFileBlock := range layoutFileBlocks {
  33. if block.GetAttribute("id") == layoutFileBlock.GetAttribute("id") {
  34. layoutFileBlock.SetInnerHTML(block.InnerHTML())
  35. }
  36. }
  37. }
  38. layoutTag.SetOuterHTML(layoutFileDom.InnerHTML())
  39. htmlStr = dom.InnerHTML()
  40. //fmt.Println(htmlStr + "\n---------------------------")
  41. return htmlStr, nil
  42. }