lato_cms 3.1.3 → 3.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c71453863fa3e56037214bc1884c628a66104e331cfd1b13804f2408964d332c
4
- data.tar.gz: 47f259f2406ed3913f15220c83395ffb6d8e592013980d278fa7e2649c4103aa
3
+ metadata.gz: 178517109975256e769273564f9570b355cd42c9a134e52aa3c0ea844753edbd
4
+ data.tar.gz: 19602e064f08dbf3516d4ebdb31c6156e024ba28d335c2162ee42e0e0c09f1c2
5
5
  SHA512:
6
- metadata.gz: cea16a860d7468d42ec2df54e32ecf18c1d923860f77f66ce3fda79548e637d3e436506fc90c1b9b5ea7b3e0641b45146f288a691bc805089a84be47a4afdf86
7
- data.tar.gz: 971a5d487ba77d10b7761cf20d976ec38c3ea3fb4bdfc7228a7c626888cb28345894bce7aef71dbca35f40d11f330b1da9b5334dc4334d6587aabb8ec7316051
6
+ metadata.gz: fe7c5eb7ae908ba2679d1ee51d7210cf8855fdd8b87b71fbf94cecc3b0e0025e26b3023a1721ed6c39a35fa82ad7c13ae806f77d45e21bcabbcf3948a8e168f4
7
+ data.tar.gz: d8c78e9f4c0c3d441e7d2bc5b4b3daddd8e8c8504827d4835ab44a9862c707e3dfc5ec3a30c9d38d0fd149bb87b260d101787a2e84bd1bd2336a66ab66a6dc80
@@ -2,45 +2,46 @@ import { Controller } from '@hotwired/stimulus'
2
2
 
3
3
  export default class extends Controller {
4
4
  connect () {
5
- this.handleShown = this.handleShown.bind(this)
6
- this.handleHidden = this.handleHidden.bind(this)
5
+ this.handleToggle = this.handleToggle.bind(this)
7
6
 
8
- this.element.addEventListener('shown.bs.collapse', this.handleShown)
9
- this.element.addEventListener('hidden.bs.collapse', this.handleHidden)
7
+ this.element.addEventListener('shown.bs.collapse', this.handleToggle)
8
+ this.element.addEventListener('hidden.bs.collapse', this.handleToggle)
10
9
 
11
10
  window.requestAnimationFrame(() => {
12
- this.broadcastInitiallyOpenComponent()
11
+ this.broadcastCurrentSelection()
13
12
  })
14
13
  }
15
14
 
16
15
  disconnect () {
17
- this.element.removeEventListener('shown.bs.collapse', this.handleShown)
18
- this.element.removeEventListener('hidden.bs.collapse', this.handleHidden)
16
+ this.element.removeEventListener('shown.bs.collapse', this.handleToggle)
17
+ this.element.removeEventListener('hidden.bs.collapse', this.handleToggle)
19
18
  }
20
19
 
21
- handleShown (event) {
22
- this.broadcastForCollapse(event.target)
23
- }
24
-
25
- // Repeater items are nested collapses without a template component id, and
26
- // their events bubble up here: closing one would otherwise deselect the
27
- // component that is still open. Same guard `broadcastForCollapse` applies.
28
- handleHidden (event) {
29
- if (!event.target.dataset.templateComponentId) return
30
-
31
- this.broadcastClosedComponent()
20
+ // Repeater items are nested collapses, so their events bubble up here, and
21
+ // opening one item closes its sibling: the events alone don't tell what ends
22
+ // up open. Read the selection off the DOM once it has settled instead.
23
+ handleToggle () {
24
+ window.requestAnimationFrame(() => {
25
+ this.broadcastCurrentSelection()
26
+ })
32
27
  }
33
28
 
34
- broadcastInitiallyOpenComponent () {
35
- const openCollapse = this.element.querySelector('.accordion-collapse.show')
36
- if (!openCollapse) return
29
+ // The open component, narrowed to the open repeater item when there is one.
30
+ broadcastCurrentSelection () {
31
+ const openComponent = this.element.querySelector('.accordion-collapse.show')
32
+ if (!openComponent) {
33
+ this.broadcastClosedComponent()
34
+ return
35
+ }
37
36
 
38
- this.broadcastForCollapse(openCollapse)
37
+ const openItem = openComponent.querySelector('.collapse.show[data-repeater-item-id]')
38
+ this.broadcastForCollapse(openItem || openComponent)
39
39
  }
40
40
 
41
41
  broadcastForCollapse (collapseElement) {
42
42
  const templateComponentId = collapseElement.dataset.templateComponentId
43
43
  const componentId = collapseElement.dataset.componentId
44
+ const repeaterItemId = collapseElement.dataset.repeaterItemId
44
45
 
45
46
  if (!templateComponentId) return
46
47
 
@@ -48,7 +49,8 @@ export default class extends Controller {
48
49
  detail: {
49
50
  id: templateComponentId,
50
51
  templateComponentId,
51
- componentId
52
+ componentId,
53
+ repeaterItemId: repeaterItemId || null
52
54
  }
53
55
  }))
54
56
  }
@@ -58,7 +60,8 @@ export default class extends Controller {
58
60
  detail: {
59
61
  id: null,
60
62
  templateComponentId: null,
61
- componentId: null
63
+ componentId: null,
64
+ repeaterItemId: null
62
65
  }
63
66
  }))
64
67
  }
@@ -66,11 +66,14 @@ export default class extends Controller {
66
66
  const templateComponentId = openCollapse.dataset.templateComponentId
67
67
  if (!templateComponentId) return
68
68
 
69
+ const openItem = openCollapse.querySelector('.collapse.show[data-repeater-item-id]')
70
+
69
71
  document.dispatchEvent(new CustomEvent('lato-cms:component-change', {
70
72
  detail: {
71
73
  id: templateComponentId,
72
74
  templateComponentId,
73
- componentId: openCollapse.dataset.componentId
75
+ componentId: openCollapse.dataset.componentId,
76
+ repeaterItemId: openItem?.dataset.repeaterItemId || null
74
77
  }
75
78
  }))
76
79
  }
@@ -116,10 +116,13 @@ export default class extends Controller {
116
116
  const templateComponentId = openCollapse.dataset.templateComponentId
117
117
  if (!templateComponentId) return
118
118
 
119
+ const openItem = openCollapse.querySelector('.collapse.show[data-repeater-item-id]')
120
+
119
121
  this.activeComponent = {
120
122
  id: templateComponentId,
121
123
  templateComponentId,
122
- componentId: openCollapse.dataset.componentId
124
+ componentId: openCollapse.dataset.componentId,
125
+ repeaterItemId: openItem?.dataset.repeaterItemId || null
123
126
  }
124
127
 
125
128
  this.postActiveComponent()
@@ -14,7 +14,11 @@
14
14
  </button>
15
15
  </div>
16
16
 
17
- <div id="<%= collapse_id %>" class="collapse <%= 'show' if expanded %>" data-bs-parent="#<%= parent_id %>">
17
+ <%# The component ids travel on the item collapse too, so the live preview can
18
+ highlight the single item being edited (see lato_cms_component_accordion_controller). %>
19
+ <div id="<%= collapse_id %>" class="collapse <%= 'show' if expanded %>" data-bs-parent="#<%= parent_id %>"
20
+ data-template-component-id="<%= tc[:template_component_id] %>" data-component-id="<%= tc[:component_id] %>"
21
+ data-repeater-item-id="<%= item_id %>">
18
22
  <div class="card-body pb-2">
19
23
  <% tc[:fields].each do |field_id, field_config| %>
20
24
  <% page_field = item_fields[field_id.to_s] %>
@@ -1,3 +1,3 @@
1
1
  module LatoCms
2
- VERSION = "3.1.3"
2
+ VERSION = "3.1.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lato_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.3
4
+ version: 3.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregorio Galante