web_render.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. }
  17. //go:embed base.tmpl.html
  18. var стрБаза string
  19. //go:embed header.tmpl.html
  20. var стрЗаголовок string
  21. //go:embed footer.tmpl.html
  22. var стрПодвал string
  23. // НовВебРендер -- возвращает новый веб-рендер
  24. func НовВебРендер(шаблон string) *ВебРендер {
  25. лог := NewLogBuf()
  26. сам := &ВебРендер{
  27. лог: лог,
  28. слвБлок: map[string]interface{}{},
  29. }
  30. сам.слвБлок["{.header}"] = стрЗаголовок
  31. сам.слвБлок["{.main}"] = шаблон
  32. сам.слвБлок["{.footer}"] = стрПодвал
  33. _ = ИВебРендер(сам)
  34. return сам
  35. }
  36. // Получ -- возвращает результат рендеринга
  37. func (сам *ВебРендер) Получ() string {
  38. рез := стрБаза
  39. for ключ, блок := range сам.слвБлок {
  40. рез = strings.ReplaceAll(рез, ключ, fmt.Sprint(блок))
  41. }
  42. return рез
  43. }
  44. // Доб -- добавляет блок замещения
  45. func (сам *ВебРендер) Доб(ключ string, блок interface{}) {
  46. Hassert(ключ != "", "ВебРендер.Доб(): пустой ключ")
  47. сам.слвБлок[ключ] = блок
  48. }