web_render.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // package web_render -- возвращает веб-рендер
  2. package web_render
  3. import (
  4. _ "embed"
  5. "fmt"
  6. "strings"
  7. . "wartank/app/lev0/types"
  8. . "gitp78su.ipnodns.ru/svi/kern"
  9. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  10. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  11. )
  12. // ВебРендер -- простой веб-рендер
  13. type ВебРендер struct {
  14. лог ILogBuf
  15. слвБлок map[string]interface{}
  16. шаблон string
  17. }
  18. //go:embed base.tmpl.html
  19. var стрБаза string
  20. //go:embed header.tmpl.html
  21. var стрЗаголовок string
  22. //go:embed footer.tmpl.html
  23. var стрПодвал string
  24. // НовВебРендер -- возвращает новый веб-рендер
  25. func НовВебРендер(шаблон string) *ВебРендер {
  26. лог := NewLogBuf()
  27. сам := &ВебРендер{
  28. лог: лог,
  29. слвБлок: map[string]interface{}{},
  30. шаблон: шаблон,
  31. }
  32. сам.слвБлок["{.header}"] = стрЗаголовок
  33. сам.слвБлок["{.main}"] = шаблон
  34. сам.слвБлок["{.footer}"] = стрПодвал
  35. _ = ИВебРендер(сам)
  36. return сам
  37. }
  38. // Получ -- возвращает результат рендеринга
  39. func (сам *ВебРендер) Получ() string {
  40. рез := стрБаза
  41. рез = strings.ReplaceAll(рез, "{.header}", стрЗаголовок)
  42. рез = strings.ReplaceAll(рез, "{.main}", сам.шаблон)
  43. рез = strings.ReplaceAll(рез, "{.footer}", стрПодвал)
  44. for ключ, блок := range сам.слвБлок {
  45. знач:=fmt.Sprint(блок)
  46. if ключ=="{.id}"{
  47. рез = strings.ReplaceAll(рез, ключ, знач)
  48. }
  49. рез = strings.ReplaceAll(рез, ключ, знач)
  50. }
  51. return рез
  52. }
  53. // Доб -- добавляет блок замещения
  54. func (сам *ВебРендер) Доб(ключ string, блок interface{}) {
  55. Hassert(ключ != "", "ВебРендер.Доб(): пустой ключ")
  56. сам.слвБлок[ключ] = блок
  57. }