wui_button.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // package wui_button -- WUI-кнопка.
  2. package wui_button
  3. import (
  4. "strings"
  5. "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. // FnBtnBack -- функция обратного вызова для кнопки.
  13. type FnBtnBack func(map[lev0.ATxt]lev0.ATxt) *lev0.Result[*lev0.LTxt]
  14. // WuiButton -- WUI-кнопка.
  15. type WuiButton struct {
  16. mWt.IWuiWidget
  17. text mWt.IWuiText
  18. fnBack FnBtnBack
  19. hx mWt.IWuiHx
  20. }
  21. // NewWuiButton -- возвращает новую WUI-кнопку.
  22. func NewWuiButton(text *lev0.LTxt, fnBack FnBtnBack) *WuiButton {
  23. lev0.If(fnBack == nil).Hassert("NewWuiButton(): text=%q, fnBack==nil", []any{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(lev0.LetTxt("/wui/click/" + sf.Id().Get()))
  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[lev0.ATxt]lev0.ATxt) *lev0.Result[*lev0.LTxt] {
  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() *lev0.LTxt {
  52. strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String())
  53. strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.String())
  54. strRes = strings.ReplaceAll(strRes, "{.hx}", sf.hx.String())
  55. return lev0.LetTxt(strRes)
  56. }