btn_modules.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // package btn_modules -- кнопка для показа модулей.
  2. package btn_modules
  3. import (
  4. _ "embed"
  5. "fmt"
  6. "strings"
  7. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  8. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui"
  11. mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
  12. )
  13. type BtnModules struct {
  14. btn mWt.IWuiButton
  15. kCtx mKs.IKernelCtx
  16. }
  17. // NewBtnModules -- возвращает новую кнопку для показа модулей.
  18. func NewBtnModules() *BtnModules {
  19. sf := &BtnModules{
  20. kCtx: kctx.GetKernelCtx(),
  21. }
  22. sf.btn = wui.NewWuiButton("Modules", sf.clickMonolit)
  23. sf.btn.Hx().Target().Set("#modules")
  24. return sf
  25. }
  26. // Html -- возвращает HTML-представление кнопки.
  27. func (sf *BtnModules) Html() string {
  28. return sf.btn.Html()
  29. }
  30. //go:embed block_modules.html
  31. var strBlockModules string
  32. //go:embed block_row.html
  33. var strBlockRow string
  34. // Событие клика по кнопке.
  35. func (sf *BtnModules) clickMonolit(dict map[string]string) mL0.IResult[string] {
  36. optMonolit := sf.kCtx.Get("monolit")
  37. if optMonolit.IsNone() {
  38. err := fmt.Errorf("clickMonolit(): monolit module not found")
  39. return mL0.NewErr[string](err)
  40. }
  41. mon := optMonolit.Some().Val().(mKs.IKernelMonolit)
  42. chLst := mon.Ctx().SortedList()
  43. strOut := ``
  44. for _, val := range chLst {
  45. if !strings.Contains(val.Key(), "module_") {
  46. continue
  47. }
  48. lstKey := strings.Split(val.Key(), "_")
  49. id := lstKey[1]
  50. strRow := strBlockRow
  51. strRow = strings.ReplaceAll(strRow, "{.id}", id)
  52. strRow = strings.ReplaceAll(strRow, "{.key}", val.Key())
  53. moduleName := val.Val().(mKs.IKernelModule).Name().Get()
  54. strRow = strings.ReplaceAll(strRow, "{.name}", moduleName)
  55. type_ := fmt.Sprintf("%#T", val.Val())
  56. type_ = strings.ReplaceAll(type_, ".", ".<br>")
  57. strRow = strings.ReplaceAll(strRow, "{.type}", type_)
  58. strRow = strings.ReplaceAll(strRow, "{.createAt}", val.CreateAt().String())
  59. strRow = strings.ReplaceAll(strRow, "{.updateAt}", val.UpdateAt().String())
  60. strRow = strings.ReplaceAll(strRow, "{.comment}", val.Comment())
  61. strOut += strRow
  62. }
  63. strOut = strings.ReplaceAll(strBlockModules, "{.mod_block}", strOut)
  64. return mL0.NewOk(strOut)
  65. }