btn_modules.go 2.4 KB

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