| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // package wui_button -- WUI-кнопка.
- package wui_button
- import (
- "fmt"
- "strings"
- mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_ctx"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_hx"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_text"
- mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_widget"
- )
- // WuiButton -- WUI-кнопка.
- type WuiButton struct {
- mWt.IWuiWidget
- text mWt.IWuiText
- fnBack func(map[string]string) *mL0.Result[string]
- hx mWt.IWuiHx
- }
- // FnBtnBack -- функция обратного вызова для кнопки.
- type FnBtnBack func(map[string]string) *mL0.Result[string]
- // NewWuiButton -- возвращает новую WUI-кнопку.
- func NewWuiButton(text string, fnBack FnBtnBack) *mL0.Result[*WuiButton] {
- if fnBack == nil {
- return mL0.NewErr[*WuiButton](fmt.Errorf("NewWuiButton(): text=%q, fnBack==nil", text))
- }
- sf := &WuiButton{
- IWuiWidget: wui_widget.NewWuiWidget(),
- text: wui_text.NewWuiText(text),
- fnBack: fnBack,
- }
- sf.hx = wui_hx.NewWuiHx("/wui/click/" + sf.Id())
- resWuiCtx := wui_ctx.GetWuiCtx()
- if resWuiCtx.IsErr() {
- err := fmt.Errorf("NewWuiButton(): text=%q, err=\n\t%w", text, resWuiCtx.Err())
- return mL0.NewErr[*WuiButton](err)
- }
- wCtx := resWuiCtx.Val()
- resSet := wCtx.Set(sf.Id(), sf, "WUI-кнопка")
- if resSet.IsErr() {
- err := fmt.Errorf("NewWuiButton(): text=%q, err=\n\t%w", text, resSet.Err())
- return mL0.NewErr[*WuiButton](err)
- }
- _ = mWt.IWuiButton(sf)
- return mL0.NewRes(sf)
- }
- // Hx -- возвращает атрибуты HTMX.
- func (sf *WuiButton) Hx() mWt.IWuiHx {
- return sf.hx
- }
- // Text -- возвращает текст кнопки.
- func (sf *WuiButton) Text() mWt.IWuiText {
- return sf.text
- }
- // Click -- событие нажатия.
- func (sf *WuiButton) Click(dict map[string]string) *mL0.Result[string] {
- return sf.fnBack(dict)
- }
- const (
- strBeg = `<span id="{.id}" class="btn btn-primary" {.hx}>{.txt}</span>`
- )
- // Html -- возвращает HTML-представление текста.
- func (sf *WuiButton) Html() string {
- strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id())
- strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.Get())
- strRes = strings.ReplaceAll(strRes, "{.hx}", sf.hx.String())
- return strRes
- }
|