btn_modules.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // package btn_modules -- кнопка для показа модулей.
  2. package btn_modules
  3. import (
  4. _ "embed"
  5. "fmt"
  6. "strings"
  7. mKt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  8. mKr "gitp78su.ipnodns.ru/svi/kern/v4/lev1/result"
  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 mKt.IKernelCtx
  16. }
  17. // NewBtnModules -- возвращает новую кнопку для показа модулей.
  18. func NewBtnModules() mKt.IResult[*BtnModules] {
  19. resKernCtx := kctx.GetKernelCtx()
  20. if resKernCtx.IsErr() {
  21. err := fmt.Errorf("NewBtnModules(): err=\n\t%w", resKernCtx.Err())
  22. return mKr.NewErr[*BtnModules](err)
  23. }
  24. kCtx := resKernCtx.Val()
  25. sf := &BtnModules{
  26. kCtx: kCtx,
  27. }
  28. resBtn := wui.NewWuiButton("Modules", sf.clickMonolit)
  29. if resBtn.IsErr() {
  30. err := fmt.Errorf("NewBtnModules(): err=\n\t%w", resBtn.Err())
  31. return mKr.NewErr[*BtnModules](err)
  32. }
  33. sf.btn = resBtn.Val()
  34. sf.btn.Hx().Target().Set("#modules")
  35. return mKr.NewRes(sf)
  36. }
  37. // Html -- возвращает HTML-представление кнопки.
  38. func (sf *BtnModules) Html() string {
  39. return sf.btn.Html()
  40. }
  41. //go:embed block_modules.html
  42. var strBlockModules string
  43. //go:embed block_row.html
  44. var strBlockRow string
  45. // Событие клика по кнопке.
  46. func (sf *BtnModules) clickMonolit(dict map[string]string) mKt.IResult[string] {
  47. optMonolit := sf.kCtx.Get("monolit")
  48. if optMonolit.IsNone() {
  49. err := fmt.Errorf("clickMonolit(): monolit module not found")
  50. return mKr.NewErr[string](err)
  51. }
  52. mon := optMonolit.Val().Val().(mKt.IKernelMonolit)
  53. chLst := mon.Ctx().SortedList()
  54. strOut := ``
  55. for _, val := range chLst {
  56. if !strings.Contains(val.Key(), "module_") {
  57. continue
  58. }
  59. lstKey := strings.Split(val.Key(), "_")
  60. id := lstKey[1]
  61. strRow := strBlockRow
  62. strRow = strings.ReplaceAll(strRow, "{.id}", id)
  63. strRow = strings.ReplaceAll(strRow, "{.key}", val.Key())
  64. moduleName := string(val.Val().(mKt.IKernelModule).Name())
  65. strRow = strings.ReplaceAll(strRow, "{.name}", moduleName)
  66. type_ := fmt.Sprintf("%#T", val.Val())
  67. type_ = strings.ReplaceAll(type_, ".", ".<br>")
  68. strRow = strings.ReplaceAll(strRow, "{.type}", type_)
  69. strRow = strings.ReplaceAll(strRow, "{.createAt}", string(val.CreateAt()))
  70. strRow = strings.ReplaceAll(strRow, "{.updateAt}", string(val.UpdateAt()))
  71. strRow = strings.ReplaceAll(strRow, "{.comment}", val.Comment())
  72. strOut += strRow
  73. }
  74. strOut = strings.ReplaceAll(strBlockModules, "{.mod_block}", strOut)
  75. return mKr.NewRes(strOut)
  76. }