hx_vals.go 1.7 KB

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