// package btn_modules -- кнопка для показа модулей. package btn_modules import ( _ "embed" "fmt" "strings" mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui" mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec" ) type BtnModules struct { btn mWt.IWuiButton kCtx kspec.IKernelCtx } // NewBtnModules -- возвращает новую кнопку для показа модулей. func NewBtnModules() *BtnModules { sf := &BtnModules{ kCtx: kctx.GetKernelCtx(), } sf.btn = wui.NewWuiButton(defs.Txt("Modules"), sf.clickMonolit) sf.btn.Hx().Target().Set("#modules") return sf } // Html -- возвращает HTML-представление кнопки. func (sf *BtnModules) Html() defs.ITxtFix { return sf.btn.Html() } //go:embed block_modules.html var strBlockModules string //go:embed block_row.html var strBlockRow string // Событие клика по кнопке. func (sf *BtnModules) clickMonolit(dict map[string]string) mL0.IResult[defs.ITxtFix] { optMonolit := sf.kCtx.Get(defs.Txt("monolit")) if optMonolit.IsNone() { err := defs.Err("clickMonolit(): monolit module not found") return mL0.NewErr[defs.ITxtFix](err) } mon := optMonolit.Some().Val().(mod_spec.IKernelMonolit) chLst := mon.Ctx().SortedList() strOut := `` for _, val := range chLst { if !strings.Contains(val.Key().String(), "module_") { continue } lstKey := strings.Split(val.Key().String(), "_") id := lstKey[1] strRow := strBlockRow strRow = strings.ReplaceAll(strRow, "{.id}", id) strRow = strings.ReplaceAll(strRow, "{.key}", val.Key().String()) moduleName := val.Val().(mod_spec.IKernelModule).Name().Get() strRow = strings.ReplaceAll(strRow, "{.name}", string(moduleName)) type_ := fmt.Sprintf("%#T", val.Val()) type_ = strings.ReplaceAll(type_, ".", ".
") strRow = strings.ReplaceAll(strRow, "{.type}", type_) strRow = strings.ReplaceAll(strRow, "{.createAt}", val.CreateAt().String()) strRow = strings.ReplaceAll(strRow, "{.updateAt}", val.UpdateAt().String()) strRow = strings.ReplaceAll(strRow, "{.comment}", val.Comment().String()) strOut += strRow } strOut = strings.ReplaceAll(strBlockModules, "{.mod_block}", strOut) txtOut := defs.TxtFix(strOut) return mL0.NewOk(txtOut) }