// package wui_button -- WUI-кнопка. package wui_button import ( "strings" "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" ) // FnBtnBack -- функция обратного вызова для кнопки. type FnBtnBack func(map[lev0.ATxt]lev0.ATxt) *lev0.Result[*lev0.LTxt] // WuiButton -- WUI-кнопка. type WuiButton struct { mWt.IWuiWidget text mWt.IWuiText fnBack FnBtnBack hx mWt.IWuiHx } // NewWuiButton -- возвращает новую WUI-кнопку. func NewWuiButton(text *lev0.LTxt, fnBack FnBtnBack) *WuiButton { lev0.If(fnBack == nil).Hassert("NewWuiButton(): text=%q, fnBack==nil", []any{text}) sf := &WuiButton{ IWuiWidget: wui_widget.NewWuiWidget(), text: wui_text.NewWuiText(text), fnBack: fnBack, } sf.hx = wui_hx.NewWuiHx(lev0.LetTxt("/wui/click/" + sf.Id().Get())) wCtx := wui_ctx.GetWuiCtx() wCtx.Set(sf.Id(), sf, "WUI-кнопка") _ = mWt.IWuiButton(sf) return 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[lev0.ATxt]lev0.ATxt) *lev0.Result[*lev0.LTxt] { return sf.fnBack(dict) } const ( strBeg = `{.txt}` ) // Html -- возвращает HTML-представление текста. func (sf *WuiButton) Html() *lev0.LTxt { strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String()) strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.String()) strRes = strings.ReplaceAll(strRes, "{.hx}", sf.hx.String()) return lev0.LetTxt(strRes) }