wbutton.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // package wbutton -- WUI-кнопка
  2. package wbutton
  3. import (
  4. "strings"
  5. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  6. "gitp78su.ipnodns.ru/svi/kern/wui/wctx"
  7. "gitp78su.ipnodns.ru/svi/kern/wui/whx"
  8. "gitp78su.ipnodns.ru/svi/kern/wui/wtext"
  9. . "gitp78su.ipnodns.ru/svi/kern/wui/wtypes"
  10. "gitp78su.ipnodns.ru/svi/kern/wui/wwidget"
  11. )
  12. // WuiButton -- WUI-кнопка
  13. type WuiButton struct {
  14. IWuiWidget
  15. text IWuiText
  16. fnBack func(map[string]string) string
  17. hx IWuiHx
  18. }
  19. // NewWuiButton -- возвращает новую WUI-кнопку
  20. func NewWuiButton(text string, fnBack func(map[string]string) string) *WuiButton {
  21. Hassert(fnBack != nil, "NewWuiButton(): fnBack==nil")
  22. sf := &WuiButton{
  23. IWuiWidget: wwidget.NewWuiWidget(),
  24. text: wtext.NewWuiText(text),
  25. fnBack: fnBack,
  26. }
  27. sf.hx = whx.NewWuiHx("/wui/click/" + sf.Id())
  28. wCtx := wctx.GetWuiCtx()
  29. wCtx.Set(sf.Id(), sf, "WUI-кнопка")
  30. _ = IWuiButton(sf)
  31. return sf
  32. }
  33. // Hx -- возвращает атрибуты HTMX
  34. func (sf *WuiButton) Hx() IWuiHx {
  35. return sf.hx
  36. }
  37. // Text -- возвращает текст кнопки
  38. func (sf *WuiButton) Text() IWuiText {
  39. return sf.text
  40. }
  41. // Click -- событие нажатия
  42. func (sf *WuiButton) Click(dict map[string]string) string {
  43. return sf.fnBack(dict)
  44. }
  45. const (
  46. strBeg = `<span id="{.id}" class="btn btn-primary" {.hx}>{.txt}</span>`
  47. )
  48. // Html -- возвращает HTML-представление текста
  49. func (sf *WuiButton) Html() string {
  50. strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id())
  51. strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.Get())
  52. strRes = strings.ReplaceAll(strRes, "{.hx}", sf.hx.String())
  53. return strRes
  54. }