@iamproperty/components 7.8.2--beta3 → 7.8.2--beta4

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.
Files changed (200) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/address-lookup.component.css +1 -1
  4. package/assets/css/components/address-lookup.component.css.map +1 -1
  5. package/assets/css/components/advanced-select.component.css +1 -1
  6. package/assets/css/components/advanced-select.component.css.map +1 -1
  7. package/assets/css/components/banner.preload.css +1 -0
  8. package/assets/css/components/banner.preload.css.map +1 -0
  9. package/assets/css/components/calendar.component.css +1 -1
  10. package/assets/css/components/calendar.component.css.map +1 -1
  11. package/assets/css/components/card.component.css +1 -1
  12. package/assets/css/components/card.component.css.map +1 -1
  13. package/assets/css/components/card.module.css +1 -1
  14. package/assets/css/components/card.module.css.map +1 -1
  15. package/assets/css/components/card.preload.css +1 -0
  16. package/assets/css/components/card.preload.css.map +1 -0
  17. package/assets/css/components/carousel.component.css +1 -1
  18. package/assets/css/components/carousel.component.css.map +1 -1
  19. package/assets/css/components/carousel.config.css +1 -1
  20. package/assets/css/components/carousel.config.css.map +1 -1
  21. package/assets/css/components/config.component.css +1 -1
  22. package/assets/css/components/config.component.css.map +1 -1
  23. package/assets/css/components/content.component.css +1 -1
  24. package/assets/css/components/content.component.css.map +1 -1
  25. package/assets/css/components/fileupload.css +1 -1
  26. package/assets/css/components/fileupload.css.map +1 -1
  27. package/assets/css/components/filter-card.component.css +1 -1
  28. package/assets/css/components/filter-card.component.css.map +1 -1
  29. package/assets/css/components/multiselect.css +1 -1
  30. package/assets/css/components/multiselect.css.map +1 -1
  31. package/assets/css/components/nav.component.css +1 -1
  32. package/assets/css/components/nav.component.css.map +1 -1
  33. package/assets/css/components/pagination.css +1 -1
  34. package/assets/css/components/pagination.css.map +1 -1
  35. package/assets/css/components/record-card.component.css +1 -1
  36. package/assets/css/components/record-card.component.css.map +1 -1
  37. package/assets/css/components/search.component.css +1 -1
  38. package/assets/css/components/search.component.css.map +1 -1
  39. package/assets/css/components/skeleton.global.css +1 -1
  40. package/assets/css/components/skeleton.global.css.map +1 -1
  41. package/assets/css/components/slider.css +1 -1
  42. package/assets/css/components/slider.css.map +1 -1
  43. package/assets/css/components/split-button.component.css +1 -1
  44. package/assets/css/components/split-button.component.css.map +1 -1
  45. package/assets/css/components/std-nav-standalone.component.css +1 -1
  46. package/assets/css/components/std-nav-standalone.component.css.map +1 -1
  47. package/assets/css/components/tabs.component.css +1 -1
  48. package/assets/css/components/tabs.component.css.map +1 -1
  49. package/assets/css/components/tag.component.css +1 -1
  50. package/assets/css/components/tag.component.css.map +1 -1
  51. package/assets/css/components/video-card.component.css +1 -1
  52. package/assets/css/components/video-card.component.css.map +1 -1
  53. package/assets/css/core.min.css +1 -1
  54. package/assets/css/core.min.css.map +1 -1
  55. package/assets/css/elements/dropdown.css +1 -1
  56. package/assets/css/elements/dropdown.css.map +1 -1
  57. package/assets/css/elements/forms.css +1 -1
  58. package/assets/css/elements/forms.css.map +1 -1
  59. package/assets/css/elements/links--global.css +1 -1
  60. package/assets/css/elements/links--global.css.map +1 -1
  61. package/assets/css/elements/links.css +1 -1
  62. package/assets/css/elements/links.css.map +1 -1
  63. package/assets/css/style.min.css +1 -1
  64. package/assets/css/style.min.css.map +1 -1
  65. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  66. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  67. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  68. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  69. package/assets/js/components/advanced-select/advanced-select.component.min.js +2 -2
  70. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  71. package/assets/js/components/banner/banner.component.min.js +1 -1
  72. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  73. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  74. package/assets/js/components/bone/bone.component.min.js +1 -1
  75. package/assets/js/components/button/button.component.min.js +1 -1
  76. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  77. package/assets/js/components/card/card.component.js +114 -125
  78. package/assets/js/components/card/card.component.min.js +7 -7
  79. package/assets/js/components/card/card.component.min.js.map +1 -1
  80. package/assets/js/components/carousel/carousel.component.js +83 -29
  81. package/assets/js/components/carousel/carousel.component.min.js +16 -11
  82. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  83. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  84. package/assets/js/components/config/config.component.min.js +7 -7
  85. package/assets/js/components/config/config.component.min.js.map +1 -1
  86. package/assets/js/components/content/content.component.js +28 -69
  87. package/assets/js/components/content/content.component.min.js +4 -4
  88. package/assets/js/components/content/content.component.min.js.map +1 -1
  89. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  90. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  91. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  92. package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
  93. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  94. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  95. package/assets/js/components/form/form.component.min.js +1 -1
  96. package/assets/js/components/header/header.component.min.js +1 -1
  97. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  98. package/assets/js/components/input/input.component.min.js +1 -1
  99. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  100. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  101. package/assets/js/components/menu/menu.component.min.js +1 -1
  102. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  103. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  104. package/assets/js/components/modal/modal.component.min.js +1 -1
  105. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  106. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
  107. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  108. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  109. package/assets/js/components/nav/nav.component.min.js +2 -2
  110. package/assets/js/components/notification/notification.component.min.js +1 -1
  111. package/assets/js/components/pagination/pagination.component.min.js +5 -5
  112. package/assets/js/components/password/password.component.min.js +1 -1
  113. package/assets/js/components/popover/popover.component.min.js +1 -1
  114. package/assets/js/components/rank/rank.component.min.js +1 -1
  115. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  116. package/assets/js/components/rating/rating.component.min.js +1 -1
  117. package/assets/js/components/record-card/record-card.component.min.js +6 -6
  118. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  119. package/assets/js/components/search/search.component.js +234 -186
  120. package/assets/js/components/search/search.component.min.js +12 -7
  121. package/assets/js/components/search/search.component.min.js.map +1 -1
  122. package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
  123. package/assets/js/components/slider/slider.component.min.js +2 -2
  124. package/assets/js/components/split-button/split-button.component.min.js +2 -2
  125. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +5 -5
  126. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  127. package/assets/js/components/std-nav/std-nav.component.js +10 -9
  128. package/assets/js/components/std-nav/std-nav.component.min.js +9 -12
  129. package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
  130. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +5 -5
  131. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js.map +1 -1
  132. package/assets/js/components/table/table.component.min.js +1 -1
  133. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  134. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  135. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  136. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  137. package/assets/js/components/tabs/tabs.component.min.js +4 -4
  138. package/assets/js/components/tag/tag.component.min.js +3 -3
  139. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  140. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  141. package/assets/js/components/video/video.component.min.js +1 -1
  142. package/assets/js/components/video-card/video-card.component.min.js +9 -9
  143. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  144. package/assets/js/components/video-modal/video-modal.component.min.js +1 -1
  145. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  146. package/assets/js/modules/card.module.js +12 -11
  147. package/assets/js/modules/content.js +40 -8
  148. package/assets/js/modules/content.test.js +62 -12
  149. package/assets/js/modules/data-layer.js +7 -6
  150. package/assets/js/modules/dropdown.js +0 -1
  151. package/assets/js/modules/nav.js +10 -3
  152. package/assets/js/modules/search.js +153 -0
  153. package/assets/js/modules/search.test.js +125 -0
  154. package/assets/js/modules/tabs.test.js +64 -12
  155. package/assets/js/modules/testimonial.test.js +44 -6
  156. package/assets/js/modules/videos.test.js +61 -13
  157. package/assets/js/scripts.bundle.js +3 -3
  158. package/assets/js/scripts.bundle.js.map +1 -1
  159. package/assets/js/scripts.bundle.min.js +2 -2
  160. package/assets/js/scripts.bundle.min.js.map +1 -1
  161. package/assets/sass/_components.scss +2 -63
  162. package/assets/sass/components/banner.preload.scss +26 -0
  163. package/assets/sass/components/card.component.scss +1 -7
  164. package/assets/sass/components/card.module.scss +6 -6
  165. package/assets/sass/components/card.preload.scss +80 -0
  166. package/assets/sass/components/carousel.component.scss +165 -0
  167. package/assets/sass/components/carousel.config.scss +85 -249
  168. package/assets/sass/components/content.component.scss +0 -7
  169. package/assets/sass/components/nav.component.scss +2 -1
  170. package/assets/sass/components/search.component.scss +89 -7
  171. package/assets/sass/components/skeleton.global.scss +4 -0
  172. package/assets/sass/elements/dropdown.css +2 -0
  173. package/assets/sass/elements/forms.scss +0 -27
  174. package/assets/sass/elements/links--global.scss +40 -2
  175. package/assets/sass/foundations/root.scss +0 -1
  176. package/assets/sass/utilities/js-display.css +2 -3
  177. package/assets/ts/components/card/card.component.ts +72 -62
  178. package/assets/ts/components/carousel/carousel.component.ts +84 -19
  179. package/assets/ts/components/content/content.component.ts +36 -100
  180. package/assets/ts/components/search/search.component.ts +257 -185
  181. package/assets/ts/components/std-nav/std-nav.component.ts +17 -16
  182. package/assets/ts/html.d.ts +6 -0
  183. package/assets/ts/modules/card.module.ts +20 -12
  184. package/assets/ts/modules/content.test.ts +84 -12
  185. package/assets/ts/modules/content.ts +56 -9
  186. package/assets/ts/modules/data-layer.ts +7 -11
  187. package/assets/ts/modules/dropdown.ts +0 -2
  188. package/assets/ts/modules/nav.ts +12 -3
  189. package/assets/ts/modules/search.test.ts +142 -0
  190. package/assets/ts/modules/search.ts +206 -0
  191. package/assets/ts/modules/tabs.test.ts +79 -12
  192. package/assets/ts/modules/testimonial.test.ts +45 -6
  193. package/assets/ts/modules/videos.test.ts +74 -14
  194. package/dist/components.es.js +25 -25
  195. package/dist/components.umd.js +163 -156
  196. package/package.json +1 -1
  197. package/assets/js/modules/carousel.js +0 -214
  198. package/assets/js/modules/carousel.test.js +0 -18
  199. package/assets/ts/modules/carousel.test.ts +0 -27
  200. package/assets/ts/modules/carousel.ts +0 -301
@@ -5,6 +5,35 @@ trackComponentRegistered('iam-carousel');
5
5
  class iamCarousel extends HTMLElement {
6
6
  constructor() {
7
7
  super();
8
+ this.attachShadow({ mode: 'open' });
9
+
10
+ const assetLocation = document.body.hasAttribute('data-assets-location')
11
+ ? document.body.getAttribute('data-assets-location')
12
+ : '/assets';
13
+
14
+ const loadCSS = `@import "${assetLocation}/css/components/carousel.component.css";`;
15
+
16
+ const template = document.createElement('template');
17
+
18
+ template.innerHTML = /* HTML */ `
19
+ <style>
20
+ ${loadCSS}
21
+ </style>
22
+ <slot></slot>
23
+ <div class="carousel__controls" part="carousel__controls">
24
+ <div class="carousel__pips" part="carousel__pips"></div>
25
+ <div class="carousel__progress carousel__progress-xs" part="carousel__progress-xs">
26
+ <input type="range" min="1" max="100" value="1" step="1" />
27
+ </div>
28
+ <div class="carousel__progress carousel__progress-sm" part="carousel__progress-sm">
29
+ <input type="range" min="1" max="100" value="1" step="1" />
30
+ </div>
31
+ <div class="carousel__progress carousel__progress-md" part="carousel__progress-md">
32
+ <input type="range" min="1" max="100" value="1" step="1" />
33
+ </div>
34
+ </div>
35
+ `;
36
+ this.shadowRoot?.appendChild(template.content.cloneNode(true));
8
37
  }
9
38
 
10
39
  generateThumbnailList = (carouselComponent): any => {
@@ -46,7 +75,7 @@ class iamCarousel extends HTMLElement {
46
75
  }
47
76
 
48
77
  connectedCallback(): void {
49
-
78
+ /*
50
79
  this.insertAdjacentHTML('beforeend',`
51
80
  <div class="carousel__controls">
52
81
  <div class="carousel__pips"></div>
@@ -61,15 +90,48 @@ class iamCarousel extends HTMLElement {
61
90
  </div>
62
91
  </div>
63
92
  `)
93
+ */
64
94
 
65
95
  // eslint-disable-next-line @typescript-eslint/no-this-alias
66
96
  const carouselElement = this;
67
- const carouselProgress = this.querySelector('.carousel__progress-xs [type="range"]');
68
- const carouselProgressSM = this.querySelector('.carousel__progress-sm [type="range"]');
69
- const carouselProgressMD = this.querySelector('.carousel__progress-md [type="range"]');
97
+ const carouselProgress = this.shadowRoot.querySelector('.carousel__progress-xs [type="range"]');
98
+ const carouselProgressSM = this.shadowRoot.querySelector('.carousel__progress-sm [type="range"]');
99
+ const carouselProgressMD = this.shadowRoot.querySelector('.carousel__progress-md [type="range"]');
70
100
  const itemCount = this.querySelectorAll(':scope > *:not(.carousel__controls)').length;
71
101
  const progressPercent = this.progressPercent;
72
102
 
103
+ this.querySelectorAll(':scope > *').forEach((item,index) => {
104
+ item.setAttribute('data-child',index+1);
105
+ })
106
+ this.setAttribute('data-current',1);
107
+
108
+ this.addEventListener("scrollsnapchange", (event) => {
109
+
110
+ const snapTargetInlineElement = event.snapTargetInline;
111
+ const child = Array.from(snapTargetInlineElement.parentElement.children).indexOf(snapTargetInlineElement)+1;
112
+
113
+ if(child != this.getAttribute('data-current')){
114
+ const customEvent = new CustomEvent(`snap-to`, {
115
+ detail: {
116
+ item: child,
117
+ },
118
+ });
119
+
120
+ this.dispatchEvent(customEvent);
121
+ this.setAttribute('data-current',child);
122
+ }
123
+
124
+ console.log(child);
125
+ carouselProgress.value = child;
126
+ carouselProgress.style.setProperty('--percent', progressPercent(child, itemCount));
127
+ carouselProgressSM.value = child;
128
+ carouselProgressSM.style.setProperty('--percent', progressPercent(child, carouselProgressSM?.getAttribute('max')));
129
+ carouselProgressMD.value = child;
130
+ carouselProgressMD.style.setProperty('--percent', progressPercent(child, carouselProgressMD?.getAttribute('max')));
131
+
132
+ });
133
+
134
+
73
135
  let stepperInterval,
74
136
  stepperEvent = 'mouseup',
75
137
  stepperStart = 'mousedown';
@@ -111,17 +173,18 @@ class iamCarousel extends HTMLElement {
111
173
 
112
174
  // SM Progress bar
113
175
  const smStep = this.getAttribute('data-smcols') ? this.getAttribute('data-smcols') : 1;
114
- const smItemCount = Math.floor(itemCount / smStep) * smStep;
176
+ //const smItemCount = Math.floor(itemCount / smStep) * smStep;
177
+ const SMMax = ((Math.floor(itemCount / smStep)-1) * smStep)+1;
115
178
 
116
- carouselProgressSM.setAttribute('max', smItemCount);
179
+ carouselProgressSM.setAttribute('max', SMMax);
117
180
  carouselProgressSM.setAttribute('step', smStep);
118
181
 
119
- carouselProgressSM.style.setProperty('--percent', progressPercent(carouselProgressSM.value, smItemCount));
182
+ carouselProgressSM.style.setProperty('--percent', progressPercent(carouselProgressSM.value, carouselProgressSM?.getAttribute('max')));
120
183
 
121
184
  carouselProgressSM.addEventListener(stepperStart, () => {
122
185
  clearInterval(stepperInterval);
123
186
  stepperInterval = setInterval(function () {
124
- carouselProgressSM.style.setProperty('--percent', progressPercent(carouselProgressSM.value, smItemCount));
187
+ carouselProgressSM.style.setProperty('--percent', progressPercent(carouselProgressSM.value, carouselProgressSM?.getAttribute('max')));
125
188
  });
126
189
  });
127
190
 
@@ -133,8 +196,8 @@ class iamCarousel extends HTMLElement {
133
196
 
134
197
  clearInterval(stepperInterval);
135
198
 
136
- carouselProgressSM.style.setProperty('--percent', progressPercent(carouselProgressSM.value, smItemCount));
137
- const scrollTo = Math.floor((carouselElement.scrollWidth / smItemCount) * carouselProgressSM.value);
199
+ carouselProgressSM.style.setProperty('--percent', progressPercent(carouselProgressSM.value, carouselProgressSM?.getAttribute('max')));
200
+ const scrollTo = Math.floor((carouselElement.scrollWidth / itemCount) * carouselProgressSM.value);
138
201
 
139
202
  carouselElement.scrollTo({
140
203
  top: 0,
@@ -145,18 +208,18 @@ class iamCarousel extends HTMLElement {
145
208
 
146
209
  // MD Progress bar
147
210
 
148
- const mdStep = this.getAttribute('data-smcols') ? this.getAttribute('data-smcols') : 1;
149
- const mdItemCount = Math.floor(itemCount / mdStep) * mdStep;
211
+ const mdStep = this.getAttribute('data-mdcols') ? this.getAttribute('data-mdcols') : 1;
212
+ const mdMax = ((Math.floor(itemCount / mdStep)-1) * mdStep)+1;
150
213
 
151
- carouselProgressMD.setAttribute('max', mdItemCount);
214
+ carouselProgressMD.setAttribute('max', mdMax);
152
215
  carouselProgressMD.setAttribute('step', mdStep);
153
216
 
154
- carouselProgressMD.style.setProperty('--percent', progressPercent(carouselProgressMD.value, mdItemCount));
155
-
217
+ carouselProgressMD.style.setProperty('--percent', progressPercent(carouselProgressMD.value, carouselProgressMD?.getAttribute('max')));
218
+
156
219
  carouselProgressMD.addEventListener(stepperStart, () => {
157
220
  clearInterval(stepperInterval);
158
221
  stepperInterval = setInterval(function () {
159
- carouselProgressMD.style.setProperty('--percent', progressPercent(carouselProgressMD.value, mdItemCount));
222
+ carouselProgressMD.style.setProperty('--percent', progressPercent(carouselProgressMD.value, carouselProgressMD?.getAttribute('max')));
160
223
  });
161
224
  });
162
225
 
@@ -168,8 +231,10 @@ class iamCarousel extends HTMLElement {
168
231
 
169
232
  clearInterval(stepperInterval);
170
233
 
171
- carouselProgressMD.style.setProperty('--percent', progressPercent(carouselProgressMD.value, mdItemCount));
172
- const scrollTo = Math.floor((carouselElement.scrollWidth / mdItemCount) * carouselProgressMD.value);
234
+ carouselProgressMD.style.setProperty('--percent', progressPercent(carouselProgressMD.value, carouselProgressMD?.getAttribute('max')));
235
+ const scrollTo = Math.floor((carouselElement.scrollWidth / itemCount) * carouselProgressMD.value);
236
+
237
+ console.log(carouselProgressMD.value);
173
238
 
174
239
  carouselElement.scrollTo({
175
240
  top: 0,
@@ -180,7 +245,7 @@ class iamCarousel extends HTMLElement {
180
245
 
181
246
 
182
247
  // Thumbnails
183
- const carouselPips = this.querySelector('.carousel__pips');
248
+ const carouselPips = this.shadowRoot.querySelector('.carousel__pips');
184
249
 
185
250
  if (carouselElement.querySelector('[data-thumbnail]')) {
186
251
  const thumbnailImages = this.generateThumbnailList(carouselElement);
@@ -1,5 +1,4 @@
1
-
2
- import { transformButtons } from '../../modules/content';
1
+ import {createTitle,replaceShortcode,transformElement,transformButtons, loadComponents} from '../../modules/content';
3
2
 
4
3
  class iamContent extends HTMLElement {
5
4
  constructor() {
@@ -23,95 +22,11 @@ class iamContent extends HTMLElement {
23
22
  this.shadowRoot.appendChild(template.content.cloneNode(true));
24
23
  }
25
24
 
26
- addTitle = (title):void => {
27
-
28
- if(this.hasAttribute('data-title-tag')){
29
-
30
- return `<${this.getAttribute('data-title-tag')} class="${this.getAttribute('data-title-class')} iam-content--title">${title}</${this.getAttribute('data-title-tag')}>`;
31
- }
32
-
33
- return '';
34
- }
35
-
36
- fixContent = (component):void => {
37
-
38
- const transform = component.getAttribute('data-transform');
39
- let wrapper = component;
40
-
41
- if(transform){
42
-
43
- component.querySelectorAll(`${transform} > *:empty`).forEach((element) => {
44
- element.remove();
45
- });
46
-
47
- wrapper = component.querySelector(`${transform}`);
48
- }
49
- else {
50
-
51
- component.querySelectorAll(`:scope > *:empty`).forEach((element) => {
52
- element.remove();
53
- });
54
- }
55
-
56
- const itemClass = component.getAttribute('data-items-class');
57
-
58
- if(itemClass){
59
-
60
- wrapper.querySelectorAll(`:scope > *`).forEach((element) => {
61
- element.classList.add(itemClass);
62
- });
63
- }
64
-
65
- }
66
-
67
25
  connectedCallback(): void {
68
26
  // eslint-disable-next-line @typescript-eslint/no-this-alias
69
27
  const component = this;
70
28
  const url = this.getAttribute('data-url');
71
29
 
72
- const transform = this.getAttribute('data-transform');
73
-
74
- const fixContent = this.fixContent;
75
-
76
- let elementAttributes = '';
77
-
78
-
79
- for (const attr of this.attributes) {
80
- elementAttributes += `${attr.name}="${attr.value}" `;
81
- }
82
-
83
- const addTitle = this.addTitle;
84
-
85
- const registerComponents = (contentComponent): void => {
86
- const components = ['skeleton','bone','carousel', 'card', 'banner', 'notification'];
87
-
88
- const assetLocation = document.body.hasAttribute('data-assets-location')
89
- ? document.body.getAttribute('data-assets-location')
90
- : '/assets';
91
-
92
- // Load components - Each component will load once the first of its type has been loaded
93
- components.forEach((component) => {
94
- if (component == 'notification') {
95
- document.querySelectorAll('[data-notification]').forEach((element) => {
96
- element.outerHTML = element.outerHTML
97
- .replace(/<div/g, '<iam-notification')
98
- .replace(/<\/div>/g, '</iam-notification>');
99
- });
100
- }
101
-
102
- if (contentComponent.getElementsByTagName(`iam-${component}`).length === 0) return;
103
-
104
- import(/* @vite-ignore */ `${assetLocation}/js/components/${component}/${component}.component.js`)
105
- .then((module) => {
106
- if (!window.customElements.get(`iam-${component}`))
107
- window.customElements.define(`iam-${component}`, module.default);
108
- })
109
- .catch((err) => {
110
- console.log(err.message);
111
- });
112
- });
113
- };
114
-
115
30
  if (url) {
116
31
  const newXHRRequest = new XMLHttpRequest();
117
32
  newXHRRequest.open('GET', url, true);
@@ -123,37 +38,58 @@ class iamContent extends HTMLElement {
123
38
  if(Array.isArray(response))
124
39
  response = response[0];
125
40
 
126
- const renderedContent = response.content.rendered.replaceAll(/<p>\[(.*)\]<\/p>/g, "<span data-shortcode=\"$1\"><iam-skeleton><iam-bone class=\"search\"></iam-bone></iam-skeleton></span>");
41
+ // Create the rendered content block and maintain any shortcodes
42
+ const renderedContent = replaceShortcode(response.content.rendered);
127
43
 
128
-
129
-
44
+ // Update the content title
130
45
  component.parentElement?.querySelector('.iam-content--title')?.remove();
131
- component.insertAdjacentHTML('beforebegin',addTitle(response.title.rendered));
132
-
46
+ const renderedTitle = createTitle(component, response.title.rendered);
133
47
 
48
+ // Transform the component if required
49
+ if(component.hasAttribute('data-transform')){
134
50
 
135
- if(transform){
136
-
137
- component.innerHTML = `<${transform} ${elementAttributes}>${renderedContent}</${transform}>`;
51
+ component.innerHTML = transformElement(component,renderedTitle,renderedContent);
138
52
  component.removeAttribute('class');
53
+
54
+ component.querySelectorAll(`${component.getAttribute('data-transform')} > *:empty`).forEach((element) => {
55
+ element.remove();
56
+ });
139
57
  }
140
58
  else {
141
-
59
+
60
+ component.insertAdjacentHTML('beforebegin',renderedTitle);
61
+
142
62
  component.innerHTML = `${renderedContent}`;
63
+ component.querySelectorAll(`:scope > *:empty`).forEach((element) => {
64
+ element.remove();
65
+ });
143
66
  }
144
-
145
- fixContent(component);
146
- registerComponents(component);
147
- transformButtons(component);
148
67
 
68
+ // Load components - Each component will load once the first of its type has been loaded
69
+ loadComponents(component);
70
+
71
+ // Transform the buttons
72
+ Array.from(document.querySelectorAll('.wp-block-buttons')).forEach((buttons) => {
73
+
74
+ const fragment = transformButtons(buttons);
75
+ buttons.parentNode.replaceChild(fragment, buttons);
76
+ });
77
+
78
+ // This allows for content added dynamically via the standardised nav to be added after the content is loaded
149
79
  Array.from(document.querySelectorAll('[data-variable]')).forEach((element) => {
150
80
 
151
81
  if(document.querySelector(`[data-save-variable="${element.getAttribute('data-variable')}"][data-variable-value]`))
152
82
  element.innerHTML = document.querySelector(`[data-save-variable="${element.getAttribute('data-variable')}"][data-variable-value]`)?.getAttribute('data-variable-value');
153
83
  });
154
84
 
155
- const changeEvent = new CustomEvent('loaded', { detail: {triggered: true} });
85
+ // Dispatch the loaded event for external JS and save to the data layer
86
+ const eventDetails = {url: url};
87
+ const changeEvent = new CustomEvent('content-loaded', { detail: eventDetails });
88
+
156
89
  component?.dispatchEvent(changeEvent);
90
+
91
+ window.dataLayer = window.dataLayer || [];
92
+ window.dataLayer.push({'event': 'content-loaded', ...eventDetails});
157
93
  }
158
94
  };
159
95