@iamproperty/components 5.7.1-beta6 → 6.1.0--beta
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/bootstrap/README.md +8 -7
- package/assets/bootstrap/js/index.esm.js +19 -0
- package/assets/bootstrap/js/index.umd.js +34 -0
- package/assets/bootstrap/js/src/alert.js +1 -1
- package/assets/bootstrap/js/src/base-component.js +2 -2
- package/assets/bootstrap/js/src/button.js +1 -1
- package/assets/bootstrap/js/src/carousel.js +1 -1
- package/assets/bootstrap/js/src/collapse.js +1 -1
- package/assets/bootstrap/js/src/dom/data.js +1 -1
- package/assets/bootstrap/js/src/dom/event-handler.js +1 -1
- package/assets/bootstrap/js/src/dom/manipulator.js +1 -1
- package/assets/bootstrap/js/src/dom/selector-engine.js +1 -1
- package/assets/bootstrap/js/src/dropdown.js +3 -12
- package/assets/bootstrap/js/src/modal.js +13 -17
- package/assets/bootstrap/js/src/offcanvas.js +1 -1
- package/assets/bootstrap/js/src/popover.js +1 -1
- package/assets/bootstrap/js/src/scrollspy.js +10 -14
- package/assets/bootstrap/js/src/tab.js +4 -2
- package/assets/bootstrap/js/src/toast.js +4 -9
- package/assets/bootstrap/js/src/tooltip.js +50 -32
- package/assets/bootstrap/js/src/util/backdrop.js +1 -1
- package/assets/bootstrap/js/src/util/component-functions.js +1 -1
- package/assets/bootstrap/js/src/util/config.js +1 -1
- package/assets/bootstrap/js/src/util/focustrap.js +1 -1
- package/assets/bootstrap/js/src/util/index.js +1 -1
- package/assets/bootstrap/js/src/util/sanitizer.js +1 -1
- package/assets/bootstrap/js/src/util/scrollbar.js +1 -1
- package/assets/bootstrap/js/src/util/swipe.js +1 -1
- package/assets/bootstrap/js/src/util/template-factory.js +1 -1
- package/assets/bootstrap/package.json +27 -28
- package/assets/bootstrap/scss/_accordion.scss +4 -7
- package/assets/bootstrap/scss/_button-group.scss +1 -1
- package/assets/bootstrap/scss/_buttons.scss +7 -28
- package/assets/bootstrap/scss/_carousel.scss +3 -0
- package/assets/bootstrap/scss/_dropdown.scss +1 -2
- package/assets/bootstrap/scss/_functions.scss +2 -2
- package/assets/bootstrap/scss/_list-group.scss +5 -6
- package/assets/bootstrap/scss/_modal.scss +1 -1
- package/assets/bootstrap/scss/_nav.scss +2 -2
- package/assets/bootstrap/scss/_navbar.scss +0 -2
- package/assets/bootstrap/scss/_offcanvas.scss +4 -5
- package/assets/bootstrap/scss/_pagination.scss +1 -1
- package/assets/bootstrap/scss/_popover.scss +5 -5
- package/assets/bootstrap/scss/_toasts.scss +2 -5
- package/assets/bootstrap/scss/_variables-dark.scss +87 -0
- package/assets/bootstrap/scss/_variables.scss +17 -18
- package/assets/bootstrap/scss/bootstrap-utilities.scss +0 -3
- package/assets/bootstrap/scss/forms/_floating-labels.scss +0 -1
- package/assets/bootstrap/scss/forms/_input-group.scss +4 -7
- package/assets/bootstrap/scss/helpers/_focus-ring.scss +5 -0
- package/assets/bootstrap/scss/helpers/_icon-link.scss +25 -0
- package/assets/bootstrap/scss/mixins/_banner.scss +2 -2
- package/assets/bootstrap/scss/mixins/_color-mode.scss +21 -0
- package/assets/bootstrap/scss/mixins/_forms.scss +10 -10
- package/assets/bootstrap/scss/mixins/_table-variants.scss +2 -2
- package/assets/bootstrap/scss/mixins/_utilities.scss +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/card.component.css +1 -0
- package/assets/css/components/card.component.css.map +1 -0
- package/assets/css/components/card.module.css +1 -0
- package/assets/css/components/card.module.css.map +1 -0
- package/assets/css/components/charts.config.css +1 -1
- package/assets/css/components/charts.config.css.map +1 -1
- package/assets/css/components/charts.css +1 -1
- package/assets/css/components/charts.css.map +1 -1
- package/assets/css/components/charts.module.css +1 -1
- package/assets/css/components/charts.module.css.map +1 -1
- package/assets/css/components/filter-card.component.css +1 -0
- package/assets/css/components/filter-card.component.css.map +1 -0
- package/assets/css/components/multiselect.preload.css +1 -1
- package/assets/css/components/multiselect.preload.css.map +1 -1
- package/assets/css/components/record-card.component.css +1 -0
- package/assets/css/components/record-card.component.css.map +1 -0
- package/assets/css/components/timeline.css +1 -1
- package/assets/css/components/timeline.css.map +1 -1
- package/assets/css/components/video-card.component.css +1 -0
- package/assets/css/components/video-card.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/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/js/components/_global.js +32 -0
- package/assets/js/components/accordion/accordion.component.min.js +1 -1
- package/assets/js/components/actionbar/actionbar.component.min.js +5 -5
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
- package/assets/js/components/barchart/barchart.component.js +8 -7
- package/assets/js/components/barchart/barchart.component.min.js +6 -4
- package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
- package/assets/js/components/card/card.component.js +92 -154
- package/assets/js/components/card/card.component.min.js +26 -31
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.min.js +1 -1
- 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/collapsible-side/collapsible-side.component.min.js.map +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
- package/assets/js/components/filter-card/filter-card.component.js +71 -0
- package/assets/js/components/filter-card/filter-card.component.min.js +27 -0
- package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -0
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js.map +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
- package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.min.js +1 -1
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.min.js +1 -1
- package/assets/js/components/notification/notification.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
- package/assets/js/components/record-card/record-card.component.js +69 -0
- package/assets/js/components/record-card/record-card.component.min.js +27 -0
- package/assets/js/components/record-card/record-card.component.min.js.map +1 -0
- package/assets/js/components/search/search.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.min.js +2 -2
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +1 -1
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/components/video-card/video-card.component.js +176 -0
- package/assets/js/components/video-card/video-card.component.min.js +30 -0
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -0
- package/assets/js/components.bundle.js +5 -0
- package/assets/js/components.bundle.js.map +1 -0
- package/assets/js/components.js +30 -0
- package/assets/js/modules/card.module.js +33 -0
- package/assets/js/modules/chart.js +2 -2
- package/assets/js/modules/chart.module.js +25 -60
- package/assets/js/modules/dialogs.js +0 -6
- package/assets/js/modules/table.js +1 -1
- package/assets/js/scripts.bundle.js +3 -194
- 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/js/scripts.js +17 -0
- package/assets/js/tests/chart.spec.js +57 -0
- package/assets/js/tests/filterlist.spec.js +1 -1
- package/assets/sass/_components.scss +81 -1
- package/assets/sass/_corefiles.scss +4 -10
- package/assets/sass/_elements.scss +2 -0
- package/assets/sass/components/card.component.scss +229 -0
- package/assets/sass/components/card.module.scss +154 -0
- package/assets/sass/components/charts.config.scss +3 -0
- package/assets/sass/components/charts.module.scss +18 -7
- package/assets/sass/components/filter-card.component.scss +106 -0
- package/assets/sass/components/multiselect.preload.scss +7 -0
- package/assets/sass/components/record-card.component.scss +204 -0
- package/assets/sass/components/video-card.component.scss +80 -0
- package/assets/sass/components.reset.scss +5 -43
- package/assets/sass/elements/badge-tag.scss +5 -1
- package/assets/sass/elements/buttons.scss +3 -0
- package/assets/sass/elements/dialog.scss +2 -744
- package/assets/sass/elements/forms.scss +5 -0
- package/assets/sass/elements/media.scss +0 -38
- package/assets/sass/elements/modal.scss +553 -0
- package/assets/sass/elements/popover.scss +207 -0
- package/assets/sass/foundations/reboot.scss +2 -2
- package/assets/sass/foundations/root.scss +0 -1
- package/assets/ts/components/_global.ts +40 -0
- package/assets/ts/components/barchart/barchart.component.ts +9 -17
- package/assets/ts/components/card/card.component.ts +94 -192
- package/assets/ts/components/filter-card/filter-card.component.ts +81 -0
- package/assets/ts/components/record-card/record-card.component.ts +82 -0
- package/assets/ts/components/video-card/video-card.component.ts +227 -0
- package/assets/ts/components.ts +38 -0
- package/assets/ts/modules/card.module.ts +43 -0
- package/assets/ts/modules/chart.module.ts +25 -74
- package/assets/ts/modules/dialogs.ts +0 -8
- package/assets/ts/modules/table.ts +1 -1
- package/assets/ts/scripts.ts +22 -0
- package/assets/ts/tests/chart.spec.ts +77 -0
- package/assets/ts/tests/filterlist.spec.ts +1 -1
- package/dist/components.es.js +201 -201
- package/dist/components.umd.js +76 -81
- package/package.json +8 -7
- package/src/components/BarChart/BarChart.vue +2 -2
- package/src/components/FilterCard/FilterCard.vue +25 -0
- package/src/components/RecordCard/RecordCard.vue +25 -0
- package/src/components/VideoCard/VideoCard.vue +25 -0
- package/assets/css/components/card.css +0 -1
- package/assets/css/components/card.css.map +0 -1
- package/assets/css/components/card.global.css +0 -1
- package/assets/css/components/card.global.css.map +0 -1
- package/assets/css/components/card.preload.css +0 -1
- package/assets/css/components/card.preload.css.map +0 -1
- package/assets/js/bundle.js +0 -74
- package/assets/js/dynamic.js +0 -80
- package/assets/js/dynamic.min.js +0 -18
- package/assets/js/dynamic.min.js.map +0 -1
- package/assets/js/flat-components.js +0 -84
- package/assets/js/modules/youtubevideo.js +0 -106
- package/assets/sass/components/card.global.scss +0 -102
- package/assets/sass/components/card.preload.scss +0 -8
- package/assets/sass/components/card.scss +0 -606
- package/assets/ts/bundle.ts +0 -94
- package/assets/ts/components/barchart/README.md +0 -37
- package/assets/ts/components/card/README.md +0 -39
- package/assets/ts/dynamic.ts +0 -107
- package/assets/ts/flat-components.ts +0 -106
- package/assets/ts/modules/youtubevideo.ts +0 -141
- package/src/foundations/YoutubeVideo/README.md +0 -11
- package/src/foundations/YoutubeVideo/YoutubeVideo.vue +0 -24
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import {trackComponent, trackComponentRegistered} from "../_global";
|
|
3
|
+
import {cardHTML,setupCard} from "../../modules/card.module";
|
|
4
|
+
|
|
5
|
+
trackComponentRegistered("iam-video-card");
|
|
6
|
+
|
|
7
|
+
class iamVideoCard extends HTMLElement {
|
|
8
|
+
|
|
9
|
+
constructor(){
|
|
10
|
+
super();
|
|
11
|
+
this.attachShadow({ mode: 'open'});
|
|
12
|
+
|
|
13
|
+
const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
|
|
14
|
+
const loadCSS = `@import "${assetLocation}/css/components/video-card.component.css";`;
|
|
15
|
+
|
|
16
|
+
const template = document.createElement('template');
|
|
17
|
+
template.innerHTML = `
|
|
18
|
+
<style>
|
|
19
|
+
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
20
|
+
|
|
21
|
+
${loadCSS}
|
|
22
|
+
</style>
|
|
23
|
+
${cardHTML}
|
|
24
|
+
<dialog>
|
|
25
|
+
<div class="embed"></div>
|
|
26
|
+
</dialog>
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async connectedCallback() {
|
|
33
|
+
|
|
34
|
+
const cardComponent = this;
|
|
35
|
+
const cardHead = cardComponent.shadowRoot.querySelector('.card__head');
|
|
36
|
+
|
|
37
|
+
const randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
|
|
38
|
+
const link_id = randLetter + Date.now();
|
|
39
|
+
|
|
40
|
+
let dialog;
|
|
41
|
+
let embed;
|
|
42
|
+
|
|
43
|
+
setupCard(cardComponent);
|
|
44
|
+
|
|
45
|
+
// Check if youtube or vimeo video link is present
|
|
46
|
+
if(cardComponent.querySelector('[data-youtube]'))
|
|
47
|
+
cardComponent.setAttribute('data-youtube',cardComponent.querySelector('[data-youtube]').getAttribute('data-youtube'));
|
|
48
|
+
|
|
49
|
+
if(cardComponent.querySelector('[data-vimeo]'))
|
|
50
|
+
cardComponent.setAttribute('data-vimeo',cardComponent.querySelector('[data-vimeo]').getAttribute('data-vimeo'));
|
|
51
|
+
|
|
52
|
+
// General dialog stuff
|
|
53
|
+
if(cardComponent.hasAttribute('data-youtube') || cardComponent.hasAttribute('data-vimeo')){
|
|
54
|
+
|
|
55
|
+
cardHead.setAttribute('tabindex','0');
|
|
56
|
+
|
|
57
|
+
// Add dialog to page
|
|
58
|
+
if(!document.getElementById(`${link_id}-dialog`)){
|
|
59
|
+
document.body.insertAdjacentHTML('beforeend', `<dialog id="${link_id}-dialog"><div class="embed" id="${link_id}"></div></dialog>`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
dialog = document.getElementById(`${link_id}-dialog`);
|
|
63
|
+
embed = document.getElementById(link_id);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Youtube
|
|
67
|
+
if(cardComponent.hasAttribute('data-youtube')){
|
|
68
|
+
|
|
69
|
+
// Load the scripts only once
|
|
70
|
+
if(!document.body.classList.contains('youtubeLoaded')){
|
|
71
|
+
let loaded = await this.loadYouTubeScripts();
|
|
72
|
+
}
|
|
73
|
+
cardHead.addEventListener('click',function(){
|
|
74
|
+
|
|
75
|
+
const customEvent = new CustomEvent("play-video", { detail: { 'Video Type': 'YoutTube', 'ID': cardComponent.getAttribute('data-youtube') } });
|
|
76
|
+
cardComponent.dispatchEvent(customEvent);
|
|
77
|
+
|
|
78
|
+
cardComponent.createYoutTubeVideo(embed);
|
|
79
|
+
dialog.showModal();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
dialog.addEventListener("close", (event) => {
|
|
83
|
+
|
|
84
|
+
if(window.player[embed.getAttribute('id')] && typeof window.player[embed.getAttribute('id')].pauseVideo == "function"){
|
|
85
|
+
|
|
86
|
+
window.player[embed.getAttribute('id')].pauseVideo();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
const customEvent = new CustomEvent("close-video", { detail: { 'Video Type': 'YoutTube', 'ID': cardComponent.getAttribute('data-youtube') } });
|
|
91
|
+
cardComponent.dispatchEvent(customEvent);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
else if(cardComponent.hasAttribute('data-vimeo')){ // Vimeo
|
|
96
|
+
|
|
97
|
+
cardHead.addEventListener('click',function(){
|
|
98
|
+
|
|
99
|
+
const videoId = cardComponent.getAttribute('data-vimeo');
|
|
100
|
+
|
|
101
|
+
const customEvent = new CustomEvent("play-video", { detail: { 'Video Type': 'Vimeo', 'ID': videoId } });
|
|
102
|
+
cardComponent.dispatchEvent(customEvent);
|
|
103
|
+
|
|
104
|
+
if(!embed.querySelector('iframe'))
|
|
105
|
+
embed.innerHTML = `<iframe src="https://player.vimeo.com/video/${videoId}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`
|
|
106
|
+
|
|
107
|
+
dialog.showModal();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
dialog.addEventListener("close", (event) => {
|
|
111
|
+
|
|
112
|
+
embed.innerHTML = ``; // Remove the video since we cant pause it
|
|
113
|
+
|
|
114
|
+
const customEvent = new CustomEvent("close-video", { detail: { 'Video Type': 'Vimeo', 'ID': cardComponent.getAttribute('data-vimeo') } });
|
|
115
|
+
cardComponent.dispatchEvent(customEvent);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
trackComponent(cardComponent,"iam-video-card",['play-video','close-video']);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
loadYouTubeScripts(){
|
|
123
|
+
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
|
|
126
|
+
const image = new Image();
|
|
127
|
+
image.onload = function(){
|
|
128
|
+
|
|
129
|
+
// This code loads the IFrame Player API code asynchronously.
|
|
130
|
+
var tag = document.createElement('script');
|
|
131
|
+
tag.src = "https://www.youtube.com/iframe_api";
|
|
132
|
+
var firstScriptTag = document.getElementsByTagName('script')[0];
|
|
133
|
+
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
|
|
134
|
+
document.body.classList.add('youtubeLoaded');
|
|
135
|
+
resolve(true);
|
|
136
|
+
};
|
|
137
|
+
image.onerror = function(){
|
|
138
|
+
reject(false);
|
|
139
|
+
};
|
|
140
|
+
image.src = "https://youtube.com/favicon.ico";
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
createYoutTubeVideo(target){
|
|
146
|
+
|
|
147
|
+
if(typeof window.player == "undefined"){
|
|
148
|
+
window.player = [];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
var link_id = target.getAttribute('id');
|
|
152
|
+
var video_id = this.getAttribute('data-youtube');
|
|
153
|
+
|
|
154
|
+
console.log(window.player)
|
|
155
|
+
|
|
156
|
+
if(typeof window.player[link_id] != 'undefined' && typeof window.player[link_id].pauseVideo == "function"){
|
|
157
|
+
|
|
158
|
+
window.player[link_id].playVideo();
|
|
159
|
+
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// This function creates an <iframe> (and YouTube player) after the API code downloads.
|
|
164
|
+
//function onYouTubeIframeAPIReady() {
|
|
165
|
+
|
|
166
|
+
window.player[link_id] = new YT.Player(link_id, {
|
|
167
|
+
height: '100%',
|
|
168
|
+
width: '100%',
|
|
169
|
+
videoId: video_id,
|
|
170
|
+
playerVars: {
|
|
171
|
+
'modestbranding': 1,
|
|
172
|
+
'playsinline': 1,
|
|
173
|
+
'rel': 0,
|
|
174
|
+
'showinfo': 0
|
|
175
|
+
},
|
|
176
|
+
events: {
|
|
177
|
+
'onReady': onPlayerReady,
|
|
178
|
+
'onStateChange': onPlayerStateChange
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
//}
|
|
182
|
+
//onYouTubeIframeAPIReady();
|
|
183
|
+
|
|
184
|
+
// The API will call this function when the video player is ready.
|
|
185
|
+
function onPlayerReady(event) {
|
|
186
|
+
// Play the video straight away
|
|
187
|
+
event.target.playVideo();
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// The API calls this function when the player's state changes.
|
|
191
|
+
// The function indicates that when playing a video (state=1)
|
|
192
|
+
var done = false;
|
|
193
|
+
function onPlayerStateChange(event) {
|
|
194
|
+
|
|
195
|
+
if (event.data == YT.PlayerState.PLAYING && !done) {
|
|
196
|
+
|
|
197
|
+
var link = document.getElementById(link_id);
|
|
198
|
+
link.classList.add('player-ready');
|
|
199
|
+
|
|
200
|
+
done = true;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
static get observedAttributes() {
|
|
206
|
+
return ["data-image"];
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
attributeChangedCallback(attrName, oldVal, newVal) {
|
|
210
|
+
switch (attrName) {
|
|
211
|
+
case "data-image": {
|
|
212
|
+
|
|
213
|
+
if(oldVal != newVal){
|
|
214
|
+
|
|
215
|
+
const cardHeadImg = this.shadowRoot.querySelector('.card__head img');
|
|
216
|
+
|
|
217
|
+
if(cardHeadImg)
|
|
218
|
+
cardHeadImg.setAttribute('src',newVal);
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export default iamVideoCard;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
const components = ["accordion","header","table","tabs",'card','filter-card','video-card','record-card',"filterlist",'applied-filters','pagination','notification','actionbar','nav','collapsible-side','address-lookup','fileupload','search','inline-edit','multiselect','slider','carousel','marketing','barchart'];
|
|
3
|
+
|
|
4
|
+
const prefix = "iam"
|
|
5
|
+
const options = {
|
|
6
|
+
rootMargin: '50px',
|
|
7
|
+
threshold: 0.1
|
|
8
|
+
}
|
|
9
|
+
const componentExt = ".component.min.js";
|
|
10
|
+
|
|
11
|
+
// Load components - Each component will load once the first of its type has been loaded
|
|
12
|
+
components.forEach((component) => {
|
|
13
|
+
|
|
14
|
+
if(document.getElementsByTagName(`${prefix}-${component}`).length === 0)
|
|
15
|
+
return;
|
|
16
|
+
|
|
17
|
+
let callback = (entries:any) => {
|
|
18
|
+
entries.forEach((entry:any) => {
|
|
19
|
+
|
|
20
|
+
if(entry.intersectionRatio > 0){
|
|
21
|
+
|
|
22
|
+
console.log(component)
|
|
23
|
+
|
|
24
|
+
import(`./components/${component}/${component}${componentExt}`).then(module => {
|
|
25
|
+
if (!window.customElements.get(`${prefix}-${component}`))
|
|
26
|
+
window.customElements.define(`${prefix}-${component}`, module.default);
|
|
27
|
+
}).catch((err) => {
|
|
28
|
+
console.log(err.message);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
intObserver.unobserve(entry.target);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const intObserver = new IntersectionObserver(callback, options);
|
|
37
|
+
intObserver.observe(document.getElementsByTagName(`${prefix}-${component}`)[0]);
|
|
38
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const cardHTML = `<div class="card__head" part="head">
|
|
2
|
+
<slot name="head"></slot>
|
|
3
|
+
</div>
|
|
4
|
+
<div class="card__badges"><slot name="badges"></slot></div>
|
|
5
|
+
<slot name="checkbox" class="activate-prevent-hover"></slot>
|
|
6
|
+
<div class="card__body" part="body">
|
|
7
|
+
<slot></slot>
|
|
8
|
+
<slot name="secondary" part="secondary"></slot>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="card__details" part="details">
|
|
11
|
+
<slot name="details"></slot>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="card__footer" part="footer">
|
|
14
|
+
<slot name="footer"></slot>
|
|
15
|
+
</div>`;
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
export const setupCard = (cardComponent:any) => {
|
|
19
|
+
|
|
20
|
+
cardComponent.classList.add('card');
|
|
21
|
+
const cardHead = cardComponent.shadowRoot.querySelector('.card__head');
|
|
22
|
+
const cardBody = cardComponent.shadowRoot.querySelector('.card__body');
|
|
23
|
+
|
|
24
|
+
if(cardComponent.hasAttribute('data-image')){
|
|
25
|
+
|
|
26
|
+
cardHead.innerHTML += `<img src="${cardComponent.getAttribute('data-image')}" alt="" loading="lazy" part="image" />`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// Inset the HTML for the data total or icon fallback
|
|
31
|
+
if(cardComponent.hasAttribute('data-total')){
|
|
32
|
+
|
|
33
|
+
cardBody.insertAdjacentHTML('beforeend', `<div class="card__total">${cardComponent.getAttribute('data-total')}</div>`);
|
|
34
|
+
}
|
|
35
|
+
else if(cardComponent.querySelector('[slot="total-icon"]')){
|
|
36
|
+
|
|
37
|
+
cardBody.insertAdjacentHTML('beforeend', `<div class="card__total"><slot name="total-icon"></slot></div>`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if(!cardComponent.querySelector('[slot="badges"]')){
|
|
41
|
+
cardComponent.shadowRoot.querySelector('.card__badges').remove();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { numberOfDays } from './helpers'
|
|
2
1
|
|
|
3
2
|
// #region Functions that setup and trigger other functions
|
|
4
3
|
|
|
@@ -41,20 +40,18 @@ export const setupChart = (chartElement:any,chartOuter:any,tableElement:any) =>
|
|
|
41
40
|
Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map((element: any) => { element.remove(); })
|
|
42
41
|
// #endregion
|
|
43
42
|
|
|
44
|
-
let {xaxis} = getChartData(chartElement
|
|
43
|
+
let {xaxis} = getChartData(chartElement);
|
|
45
44
|
|
|
46
|
-
setCellData(chartElement,
|
|
45
|
+
setCellData(chartElement,tableElement);
|
|
47
46
|
|
|
48
47
|
createChartKey(chartOuter,tableElement,chartKey);
|
|
49
|
-
createChartGuidelines(chartElement,
|
|
50
|
-
createChartYaxis(chartElement,
|
|
48
|
+
createChartGuidelines(chartElement,chartGuidelines);
|
|
49
|
+
createChartYaxis(chartElement,chartYaxis);
|
|
51
50
|
|
|
52
51
|
if(xaxis){
|
|
53
|
-
createXaxis(
|
|
52
|
+
createXaxis(chartOuter);
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
|
|
58
55
|
return true;
|
|
59
56
|
};
|
|
60
57
|
// #endregion
|
|
@@ -115,7 +112,7 @@ export const setEventListener = function(chartElement:any, chartOuter:any) {
|
|
|
115
112
|
|
|
116
113
|
|
|
117
114
|
shadowTable.innerHTML = table.innerHTML;
|
|
118
|
-
setCellData(chartElement,
|
|
115
|
+
setCellData(chartElement,shadowTable);
|
|
119
116
|
|
|
120
117
|
});
|
|
121
118
|
}
|
|
@@ -132,7 +129,7 @@ export const setEventObservers = function(chartElement:any,chartOuter:any) {
|
|
|
132
129
|
|
|
133
130
|
for (const mutation of mutationList) {
|
|
134
131
|
|
|
135
|
-
if(mutation.attributeName == 'class' || (mutation.type === 'attributes'
|
|
132
|
+
if(mutation.attributeName == 'class' || (mutation.type === 'attributes') || mutation.type === 'attributes') {
|
|
136
133
|
|
|
137
134
|
shadowTable.innerHTML = table.innerHTML;
|
|
138
135
|
setupChart(chartElement,chartOuter,shadowTable);
|
|
@@ -173,29 +170,29 @@ export const setEventObservers = function(chartElement:any,chartOuter:any) {
|
|
|
173
170
|
// #endregion
|
|
174
171
|
|
|
175
172
|
// #region GET functions
|
|
176
|
-
export const getChartData = function(chartElement:any
|
|
173
|
+
export const getChartData = function(chartElement:any){
|
|
177
174
|
|
|
178
175
|
|
|
179
|
-
let table =
|
|
176
|
+
let table = chartElement.shadowRoot.querySelector('.chart__wrapper table');
|
|
180
177
|
|
|
181
178
|
let min:any = chartElement.hasAttribute('data-min') ? chartElement.getAttribute('data-min') : 0;
|
|
182
179
|
let max:any = chartElement.hasAttribute('data-max') ? chartElement.getAttribute('data-max') : getLargestValue(chartElement,table);
|
|
183
|
-
let type:string = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';
|
|
180
|
+
//let type:string = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';
|
|
184
181
|
let yaxis:any = chartElement.hasAttribute('data-yaxis') ? chartElement.getAttribute('data-yaxis').split(',') : [];
|
|
185
182
|
let guidelines:any = chartElement.hasAttribute('data-guidelines') ? chartElement.getAttribute('data-guidelines').split(',') : [];
|
|
186
|
-
let targets:any = chartElement.hasAttribute('data-targets') ? JSON.parse(chartElement.getAttribute('data-targets')) : null;
|
|
187
|
-
let events:any = chartElement.hasAttribute('data-events') ? JSON.parse(chartElement.getAttribute('data-events')) : null;
|
|
183
|
+
//let targets:any = chartElement.hasAttribute('data-targets') ? JSON.parse(chartElement.getAttribute('data-targets')) : null;
|
|
184
|
+
//let events:any = chartElement.hasAttribute('data-events') ? JSON.parse(chartElement.getAttribute('data-events')) : null;
|
|
188
185
|
let xaxis:any = chartElement.hasAttribute('data-xaxis') ? chartElement.getAttribute('data-xaxis').split(',') : null;
|
|
189
|
-
let increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment'): null;
|
|
186
|
+
//let increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment'): null;
|
|
190
187
|
|
|
191
|
-
let start:any = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;
|
|
192
|
-
let end:any = chartElement.hasAttribute('data-end') ? chartElement.getAttribute('data-end') : getLargestValue(chartElement,table); // TODO - get largest value from the data-xaxis
|
|
188
|
+
//let start:any = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;
|
|
189
|
+
//let end:any = chartElement.hasAttribute('data-end') ? chartElement.getAttribute('data-end') : getLargestValue(chartElement,table); // TODO - get largest value from the data-xaxis
|
|
193
190
|
|
|
194
191
|
|
|
195
|
-
let slope:any = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;
|
|
196
|
-
let yInt:any = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;
|
|
192
|
+
//let slope:any = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;
|
|
193
|
+
//let yInt:any = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;
|
|
197
194
|
|
|
198
|
-
return {min,max,
|
|
195
|
+
return {min,max,yaxis,xaxis,guidelines};
|
|
199
196
|
}
|
|
200
197
|
|
|
201
198
|
function getLargestValue(chartElement:any,table:any){
|
|
@@ -252,7 +249,7 @@ const getValues = function(value:number,min:any,max:any,start?:number){
|
|
|
252
249
|
// #endregion
|
|
253
250
|
|
|
254
251
|
// #region SET functions - set data attributes and classes
|
|
255
|
-
export const setCellData = function(chartElement:any,
|
|
252
|
+
export const setCellData = function(chartElement:any,table:any){
|
|
256
253
|
|
|
257
254
|
Array.from(table.querySelectorAll('tbody tr')).forEach((tr:any) => {
|
|
258
255
|
|
|
@@ -274,7 +271,7 @@ export const setCellData = function(chartElement:any,chartOuter:any,table:any){
|
|
|
274
271
|
tr.setAttribute('data-numeric',rowValue);
|
|
275
272
|
});
|
|
276
273
|
|
|
277
|
-
let {min, max} = getChartData(chartElement
|
|
274
|
+
let {min, max} = getChartData(chartElement);
|
|
278
275
|
|
|
279
276
|
Array.from(table.querySelectorAll('tbody tr')).forEach((tr:any, index) => {
|
|
280
277
|
|
|
@@ -299,19 +296,6 @@ export const setCellData = function(chartElement:any,chartOuter:any,table:any){
|
|
|
299
296
|
td.setAttribute('data-label',table.querySelectorAll('thead th')[index].textContent);
|
|
300
297
|
});
|
|
301
298
|
|
|
302
|
-
/*
|
|
303
|
-
if(tr.querySelector('[data-label="Total"]')){
|
|
304
|
-
tr.setAttribute('data-total',tr.querySelector('[data-label="Total"][data-numeric]').getAttribute('data-numeric'));
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
if(tr.querySelector('[data-label="Min"]')){
|
|
308
|
-
tr.setAttribute('data-min',tr.querySelector('[data-label="Min"][data-numeric]').getAttribute('data-numeric'));
|
|
309
|
-
}
|
|
310
|
-
if(tr.querySelector('[data-label="Max"]')){
|
|
311
|
-
tr.setAttribute('data-max',tr.querySelector('[data-label="Max"][data-numeric]').getAttribute('data-numeric'));
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
*/
|
|
315
299
|
|
|
316
300
|
let rowMin = tr.hasAttribute('data-min') ? tr.getAttribute('data-min') : min;
|
|
317
301
|
let rowMax = tr.hasAttribute('data-max') ? tr.getAttribute('data-max') : max;
|
|
@@ -437,20 +421,13 @@ function createChartKeyItem(chartID:string,index:number,text:Array<string>,chart
|
|
|
437
421
|
return previousInput;
|
|
438
422
|
}
|
|
439
423
|
|
|
440
|
-
export const createChartGuidelines = function(chartElement:any,
|
|
424
|
+
export const createChartGuidelines = function(chartElement:any,chartGuidelines:any){
|
|
441
425
|
|
|
442
|
-
let {min, max, yaxis,
|
|
426
|
+
let {min, max, yaxis, guidelines} = getChartData(chartElement);
|
|
443
427
|
|
|
444
428
|
if(!guidelines.length)
|
|
445
429
|
guidelines = yaxis;
|
|
446
430
|
|
|
447
|
-
|
|
448
|
-
if(increment == "days"){
|
|
449
|
-
|
|
450
|
-
max = numberOfDays(min,max);
|
|
451
|
-
min = 0;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
431
|
chartGuidelines.innerHTML = '';
|
|
455
432
|
for (var i = 0; i < guidelines.length; i++) {
|
|
456
433
|
|
|
@@ -463,56 +440,30 @@ export const createChartGuidelines = function(chartElement:any,chartOuter:any,ch
|
|
|
463
440
|
}
|
|
464
441
|
}
|
|
465
442
|
|
|
466
|
-
export const createChartYaxis = function(chartElement:any,
|
|
467
|
-
|
|
468
|
-
let {min, max, yaxis, increment} = getChartData(chartElement,chartOuter);
|
|
469
|
-
|
|
470
|
-
let startDay = min;
|
|
471
|
-
|
|
472
|
-
if(increment == "days"){
|
|
473
|
-
|
|
474
|
-
max = numberOfDays(min,max);
|
|
475
|
-
min = 0;
|
|
476
|
-
}
|
|
443
|
+
export const createChartYaxis = function(chartElement:any,chartYaxis:any){
|
|
477
444
|
|
|
445
|
+
let {min, max, yaxis} = getChartData(chartElement);
|
|
478
446
|
|
|
479
447
|
chartYaxis.innerHTML = '';
|
|
480
448
|
for (var i = 0; i < yaxis.length; i++) {
|
|
481
449
|
|
|
482
450
|
let value = parseFloat(yaxis[i].replace('£','').replace('%',''));
|
|
483
451
|
|
|
484
|
-
if(increment == "days"){
|
|
485
|
-
|
|
486
|
-
value = numberOfDays(startDay,yaxis[i]);
|
|
487
|
-
|
|
488
|
-
}
|
|
489
|
-
|
|
490
452
|
let { axis } = getValues(value,min,max);
|
|
491
453
|
chartYaxis.innerHTML += `<div class="axis__point" style="--percent:${axis}%;"><span>${yaxis[i]}</span></div>`;
|
|
492
454
|
}
|
|
493
455
|
}
|
|
494
456
|
|
|
495
|
-
export const createXaxis = function(
|
|
457
|
+
export const createXaxis = function(chartOuter:any){
|
|
496
458
|
|
|
497
459
|
const chart = chartOuter.querySelector('.chart');
|
|
498
460
|
let chartXaxis = chartOuter.querySelector('.chart__xaxis');
|
|
499
461
|
|
|
500
|
-
let {increment,start,end} = getChartData(chartElement,chartOuter);
|
|
501
|
-
|
|
502
462
|
if(!chartXaxis){
|
|
503
463
|
chartXaxis = document.createElement('div');
|
|
504
464
|
chartXaxis.setAttribute('class','chart__xaxis');
|
|
505
465
|
}
|
|
506
|
-
if(increment && start && end){
|
|
507
|
-
chartXaxis.innerHTML = '';
|
|
508
|
-
for (var i = 0; i < xaxis.length; i++) {
|
|
509
466
|
|
|
510
|
-
let value = parseFloat(xaxis[i].replace('£','').replace('%',''));
|
|
511
|
-
let position = ((value - start)/(end - start)) * 100;
|
|
512
|
-
|
|
513
|
-
chartXaxis.innerHTML += `<div class="axis__point" style="--percent:${position}%;"><span>${xaxis[i]}</span></div>`;
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
467
|
chart.prepend(chartXaxis);
|
|
517
468
|
}
|
|
518
469
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
import { createEmbed } from "./youtubevideo";
|
|
3
|
-
|
|
4
2
|
const extendDialogs = (body) => {
|
|
5
3
|
|
|
6
4
|
Array.from(body.querySelectorAll('dialog[open]')).forEach((dialog, index) => {
|
|
@@ -231,12 +229,6 @@ const extendDialogs = (body) => {
|
|
|
231
229
|
|
|
232
230
|
export const createDialog = (dialog) => {
|
|
233
231
|
|
|
234
|
-
// Create the video embed
|
|
235
|
-
let videoButton = dialog.querySelector('.youtube-embed a');
|
|
236
|
-
if (videoButton){
|
|
237
|
-
createEmbed(videoButton)
|
|
238
|
-
}
|
|
239
|
-
|
|
240
232
|
// Multi dialog
|
|
241
233
|
if(dialog.classList.contains('dialog--multi') && !dialog.querySelector(':scope > .steps')) {
|
|
242
234
|
createMultiFormDialog(dialog);
|
|
@@ -758,7 +758,7 @@ export const filterTable = (table, form, wrapper) => {
|
|
|
758
758
|
});
|
|
759
759
|
|
|
760
760
|
// Work out what to display after pagination
|
|
761
|
-
Array.from(table.querySelectorAll('tbody tr:not(.filtered')).forEach((row, index) => {
|
|
761
|
+
Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
|
|
762
762
|
|
|
763
763
|
matched++;
|
|
764
764
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// Modules
|
|
3
|
+
import * as helpers from '../js/modules/helpers'
|
|
4
|
+
import extendDialogs from '../js/modules/dialogs'
|
|
5
|
+
import createDataLayer from '../js/modules/data-layer'
|
|
6
|
+
import extendInputs from '../js/modules/inputs';
|
|
7
|
+
import createDynamicEvents from '../js/modules/dynamicEvents'
|
|
8
|
+
|
|
9
|
+
// Attach classes to dom elements
|
|
10
|
+
document.addEventListener("DOMContentLoaded", function() {
|
|
11
|
+
|
|
12
|
+
createDataLayer();
|
|
13
|
+
createDynamicEvents();
|
|
14
|
+
|
|
15
|
+
// Global stuff
|
|
16
|
+
helpers.addBodyClasses(document.body);
|
|
17
|
+
helpers.addGlobalEvents(document.body);
|
|
18
|
+
|
|
19
|
+
extendDialogs(document.body);
|
|
20
|
+
extendInputs(document.body);
|
|
21
|
+
|
|
22
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import '@testing-library/jest-dom'
|
|
3
|
+
import {getChartData} from "../modules/chart.module";
|
|
4
|
+
import puppeteer from 'puppeteer';
|
|
5
|
+
import "expect-puppeteer";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
import iamBarChart from "../components/barchart/barchart.component";
|
|
9
|
+
|
|
10
|
+
describe('The bar chart component', () => {
|
|
11
|
+
|
|
12
|
+
if (!window.customElements.get(`iam-barchart`))
|
|
13
|
+
window.customElements.define(`iam-barchart`, iamBarChart);
|
|
14
|
+
|
|
15
|
+
document.body.innerHTML = `
|
|
16
|
+
<iam-barchart>
|
|
17
|
+
<table>
|
|
18
|
+
<thead>
|
|
19
|
+
<tr>
|
|
20
|
+
<th>Items</th>
|
|
21
|
+
<th>Value</th>
|
|
22
|
+
</tr>
|
|
23
|
+
</thead>
|
|
24
|
+
<tbody>
|
|
25
|
+
<tr>
|
|
26
|
+
<td>Item 1</td>
|
|
27
|
+
<td>300</td>
|
|
28
|
+
</tr>
|
|
29
|
+
<tr>
|
|
30
|
+
<td>Item 2</td>
|
|
31
|
+
<td>150</td>
|
|
32
|
+
</tr>
|
|
33
|
+
<tr>
|
|
34
|
+
<td>Item 3</td>
|
|
35
|
+
<td>100</td>
|
|
36
|
+
</tr>
|
|
37
|
+
</tbody>
|
|
38
|
+
</table>
|
|
39
|
+
</iam-barchart>`;
|
|
40
|
+
|
|
41
|
+
test('should create the min attribute as 0', () => {
|
|
42
|
+
|
|
43
|
+
let component = document.querySelector('iam-barchart');
|
|
44
|
+
let {min} = getChartData(component);
|
|
45
|
+
|
|
46
|
+
expect(min).toEqual(0);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('should equal the largest single value', () => {
|
|
50
|
+
|
|
51
|
+
let component = document.querySelector('iam-barchart');
|
|
52
|
+
let {max} = getChartData(component);
|
|
53
|
+
|
|
54
|
+
expect(max).toEqual(300);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('should equal the largest single value', () => {
|
|
58
|
+
|
|
59
|
+
let component = document.querySelector('iam-barchart');
|
|
60
|
+
let {max} = getChartData(component);
|
|
61
|
+
|
|
62
|
+
expect(max).toEqual(300);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('should have the class of .chart--fit-content added as there is less than 10 bars', () => {
|
|
66
|
+
|
|
67
|
+
let component = document.querySelector('iam-barchart');
|
|
68
|
+
expect(component.classList).toContain("chart--fit-content");
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('should have the class of .chart--no-scale added as there is less than 5 bars', () => {
|
|
72
|
+
|
|
73
|
+
let component = document.querySelector('iam-barchart');
|
|
74
|
+
expect(component.classList).toContain("chart--no-scale");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
});
|
|
@@ -24,6 +24,6 @@ describe('addDataAttributes', () => {
|
|
|
24
24
|
test('should add a class of d-none to each item except the one containing Lucas Myers', () => {
|
|
25
25
|
|
|
26
26
|
expect(list.querySelectorAll('li:not(.d-none)').length).toEqual(1);
|
|
27
|
-
expect(list.querySelector('li:not(.d-none').textContent).toEqual('Lucas Myers');
|
|
27
|
+
expect(list.querySelector('li:not(.d-none)').textContent).toEqual('Lucas Myers');
|
|
28
28
|
});
|
|
29
29
|
});
|