main.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package layout
  2. import (
  3. "fmt"
  4. "gex/pkg/gen/domquery"
  5. "os"
  6. "strings"
  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. }