@iamproperty/components 5.0.0 → 5.1.0-beta10
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/accordion.css +1 -1
- package/assets/css/components/accordion.css.map +1 -1
- package/assets/css/components/accordion.global.css +1 -0
- package/assets/css/components/accordion.global.css.map +1 -0
- package/assets/css/components/actionbar.css +1 -1
- package/assets/css/components/actionbar.css.map +1 -1
- package/assets/css/components/actionbar.global.css +1 -0
- package/assets/css/components/actionbar.global.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/card.global.css +1 -0
- package/assets/css/components/card.global.css.map +1 -0
- package/assets/css/components/carousel.css +1 -1
- package/assets/css/components/carousel.css.map +1 -1
- package/assets/css/components/component.native.css +1 -0
- package/assets/css/components/component.native.css.map +1 -0
- package/assets/css/components/component.reset.css +1 -1
- package/assets/css/components/component.reset.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/header.css +1 -1
- package/assets/css/components/header.css.map +1 -1
- package/assets/css/components/marketing.css +1 -0
- package/assets/css/components/marketing.css.map +1 -0
- package/assets/css/components/nav.css +1 -1
- package/assets/css/components/nav.css.map +1 -1
- package/assets/css/components/nav.global.css +1 -0
- package/assets/css/components/nav.global.css.map +1 -0
- package/assets/css/components/notification.global.css +1 -0
- package/assets/css/components/notification.global.css.map +1 -0
- package/assets/css/components/pagination.css +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/slider.css +1 -0
- package/assets/css/components/slider.css.map +1 -0
- package/assets/css/components/table.css +1 -1
- package/assets/css/components/table.css.map +1 -1
- package/assets/css/components/{table.extras.css → table.global.css} +1 -1
- package/assets/css/components/{table.extras.css.map → table.global.css.map} +1 -1
- package/assets/css/components/tabs.css +1 -1
- package/assets/css/components/tabs.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/img/illustrations/add-new-property.png +0 -0
- package/assets/img/illustrations/auctioneer.png +0 -0
- package/assets/img/illustrations/branch.png +0 -0
- package/assets/img/illustrations/company-level.png +0 -0
- package/assets/img/illustrations/contractors.png +0 -0
- package/assets/img/illustrations/find-existing-property.png +0 -0
- package/assets/img/illustrations/green/add-new-property.png +0 -0
- package/assets/img/illustrations/green/auctioneer.png +0 -0
- package/assets/img/illustrations/green/branch.png +0 -0
- package/assets/img/illustrations/green/buyer.png +0 -0
- package/assets/img/illustrations/green/company-level.png +0 -0
- package/assets/img/illustrations/green/contractors.png +0 -0
- package/assets/img/illustrations/green/estate-agents.png +0 -0
- package/assets/img/illustrations/green/find-existing-property.png +0 -0
- package/assets/img/illustrations/green/landlords.png +0 -0
- package/assets/img/illustrations/green/seller.png +0 -0
- package/assets/img/illustrations/green/whats-new-2.png +0 -0
- package/assets/img/illustrations/green/whats-new.png +0 -0
- package/assets/img/illustrations/information-works.png +0 -0
- package/assets/img/illustrations/landlords.png +0 -0
- package/assets/img/illustrations/whats-new-2.png +0 -0
- package/assets/img/illustrations/whats-new.png +0 -0
- package/assets/img/signin-bg.png +0 -0
- package/assets/js/components/accordion/accordion.component.js +4 -0
- package/assets/js/components/accordion/accordion.component.min.js +6 -5
- package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
- package/assets/js/components/actionbar/actionbar.component.js +4 -0
- package/assets/js/components/actionbar/actionbar.component.min.js +5 -4
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +18 -4
- package/assets/js/components/address-lookup/address-lookup.component.min.js +5 -5
- 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/card/card.component.js +6 -1
- package/assets/js/components/card/card.component.min.js +6 -4
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.js +61 -0
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/header/header.component.js +6 -12
- package/assets/js/components/header/header.component.min.js +8 -14
- package/assets/js/components/header/header.component.min.js.map +1 -1
- package/assets/js/components/marketing/marketing.component.js +37 -0
- package/assets/js/components/nav/nav.component.js +8 -36
- package/assets/js/components/nav/nav.component.min.js +10 -12
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.js +4 -0
- package/assets/js/components/notification/notification.component.min.js +4 -3
- package/assets/js/components/notification/notification.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +2 -2
- package/assets/js/components/search/search.component.js +148 -0
- package/assets/js/components/search/search.component.min.js +14 -0
- package/assets/js/components/search/search.component.min.js.map +1 -0
- package/assets/js/components/slider/slider.component.js +143 -0
- package/assets/js/components/table/table.component.js +1 -1
- package/assets/js/components/table/table.component.min.js +6 -6
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.js +2 -0
- package/assets/js/components/tabs/tabs.component.min.js +5 -3
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/dynamic.js +1 -1
- package/assets/js/dynamic.min.js +5 -5
- package/assets/js/dynamic.min.js.map +1 -1
- package/assets/js/modules/carousel.js +15 -23
- package/assets/js/modules/dynamicEvents.js +28 -13
- package/assets/js/modules/helpers.js +4 -1
- package/assets/js/modules/inputs.js +44 -3
- package/assets/js/modules/table.js +8 -6
- package/assets/js/modules/tabs.js +29 -31
- package/assets/js/scripts.bundle.js +31 -35
- 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/slider.spec.js +20 -0
- package/assets/sass/_components.scss +0 -6
- package/assets/sass/_corefiles.scss +9 -88
- package/assets/sass/_elements.scss +1 -2
- package/assets/sass/_functions/mixins.scss +16 -0
- package/assets/sass/_functions/utilities.scss +0 -17
- package/assets/sass/_functions/variables.scss +1 -0
- package/assets/sass/components/accordion.global.scss +135 -0
- package/assets/sass/components/accordion.scss +6 -192
- package/assets/sass/components/{actionbar-global.scss → actionbar.global.scss} +3 -1
- package/assets/sass/components/actionbar.scss +2 -2
- package/assets/sass/components/{card-global.scss → card.global.scss} +2 -23
- package/assets/sass/components/card.scss +44 -3
- package/assets/sass/components/carousel.scss +86 -159
- package/assets/sass/components/component.native.scss +120 -0
- package/assets/sass/components/component.reset.scss +1 -3
- package/assets/sass/components/fileupload.scss +1 -1
- package/assets/sass/components/header.scss +55 -52
- package/assets/sass/components/marketing.scss +64 -0
- package/assets/sass/components/{nav-global.scss → nav.global.scss} +2 -1
- package/assets/sass/components/nav.scss +7 -1
- package/assets/sass/components/notification.global.scss +41 -0
- package/assets/sass/components/pagination.scss +4 -0
- package/assets/sass/components/slider.scss +121 -0
- package/assets/sass/components/{table.extras.scss → table.global.scss} +5 -1
- package/assets/sass/components/table.scss +1 -1
- package/assets/sass/components/tabs.scss +2 -5
- package/assets/sass/core.scss +1 -2
- package/assets/sass/elements/admin-panel.scss +9 -7
- package/assets/sass/elements/badge.scss +29 -0
- package/assets/sass/elements/container.scss +17 -0
- package/assets/sass/elements/dialog.scss +4 -4
- package/assets/sass/elements/forms.scss +142 -14
- package/assets/sass/elements/links.scss +2 -1
- package/assets/sass/elements/table.element.scss +1 -2
- package/assets/sass/error.scss +1 -1
- package/assets/sass/foundations/reboot.scss +59 -12
- package/assets/sass/foundations/root.scss +11 -3
- package/assets/sass/helpers/max-height.scss +78 -4
- package/assets/sass/main.scss +0 -1
- package/assets/sass/templates/auth.scss +112 -0
- package/assets/sass/templates/form.scss +1 -0
- package/assets/ts/components/accordion/accordion.component.ts +5 -0
- package/assets/ts/components/actionbar/actionbar.component.ts +5 -0
- package/assets/ts/components/address-lookup/address-lookup.component.ts +24 -5
- package/assets/ts/components/card/card.component.ts +7 -1
- package/assets/ts/components/carousel/README.md +39 -0
- package/assets/ts/components/carousel/carousel.component.ts +75 -0
- package/assets/ts/components/header/header.component.ts +6 -12
- package/assets/ts/components/marketing/marketing.component.ts +49 -0
- package/assets/ts/components/nav/README.md +2 -13
- package/assets/ts/components/nav/nav.component.ts +9 -47
- package/assets/ts/components/notification/notification.component.ts +4 -0
- package/assets/ts/components/search/search.component.ts +177 -0
- package/assets/ts/components/slider/README.md +26 -0
- package/assets/ts/components/slider/slider.component.ts +189 -0
- package/assets/ts/components/table/table.component.ts +1 -1
- package/assets/ts/components/tabs/tabs.component.ts +2 -0
- package/assets/ts/dynamic.ts +1 -1
- package/assets/ts/modules/carousel.ts +21 -33
- package/assets/ts/modules/dynamicEvents.ts +44 -24
- package/assets/ts/modules/helpers.ts +8 -2
- package/assets/ts/modules/inputs.ts +61 -4
- package/assets/ts/modules/table.ts +11 -14
- package/assets/ts/modules/tabs.ts +38 -41
- package/assets/ts/tests/slider.spec.ts +33 -0
- package/dist/components.es.js +893 -1542
- package/dist/components.umd.js +328 -161
- package/dist/style.css +1 -1
- package/package.json +5 -4
- package/src/components/Accordion/Accordion.vue +12 -5
- package/src/components/Actionbar/Actionbar.vue +12 -5
- package/src/components/Card/Card.vue +1 -1
- package/src/components/Carousel/Carousel.vue +18 -103
- package/src/components/Header/Header.vue +10 -6
- package/src/components/Marketing/Marketing.vue +39 -0
- package/src/components/Marketing/README.md +20 -0
- package/src/components/Nav/Nav.vue +1 -1
- package/src/components/Nav/README.md +1 -12
- package/src/components/Search/Search.vue +25 -0
- package/src/components/Slider/README.md +11 -0
- package/src/components/Slider/Slider.vue +25 -0
- package/src/components/Tabs/Tabs.vue +14 -5
- package/assets/css/components/actionbar-global.css +0 -1
- package/assets/css/components/actionbar-global.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/nav-global.css +0 -1
- package/assets/css/components/nav-global.css.map +0 -1
- package/src/components/Carousel/Carousel.spec.js +0 -45
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
function carousel(carouselElement) {
|
|
2
|
+
function carousel(carouselElement, row) {
|
|
3
3
|
var scrollTimeout;
|
|
4
4
|
let carouselInner = carouselElement.querySelector('.carousel__inner');
|
|
5
|
-
let
|
|
6
|
-
let
|
|
7
|
-
let smCols = carouselElement.getAttribute('data-sm-cols');
|
|
8
|
-
let mdCols = carouselElement.getAttribute('data-md-cols');
|
|
9
|
-
carouselElement.querySelector('.carousel__controls a').setAttribute('aria-current', true);
|
|
5
|
+
let carouselControls = carouselElement.querySelector('.carousel__controls');
|
|
6
|
+
let itemCount = row.querySelectorAll('.col').length;
|
|
10
7
|
// On scroll we need to make sure the buttons get corrected and the next testimonial is shown
|
|
11
8
|
carouselInner.addEventListener('scroll', function (e) {
|
|
12
9
|
clearTimeout(scrollTimeout);
|
|
@@ -15,9 +12,11 @@ function carousel(carouselElement) {
|
|
|
15
12
|
let scrollWidth = carouselInner.scrollWidth;
|
|
16
13
|
let scrollLeft = carouselInner.scrollLeft;
|
|
17
14
|
let targetSlide = Math.round((scrollLeft / scrollWidth) * itemCount) + 1;
|
|
18
|
-
let lastItemOffset =
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
let lastItemOffset = row.querySelector('.col:last-child').offsetLeft + 50;
|
|
16
|
+
if (carouselInner.scrollLeft + scrollArea >= lastItemOffset)
|
|
17
|
+
targetSlide = itemCount;
|
|
18
|
+
Array.from(carouselElement.querySelectorAll('.carousel__controls button')).forEach((button, index) => {
|
|
19
|
+
button.removeAttribute('aria-current');
|
|
21
20
|
});
|
|
22
21
|
carouselElement.querySelector('.control-' + targetSlide).setAttribute('aria-current', true);
|
|
23
22
|
// Disable the previous button
|
|
@@ -26,22 +25,22 @@ function carousel(carouselElement) {
|
|
|
26
25
|
else
|
|
27
26
|
carouselElement.querySelector('.btn-prev').removeAttribute('disabled');
|
|
28
27
|
// Disable the next button if the last item is in view
|
|
29
|
-
if (
|
|
28
|
+
if (targetSlide == itemCount)
|
|
30
29
|
carouselElement.querySelector('.btn-next').setAttribute('disabled', 'disabled');
|
|
31
30
|
else
|
|
32
31
|
carouselElement.querySelector('.btn-next').removeAttribute('disabled');
|
|
33
32
|
}, 100);
|
|
34
33
|
}, false);
|
|
35
34
|
// when the buttons are used we need to make sure the carousel scrolls to the correct place
|
|
36
|
-
|
|
35
|
+
carouselControls.addEventListener('click', function (e) {
|
|
37
36
|
for (var target = e.target; target && target != this; target = target.parentNode) {
|
|
38
|
-
if (target.matches('
|
|
37
|
+
if (typeof target.matches == "function" && target.matches('button')) {
|
|
39
38
|
e.preventDefault();
|
|
40
|
-
Array.from(
|
|
41
|
-
|
|
39
|
+
Array.from(carouselControls.querySelectorAll('button')).forEach((button, index) => {
|
|
40
|
+
button.removeAttribute('aria-current');
|
|
42
41
|
});
|
|
43
42
|
target.setAttribute('aria-current', true);
|
|
44
|
-
const el =
|
|
43
|
+
const el = row.querySelector(`*:nth-child(${target.getAttribute('data-slide')})`);
|
|
45
44
|
carouselInner.scroll({
|
|
46
45
|
top: 0,
|
|
47
46
|
left: el.offsetLeft,
|
|
@@ -53,7 +52,7 @@ function carousel(carouselElement) {
|
|
|
53
52
|
}, false);
|
|
54
53
|
carouselElement.addEventListener('click', function (e) {
|
|
55
54
|
for (var target = e.target; target && target != this; target = target.parentNode) {
|
|
56
|
-
if (target.matches('.btn-next, .btn-prev')) {
|
|
55
|
+
if (typeof target.matches == "function" && target.matches('.btn-next, .btn-prev')) {
|
|
57
56
|
e.preventDefault();
|
|
58
57
|
let scrollTo = target.classList.contains('btn-prev') ? carouselInner.scrollLeft - carouselInner.clientWidth : carouselInner.scrollLeft + carouselInner.clientWidth;
|
|
59
58
|
carouselInner.scroll({
|
|
@@ -65,12 +64,5 @@ function carousel(carouselElement) {
|
|
|
65
64
|
}
|
|
66
65
|
}
|
|
67
66
|
}, false);
|
|
68
|
-
// Add responsive hide button classes
|
|
69
|
-
if (itemCount == 1)
|
|
70
|
-
carouselElement.classList.add('hide-btns');
|
|
71
|
-
if (smCols >= itemCount)
|
|
72
|
-
carouselElement.classList.add('hide-sm-btns');
|
|
73
|
-
if (mdCols >= itemCount)
|
|
74
|
-
carouselElement.classList.add('hide-md-btns');
|
|
75
67
|
}
|
|
76
68
|
export default carousel;
|
|
@@ -59,19 +59,23 @@ const runEvent = (element, event, eventType) => {
|
|
|
59
59
|
return false;
|
|
60
60
|
switch (event[eventType]) {
|
|
61
61
|
case "hide":
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
if (document.querySelector(event['target'])) {
|
|
63
|
+
let hideElement = document.querySelector(event['target']);
|
|
64
|
+
hideElement.classList.add('js-hide');
|
|
65
|
+
Array.from(hideElement.querySelectorAll('[data-required]')).forEach((input, index) => {
|
|
66
|
+
input.removeAttribute('required');
|
|
67
|
+
});
|
|
68
|
+
}
|
|
67
69
|
break;
|
|
68
70
|
case "show":
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
input.
|
|
74
|
-
|
|
71
|
+
if (document.querySelector(event['target'])) {
|
|
72
|
+
let showElement = document.querySelector(event['target']);
|
|
73
|
+
showElement.classList.remove('js-hide');
|
|
74
|
+
Array.from(showElement.querySelectorAll('[data-required]')).forEach((input, index) => {
|
|
75
|
+
if (!input.closest('.js-hide'))
|
|
76
|
+
input.setAttribute('required', 'true');
|
|
77
|
+
});
|
|
78
|
+
}
|
|
75
79
|
break;
|
|
76
80
|
case "populate-form":
|
|
77
81
|
populateForm(element, event);
|
|
@@ -81,16 +85,27 @@ const runEvent = (element, event, eventType) => {
|
|
|
81
85
|
document.querySelector(`${event['target']}`).dispatchEvent(theEvent);
|
|
82
86
|
break;
|
|
83
87
|
case "setAttribute":
|
|
84
|
-
document.
|
|
88
|
+
Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element, index) {
|
|
89
|
+
element.setAttribute(event['attribute'], event['value']);
|
|
90
|
+
});
|
|
85
91
|
break;
|
|
86
92
|
case "removeAttribute":
|
|
87
|
-
document.
|
|
93
|
+
Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element, index) {
|
|
94
|
+
element.removeAttribute(event['attribute']);
|
|
95
|
+
});
|
|
88
96
|
break;
|
|
89
97
|
case "updateValue":
|
|
90
98
|
document.querySelector(`${event['target']}`).value = event['value'] ? event['value'] : "";
|
|
91
99
|
let changeEvent = new Event('change');
|
|
92
100
|
document.querySelector(`${event['target']}`).dispatchEvent(changeEvent);
|
|
93
101
|
break;
|
|
102
|
+
case "submitForm":
|
|
103
|
+
document.querySelector(`${event['target']}`).submit();
|
|
104
|
+
break;
|
|
105
|
+
case "openLink":
|
|
106
|
+
if (document.querySelector(`${event['target']}`).value)
|
|
107
|
+
window.location.href = document.querySelector(`${event['target']}`).value;
|
|
108
|
+
break;
|
|
94
109
|
default:
|
|
95
110
|
break;
|
|
96
111
|
}
|
|
@@ -34,7 +34,7 @@ export const addGlobalEvents = (body) => {
|
|
|
34
34
|
checkElements(location.hash);
|
|
35
35
|
window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);
|
|
36
36
|
addEventListener("popstate", (event) => {
|
|
37
|
-
if (event && event.state.type && event.state.type == "pagination") {
|
|
37
|
+
if (event && event.state && event.state.type && event.state.type == "pagination") {
|
|
38
38
|
let form = document.querySelector(`#${event.state.form}`);
|
|
39
39
|
let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);
|
|
40
40
|
if (pageInput)
|
|
@@ -72,3 +72,6 @@ export const safeID = function (str) {
|
|
|
72
72
|
str = str.replace(/\W/g, '');
|
|
73
73
|
return str;
|
|
74
74
|
};
|
|
75
|
+
// Used to get values from nested json objects
|
|
76
|
+
export const resolvePath = (object, path, defaultValue) => path.split(/[\.\[\]\'\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);
|
|
77
|
+
export const isTraversable = o => Array.isArray(o) || o !== null && ['function', 'object'].includes(typeof o);
|
|
@@ -1,12 +1,53 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
const extendInputs = (body) => {
|
|
3
|
-
|
|
3
|
+
function loadInput() {
|
|
4
4
|
// maxlength counter init
|
|
5
|
-
Array.from(document.querySelectorAll('input')).forEach((input, index) => {
|
|
5
|
+
Array.from(document.querySelectorAll('input[maxlength]')).forEach((input, index) => {
|
|
6
6
|
let wrapper = input.parentElement;
|
|
7
7
|
setMaxlengthVars(input, wrapper);
|
|
8
8
|
});
|
|
9
|
-
|
|
9
|
+
// Date restrictions
|
|
10
|
+
if (document.querySelector('input[type="date"]')) {
|
|
11
|
+
const today = new Date();
|
|
12
|
+
function formatDate(date) {
|
|
13
|
+
const year = date.getFullYear();
|
|
14
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
15
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
16
|
+
return `${year}-${month}-${day}`;
|
|
17
|
+
}
|
|
18
|
+
Array.from(document.querySelectorAll('input[type="date"]')).forEach((input, index) => {
|
|
19
|
+
let startDate = today;
|
|
20
|
+
if (input.hasAttribute('data-start')) {
|
|
21
|
+
startDate.setDate(startDate.getDate() + parseInt(input.getAttribute('data-start')));
|
|
22
|
+
input.setAttribute('min', formatDate(startDate));
|
|
23
|
+
}
|
|
24
|
+
if (input.hasAttribute('data-period')) {
|
|
25
|
+
let timePeriod = parseInt(input.getAttribute('data-period'));
|
|
26
|
+
let endDate = new Date();
|
|
27
|
+
endDate.setDate(startDate.getDate() + timePeriod);
|
|
28
|
+
input.setAttribute('max', formatDate(endDate));
|
|
29
|
+
}
|
|
30
|
+
if (input.hasAttribute('data-allowed-days')) {
|
|
31
|
+
let allowedDays = JSON.parse(`[${input.getAttribute('data-allowed-days')}]`);
|
|
32
|
+
input.addEventListener('input', function (e) {
|
|
33
|
+
var day = new Date(this.value).getUTCDay();
|
|
34
|
+
if (allowedDays.includes(day))
|
|
35
|
+
input.setCustomValidity("");
|
|
36
|
+
else
|
|
37
|
+
input.setCustomValidity("That day of the week is not allowed");
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (document.readyState === 'complete') {
|
|
44
|
+
loadInput();
|
|
45
|
+
}
|
|
46
|
+
document.onreadystatechange = () => {
|
|
47
|
+
if (document.readyState === "complete") {
|
|
48
|
+
loadInput();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
10
51
|
body.addEventListener('input', (event) => {
|
|
11
52
|
if (event && event.target instanceof HTMLElement && event.target.closest('input,textarea,select')) {
|
|
12
53
|
const input = event.target.closest('input,textarea,select');
|
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
// @ts-nocheck
|
|
11
|
-
import { zeroPad, isNumeric, ucfirst } from "./helpers.js";
|
|
11
|
+
import { zeroPad, isNumeric, ucfirst, resolvePath } from "./helpers.js";
|
|
12
12
|
// Basic functionality needed
|
|
13
13
|
export const addDataAttributes = (table) => {
|
|
14
14
|
const colHeadings = Array.from(table.querySelectorAll('thead th'));
|
|
@@ -51,12 +51,15 @@ export const getLargestLastColWidth = (table) => {
|
|
|
51
51
|
return largestWidth;
|
|
52
52
|
};
|
|
53
53
|
export const createMobileButton = (table, wrapper) => {
|
|
54
|
-
if (wrapper.classList.contains('
|
|
54
|
+
if (wrapper.classList.contains('table--fullwidth') && !wrapper.hasAttribute('data-expandable'))
|
|
55
55
|
return false;
|
|
56
56
|
if (table.querySelectorAll('thead tr th').length < 4 && !wrapper.hasAttribute('data-expandable'))
|
|
57
57
|
return false;
|
|
58
|
+
//If the expand column already exists we don't need to add a new one.
|
|
58
59
|
Array.from(table.querySelectorAll('thead tr')).forEach((row, index) => {
|
|
59
|
-
|
|
60
|
+
if (!table.querySelectorAll('thead tr th.expand-button-heading').length) {
|
|
61
|
+
row.insertAdjacentHTML('afterbegin', `<th class="th--fixed expand-button-heading"></th>`);
|
|
62
|
+
}
|
|
60
63
|
});
|
|
61
64
|
Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
|
|
62
65
|
const preExpanded = row.getAttribute('data-view') === 'full' ? 'aria-expanded' : '';
|
|
@@ -493,7 +496,7 @@ export const populateDataQueries = (table, form, wrapper) => {
|
|
|
493
496
|
const dataQueries = Array.from(form.querySelectorAll('[data-query]'));
|
|
494
497
|
dataQueries.forEach((queryElement, index) => {
|
|
495
498
|
let query = queryElement.getAttribute('data-query');
|
|
496
|
-
let numberOfMatchedRows;
|
|
499
|
+
let numberOfMatchedRows = 0;
|
|
497
500
|
if (query == 'total') {
|
|
498
501
|
if (wrapper.hasAttribute('data-total'))
|
|
499
502
|
numberOfMatchedRows = wrapper.getAttribute('data-total');
|
|
@@ -648,10 +651,9 @@ const filterFilters = function (form) {
|
|
|
648
651
|
};
|
|
649
652
|
export const loadAjaxTable = function (table, form, pagination, wrapper) {
|
|
650
653
|
return __awaiter(this, void 0, void 0, function* () {
|
|
651
|
-
const resolvePath = (object, path, defaultValue) => path.split(/[\.\[\]\'\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);
|
|
652
654
|
let formData = new FormData(form);
|
|
653
655
|
let queryString = new URLSearchParams(formData).toString();
|
|
654
|
-
let columns = table.querySelectorAll('thead tr th');
|
|
656
|
+
let columns = table.querySelectorAll('thead tr th:not(.expand-button-heading)');
|
|
655
657
|
let tbody = table.querySelector('tbody');
|
|
656
658
|
let ajaxURL = form.getAttribute('data-ajax');
|
|
657
659
|
wrapper.classList.add('table--loading');
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
export const createTabsLinks = function (tabsElement) {
|
|
3
3
|
const details = tabsElement.querySelectorAll(':scope > details');
|
|
4
|
+
const detailsORLinks = tabsElement.querySelectorAll(':scope > details, :scope > a');
|
|
4
5
|
let summaries = tabsElement.querySelectorAll(':scope > details > summary');
|
|
5
6
|
let tabLinks = tabsElement.querySelector(':scope > .tabs__links');
|
|
6
7
|
if (tabsElement.shadowRoot && tabsElement.shadowRoot.querySelector('.tabs__links'))
|
|
@@ -14,34 +15,40 @@ export const createTabsLinks = function (tabsElement) {
|
|
|
14
15
|
tabsElement.prepend(tabLinksWrapper);
|
|
15
16
|
}
|
|
16
17
|
// Create the tab buttons from the summary titles
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
let isDisabled = summary.classList.contains('disabled');
|
|
20
|
-
summary.classList.add('visually-hidden');
|
|
18
|
+
let tabindex = 0;
|
|
19
|
+
detailsORLinks.forEach((element, index) => {
|
|
21
20
|
let button = document.createElement('button');
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
if (element.matches('details')) {
|
|
22
|
+
let summary = element.querySelector(':scope > summary');
|
|
23
|
+
let isDisabled = summary.classList.contains('disabled');
|
|
24
|
+
summary.classList.add('visually-hidden');
|
|
25
|
+
if (element.hasAttribute('id'))
|
|
26
|
+
button.setAttribute('data-id', `${element.getAttribute('id')}`);
|
|
27
|
+
if (element.hasAttribute('open')) {
|
|
28
|
+
button.setAttribute('aria-pressed', true);
|
|
29
|
+
}
|
|
30
|
+
button.innerHTML = `${summary.innerText}`;
|
|
31
|
+
button.classList.add('link');
|
|
32
|
+
button.setAttribute('data-index', tabindex);
|
|
33
|
+
element.setAttribute('tabindex', '-1');
|
|
34
|
+
if (isDisabled) {
|
|
35
|
+
button.classList.add('disabled');
|
|
36
|
+
}
|
|
37
|
+
tabindex++;
|
|
25
38
|
}
|
|
26
|
-
if (
|
|
27
|
-
button
|
|
39
|
+
else if (element.matches('a')) {
|
|
40
|
+
button = element;
|
|
28
41
|
}
|
|
29
|
-
button.innerHTML = `${summary.innerText}`;
|
|
30
42
|
button.classList.add('link');
|
|
31
|
-
button.setAttribute('data-index', index);
|
|
32
|
-
button.setAttribute('tabindex', '-1');
|
|
33
|
-
if (isDisabled) {
|
|
34
|
-
button.classList.add('disabled');
|
|
35
|
-
}
|
|
36
43
|
tabLinks.appendChild(button);
|
|
37
44
|
});
|
|
38
45
|
};
|
|
39
46
|
export const setTabsEventHandlers = function (tabsElement) {
|
|
40
47
|
let details = tabsElement.querySelectorAll(':scope > details');
|
|
41
48
|
let summaries = tabsElement.querySelectorAll(':scope > details > summary');
|
|
42
|
-
let buttons = tabsElement.querySelectorAll(':scope .tabs__links >
|
|
49
|
+
let buttons = tabsElement.querySelectorAll(':scope .tabs__links > button');
|
|
43
50
|
if (tabsElement.shadowRoot)
|
|
44
|
-
buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links >
|
|
51
|
+
buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button');
|
|
45
52
|
// Set the on click for the tab buttons, these will open the details box it matches too
|
|
46
53
|
buttons.forEach((button) => {
|
|
47
54
|
button.addEventListener("click", (e) => {
|
|
@@ -59,8 +66,6 @@ export const setTabsEventHandlers = function (tabsElement) {
|
|
|
59
66
|
else
|
|
60
67
|
detail.removeAttribute('open');
|
|
61
68
|
});
|
|
62
|
-
if (button.hasAttribute('href'))
|
|
63
|
-
history.pushState(undefined, undefined, button.getAttribute('href'));
|
|
64
69
|
// Data layer Open Event
|
|
65
70
|
window.dataLayer = window.dataLayer || [];
|
|
66
71
|
window.dataLayer.push({
|
|
@@ -71,13 +76,6 @@ export const setTabsEventHandlers = function (tabsElement) {
|
|
|
71
76
|
});
|
|
72
77
|
// Make sure we dont loose existing summary functionality
|
|
73
78
|
summaries.forEach((summary, index) => {
|
|
74
|
-
// Maintain the focus on the summary element but visually highlight the tab button
|
|
75
|
-
summary.addEventListener("focus", (e) => {
|
|
76
|
-
buttons.forEach((button) => {
|
|
77
|
-
button.classList.remove('focus');
|
|
78
|
-
});
|
|
79
|
-
buttons[index].classList.add('focus');
|
|
80
|
-
});
|
|
81
79
|
summary.addEventListener("click", (e) => {
|
|
82
80
|
e.preventDefault();
|
|
83
81
|
buttons[index].click();
|
|
@@ -85,12 +83,12 @@ export const setTabsEventHandlers = function (tabsElement) {
|
|
|
85
83
|
});
|
|
86
84
|
};
|
|
87
85
|
export const openFirstTab = function (tabsElement) {
|
|
86
|
+
if (!tabsElement.querySelector(':scope > details'))
|
|
87
|
+
return false;
|
|
88
88
|
let details = tabsElement.querySelectorAll(':scope > details');
|
|
89
|
-
let buttons = tabsElement.querySelectorAll('
|
|
90
|
-
if (tabsElement.shadowRoot)
|
|
91
|
-
|
|
92
|
-
if (location.hash && tabsElement.querySelector(`.tabs__links [href="${location.hash}"]`)) {
|
|
93
|
-
tabsElement.querySelector(`[href="${location.hash}"]`).setAttribute('open', true);
|
|
89
|
+
let buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button');
|
|
90
|
+
if (location.hash && tabsElement.shadowRoot.querySelector(`.tabs__links [data-id="${location.hash.replace('#', '')}"]`)) {
|
|
91
|
+
tabsElement.shadowRoot.querySelector(`[data-id="${location.hash.replace('#', '')}"]`).setAttribute('aria-pressed', true);
|
|
94
92
|
tabsElement.querySelector(`details[id="${location.hash.replace('#', '')}"]`).setAttribute('open', true);
|
|
95
93
|
}
|
|
96
94
|
else if (!tabsElement.querySelector(`details[open]`)) {
|