@iamproperty/components 3.4.6 → 3.5.0
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/LICENSE +22 -0
- package/assets/bootstrap/README.md +246 -0
- package/assets/bootstrap/js/src/alert.js +87 -0
- package/assets/bootstrap/js/src/base-component.js +85 -0
- package/assets/bootstrap/js/src/button.js +72 -0
- package/assets/bootstrap/js/src/carousel.js +475 -0
- package/assets/bootstrap/js/src/collapse.js +302 -0
- package/assets/bootstrap/js/src/dom/data.js +55 -0
- package/assets/bootstrap/js/src/dom/event-handler.js +320 -0
- package/assets/bootstrap/js/src/dom/manipulator.js +71 -0
- package/assets/bootstrap/js/src/dom/selector-engine.js +83 -0
- package/assets/bootstrap/js/src/dropdown.js +454 -0
- package/assets/bootstrap/js/src/modal.js +377 -0
- package/assets/bootstrap/js/src/offcanvas.js +283 -0
- package/assets/bootstrap/js/src/popover.js +97 -0
- package/assets/bootstrap/js/src/scrollspy.js +294 -0
- package/assets/bootstrap/js/src/tab.js +305 -0
- package/assets/bootstrap/js/src/toast.js +225 -0
- package/assets/bootstrap/js/src/tooltip.js +633 -0
- package/assets/bootstrap/js/src/util/backdrop.js +149 -0
- package/assets/bootstrap/js/src/util/component-functions.js +34 -0
- package/assets/bootstrap/js/src/util/config.js +66 -0
- package/assets/bootstrap/js/src/util/focustrap.js +115 -0
- package/assets/bootstrap/js/src/util/index.js +336 -0
- package/assets/bootstrap/js/src/util/sanitizer.js +118 -0
- package/assets/bootstrap/js/src/util/scrollbar.js +114 -0
- package/assets/bootstrap/js/src/util/swipe.js +146 -0
- package/assets/bootstrap/js/src/util/template-factory.js +160 -0
- package/assets/bootstrap/package.json +181 -0
- package/assets/bootstrap/scss/_accordion.scss +149 -0
- package/assets/bootstrap/scss/_alert.scss +71 -0
- package/assets/bootstrap/scss/_badge.scss +38 -0
- package/assets/bootstrap/scss/_breadcrumb.scss +40 -0
- package/assets/bootstrap/scss/_button-group.scss +142 -0
- package/assets/bootstrap/scss/_buttons.scss +207 -0
- package/assets/bootstrap/scss/_card.scss +234 -0
- package/assets/bootstrap/scss/_carousel.scss +226 -0
- package/assets/bootstrap/scss/_close.scss +40 -0
- package/assets/bootstrap/scss/_containers.scss +41 -0
- package/assets/bootstrap/scss/_dropdown.scss +249 -0
- package/assets/bootstrap/scss/_forms.scss +9 -0
- package/assets/bootstrap/scss/_functions.scss +302 -0
- package/assets/bootstrap/scss/_grid.scss +33 -0
- package/assets/bootstrap/scss/_helpers.scss +10 -0
- package/assets/bootstrap/scss/_images.scss +42 -0
- package/assets/bootstrap/scss/_list-group.scss +192 -0
- package/assets/bootstrap/scss/_maps.scss +54 -0
- package/assets/bootstrap/scss/_mixins.scss +43 -0
- package/assets/bootstrap/scss/_modal.scss +237 -0
- package/assets/bootstrap/scss/_nav.scss +172 -0
- package/assets/bootstrap/scss/_navbar.scss +278 -0
- package/assets/bootstrap/scss/_offcanvas.scss +144 -0
- package/assets/bootstrap/scss/_pagination.scss +109 -0
- package/assets/bootstrap/scss/_placeholders.scss +51 -0
- package/assets/bootstrap/scss/_popover.scss +196 -0
- package/assets/bootstrap/scss/_progress.scss +59 -0
- package/assets/bootstrap/scss/_reboot.scss +610 -0
- package/assets/bootstrap/scss/_root.scss +73 -0
- package/assets/bootstrap/scss/_spinners.scss +85 -0
- package/assets/bootstrap/scss/_tables.scss +164 -0
- package/assets/bootstrap/scss/_toasts.scss +73 -0
- package/assets/bootstrap/scss/_tooltip.scss +120 -0
- package/assets/bootstrap/scss/_transitions.scss +27 -0
- package/assets/bootstrap/scss/_type.scss +106 -0
- package/assets/bootstrap/scss/_utilities.scss +647 -0
- package/assets/bootstrap/scss/_variables.scss +1634 -0
- package/assets/bootstrap/scss/bootstrap-grid.scss +64 -0
- package/assets/bootstrap/scss/bootstrap-reboot.scss +9 -0
- package/assets/bootstrap/scss/bootstrap-utilities.scss +18 -0
- package/assets/bootstrap/scss/bootstrap.scss +51 -0
- package/assets/bootstrap/scss/forms/_floating-labels.scss +75 -0
- package/assets/bootstrap/scss/forms/_form-check.scss +175 -0
- package/assets/bootstrap/scss/forms/_form-control.scss +194 -0
- package/assets/bootstrap/scss/forms/_form-range.scss +91 -0
- package/assets/bootstrap/scss/forms/_form-select.scss +71 -0
- package/assets/bootstrap/scss/forms/_form-text.scss +11 -0
- package/assets/bootstrap/scss/forms/_input-group.scss +132 -0
- package/assets/bootstrap/scss/forms/_labels.scss +36 -0
- package/assets/bootstrap/scss/forms/_validation.scss +12 -0
- package/assets/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/assets/bootstrap/scss/helpers/_color-bg.scss +10 -0
- package/assets/bootstrap/scss/helpers/_colored-links.scss +12 -0
- package/assets/bootstrap/scss/helpers/_position.scss +36 -0
- package/assets/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/assets/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/assets/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/assets/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/assets/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/assets/bootstrap/scss/helpers/_vr.scss +8 -0
- package/assets/bootstrap/scss/mixins/_alert.scss +15 -0
- package/assets/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/assets/bootstrap/scss/mixins/_banner.scss +9 -0
- package/assets/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/assets/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/assets/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/assets/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/assets/bootstrap/scss/mixins/_caret.scss +64 -0
- package/assets/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/assets/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/assets/bootstrap/scss/mixins/_container.scss +11 -0
- package/assets/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/assets/bootstrap/scss/mixins/_forms.scss +152 -0
- package/assets/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/assets/bootstrap/scss/mixins/_grid.scss +151 -0
- package/assets/bootstrap/scss/mixins/_image.scss +16 -0
- package/assets/bootstrap/scss/mixins/_list-group.scss +24 -0
- package/assets/bootstrap/scss/mixins/_lists.scss +7 -0
- package/assets/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/assets/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/assets/bootstrap/scss/mixins/_resize.scss +6 -0
- package/assets/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/assets/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/assets/bootstrap/scss/mixins/_transition.scss +26 -0
- package/assets/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/assets/bootstrap/scss/mixins/_visually-hidden.scss +29 -0
- package/assets/bootstrap/scss/utilities/_api.scss +47 -0
- package/assets/bootstrap/scss/vendor/_rfs.scss +354 -0
- package/assets/css/components/accordion.css +1 -1
- package/assets/css/components/accordion.css.map +1 -1
- package/assets/css/components/admin-panel.css +1 -0
- package/assets/css/components/admin-panel.css.map +1 -0
- package/assets/css/components/alert.css +1 -1
- package/assets/css/components/alert.css.map +1 -1
- package/assets/css/components/applied-filters.css +1 -0
- package/assets/css/components/applied-filters.css.map +1 -0
- package/assets/css/components/card.css +1 -1
- package/assets/css/components/card.css.map +1 -1
- package/assets/css/components/carousel.css +1 -1
- package/assets/css/components/carousel.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/container.css +1 -1
- package/assets/css/components/container.css.map +1 -1
- package/assets/css/components/dialog.css +1 -0
- package/assets/css/components/dialog.css.map +1 -0
- package/assets/css/components/forms.css +1 -1
- package/assets/css/components/forms.css.map +1 -1
- package/assets/css/components/header.css +1 -1
- package/assets/css/components/header.css.map +1 -1
- package/assets/css/components/lists.css +1 -1
- package/assets/css/components/lists.css.map +1 -1
- package/assets/css/components/nav.css +1 -1
- package/assets/css/components/nav.css.map +1 -1
- package/assets/css/components/pagination.css +1 -0
- package/assets/css/components/pagination.css.map +1 -0
- package/assets/css/components/property-searchbar.css +1 -1
- package/assets/css/components/property-searchbar.css.map +1 -1
- package/assets/css/components/stepper.css +1 -1
- package/assets/css/components/stepper.css.map +1 -1
- package/assets/css/components/table.css +1 -0
- package/assets/css/components/table.css.map +1 -0
- package/assets/css/components/tabs.css +1 -1
- package/assets/css/components/tabs.css.map +1 -1
- package/assets/css/components/tooltips.css +1 -1
- package/assets/css/components/tooltips.css.map +1 -1
- 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/bundle.js +18 -11
- package/assets/js/components/accordion/accordion.component.js +6 -0
- package/assets/js/components/accordion/accordion.component.min.js +3 -3
- package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.js +26 -0
- package/assets/js/components/card/card.component.js +91 -0
- package/assets/js/components/card/card.component.min.js +21 -0
- package/assets/js/components/card/card.component.min.js.map +1 -0
- package/assets/js/components/filterlist/filterlist.component.js +49 -0
- package/assets/js/components/filterlist/filterlist.component.min.js +23 -0
- package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -0
- package/assets/js/components/header/header.component.js +6 -0
- package/assets/js/components/header/header.component.min.js +5 -5
- package/assets/js/components/header/header.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.js +34 -0
- package/assets/js/components/table/table.component.js +108 -0
- package/assets/js/components/table/table.component.min.js +24 -0
- package/assets/js/components/table/table.component.min.js.map +1 -0
- package/assets/js/components/tabs/tabs.component.js +6 -0
- package/assets/js/components/tabs/tabs.component.min.js +17 -0
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -0
- package/assets/js/dynamic.js +7 -18
- package/assets/js/dynamic.min.js +2 -53
- package/assets/js/dynamic.min.js.map +1 -1
- package/assets/js/flat-components.js +27 -9
- package/assets/js/modules/applied-filters.js +100 -0
- package/assets/js/modules/data-layer.js +45 -0
- package/assets/js/modules/filterlist.js +32 -0
- package/assets/js/modules/helpers.js +102 -49
- package/assets/js/modules/pagination.js +33 -0
- package/assets/js/modules/table.js +506 -420
- package/assets/js/modules/tabs.js +6 -0
- package/assets/js/modules/youtubevideo.js +53 -61
- package/assets/js/scripts.bundle.js +77 -62
- 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/tests/filterlist.spec.js +22 -0
- package/assets/js/tests/pagination.spec.js +15 -0
- package/assets/js/tests/table.spec.js +149 -0
- package/assets/sass/_components.scss +1 -2
- package/assets/sass/_corefiles.scss +20 -19
- package/assets/sass/_forms.scss +7 -7
- package/assets/sass/_functions/functions.scss +1 -1
- package/assets/sass/_functions/mixins.scss +19 -21
- package/assets/sass/_functions/utilities.scss +67 -9
- package/assets/sass/_functions/variables.scss +109 -55
- package/assets/sass/_tests/colours.spec.scss +8 -22
- package/assets/sass/components/accordion.scss +13 -0
- package/assets/sass/components/admin-panel.scss +106 -0
- package/assets/sass/components/alert.scss +22 -0
- package/assets/sass/components/applied-filters.scss +65 -0
- package/assets/sass/components/card.scss +177 -233
- package/assets/sass/components/carousel.scss +72 -0
- package/assets/sass/components/charts.scss +41 -1
- package/assets/sass/components/container.scss +8 -3
- package/assets/sass/components/dialog.scss +208 -0
- package/assets/sass/components/forms.scss +37 -5
- package/assets/sass/components/lists.scss +29 -0
- package/assets/sass/components/nav.scss +6 -2
- package/assets/sass/components/pagination.scss +140 -0
- package/assets/sass/components/stepper.scss +3 -3
- package/assets/sass/components/table.scss +423 -0
- package/assets/sass/components/tabs.scss +20 -7
- package/assets/sass/components/tooltips.scss +1 -1
- package/assets/sass/foundations/buttons.scss +366 -0
- package/assets/sass/foundations/icons.scss +1 -1
- package/assets/sass/foundations/links.scss +125 -0
- package/assets/sass/foundations/media.scss +1 -1
- package/assets/sass/foundations/reboot.scss +21 -17
- package/assets/sass/foundations/root.scss +9 -29
- package/assets/sass/foundations/type.scss +1 -1
- package/assets/svg/illustrations/table.svg +165 -0
- package/assets/ts/bundle.ts +23 -12
- package/assets/ts/components/accordion/accordion.component.ts +7 -0
- package/assets/ts/components/applied-filters/README.md +5 -0
- package/assets/ts/components/applied-filters/applied-filters.component.ts +33 -0
- package/assets/ts/components/card/README.md +22 -0
- package/assets/ts/components/card/card.component.ts +117 -0
- package/assets/ts/components/filterlist/README.md +17 -0
- package/assets/ts/components/filterlist/filterlist.component.ts +60 -0
- package/assets/ts/components/header/header.component.ts +8 -0
- package/assets/ts/components/pagination/README.md +11 -0
- package/assets/ts/components/pagination/pagination.component.ts +45 -0
- package/assets/ts/components/table/README.md +23 -0
- package/assets/ts/components/table/table.component.ts +133 -0
- package/assets/ts/components/tabs/tabs.component.ts +7 -0
- package/assets/ts/dynamic.ts +12 -19
- package/assets/ts/flat-components.ts +37 -9
- package/assets/ts/modules/applied-filters.ts +146 -0
- package/assets/ts/modules/data-layer.ts +58 -0
- package/assets/ts/modules/filterlist.ts +46 -0
- package/assets/ts/modules/helpers.ts +129 -58
- package/assets/ts/modules/pagination.ts +44 -0
- package/assets/ts/modules/table.ts +598 -433
- package/assets/ts/modules/tabs.ts +8 -1
- package/assets/ts/modules/youtubevideo.ts +58 -63
- package/assets/ts/tests/filterlist.spec.ts +29 -0
- package/assets/ts/tests/pagination.spec.ts +21 -0
- package/assets/ts/tests/table.spec.ts +194 -0
- package/dist/components.es.js +1267 -1295
- package/dist/components.umd.js +70 -65
- package/dist/style.css +1 -1
- package/package.json +8 -5
- package/src/components/AppliedFilters/AppliedFilters.vue +20 -0
- package/src/components/AppliedFilters/README.md +5 -0
- package/src/components/Card/Card.vue +11 -112
- package/src/components/Card/README.md +16 -18
- package/src/components/Carousel/Carousel.vue +49 -10
- package/src/components/Chart/Chart.vue +46 -4
- package/src/components/Filterlist/Filterlist.vue +20 -0
- package/src/components/Filterlist/README.md +17 -0
- package/src/components/Pagination/Pagination.vue +30 -0
- package/src/components/Pagination/README.md +11 -0
- package/src/components/Table/README.md +29 -44
- package/src/components/Table/Table.spec.js +5 -37
- package/src/components/Table/Table.vue +16 -91
- package/src/foundations/YoutubeVideo/YoutubeVideo.vue +1 -1
- package/src/index.js +3 -2
- package/assets/css/components/buttons.css +0 -1
- package/assets/css/components/buttons.css.map +0 -1
- package/assets/css/components/cardDeck.css +0 -1
- package/assets/css/components/cardDeck.css.map +0 -1
- package/assets/css/components/links.css +0 -1
- package/assets/css/components/links.css.map +0 -1
- package/assets/css/components/modal.css +0 -1
- package/assets/css/components/modal.css.map +0 -1
- package/assets/css/components/panel.css +0 -1
- package/assets/css/components/panel.css.map +0 -1
- package/assets/css/components/tables.css +0 -1
- package/assets/css/components/tables.css.map +0 -1
- package/assets/js/modules/modal.js +0 -69
- package/assets/sass/components/buttons.scss +0 -252
- package/assets/sass/components/cardDeck.scss +0 -108
- package/assets/sass/components/links.scss +0 -99
- package/assets/sass/components/modal.scss +0 -136
- package/assets/sass/components/panel.scss +0 -161
- package/assets/sass/components/tables.scss +0 -291
- package/assets/ts/modules/modal.ts +0 -91
- package/src/components/CardDeck/CardDeck.spec.js +0 -99
- package/src/components/CardDeck/CardDeck.vue +0 -77
- package/src/components/CardDeck/README.md +0 -25
- package/src/components/Modal/Modal.spec.js +0 -22
- package/src/components/Modal/Modal.vue +0 -43
- package/src/components/Modal/README.md +0 -20
|
@@ -72,7 +72,14 @@ export const setTabsEventHandlers = function(tabsElement: Element){
|
|
|
72
72
|
});
|
|
73
73
|
|
|
74
74
|
if(button.hasAttribute('href'))
|
|
75
|
-
history.pushState(undefined, undefined, button.getAttribute('href'))
|
|
75
|
+
history.pushState(undefined, undefined, button.getAttribute('href'));
|
|
76
|
+
|
|
77
|
+
// Data layer Open Event
|
|
78
|
+
window.dataLayer = window.dataLayer || [];
|
|
79
|
+
window.dataLayer.push({
|
|
80
|
+
"event": "openTab",
|
|
81
|
+
"tabTitle": button.textContent
|
|
82
|
+
});
|
|
76
83
|
});
|
|
77
84
|
|
|
78
85
|
});
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Integrate YouTube videos as a way of hosting videos without the overhead and worry surrounding hosting vides. i.e. file sizes, performance and accessibility.
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
class youtubeVideo {
|
|
6
6
|
|
|
7
7
|
/** @param {Element} embed dom element */
|
|
8
8
|
constructor(embed){
|
|
9
9
|
|
|
10
|
-
let createEmbed = this.createEmbed;
|
|
11
|
-
|
|
12
10
|
// If the scripts is already loaded then lets just create the embed
|
|
13
11
|
if(document.body.classList.contains('youtubeLoaded')){
|
|
14
12
|
embed.addEventListener('click', function(e){
|
|
@@ -16,10 +14,10 @@
|
|
|
16
14
|
// loop parent nodes from the target to the delegation node
|
|
17
15
|
for (var target = e.target; target && target != this; target = target.parentNode) {
|
|
18
16
|
|
|
19
|
-
if (target.matches('a
|
|
17
|
+
if (target.matches('a')) {
|
|
20
18
|
|
|
21
19
|
e.preventDefault();
|
|
22
|
-
createEmbed(
|
|
20
|
+
createEmbed(target);
|
|
23
21
|
break;
|
|
24
22
|
}
|
|
25
23
|
}
|
|
@@ -33,9 +31,8 @@
|
|
|
33
31
|
/**
|
|
34
32
|
* Load the YouTube scripts before trying to create the embed
|
|
35
33
|
* @param {HTMLElement} embed dom element
|
|
36
|
-
* @param {Function} createEmbed function to create the embed after script loaded.
|
|
37
34
|
*/
|
|
38
|
-
loadScripts(embed
|
|
35
|
+
loadScripts(embed){
|
|
39
36
|
|
|
40
37
|
return new Promise((resolve, reject) => {
|
|
41
38
|
|
|
@@ -52,18 +49,16 @@
|
|
|
52
49
|
|
|
53
50
|
// script has loaded, you can now use it safely
|
|
54
51
|
tag.onload = () => {
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
embed.addEventListener('click', function(event){
|
|
53
|
+
console.log('click')
|
|
57
54
|
// loop parent nodes from the target to the delegation node
|
|
58
|
-
|
|
55
|
+
|
|
56
|
+
if (event && event.target instanceof HTMLElement && event.target.closest('a')) {
|
|
59
57
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
e.preventDefault();
|
|
63
|
-
createEmbed(embed,target);
|
|
64
|
-
break;
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
createEmbed(event.target.closest('a'));
|
|
65
60
|
}
|
|
66
|
-
|
|
61
|
+
|
|
67
62
|
}, false);
|
|
68
63
|
}
|
|
69
64
|
|
|
@@ -80,67 +75,67 @@
|
|
|
80
75
|
* Create the YouTube embed after the user has clicked on it.
|
|
81
76
|
* @param {HTMLElement} embed dom element
|
|
82
77
|
*/
|
|
83
|
-
|
|
78
|
+
}
|
|
84
79
|
|
|
85
|
-
|
|
86
|
-
if(typeof window.player != "undefined" && typeof window.player.pauseVideo == "function")
|
|
87
|
-
window.player.pauseVideo();
|
|
80
|
+
export const createEmbed = function(target){
|
|
88
81
|
|
|
82
|
+
// If there is more than one video lets make sure there is only one playing at a time.
|
|
83
|
+
if(typeof window.player != "undefined" && typeof window.player.pauseVideo == "function")
|
|
84
|
+
window.player.pauseVideo();
|
|
89
85
|
|
|
90
|
-
var video_id = target.getAttribute('data-id');
|
|
91
|
-
var link_id = target.getAttribute('id')
|
|
92
86
|
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
var video_id = target.getAttribute('data-id');
|
|
88
|
+
var link_id = target.getAttribute('id')
|
|
95
89
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
target.setAttribute('id',link_id);
|
|
99
|
-
}
|
|
90
|
+
// create an id to pass t the script if one isn't present
|
|
91
|
+
if(typeof link_id == 'undefined' || link_id == null){
|
|
100
92
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
height: '100%',
|
|
106
|
-
width: '100%',
|
|
107
|
-
videoId: video_id,
|
|
108
|
-
playerVars: {
|
|
109
|
-
'modestbranding': 1,
|
|
110
|
-
'playsinline': 1,
|
|
111
|
-
'rel': 0,
|
|
112
|
-
'showinfo': 0
|
|
113
|
-
},
|
|
114
|
-
events: {
|
|
115
|
-
'onReady': onPlayerReady,
|
|
116
|
-
'onStateChange': onPlayerStateChange
|
|
117
|
-
}
|
|
118
|
-
});
|
|
93
|
+
var randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
|
|
94
|
+
link_id = randLetter + Date.now();
|
|
95
|
+
target.setAttribute('id',link_id);
|
|
96
|
+
}
|
|
119
97
|
|
|
120
|
-
|
|
121
|
-
|
|
98
|
+
// This function creates an <iframe> (and YouTube player) after the API code downloads.
|
|
99
|
+
function onYouTubeIframeAPIReady() {
|
|
100
|
+
|
|
101
|
+
window.player = new YT.Player(link_id, {
|
|
102
|
+
height: '100%',
|
|
103
|
+
width: '100%',
|
|
104
|
+
videoId: video_id,
|
|
105
|
+
playerVars: {
|
|
106
|
+
'modestbranding': 1,
|
|
107
|
+
'playsinline': 1,
|
|
108
|
+
'rel': 0,
|
|
109
|
+
'showinfo': 0
|
|
110
|
+
},
|
|
111
|
+
events: {
|
|
112
|
+
'onReady': onPlayerReady,
|
|
113
|
+
'onStateChange': onPlayerStateChange
|
|
114
|
+
}
|
|
115
|
+
});
|
|
122
116
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// Play the video straight away
|
|
126
|
-
event.target.playVideo();
|
|
117
|
+
}
|
|
118
|
+
onYouTubeIframeAPIReady();
|
|
127
119
|
|
|
128
|
-
|
|
120
|
+
// The API will call this function when the video player is ready.
|
|
121
|
+
function onPlayerReady(event) {
|
|
122
|
+
// Play the video straight away
|
|
123
|
+
event.target.playVideo();
|
|
129
124
|
|
|
130
|
-
|
|
131
|
-
// The function indicates that when playing a video (state=1)
|
|
132
|
-
var done = false;
|
|
133
|
-
function onPlayerStateChange(event) {
|
|
125
|
+
}
|
|
134
126
|
|
|
135
|
-
|
|
127
|
+
// The API calls this function when the player's state changes.
|
|
128
|
+
// The function indicates that when playing a video (state=1)
|
|
129
|
+
var done = false;
|
|
130
|
+
function onPlayerStateChange(event) {
|
|
136
131
|
|
|
137
|
-
|
|
138
|
-
link.classList.add('player-ready');
|
|
132
|
+
if (event.data == YT.PlayerState.PLAYING && !done) {
|
|
139
133
|
|
|
140
|
-
|
|
141
|
-
|
|
134
|
+
var link = document.getElementById(link_id);
|
|
135
|
+
link.classList.add('player-ready');
|
|
136
|
+
|
|
137
|
+
done = true;
|
|
142
138
|
}
|
|
143
139
|
}
|
|
144
140
|
}
|
|
145
|
-
|
|
146
141
|
export default youtubeVideo
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import '@testing-library/jest-dom'
|
|
3
|
+
import { filterTheList } from "../modules/filterlist";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const listHTML = `
|
|
7
|
+
<li class="lead text-primary pb-1">Olivia Anderson</li>
|
|
8
|
+
<li class="lead text-primary pb-1">Ethan Ramirez</li>
|
|
9
|
+
<li class="lead text-primary pb-1">Sophia Patel</li>
|
|
10
|
+
<li class="lead text-primary pb-1">Noah Jenkins</li>
|
|
11
|
+
<li class="lead text-primary pb-1">Ava Thompson</li>
|
|
12
|
+
<li class="lead text-primary pb-1">Lucas Myers</li>
|
|
13
|
+
<li class="lead text-primary pb-1">Mia Carter</li>
|
|
14
|
+
<li class="lead text-primary pb-1">Benjamin Lee</li>
|
|
15
|
+
`;
|
|
16
|
+
|
|
17
|
+
describe('addDataAttributes', () => {
|
|
18
|
+
|
|
19
|
+
let list = document.createElement('ul');
|
|
20
|
+
list.innerHTML = listHTML;
|
|
21
|
+
|
|
22
|
+
filterTheList(list, "Lucas");
|
|
23
|
+
|
|
24
|
+
test('should add a class of d-none to each item except the one containing Lucas Myers', () => {
|
|
25
|
+
|
|
26
|
+
expect(list.querySelectorAll('li:not(.d-none)').length).toEqual(1);
|
|
27
|
+
expect(list.querySelector('li:not(.d-none').textContent).toEqual('Lucas Myers');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import '@testing-library/jest-dom'
|
|
3
|
+
import createPaginationButttons from "../modules/pagination";
|
|
4
|
+
|
|
5
|
+
describe('createPaginationButttons', () => {
|
|
6
|
+
|
|
7
|
+
const pagination = document.createElement('div');
|
|
8
|
+
|
|
9
|
+
pagination.setAttribute('data-page',2);
|
|
10
|
+
pagination.setAttribute('data-pages',5);
|
|
11
|
+
pagination.setAttribute('data-show',15);
|
|
12
|
+
pagination.setAttribute('data-total',150);
|
|
13
|
+
pagination.setAttribute('data-increment',15);
|
|
14
|
+
|
|
15
|
+
createPaginationButttons(pagination, pagination);
|
|
16
|
+
|
|
17
|
+
test('should populate the pagination with links to each page', () => {
|
|
18
|
+
|
|
19
|
+
expect(pagination.querySelectorAll('a.page-link').length).toEqual(6);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import '@testing-library/jest-dom'
|
|
3
|
+
import * as tableModule from "../modules/table";
|
|
4
|
+
import puppeteer from 'puppeteer';
|
|
5
|
+
import "expect-puppeteer";
|
|
6
|
+
|
|
7
|
+
const basicTable = `<thead>
|
|
8
|
+
<tr>
|
|
9
|
+
<th>Heading 1</th>
|
|
10
|
+
<th>Heading 2</th>
|
|
11
|
+
<th>Heading 3</th>
|
|
12
|
+
</tr>
|
|
13
|
+
</thead>
|
|
14
|
+
<tbody>
|
|
15
|
+
<tr>
|
|
16
|
+
<td>Cell 1</td>
|
|
17
|
+
<td>Low</td>
|
|
18
|
+
<td>Cell 3</td>
|
|
19
|
+
</tr>
|
|
20
|
+
<tr>
|
|
21
|
+
<td>Cell 1</td>
|
|
22
|
+
<td>Low</td>
|
|
23
|
+
<td><a href="/link">View information</a></td>
|
|
24
|
+
</tr>
|
|
25
|
+
<tr>
|
|
26
|
+
<td>Different Cell 1</td>
|
|
27
|
+
<td>Medium</td>
|
|
28
|
+
<td><a href="/link">View information</a></td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td>Different Cell 1</td>
|
|
32
|
+
<td>High</td>
|
|
33
|
+
<td><a href="/link">View information</a></td>
|
|
34
|
+
</tr>
|
|
35
|
+
</tbody>`;
|
|
36
|
+
|
|
37
|
+
describe('addDataAttributes', () => {
|
|
38
|
+
|
|
39
|
+
const table = document.createElement('table');
|
|
40
|
+
table.innerHTML = basicTable;
|
|
41
|
+
|
|
42
|
+
tableModule.addDataAttributes(table);
|
|
43
|
+
|
|
44
|
+
test('should add data-label attribute to the table cells', () => {
|
|
45
|
+
|
|
46
|
+
expect(table.querySelector('tbody td').getAttribute('data-label')).toEqual('Heading 1');
|
|
47
|
+
expect(table.querySelector('tbody td:nth-child(2)').getAttribute('data-label')).toEqual('Heading 2');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('should add data-content attribute to the table cells if the content matches a pre-defined list', () => {
|
|
51
|
+
expect(table.querySelector('tbody tr:nth-child(2) td:nth-child(2)').getAttribute('data-content')).toEqual('Low');
|
|
52
|
+
expect(table.querySelector('tbody tr:nth-child(3) td:nth-child(2)').getAttribute('data-content')).toEqual('Medium');
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
/* TODO: This unit test doesn't work as puppeteer seems to have an issue with query selector all
|
|
58
|
+
describe('getLargestLastColWidth', () => {
|
|
59
|
+
|
|
60
|
+
test('should return the width of the largest last column content', async() => {
|
|
61
|
+
|
|
62
|
+
const browser = await puppeteer.launch({});
|
|
63
|
+
try {
|
|
64
|
+
const page = await browser.newPage();
|
|
65
|
+
await page.exposeFunction("getLargestLastColWidth", tableModule.getLargestLastColWidth);
|
|
66
|
+
await page.setContent(`<table id="table">${basicTable}</table>`);
|
|
67
|
+
await page.waitForSelector('#table tr');
|
|
68
|
+
|
|
69
|
+
const largestWidth = await page.evaluate(`getLargestLastColWidth(document.querySelector("#table"))`);
|
|
70
|
+
|
|
71
|
+
//const links = await page.$$eval('#table', e=>getLargestLastColWidth(e))
|
|
72
|
+
console.log(await largestWidth)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
} catch (e) {
|
|
76
|
+
console.error(e);
|
|
77
|
+
} finally {
|
|
78
|
+
await browser.close();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
});
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
describe('createMobileButton', () => {
|
|
88
|
+
|
|
89
|
+
const table = document.createElement('table');
|
|
90
|
+
table.innerHTML = basicTable;
|
|
91
|
+
|
|
92
|
+
tableModule.createMobileButton(table);
|
|
93
|
+
|
|
94
|
+
test('should add a button to the first cell in a column', () => {
|
|
95
|
+
|
|
96
|
+
expect(table.querySelector('tbody td:nth-child(1) button').textContent).toEqual('Cell 1');
|
|
97
|
+
expect(table.querySelector('tbody td:nth-child(1) span').textContent).toEqual('Cell 1');
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe('createSearchDataList', () => {
|
|
102
|
+
|
|
103
|
+
const table = document.createElement('table');
|
|
104
|
+
table.innerHTML = basicTable;
|
|
105
|
+
const form = document.createElement('form');
|
|
106
|
+
form.innerHTML += `<div><input name="search" id="search" type="text" class="form-control" data-search="Heading 1"></div>`
|
|
107
|
+
|
|
108
|
+
tableModule.addDataAttributes(table);
|
|
109
|
+
tableModule.createSearchDataList(table, form);
|
|
110
|
+
|
|
111
|
+
test('should create a datalist populated by the defined columns in the data-search ', () => {
|
|
112
|
+
|
|
113
|
+
expect(form.querySelectorAll('datalist').length).toEqual(1);
|
|
114
|
+
expect(form.querySelectorAll('datalist option').length).toEqual(2);
|
|
115
|
+
expect(form.querySelector('datalist option:nth-child(1)').value).toEqual('Cell 1');
|
|
116
|
+
expect(form.querySelector('datalist option:nth-child(2)').value).toEqual('Different Cell 1');
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('should set the autocomplete attribute to off', () => {
|
|
120
|
+
|
|
121
|
+
expect(form.querySelectorAll('datalist').length).toEqual(1);
|
|
122
|
+
expect(form.querySelectorAll('datalist option').length).toEqual(2);
|
|
123
|
+
expect(form.querySelector('datalist option:nth-child(1)').value).toEqual('Cell 1');
|
|
124
|
+
expect(form.querySelector('input').getAttribute('autocomplete')).toEqual('off');
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
describe('sortTable', () => {
|
|
130
|
+
|
|
131
|
+
const table = document.createElement('table');
|
|
132
|
+
table.innerHTML = basicTable;
|
|
133
|
+
const form = document.createElement('form');
|
|
134
|
+
form.innerHTML += `<div><select type="select" name="sort" id="sort" class="form-select" data-sort=""><option value="-1">Sort by</option><option value="high" data-sort="Heading 2" data-order="High,Medium,Low" selected="selected">high to low</option></select></div>`
|
|
135
|
+
const savedTableBody = table.querySelector('tbody');
|
|
136
|
+
|
|
137
|
+
tableModule.addDataAttributes(table);
|
|
138
|
+
tableModule.sortTable(table, form, savedTableBody);
|
|
139
|
+
|
|
140
|
+
test('should sort the table from high to low', () => {
|
|
141
|
+
|
|
142
|
+
expect(table.querySelector('tbody tr:nth-child(1) td:nth-child(2)').textContent).toEqual('High');
|
|
143
|
+
expect(table.querySelector('tbody tr:nth-child(2) td:nth-child(2)').textContent).toEqual('Medium');
|
|
144
|
+
expect(table.querySelector('tbody tr:nth-child(3) td:nth-child(2)').textContent).toEqual('Low');
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
describe('filterTable', () => {
|
|
151
|
+
|
|
152
|
+
const table = document.createElement('table');
|
|
153
|
+
table.innerHTML = basicTable;
|
|
154
|
+
const form = document.createElement('form');
|
|
155
|
+
form.innerHTML += `<div><input type="text" name="filter" id="filter" data-filter="Heading 2" value="High" /></div>`;
|
|
156
|
+
|
|
157
|
+
tableModule.addDataAttributes(table);
|
|
158
|
+
tableModule.filterTable(table, form, document.createElement('div'));
|
|
159
|
+
|
|
160
|
+
test('should filter the table to only show high values', () => {
|
|
161
|
+
|
|
162
|
+
expect(table.querySelectorAll('tbody tr.filtered--matched').length).toEqual(1);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
describe('populateDataQueries', () => {
|
|
167
|
+
|
|
168
|
+
const table = document.createElement('table');
|
|
169
|
+
table.innerHTML = basicTable;
|
|
170
|
+
const form = document.createElement('form');
|
|
171
|
+
form.innerHTML += `<div><span data-query="total"></span><span data-query="Heading 2 == Low"></span></div>`;
|
|
172
|
+
|
|
173
|
+
tableModule.addDataAttributes(table);
|
|
174
|
+
tableModule.filterTable(table, form, document.createElement('div'));
|
|
175
|
+
tableModule.populateDataQueries(table, form);
|
|
176
|
+
|
|
177
|
+
console.log(table.outerHTML)
|
|
178
|
+
|
|
179
|
+
test('should populate elements with the data-query attribute with the result of the corresponding query', () => {
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
expect(form.querySelector('[data-query="total"]').textContent).toEqual('4');
|
|
183
|
+
expect(form.querySelector('[data-query="Heading 2 == Low"]').textContent).toEqual('2');
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
describe('formatCell', () => {
|
|
188
|
+
|
|
189
|
+
test('should format the text correctly', () => {
|
|
190
|
+
|
|
191
|
+
expect(tableModule.formatCell('date', '2023-05-15 12:10:45.000000')).toEqual('15 May 23');
|
|
192
|
+
expect(tableModule.formatCell('capitalise', 'low')).toEqual('Low');
|
|
193
|
+
});
|
|
194
|
+
});
|