wui_button.go 1.9 KB

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