turbo_boost-elements 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -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