@iamproperty/components 7.7.1--beta3 → 7.7.1--beta5
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/applied-filters.css +1 -1
- package/assets/css/components/applied-filters.css.map +1 -1
- package/assets/css/components/barchart.component.css +1 -1
- package/assets/css/components/barchart.component.css.map +1 -1
- 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/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/collapsible-side.css +1 -1
- package/assets/css/components/collapsible-side.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/doughnutchart.component.css +1 -1
- package/assets/css/components/doughnutchart.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/inline-edit.css +1 -1
- package/assets/css/components/inline-edit.css.map +1 -1
- package/assets/css/components/modal.component.css +1 -1
- package/assets/css/components/modal.component.css.map +1 -1
- package/assets/css/components/multi-step-modal.component.css +1 -1
- package/assets/css/components/multi-step-modal.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/split-button.component.css +1 -1
- package/assets/css/components/split-button.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/tabs.config.css +1 -1
- package/assets/css/components/tabs.config.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/components/video-modal.component.css +1 -1
- package/assets/css/components/video-modal.component.css.map +1 -1
- package/assets/css/components/video.component.css +1 -0
- package/assets/css/components/video.component.css.map +1 -0
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/elements/badge-tag.css +1 -1
- package/assets/css/elements/badge-tag.css.map +1 -1
- package/assets/css/elements/buttons--action.css +1 -1
- package/assets/css/elements/buttons--action.css.map +1 -1
- package/assets/css/elements/buttons--global.css +1 -1
- package/assets/css/elements/buttons--global.css.map +1 -1
- package/assets/css/elements/buttons.css +1 -1
- package/assets/css/elements/buttons.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.js +21 -7
- package/assets/js/components/advanced-select/advanced-select.component.min.js +4 -4
- package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
- package/assets/js/components/barchart/barchart.component.min.js +6 -6
- package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/calendar/calendar.component.min.js +2 -2
- package/assets/js/components/card/card.component.min.js +2 -2
- package/assets/js/components/carousel/carousel.component.min.js +3 -3
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
- package/assets/js/components/config/config.component.min.js +2 -2
- package/assets/js/components/content/content.component.min.js +2 -2
- package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +4 -4
- package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
- package/assets/js/components/filter-card/filter-card.component.min.js +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 +4 -4
- 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.js +2 -2
- package/assets/js/components/modal/modal.component.min.js +4 -4
- package/assets/js/components/modal/modal.component.min.js.map +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 +2 -2
- package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
- 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 +2 -2
- 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 +1 -1
- package/assets/js/components/search/search.component.min.js +5 -5
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/slider/slider.component.min.js +1 -1
- 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 +8 -8
- package/assets/js/components/std-address-lookup/std-address-lookup.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.js +13 -0
- package/assets/js/components/tabs/tabs.component.min.js +4 -4
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/components/tag/tag.component.min.js +1 -1
- package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
- package/assets/js/components/video/video.component.js +67 -0
- package/assets/js/components/video/video.component.min.js +21 -0
- package/assets/js/components/video/video.component.min.js.map +1 -0
- package/assets/js/components/video-card/video-card.component.js +42 -59
- package/assets/js/components/video-card/video-card.component.min.js +15 -7
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components/video-modal/video-modal.component.js +10 -44
- package/assets/js/components/video-modal/video-modal.component.min.js +12 -6
- package/assets/js/components/video-modal/video-modal.component.min.js.map +1 -1
- package/assets/js/components/word-count/word-count.component.min.js +1 -1
- package/assets/js/modules/advanced-select.js +31 -8
- package/assets/js/modules/modal.js +4 -2
- package/assets/js/modules/videos.js +42 -0
- package/assets/js/scripts.bundle.js +1 -1
- package/assets/js/scripts.bundle.min.js +1 -1
- package/assets/sass/_components.scss +1 -1
- package/assets/sass/components/tabs.component.scss +25 -0
- package/assets/sass/components/tabs.config.scss +5 -1
- package/assets/sass/components/video-card.component.scss +36 -62
- package/assets/sass/components/video-modal.component.scss +6 -4
- package/assets/sass/components/video.component.scss +75 -0
- package/assets/sass/elements/badge-tag.css +1 -1
- package/assets/sass/elements/buttons--action.css +17 -0
- package/assets/sass/elements/buttons--global.scss +5 -1
- package/assets/sass/elements/links.scss +53 -31
- package/assets/sass/foundations/animations.scss +1 -1
- package/assets/ts/components/advanced-select/advanced-select.component.ts +25 -7
- package/assets/ts/components/modal/modal.component.ts +2 -2
- package/assets/ts/components/tabs/tabs.component.ts +19 -0
- package/assets/ts/components/video/video.component.ts +74 -0
- package/assets/ts/components/video-card/video-card.component.ts +54 -75
- package/assets/ts/components/video-modal/video-modal.component.ts +10 -59
- package/assets/ts/modules/advanced-select.ts +38 -17
- package/assets/ts/modules/modal.ts +4 -2
- package/assets/ts/modules/videos.ts +57 -0
- package/dist/components.es.js +25 -25
- package/dist/components.umd.js +163 -133
- package/package.json +1 -1
- package/src/components/Video/Video.vue +22 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { trackComponent, trackComponentRegistered } from '../_global';
|
|
2
2
|
import { cardHTML, setupCard } from '../../modules/card.module';
|
|
3
|
-
import { loadYouTubeScripts, createYoutTubeVideo } from '../../modules/videos';
|
|
3
|
+
import { videoHTML, loadYouTubeScripts, createYoutTubeVideo,openYoutubeVideo,openVimeoVideo } from '../../modules/videos';
|
|
4
|
+
import { openModal,closeModal,closeButtonHtml } from '../../modules/modal';
|
|
4
5
|
|
|
5
6
|
trackComponentRegistered('iam-video-card');
|
|
6
7
|
|
|
@@ -21,9 +22,11 @@ class iamVideoCard extends HTMLElement {
|
|
|
21
22
|
|
|
22
23
|
${loadCSS}
|
|
23
24
|
</style>
|
|
25
|
+
<link rel="stylesheet" href="https://kit.fontawesome.com/8bd0fca975.css" crossorigin="anonymous" />
|
|
24
26
|
${cardHTML}
|
|
25
27
|
<dialog>
|
|
26
|
-
|
|
28
|
+
${closeButtonHtml}
|
|
29
|
+
${videoHTML}
|
|
27
30
|
</dialog>
|
|
28
31
|
`;
|
|
29
32
|
|
|
@@ -34,97 +37,73 @@ class iamVideoCard extends HTMLElement {
|
|
|
34
37
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
35
38
|
const cardComponent = this;
|
|
36
39
|
const cardHead = cardComponent.shadowRoot.querySelector('.card__head');
|
|
40
|
+
const closeButton = this.shadowRoot?.querySelector('[data-close]');
|
|
37
41
|
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
let dialog;
|
|
42
|
-
let embed;
|
|
42
|
+
this.insertAdjacentHTML('beforeend', `<div class="embed" slot="video"></div>`);
|
|
43
|
+
const embed = this.querySelector('.embed');
|
|
43
44
|
|
|
44
45
|
setupCard(cardComponent);
|
|
46
|
+
|
|
47
|
+
if (cardComponent.querySelector('[data-youtube]')){
|
|
48
|
+
|
|
49
|
+
cardComponent.setAttribute('data-youtube',cardComponent.querySelector('[data-youtube]').getAttribute('data-youtube'));
|
|
50
|
+
cardComponent.querySelector('[data-youtube]')?.remove();
|
|
51
|
+
}
|
|
45
52
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
cardComponent.setAttribute(
|
|
49
|
-
'data-youtube',
|
|
50
|
-
cardComponent.querySelector('[data-youtube]').getAttribute('data-youtube')
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
if (cardComponent.querySelector('[data-vimeo]'))
|
|
53
|
+
if (cardComponent.querySelector('[data-vimeo]')){
|
|
54
|
+
|
|
54
55
|
cardComponent.setAttribute('data-vimeo', cardComponent.querySelector('[data-vimeo]').getAttribute('data-vimeo'));
|
|
56
|
+
cardComponent.querySelector('[data-vimeo]')?.remove();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
55
60
|
|
|
56
|
-
|
|
57
|
-
if (cardComponent.hasAttribute('data-youtube') || cardComponent.hasAttribute('data-vimeo')) {
|
|
58
|
-
cardHead.setAttribute('tabindex', '0');
|
|
59
|
-
|
|
60
|
-
// Add dialog to page
|
|
61
|
-
if (!document.getElementById(`${link_id}-dialog`)) {
|
|
62
|
-
document.body.insertAdjacentHTML(
|
|
61
|
+
cardHead.insertAdjacentHTML(
|
|
63
62
|
'beforeend',
|
|
64
|
-
`<
|
|
63
|
+
`<button class="btn btn-compact fa-play colour-success">Play</button>`
|
|
65
64
|
);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
dialog = document.getElementById(`${link_id}-dialog`);
|
|
69
|
-
embed = document.getElementById(link_id);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Youtube
|
|
73
|
-
if (cardComponent.hasAttribute('data-youtube')) {
|
|
74
|
-
// Load the scripts only once
|
|
75
|
-
if (!document.body.classList.contains('youtubeLoaded')) {
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
77
|
-
const loaded = await loadYouTubeScripts();
|
|
78
|
-
}
|
|
79
|
-
cardHead.addEventListener('click', function () {
|
|
80
|
-
const customEvent = new CustomEvent('play-video', {
|
|
81
|
-
detail: { 'Video Type': 'YoutTube', ID: cardComponent.getAttribute('data-youtube') },
|
|
82
|
-
});
|
|
83
|
-
cardComponent.dispatchEvent(customEvent);
|
|
84
|
-
|
|
85
|
-
createYoutTubeVideo(embed, this.getAttribute('[data-youtube]'));
|
|
86
|
-
dialog.showModal();
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
dialog.addEventListener('close', () => {
|
|
90
|
-
if (
|
|
91
|
-
window.player[embed.getAttribute('id')] &&
|
|
92
|
-
typeof window.player[embed.getAttribute('id')].pauseVideo == 'function'
|
|
93
|
-
) {
|
|
94
|
-
window.player[embed.getAttribute('id')].pauseVideo();
|
|
95
|
-
}
|
|
96
65
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
});
|
|
100
|
-
cardComponent.dispatchEvent(customEvent);
|
|
101
|
-
});
|
|
102
|
-
} else if (cardComponent.hasAttribute('data-vimeo')) {
|
|
103
|
-
// Vimeo
|
|
66
|
+
|
|
67
|
+
const button = cardHead?.querySelector('button');
|
|
104
68
|
|
|
105
|
-
|
|
106
|
-
|
|
69
|
+
cardHead.tabIndex = 6;
|
|
70
|
+
button?.tabIndex = -1;
|
|
107
71
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
72
|
+
cardHead.addEventListener('click', () => {
|
|
73
|
+
|
|
74
|
+
if(this.hasAttribute('data-youtube')){
|
|
75
|
+
const youtubeId = this.getAttribute('data-youtube');
|
|
76
|
+
embed?.setAttribute('id',youtubeId);
|
|
77
|
+
openYoutubeVideo(this);
|
|
78
|
+
openModal(this);
|
|
79
|
+
}
|
|
80
|
+
else if(this.hasAttribute('data-vimeo')) {
|
|
81
|
+
openVimeoVideo(this);
|
|
82
|
+
openModal(this);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
112
85
|
|
|
113
|
-
|
|
114
|
-
|
|
86
|
+
closeButton?.addEventListener('click', () => {
|
|
87
|
+
closeModal(this);
|
|
115
88
|
|
|
116
|
-
|
|
117
|
-
|
|
89
|
+
if(this.hasAttribute('data-youtube')){
|
|
90
|
+
const youtubeId = this.getAttribute('data-youtube');
|
|
118
91
|
|
|
119
|
-
|
|
92
|
+
if (window.player[youtubeId] && typeof window.player[youtubeId].pauseVideo == 'function') {
|
|
93
|
+
window.player[youtubeId].pauseVideo();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if(this.hasAttribute('data-vimeo')) {
|
|
97
|
+
|
|
120
98
|
embed.innerHTML = ``; // Remove the video since we cant pause it
|
|
121
99
|
|
|
122
100
|
const customEvent = new CustomEvent('close-video', {
|
|
123
|
-
detail: { 'Video Type': 'Vimeo', ID:
|
|
101
|
+
detail: { 'Video Type': 'Vimeo', ID: this.getAttribute('data-vimeo') },
|
|
124
102
|
});
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
103
|
+
this.dispatchEvent(customEvent);
|
|
104
|
+
window.dataLayer.push(customEvent.detail);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
128
107
|
|
|
129
108
|
trackComponent(cardComponent, 'iam-video-card', ['play-video', 'close-video']);
|
|
130
109
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { trackComponent, trackComponentRegistered } from '../_global';
|
|
2
|
-
import { loadYouTubeScripts, createYoutTubeVideo } from '../../modules/videos';
|
|
2
|
+
import { videoHTML, loadYouTubeScripts, createYoutTubeVideo,openYoutubeVideo,openVimeoVideo } from '../../modules/videos';
|
|
3
3
|
import { openModal,closeModal,closeButtonHtml } from '../../modules/modal';
|
|
4
4
|
|
|
5
5
|
trackComponentRegistered('iam-video-modal');
|
|
@@ -26,74 +26,22 @@ class iamVideoCard extends HTMLElement {
|
|
|
26
26
|
|
|
27
27
|
<dialog>
|
|
28
28
|
${closeButtonHtml}
|
|
29
|
-
|
|
29
|
+
${videoHTML}
|
|
30
30
|
</dialog>
|
|
31
31
|
`;
|
|
32
32
|
|
|
33
33
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
openYoutubeVideo = async (id, component):void => {
|
|
37
|
-
|
|
38
|
-
const embed = component.querySelector('.embed');
|
|
39
|
-
|
|
40
|
-
openModal(id, component);
|
|
41
|
-
|
|
42
|
-
const youtubeId = component.getAttribute('data-youtube');
|
|
43
|
-
let loaded;
|
|
44
|
-
if (!document.body.classList.contains('youtubeLoaded')) {
|
|
45
|
-
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
47
|
-
loaded = await loadYouTubeScripts();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const customEvent = new CustomEvent('play-video', {
|
|
51
|
-
detail: { 'Video Type': 'YoutTube', ID: youtubeId },
|
|
52
|
-
});
|
|
53
|
-
component.dispatchEvent(customEvent);
|
|
54
|
-
|
|
55
|
-
const interval = setInterval(():void => {
|
|
56
|
-
|
|
57
|
-
if(typeof YT != "undefined"){
|
|
58
|
-
clearInterval(interval);
|
|
59
|
-
createYoutTubeVideo(embed, youtubeId);
|
|
60
|
-
}
|
|
61
|
-
}, 200);
|
|
62
|
-
// Limit the number of calls
|
|
63
|
-
setTimeout(function() {
|
|
64
|
-
clearInterval(interval)
|
|
65
|
-
}, 2000);
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
openVimeoVideo = async (id, component):void => {
|
|
70
|
-
|
|
71
|
-
const embed = component.querySelector('.embed');
|
|
72
|
-
|
|
73
|
-
openModal(id, component);
|
|
74
|
-
|
|
75
|
-
const vimeoId = component.getAttribute('data-vimeo');
|
|
76
|
-
|
|
77
|
-
const customEvent = new CustomEvent('play-video', {
|
|
78
|
-
detail: { 'Video Type': 'Vimeo', ID: vimeoId },
|
|
79
|
-
});
|
|
80
|
-
component.dispatchEvent(customEvent);
|
|
81
|
-
window.dataLayer.push(customEvent.detail);
|
|
82
|
-
|
|
83
|
-
if (!embed.querySelector('iframe'))
|
|
84
|
-
embed.innerHTML = `<iframe src="https://player.vimeo.com/video/${vimeoId}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`;
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
36
|
async connectedCallback(): void {
|
|
89
37
|
|
|
90
38
|
const id = this.getAttribute('id');
|
|
91
39
|
const closeButton = this.shadowRoot?.querySelector('[data-close]');
|
|
92
40
|
|
|
93
|
-
this.innerHTML = `<div class="embed"></div
|
|
41
|
+
this.innerHTML = `<div class="embed" slot="video"></div>`;
|
|
94
42
|
const embed = this.querySelector('.embed');
|
|
95
43
|
|
|
96
|
-
document.addEventListener('click',
|
|
44
|
+
document.addEventListener('click', (e) => {
|
|
97
45
|
|
|
98
46
|
if(e.target.closest(`[command="show-modal"][commandfor="${id}"]`)){
|
|
99
47
|
|
|
@@ -102,16 +50,19 @@ class iamVideoCard extends HTMLElement {
|
|
|
102
50
|
if(this.hasAttribute('data-youtube')){
|
|
103
51
|
const youtubeId = this.getAttribute('data-youtube');
|
|
104
52
|
embed?.setAttribute('id',youtubeId);
|
|
105
|
-
|
|
53
|
+
openYoutubeVideo(this);
|
|
54
|
+
openModal(this);
|
|
106
55
|
}
|
|
107
56
|
else if(this.hasAttribute('data-vimeo')) {
|
|
108
|
-
|
|
57
|
+
openVimeoVideo(this);
|
|
58
|
+
openModal(this);
|
|
109
59
|
}
|
|
110
60
|
}
|
|
111
61
|
});
|
|
62
|
+
|
|
112
63
|
|
|
113
64
|
closeButton?.addEventListener('click', () => {
|
|
114
|
-
closeModal(
|
|
65
|
+
closeModal(this);
|
|
115
66
|
|
|
116
67
|
if(this.hasAttribute('data-youtube')){
|
|
117
68
|
const youtubeId = this.getAttribute('data-youtube');
|
|
@@ -24,13 +24,6 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
|
|
|
24
24
|
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
-
displayInputField.addEventListener('keyup', function () {
|
|
28
|
-
|
|
29
|
-
if(displayInputField.value != ""){
|
|
30
|
-
displayInputField.setAttribute('data-value', displayInputField.value);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
27
|
displayInputField.addEventListener('blur', function () {
|
|
35
28
|
if (displayInputField.hasAttribute('data-value')) {
|
|
36
29
|
displayInputField.value = displayInputField.getAttribute('data-value');
|
|
@@ -46,9 +39,20 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
|
|
|
46
39
|
|
|
47
40
|
datalist.addEventListener('click', function (event) {
|
|
48
41
|
if (event && event.target instanceof HTMLElement && event.target.closest('option')) {
|
|
49
|
-
const option = event.target.closest('option');
|
|
42
|
+
const option = event.target.closest('option') as HTMLOptionElement;
|
|
43
|
+
const optionText = option.textContent?.trim() || option.value;
|
|
44
|
+
|
|
45
|
+
// Store actual value on the original input
|
|
46
|
+
const originalInput = advancedSelect.querySelector('input[type="hidden"]') as HTMLInputElement | null;
|
|
47
|
+
if (originalInput) {
|
|
48
|
+
originalInput.value = option.value;
|
|
49
|
+
originalInput.setAttribute('value', option.value);
|
|
50
|
+
}
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
// Show label text in the visible field
|
|
53
|
+
displayInputField.value = optionText;
|
|
54
|
+
displayInputField.setAttribute('data-value', optionText);
|
|
55
|
+
displayInputField.setAttribute('placeholder', optionText);
|
|
52
56
|
|
|
53
57
|
if (typeof window.triggerDynamicEvent == 'function') window.triggerDynamicEvent(displayInputField);
|
|
54
58
|
|
|
@@ -60,7 +64,10 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
|
|
|
60
64
|
|
|
61
65
|
setTimeout(() => {
|
|
62
66
|
advancedSelect.dispatchEvent(new CustomEvent('update-value', {
|
|
63
|
-
detail: {
|
|
67
|
+
detail: {
|
|
68
|
+
value: option.value,
|
|
69
|
+
text: optionText,
|
|
70
|
+
},
|
|
64
71
|
}));
|
|
65
72
|
}, 0);
|
|
66
73
|
}
|
|
@@ -70,19 +77,21 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
|
|
|
70
77
|
displayInputField.removeAttribute('data-value');
|
|
71
78
|
currentFocus = -1;
|
|
72
79
|
|
|
73
|
-
if(advancedSelect.tagName != "IAM-ADDRESS-LOOKUP"){
|
|
80
|
+
if (advancedSelect.tagName != "IAM-ADDRESS-LOOKUP") {
|
|
74
81
|
const text = displayInputField.value.toUpperCase();
|
|
82
|
+
|
|
75
83
|
for (const option of datalist.options) {
|
|
76
|
-
|
|
84
|
+
const optionText = (option.textContent || option.value).toUpperCase();
|
|
85
|
+
|
|
86
|
+
if (optionText.indexOf(text) > -1) {
|
|
77
87
|
option.style.display = 'block';
|
|
78
88
|
option.classList.remove('hide');
|
|
79
89
|
} else {
|
|
80
90
|
option.style.display = 'none';
|
|
81
91
|
option.classList.add('hide');
|
|
82
92
|
}
|
|
83
|
-
}
|
|
93
|
+
}
|
|
84
94
|
}
|
|
85
|
-
|
|
86
95
|
});
|
|
87
96
|
|
|
88
97
|
advancedSelect.addEventListener('keydown', function (e) {
|
|
@@ -127,6 +136,12 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
|
|
|
127
136
|
|
|
128
137
|
|
|
129
138
|
const emptyField = (): void => {
|
|
139
|
+
const originalInput = advancedSelect.querySelector('input[type="hidden"]') as HTMLInputElement | null;
|
|
140
|
+
|
|
141
|
+
if (originalInput) {
|
|
142
|
+
originalInput.value = '';
|
|
143
|
+
originalInput.setAttribute('value', '');
|
|
144
|
+
}
|
|
130
145
|
|
|
131
146
|
displayInputField.removeAttribute('placeholder');
|
|
132
147
|
|
|
@@ -139,15 +154,21 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
|
|
|
139
154
|
|
|
140
155
|
for (const optionInner of datalist.options) {
|
|
141
156
|
optionInner.classList.remove('active');
|
|
157
|
+
optionInner.classList.remove('hide');
|
|
142
158
|
optionInner.removeAttribute('style');
|
|
143
159
|
}
|
|
144
160
|
|
|
145
161
|
const updateEvent = new CustomEvent('close-button-pressed');
|
|
146
162
|
advancedSelect.dispatchEvent(updateEvent);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
163
|
|
|
164
|
+
// Notify consumers the value was cleared
|
|
165
|
+
advancedSelect.dispatchEvent(new CustomEvent('update-value', {
|
|
166
|
+
detail: {
|
|
167
|
+
value: '',
|
|
168
|
+
text: '',
|
|
169
|
+
},
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
151
172
|
|
|
152
173
|
const closeBtn = advancedSelect.querySelector('.empty') ? advancedSelect.querySelector('.empty') : advancedSelect.shadowRoot.querySelector('.empty');
|
|
153
174
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export const openModal = (
|
|
1
|
+
export const openModal = (modal): void => {
|
|
2
2
|
|
|
3
3
|
const dialog = modal.shadowRoot?.querySelector('dialog');
|
|
4
|
+
const id = modal.hasAttribute('id') ? modal.getAttribute('id') : 'unknown';
|
|
4
5
|
|
|
5
6
|
dialog?.showModal();
|
|
6
7
|
dialog?.focus();
|
|
@@ -20,9 +21,10 @@ export const openModal = (id, modal): void => {
|
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
export const closeModal = (
|
|
24
|
+
export const closeModal = (modal): void => {
|
|
24
25
|
|
|
25
26
|
const dialog = modal.shadowRoot?.querySelector('dialog');
|
|
27
|
+
const id = modal.hasAttribute('id') ? modal.getAttribute('id') : 'unknown';
|
|
26
28
|
|
|
27
29
|
dialog?.close();
|
|
28
30
|
|
|
@@ -101,6 +101,14 @@ const videoSupport = async (body): void => {
|
|
|
101
101
|
});
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
+
export const videoHTML = `<div class="video-wrapper">
|
|
105
|
+
<slot name="video"></slot>
|
|
106
|
+
<picture>
|
|
107
|
+
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="" lazy="" />
|
|
108
|
+
</picture>
|
|
109
|
+
<button class="btn btn-compact fa-play m-0 colour-success">Play</button>
|
|
110
|
+
</div>`;
|
|
111
|
+
|
|
104
112
|
export const loadYouTubeScripts = async (): any => {
|
|
105
113
|
return new Promise((resolve, reject) => {
|
|
106
114
|
const image = new Image();
|
|
@@ -133,6 +141,9 @@ export const createYoutTubeVideo = async (target, video_id): void | boolean => {
|
|
|
133
141
|
return false;
|
|
134
142
|
}
|
|
135
143
|
|
|
144
|
+
console.log('hi2');
|
|
145
|
+
|
|
146
|
+
|
|
136
147
|
// This function creates an <iframe> (and YouTube player) after the API code downloads.
|
|
137
148
|
//function onYouTubeIframeAPIReady() {
|
|
138
149
|
|
|
@@ -173,4 +184,50 @@ export const createYoutTubeVideo = async (target, video_id): void | boolean => {
|
|
|
173
184
|
}
|
|
174
185
|
};
|
|
175
186
|
|
|
187
|
+
export const openYoutubeVideo = async (component):void => {
|
|
188
|
+
|
|
189
|
+
const embed = component.shadowRoot.querySelector('.embed');
|
|
190
|
+
const youtubeId = component.getAttribute('data-youtube');
|
|
191
|
+
|
|
192
|
+
let loaded;
|
|
193
|
+
if (!document.body.classList.contains('youtubeLoaded')) {
|
|
194
|
+
|
|
195
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
196
|
+
loaded = await loadYouTubeScripts();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const customEvent = new CustomEvent('play-video', {
|
|
200
|
+
detail: { 'Video Type': 'YoutTube', ID: youtubeId },
|
|
201
|
+
});
|
|
202
|
+
component.dispatchEvent(customEvent);
|
|
203
|
+
|
|
204
|
+
const interval = setInterval(():void => {
|
|
205
|
+
|
|
206
|
+
if(typeof YT != "undefined"){
|
|
207
|
+
clearInterval(interval);
|
|
208
|
+
createYoutTubeVideo(embed, youtubeId);
|
|
209
|
+
}
|
|
210
|
+
}, 200);
|
|
211
|
+
// Limit the number of calls
|
|
212
|
+
setTimeout(function() {
|
|
213
|
+
clearInterval(interval)
|
|
214
|
+
}, 2000);
|
|
215
|
+
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export const openVimeoVideo = async (component):void => {
|
|
219
|
+
|
|
220
|
+
const embed = component.querySelector('.embed');
|
|
221
|
+
const vimeoId = component.getAttribute('data-vimeo');
|
|
222
|
+
|
|
223
|
+
const customEvent = new CustomEvent('play-video', {
|
|
224
|
+
detail: { 'Video Type': 'Vimeo', ID: vimeoId },
|
|
225
|
+
});
|
|
226
|
+
component.dispatchEvent(customEvent);
|
|
227
|
+
window.dataLayer.push(customEvent.detail);
|
|
228
|
+
|
|
229
|
+
if (!embed.querySelector('iframe'))
|
|
230
|
+
embed.innerHTML = `<iframe src="https://player.vimeo.com/video/${vimeoId}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`;
|
|
231
|
+
}
|
|
232
|
+
|
|
176
233
|
export default videoSupport;
|