turbo_boost-elements 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,6 +59,7 @@ export default class ToggleTargetElement extends ToggleElement {
59
59
 
60
60
  collapse (delay = 250) {
61
61
  clearTimeout(this.collapseTimeout)
62
+ if (this.busy) return
62
63
  if (typeof delay !== 'number') delay = 250
63
64
 
64
65
  if (delay > 0)
@@ -78,7 +79,7 @@ export default class ToggleTargetElement extends ToggleElement {
78
79
 
79
80
  collapseMatches () {
80
81
  document.querySelectorAll(this.collapseSelector).forEach(el => {
81
- if (el === this) return
82
+ if (el.id === this.id) return
82
83
  if (el.collapse) el.collapse(0)
83
84
  })
84
85
  }
@@ -94,10 +95,17 @@ export default class ToggleTargetElement extends ToggleElement {
94
95
  return this.getAttribute('focus-selector')
95
96
  }
96
97
 
98
+ // the active trigger
97
99
  get triggerElement () {
98
100
  return document.getElementById(this.labeledBy)
99
101
  }
100
102
 
103
+ // all triggers
104
+ get triggerElements () {
105
+ return document.querySelectorAll(`[aria-controls="${this.id}"]`)
106
+ }
107
+
108
+ // the dom id of the active trigger
101
109
  get labeledBy () {
102
110
  return this.getAttribute('aria-labeledby')
103
111
  }
@@ -113,10 +121,14 @@ export default class ToggleTargetElement extends ToggleElement {
113
121
  }
114
122
 
115
123
  get expanded () {
116
- return this.triggerElement.expanded
124
+ return this.triggerElement ? this.triggerElement.expanded : false
117
125
  }
118
126
 
119
127
  set expanded (value) {
120
- return (this.triggerElement.expanded = value)
128
+ this.triggerElements.forEach(el => (el.expanded = value))
129
+ }
130
+
131
+ get busy () {
132
+ return this.triggerElement && this.triggerElement.busy
121
133
  }
122
134
  }
@@ -68,7 +68,6 @@ export default class ToggleTriggerElement extends ToggleElement {
68
68
  currentFocusSelector = this.focusSelector
69
69
  this.targetElement.labeledBy = this.id
70
70
  this.targetElement.collapseMatches()
71
- this.targetElement.busy = true
72
71
  this.busy = true
73
72
  // TODO: implement cache - this.targetElement.renderCachedHTML()
74
73
  }
@@ -92,8 +91,7 @@ export default class ToggleTriggerElement extends ToggleElement {
92
91
  // runs before the morph is executed
93
92
  setTimeout(() => {
94
93
  this.busy = false
95
- this.targetElement.busy = false
96
- this.morphToggleElements.forEach(el => (el.busy = false))
94
+ this.morphToggleTriggerElements.forEach(el => (el.busy = false))
97
95
  }, delay - 10)
98
96
 
99
97
  // runs after the morph is executed
@@ -131,11 +129,9 @@ export default class ToggleTriggerElement extends ToggleElement {
131
129
  }
132
130
 
133
131
  // all toggle elements contained by the `morphElement`
134
- get morphToggleElements () {
132
+ get morphToggleTriggerElements () {
135
133
  return Array.from(
136
- this.morphElement.querySelectorAll(
137
- 'turbo-boost-toggle-trigger,turbo-boost-toggle-target'
138
- )
134
+ this.morphElement.querySelectorAll('turbo-boost-toggle-trigger')
139
135
  )
140
136
  }
141
137
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module TurboBoost
4
4
  module Elements
5
- VERSION = "0.0.13"
5
+ VERSION = "0.0.14"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbo_boost-elements
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nate Hopkins (hopsoft)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-08 00:00:00.000000000 Z
11
+ date: 2023-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails