@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.
- package/assets/css/components/actionbar.component.css +1 -1
- package/assets/css/components/actionbar.component.css.map +1 -1
- package/assets/css/components/address-lookup.component.css +1 -1
- package/assets/css/components/address-lookup.component.css.map +1 -1
- package/assets/css/components/advanced-select.component.css +1 -1
- package/assets/css/components/advanced-select.component.css.map +1 -1
- package/assets/css/components/banner.preload.css +1 -0
- package/assets/css/components/banner.preload.css.map +1 -0
- package/assets/css/components/calendar.component.css +1 -1
- package/assets/css/components/calendar.component.css.map +1 -1
- package/assets/css/components/card.component.css +1 -1
- package/assets/css/components/card.component.css.map +1 -1
- package/assets/css/components/card.module.css +1 -1
- package/assets/css/components/card.module.css.map +1 -1
- package/assets/css/components/card.preload.css +1 -0
- package/assets/css/components/card.preload.css.map +1 -0
- package/assets/css/components/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/carousel.config.css +1 -1
- package/assets/css/components/carousel.config.css.map +1 -1
- package/assets/css/components/config.component.css +1 -1
- package/assets/css/components/config.component.css.map +1 -1
- package/assets/css/components/content.component.css +1 -1
- package/assets/css/components/content.component.css.map +1 -1
- package/assets/css/components/fileupload.css +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/filter-card.component.css +1 -1
- package/assets/css/components/filter-card.component.css.map +1 -1
- package/assets/css/components/multiselect.css +1 -1
- package/assets/css/components/multiselect.css.map +1 -1
- package/assets/css/components/nav.component.css +1 -1
- package/assets/css/components/nav.component.css.map +1 -1
- package/assets/css/components/pagination.css +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/record-card.component.css +1 -1
- package/assets/css/components/record-card.component.css.map +1 -1
- package/assets/css/components/search.component.css +1 -1
- package/assets/css/components/search.component.css.map +1 -1
- package/assets/css/components/skeleton.global.css +1 -1
- package/assets/css/components/skeleton.global.css.map +1 -1
- package/assets/css/components/slider.css +1 -1
- package/assets/css/components/slider.css.map +1 -1
- package/assets/css/components/split-button.component.css +1 -1
- package/assets/css/components/split-button.component.css.map +1 -1
- package/assets/css/components/std-nav-standalone.component.css +1 -1
- package/assets/css/components/std-nav-standalone.component.css.map +1 -1
- package/assets/css/components/tabs.component.css +1 -1
- package/assets/css/components/tabs.component.css.map +1 -1
- package/assets/css/components/tag.component.css +1 -1
- package/assets/css/components/tag.component.css.map +1 -1
- package/assets/css/components/video-card.component.css +1 -1
- package/assets/css/components/video-card.component.css.map +1 -1
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/elements/dropdown.css +1 -1
- package/assets/css/elements/dropdown.css.map +1 -1
- package/assets/css/elements/forms.css +1 -1
- package/assets/css/elements/forms.css.map +1 -1
- package/assets/css/elements/links--global.css +1 -1
- package/assets/css/elements/links--global.css.map +1 -1
- package/assets/css/elements/links.css +1 -1
- package/assets/css/elements/links.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/js/components/accordion/accordion.component.min.js +1 -1
- package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
- package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js +2 -2
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/banner/banner.component.min.js +1 -1
- package/assets/js/components/barchart/barchart.component.min.js +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/bone/bone.component.min.js +1 -1
- package/assets/js/components/button/button.component.min.js +1 -1
- package/assets/js/components/calendar/calendar.component.min.js +2 -2
- package/assets/js/components/card/card.component.js +114 -125
- package/assets/js/components/card/card.component.min.js +7 -7
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.js +83 -29
- package/assets/js/components/carousel/carousel.component.min.js +16 -11
- package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
- package/assets/js/components/config/config.component.min.js +7 -7
- package/assets/js/components/config/config.component.min.js.map +1 -1
- package/assets/js/components/content/content.component.js +28 -69
- package/assets/js/components/content/content.component.min.js +4 -4
- package/assets/js/components/content/content.component.min.js.map +1 -1
- package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
- package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
- package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/form/form.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
- package/assets/js/components/input/input.component.min.js +1 -1
- package/assets/js/components/input-range/input-range.component.min.js +1 -1
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/menu/menu.component.min.js +1 -1
- package/assets/js/components/milestone/milestone.component.min.js +1 -1
- package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
- package/assets/js/components/modal/modal.component.min.js +1 -1
- package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.min.js +2 -2
- package/assets/js/components/notification/notification.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +5 -5
- package/assets/js/components/password/password.component.min.js +1 -1
- package/assets/js/components/popover/popover.component.min.js +1 -1
- package/assets/js/components/rank/rank.component.min.js +1 -1
- package/assets/js/components/rankings/rankings.component.min.js +1 -1
- package/assets/js/components/rating/rating.component.min.js +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +6 -6
- package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
- package/assets/js/components/search/search.component.js +234 -186
- package/assets/js/components/search/search.component.min.js +12 -7
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js +2 -2
- package/assets/js/components/split-button/split-button.component.min.js +2 -2
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +5 -5
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
- package/assets/js/components/std-nav/std-nav.component.js +10 -9
- package/assets/js/components/std-nav/std-nav.component.min.js +9 -12
- package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
- package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +5 -5
- package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.min.js +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
- package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +4 -4
- package/assets/js/components/tag/tag.component.min.js +3 -3
- package/assets/js/components/tag/tag.component.min.js.map +1 -1
- package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
- package/assets/js/components/video/video.component.min.js +1 -1
- package/assets/js/components/video-card/video-card.component.min.js +9 -9
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components/video-modal/video-modal.component.min.js +1 -1
- package/assets/js/components/word-count/word-count.component.min.js +1 -1
- package/assets/js/modules/card.module.js +12 -11
- package/assets/js/modules/content.js +40 -8
- package/assets/js/modules/content.test.js +62 -12
- package/assets/js/modules/data-layer.js +7 -6
- package/assets/js/modules/dropdown.js +0 -1
- package/assets/js/modules/nav.js +10 -3
- package/assets/js/modules/search.js +153 -0
- package/assets/js/modules/search.test.js +125 -0
- package/assets/js/modules/tabs.test.js +64 -12
- package/assets/js/modules/testimonial.test.js +44 -6
- package/assets/js/modules/videos.test.js +61 -13
- package/assets/js/scripts.bundle.js +3 -3
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +2 -2
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/sass/_components.scss +2 -63
- package/assets/sass/components/banner.preload.scss +26 -0
- package/assets/sass/components/card.component.scss +1 -7
- package/assets/sass/components/card.module.scss +6 -6
- package/assets/sass/components/card.preload.scss +80 -0
- package/assets/sass/components/carousel.component.scss +165 -0
- package/assets/sass/components/carousel.config.scss +85 -249
- package/assets/sass/components/content.component.scss +0 -7
- package/assets/sass/components/nav.component.scss +2 -1
- package/assets/sass/components/search.component.scss +89 -7
- package/assets/sass/components/skeleton.global.scss +4 -0
- package/assets/sass/elements/dropdown.css +2 -0
- package/assets/sass/elements/forms.scss +0 -27
- package/assets/sass/elements/links--global.scss +40 -2
- package/assets/sass/foundations/root.scss +0 -1
- package/assets/sass/utilities/js-display.css +2 -3
- package/assets/ts/components/card/card.component.ts +72 -62
- package/assets/ts/components/carousel/carousel.component.ts +84 -19
- package/assets/ts/components/content/content.component.ts +36 -100
- package/assets/ts/components/search/search.component.ts +257 -185
- package/assets/ts/components/std-nav/std-nav.component.ts +17 -16
- package/assets/ts/html.d.ts +6 -0
- package/assets/ts/modules/card.module.ts +20 -12
- package/assets/ts/modules/content.test.ts +84 -12
- package/assets/ts/modules/content.ts +56 -9
- package/assets/ts/modules/data-layer.ts +7 -11
- package/assets/ts/modules/dropdown.ts +0 -2
- package/assets/ts/modules/nav.ts +12 -3
- package/assets/ts/modules/search.test.ts +142 -0
- package/assets/ts/modules/search.ts +206 -0
- package/assets/ts/modules/tabs.test.ts +79 -12
- package/assets/ts/modules/testimonial.test.ts +45 -6
- package/assets/ts/modules/videos.test.ts +74 -14
- package/dist/components.es.js +25 -25
- package/dist/components.umd.js +163 -156
- package/package.json +1 -1
- package/assets/js/modules/carousel.js +0 -214
- package/assets/js/modules/carousel.test.js +0 -18
- package/assets/ts/modules/carousel.test.ts +0 -27
- 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',
|
|
179
|
+
carouselProgressSM.setAttribute('max', SMMax);
|
|
117
180
|
carouselProgressSM.setAttribute('step', smStep);
|
|
118
181
|
|
|
119
|
-
carouselProgressSM.style.setProperty('--percent', progressPercent(carouselProgressSM.value,
|
|
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,
|
|
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,
|
|
137
|
-
const scrollTo = Math.floor((carouselElement.scrollWidth /
|
|
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-
|
|
149
|
-
const
|
|
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',
|
|
214
|
+
carouselProgressMD.setAttribute('max', mdMax);
|
|
152
215
|
carouselProgressMD.setAttribute('step', mdStep);
|
|
153
216
|
|
|
154
|
-
carouselProgressMD.style.setProperty('--percent', progressPercent(carouselProgressMD.value,
|
|
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,
|
|
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,
|
|
172
|
-
const scrollTo = Math.floor((carouselElement.scrollWidth /
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|