web_render.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // package web_render -- возвращает веб-рендер
  2. package web_render
  3. import (
  4. _ "embed"
  5. "fmt"
  6. "strings"
  7. . "wartank/app/lev0/types"
  8. "wartank/pkg/kernel/kernel_log"
  9. )
  10. // ВебРендер -- простой веб-рендер
  11. type ВебРендер struct {
  12. лог *kernel_log.Логгер
  13. слвБлок map[string]interface{}
  14. }
  15. //go:embed base.tmpl.html
  16. var стрБаза string
  17. //go:embed header.tmpl.html
  18. var стрЗаголовок string
  19. //go:embed footer.tmpl.html
  20. var стрПодвал string
  21. // НовВебРендер -- возвращает новый веб-рендер
  22. func НовВебРендер(шаблон string) *ВебРендер {
  23. лог := kernel_log.НовЛоггер("ВебРендер")
  24. сам := &ВебРендер{
  25. лог: лог,
  26. слвБлок: map[string]interface{}{},
  27. }
  28. сам.слвБлок["{.header}"] = стрЗаголовок
  29. сам.слвБлок["{.main}"] = шаблон
  30. сам.слвБлок["{.footer}"] = стрПодвал
  31. _ = ИВебРендер(сам)
  32. return сам
  33. }
  34. // Получ -- возвращает результат рендеринга
  35. func (сам *ВебРендер) Получ() string {
  36. рез := стрБаза
  37. for ключ, блок := range сам.слвБлок {
  38. рез = strings.ReplaceAll(рез, ключ, fmt.Sprint(блок))
  39. }
  40. return рез
  41. }
  42. // Доб -- добавляет блок замещения
  43. func (сам *ВебРендер) Доб(ключ string, блок interface{}) {
  44. сам.лог.Паника(ключ == "", "ВебРендер.Доб(): пустой ключ")
  45. сам.слвБлок[ключ] = блок
  46. }