hx_vals.go 1.6 KB

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