web_render.go 1.6 KB

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