hx_vals.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // package hx_vals -- атрибут HTMX (словарь значений).
  2. package hx_vals
  3. import (
  4. "encoding/json"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/d0"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs"
  7. mKh "gitp78su.ipnodns.ru/svi/kern/v4/d0/helpers"
  8. mWt "gitp78su.ipnodns.ru/svi/kern/v4/d2/wui/wui_types"
  9. )
  10. // HxVals -- атрибут HTMX (словарь значений).
  11. type HxVals struct {
  12. *d0.MSafeMutex
  13. dict map[defs.Txt]any
  14. }
  15. // NewHxVals -- возвращает новый словарь значений.
  16. func NewHxVals() *HxVals {
  17. sf := &HxVals{
  18. MSafeMutex: d0.MutSafeMutex(),
  19. dict: map[defs.Txt]any{},
  20. }
  21. _ = mWt.IHxVals(sf)
  22. return sf
  23. }
  24. // Len -- возвращает размер словаря.
  25. func (sf *HxVals) Len() defs.Num {
  26. sf.RLock()
  27. defer sf.RUnlock()
  28. return defs.Num(len(sf.dict))
  29. }
  30. // Del -- удаляет ключ словаря.
  31. func (sf *HxVals) Del(key defs.Txt) {
  32. sf.Lock()
  33. defer sf.Unlock()
  34. delete(sf.dict, key)
  35. }
  36. // Clear -- очищает словарь значений.
  37. func (sf *HxVals) Clear() {
  38. sf.Lock()
  39. defer sf.Unlock()
  40. sf.dict = map[defs.Txt]any{}
  41. }
  42. // String -- возвращает строковое представление тэга.
  43. func (sf *HxVals) String() string {
  44. sf.RLock()
  45. defer sf.RUnlock()
  46. binJson, _ := json.Marshal(sf.dict)
  47. return `hx-vals='` + string(binJson) + `'`
  48. }
  49. // Get -- возвращает хранимое значение словарь значений.
  50. func (sf *HxVals) Get(key defs.Txt) any {
  51. sf.RLock()
  52. defer sf.RUnlock()
  53. return sf.dict[key]
  54. }
  55. // Set -- устанавливает значение словарь значений.
  56. func (sf *HxVals) Set(key defs.Txt, val any) {
  57. sf.Lock()
  58. defer sf.Unlock()
  59. mKh.If(key == "").Hassert("HxVals.Set(): key is empty")
  60. sf.dict[key] = val
  61. }