@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.
Files changed (304) hide show
  1. package/assets/bootstrap/LICENSE +22 -0
  2. package/assets/bootstrap/README.md +246 -0
  3. package/assets/bootstrap/js/src/alert.js +87 -0
  4. package/assets/bootstrap/js/src/base-component.js +85 -0
  5. package/assets/bootstrap/js/src/button.js +72 -0
  6. package/assets/bootstrap/js/src/carousel.js +475 -0
  7. package/assets/bootstrap/js/src/collapse.js +302 -0
  8. package/assets/bootstrap/js/src/dom/data.js +55 -0
  9. package/assets/bootstrap/js/src/dom/event-handler.js +320 -0
  10. package/assets/bootstrap/js/src/dom/manipulator.js +71 -0
  11. package/assets/bootstrap/js/src/dom/selector-engine.js +83 -0
  12. package/assets/bootstrap/js/src/dropdown.js +454 -0
  13. package/assets/bootstrap/js/src/modal.js +377 -0
  14. package/assets/bootstrap/js/src/offcanvas.js +283 -0
  15. package/assets/bootstrap/js/src/popover.js +97 -0
  16. package/assets/bootstrap/js/src/scrollspy.js +294 -0
  17. package/assets/bootstrap/js/src/tab.js +305 -0
  18. package/assets/bootstrap/js/src/toast.js +225 -0
  19. package/assets/bootstrap/js/src/tooltip.js +633 -0
  20. package/assets/bootstrap/js/src/util/backdrop.js +149 -0
  21. package/assets/bootstrap/js/src/util/component-functions.js +34 -0
  22. package/assets/bootstrap/js/src/util/config.js +66 -0
  23. package/assets/bootstrap/js/src/util/focustrap.js +115 -0
  24. package/assets/bootstrap/js/src/util/index.js +336 -0
  25. package/assets/bootstrap/js/src/util/sanitizer.js +118 -0
  26. package/assets/bootstrap/js/src/util/scrollbar.js +114 -0
  27. package/assets/bootstrap/js/src/util/swipe.js +146 -0
  28. package/assets/bootstrap/js/src/util/template-factory.js +160 -0
  29. package/assets/bootstrap/package.json +181 -0
  30. package/assets/bootstrap/scss/_accordion.scss +149 -0
  31. package/assets/bootstrap/scss/_alert.scss +71 -0
  32. package/assets/bootstrap/scss/_badge.scss +38 -0
  33. package/assets/bootstrap/scss/_breadcrumb.scss +40 -0
  34. package/assets/bootstrap/scss/_button-group.scss +142 -0
  35. package/assets/bootstrap/scss/_buttons.scss +207 -0
  36. package/assets/bootstrap/scss/_card.scss +234 -0
  37. package/assets/bootstrap/scss/_carousel.scss +226 -0
  38. package/assets/bootstrap/scss/_close.scss +40 -0
  39. package/assets/bootstrap/scss/_containers.scss +41 -0
  40. package/assets/bootstrap/scss/_dropdown.scss +249 -0
  41. package/assets/bootstrap/scss/_forms.scss +9 -0
  42. package/assets/bootstrap/scss/_functions.scss +302 -0
  43. package/assets/bootstrap/scss/_grid.scss +33 -0
  44. package/assets/bootstrap/scss/_helpers.scss +10 -0
  45. package/assets/bootstrap/scss/_images.scss +42 -0
  46. package/assets/bootstrap/scss/_list-group.scss +192 -0
  47. package/assets/bootstrap/scss/_maps.scss +54 -0
  48. package/assets/bootstrap/scss/_mixins.scss +43 -0
  49. package/assets/bootstrap/scss/_modal.scss +237 -0
  50. package/assets/bootstrap/scss/_nav.scss +172 -0
  51. package/assets/bootstrap/scss/_navbar.scss +278 -0
  52. package/assets/bootstrap/scss/_offcanvas.scss +144 -0
  53. package/assets/bootstrap/scss/_pagination.scss +109 -0
  54. package/assets/bootstrap/scss/_placeholders.scss +51 -0
  55. package/assets/bootstrap/scss/_popover.scss +196 -0
  56. package/assets/bootstrap/scss/_progress.scss +59 -0
  57. package/assets/bootstrap/scss/_reboot.scss +610 -0
  58. package/assets/bootstrap/scss/_root.scss +73 -0
  59. package/assets/bootstrap/scss/_spinners.scss +85 -0
  60. package/assets/bootstrap/scss/_tables.scss +164 -0
  61. package/assets/bootstrap/scss/_toasts.scss +73 -0
  62. package/assets/bootstrap/scss/_tooltip.scss +120 -0
  63. package/assets/bootstrap/scss/_transitions.scss +27 -0
  64. package/assets/bootstrap/scss/_type.scss +106 -0
  65. package/assets/bootstrap/scss/_utilities.scss +647 -0
  66. package/assets/bootstrap/scss/_variables.scss +1634 -0
  67. package/assets/bootstrap/scss/bootstrap-grid.scss +64 -0
  68. package/assets/bootstrap/scss/bootstrap-reboot.scss +9 -0
  69. package/assets/bootstrap/scss/bootstrap-utilities.scss +18 -0
  70. package/assets/bootstrap/scss/bootstrap.scss +51 -0
  71. package/assets/bootstrap/scss/forms/_floating-labels.scss +75 -0
  72. package/assets/bootstrap/scss/forms/_form-check.scss +175 -0
  73. package/assets/bootstrap/scss/forms/_form-control.scss +194 -0
  74. package/assets/bootstrap/scss/forms/_form-range.scss +91 -0
  75. package/assets/bootstrap/scss/forms/_form-select.scss +71 -0
  76. package/assets/bootstrap/scss/forms/_form-text.scss +11 -0
  77. package/assets/bootstrap/scss/forms/_input-group.scss +132 -0
  78. package/assets/bootstrap/scss/forms/_labels.scss +36 -0
  79. package/assets/bootstrap/scss/forms/_validation.scss +12 -0
  80. package/assets/bootstrap/scss/helpers/_clearfix.scss +3 -0
  81. package/assets/bootstrap/scss/helpers/_color-bg.scss +10 -0
  82. package/assets/bootstrap/scss/helpers/_colored-links.scss +12 -0
  83. package/assets/bootstrap/scss/helpers/_position.scss +36 -0
  84. package/assets/bootstrap/scss/helpers/_ratio.scss +26 -0
  85. package/assets/bootstrap/scss/helpers/_stacks.scss +15 -0
  86. package/assets/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  87. package/assets/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  88. package/assets/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  89. package/assets/bootstrap/scss/helpers/_vr.scss +8 -0
  90. package/assets/bootstrap/scss/mixins/_alert.scss +15 -0
  91. package/assets/bootstrap/scss/mixins/_backdrop.scss +14 -0
  92. package/assets/bootstrap/scss/mixins/_banner.scss +9 -0
  93. package/assets/bootstrap/scss/mixins/_border-radius.scss +78 -0
  94. package/assets/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  95. package/assets/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  96. package/assets/bootstrap/scss/mixins/_buttons.scss +70 -0
  97. package/assets/bootstrap/scss/mixins/_caret.scss +64 -0
  98. package/assets/bootstrap/scss/mixins/_clearfix.scss +9 -0
  99. package/assets/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  100. package/assets/bootstrap/scss/mixins/_container.scss +11 -0
  101. package/assets/bootstrap/scss/mixins/_deprecate.scss +10 -0
  102. package/assets/bootstrap/scss/mixins/_forms.scss +152 -0
  103. package/assets/bootstrap/scss/mixins/_gradients.scss +47 -0
  104. package/assets/bootstrap/scss/mixins/_grid.scss +151 -0
  105. package/assets/bootstrap/scss/mixins/_image.scss +16 -0
  106. package/assets/bootstrap/scss/mixins/_list-group.scss +24 -0
  107. package/assets/bootstrap/scss/mixins/_lists.scss +7 -0
  108. package/assets/bootstrap/scss/mixins/_pagination.scss +10 -0
  109. package/assets/bootstrap/scss/mixins/_reset-text.scss +17 -0
  110. package/assets/bootstrap/scss/mixins/_resize.scss +6 -0
  111. package/assets/bootstrap/scss/mixins/_table-variants.scss +24 -0
  112. package/assets/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  113. package/assets/bootstrap/scss/mixins/_transition.scss +26 -0
  114. package/assets/bootstrap/scss/mixins/_utilities.scss +97 -0
  115. package/assets/bootstrap/scss/mixins/_visually-hidden.scss +29 -0
  116. package/assets/bootstrap/scss/utilities/_api.scss +47 -0
  117. package/assets/bootstrap/scss/vendor/_rfs.scss +354 -0
  118. package/assets/css/components/accordion.css +1 -1
  119. package/assets/css/components/accordion.css.map +1 -1
  120. package/assets/css/components/admin-panel.css +1 -0
  121. package/assets/css/components/admin-panel.css.map +1 -0
  122. package/assets/css/components/alert.css +1 -1
  123. package/assets/css/components/alert.css.map +1 -1
  124. package/assets/css/components/applied-filters.css +1 -0
  125. package/assets/css/components/applied-filters.css.map +1 -0
  126. package/assets/css/components/card.css +1 -1
  127. package/assets/css/components/card.css.map +1 -1
  128. package/assets/css/components/carousel.css +1 -1
  129. package/assets/css/components/carousel.css.map +1 -1
  130. package/assets/css/components/charts.css +1 -1
  131. package/assets/css/components/charts.css.map +1 -1
  132. package/assets/css/components/container.css +1 -1
  133. package/assets/css/components/container.css.map +1 -1
  134. package/assets/css/components/dialog.css +1 -0
  135. package/assets/css/components/dialog.css.map +1 -0
  136. package/assets/css/components/forms.css +1 -1
  137. package/assets/css/components/forms.css.map +1 -1
  138. package/assets/css/components/header.css +1 -1
  139. package/assets/css/components/header.css.map +1 -1
  140. package/assets/css/components/lists.css +1 -1
  141. package/assets/css/components/lists.css.map +1 -1
  142. package/assets/css/components/nav.css +1 -1
  143. package/assets/css/components/nav.css.map +1 -1
  144. package/assets/css/components/pagination.css +1 -0
  145. package/assets/css/components/pagination.css.map +1 -0
  146. package/assets/css/components/property-searchbar.css +1 -1
  147. package/assets/css/components/property-searchbar.css.map +1 -1
  148. package/assets/css/components/stepper.css +1 -1
  149. package/assets/css/components/stepper.css.map +1 -1
  150. package/assets/css/components/table.css +1 -0
  151. package/assets/css/components/table.css.map +1 -0
  152. package/assets/css/components/tabs.css +1 -1
  153. package/assets/css/components/tabs.css.map +1 -1
  154. package/assets/css/components/tooltips.css +1 -1
  155. package/assets/css/components/tooltips.css.map +1 -1
  156. package/assets/css/core.min.css +1 -1
  157. package/assets/css/core.min.css.map +1 -1
  158. package/assets/css/style.min.css +1 -1
  159. package/assets/css/style.min.css.map +1 -1
  160. package/assets/js/bundle.js +18 -11
  161. package/assets/js/components/accordion/accordion.component.js +6 -0
  162. package/assets/js/components/accordion/accordion.component.min.js +3 -3
  163. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  164. package/assets/js/components/applied-filters/applied-filters.component.js +26 -0
  165. package/assets/js/components/card/card.component.js +91 -0
  166. package/assets/js/components/card/card.component.min.js +21 -0
  167. package/assets/js/components/card/card.component.min.js.map +1 -0
  168. package/assets/js/components/filterlist/filterlist.component.js +49 -0
  169. package/assets/js/components/filterlist/filterlist.component.min.js +23 -0
  170. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -0
  171. package/assets/js/components/header/header.component.js +6 -0
  172. package/assets/js/components/header/header.component.min.js +5 -5
  173. package/assets/js/components/header/header.component.min.js.map +1 -1
  174. package/assets/js/components/pagination/pagination.component.js +34 -0
  175. package/assets/js/components/table/table.component.js +108 -0
  176. package/assets/js/components/table/table.component.min.js +24 -0
  177. package/assets/js/components/table/table.component.min.js.map +1 -0
  178. package/assets/js/components/tabs/tabs.component.js +6 -0
  179. package/assets/js/components/tabs/tabs.component.min.js +17 -0
  180. package/assets/js/components/tabs/tabs.component.min.js.map +1 -0
  181. package/assets/js/dynamic.js +7 -18
  182. package/assets/js/dynamic.min.js +2 -53
  183. package/assets/js/dynamic.min.js.map +1 -1
  184. package/assets/js/flat-components.js +27 -9
  185. package/assets/js/modules/applied-filters.js +100 -0
  186. package/assets/js/modules/data-layer.js +45 -0
  187. package/assets/js/modules/filterlist.js +32 -0
  188. package/assets/js/modules/helpers.js +102 -49
  189. package/assets/js/modules/pagination.js +33 -0
  190. package/assets/js/modules/table.js +506 -420
  191. package/assets/js/modules/tabs.js +6 -0
  192. package/assets/js/modules/youtubevideo.js +53 -61
  193. package/assets/js/scripts.bundle.js +77 -62
  194. package/assets/js/scripts.bundle.js.map +1 -1
  195. package/assets/js/scripts.bundle.min.js +2 -2
  196. package/assets/js/scripts.bundle.min.js.map +1 -1
  197. package/assets/js/tests/filterlist.spec.js +22 -0
  198. package/assets/js/tests/pagination.spec.js +15 -0
  199. package/assets/js/tests/table.spec.js +149 -0
  200. package/assets/sass/_components.scss +1 -2
  201. package/assets/sass/_corefiles.scss +20 -19
  202. package/assets/sass/_forms.scss +7 -7
  203. package/assets/sass/_functions/functions.scss +1 -1
  204. package/assets/sass/_functions/mixins.scss +19 -21
  205. package/assets/sass/_functions/utilities.scss +67 -9
  206. package/assets/sass/_functions/variables.scss +109 -55
  207. package/assets/sass/_tests/colours.spec.scss +8 -22
  208. package/assets/sass/components/accordion.scss +13 -0
  209. package/assets/sass/components/admin-panel.scss +106 -0
  210. package/assets/sass/components/alert.scss +22 -0
  211. package/assets/sass/components/applied-filters.scss +65 -0
  212. package/assets/sass/components/card.scss +177 -233
  213. package/assets/sass/components/carousel.scss +72 -0
  214. package/assets/sass/components/charts.scss +41 -1
  215. package/assets/sass/components/container.scss +8 -3
  216. package/assets/sass/components/dialog.scss +208 -0
  217. package/assets/sass/components/forms.scss +37 -5
  218. package/assets/sass/components/lists.scss +29 -0
  219. package/assets/sass/components/nav.scss +6 -2
  220. package/assets/sass/components/pagination.scss +140 -0
  221. package/assets/sass/components/stepper.scss +3 -3
  222. package/assets/sass/components/table.scss +423 -0
  223. package/assets/sass/components/tabs.scss +20 -7
  224. package/assets/sass/components/tooltips.scss +1 -1
  225. package/assets/sass/foundations/buttons.scss +366 -0
  226. package/assets/sass/foundations/icons.scss +1 -1
  227. package/assets/sass/foundations/links.scss +125 -0
  228. package/assets/sass/foundations/media.scss +1 -1
  229. package/assets/sass/foundations/reboot.scss +21 -17
  230. package/assets/sass/foundations/root.scss +9 -29
  231. package/assets/sass/foundations/type.scss +1 -1
  232. package/assets/svg/illustrations/table.svg +165 -0
  233. package/assets/ts/bundle.ts +23 -12
  234. package/assets/ts/components/accordion/accordion.component.ts +7 -0
  235. package/assets/ts/components/applied-filters/README.md +5 -0
  236. package/assets/ts/components/applied-filters/applied-filters.component.ts +33 -0
  237. package/assets/ts/components/card/README.md +22 -0
  238. package/assets/ts/components/card/card.component.ts +117 -0
  239. package/assets/ts/components/filterlist/README.md +17 -0
  240. package/assets/ts/components/filterlist/filterlist.component.ts +60 -0
  241. package/assets/ts/components/header/header.component.ts +8 -0
  242. package/assets/ts/components/pagination/README.md +11 -0
  243. package/assets/ts/components/pagination/pagination.component.ts +45 -0
  244. package/assets/ts/components/table/README.md +23 -0
  245. package/assets/ts/components/table/table.component.ts +133 -0
  246. package/assets/ts/components/tabs/tabs.component.ts +7 -0
  247. package/assets/ts/dynamic.ts +12 -19
  248. package/assets/ts/flat-components.ts +37 -9
  249. package/assets/ts/modules/applied-filters.ts +146 -0
  250. package/assets/ts/modules/data-layer.ts +58 -0
  251. package/assets/ts/modules/filterlist.ts +46 -0
  252. package/assets/ts/modules/helpers.ts +129 -58
  253. package/assets/ts/modules/pagination.ts +44 -0
  254. package/assets/ts/modules/table.ts +598 -433
  255. package/assets/ts/modules/tabs.ts +8 -1
  256. package/assets/ts/modules/youtubevideo.ts +58 -63
  257. package/assets/ts/tests/filterlist.spec.ts +29 -0
  258. package/assets/ts/tests/pagination.spec.ts +21 -0
  259. package/assets/ts/tests/table.spec.ts +194 -0
  260. package/dist/components.es.js +1267 -1295
  261. package/dist/components.umd.js +70 -65
  262. package/dist/style.css +1 -1
  263. package/package.json +8 -5
  264. package/src/components/AppliedFilters/AppliedFilters.vue +20 -0
  265. package/src/components/AppliedFilters/README.md +5 -0
  266. package/src/components/Card/Card.vue +11 -112
  267. package/src/components/Card/README.md +16 -18
  268. package/src/components/Carousel/Carousel.vue +49 -10
  269. package/src/components/Chart/Chart.vue +46 -4
  270. package/src/components/Filterlist/Filterlist.vue +20 -0
  271. package/src/components/Filterlist/README.md +17 -0
  272. package/src/components/Pagination/Pagination.vue +30 -0
  273. package/src/components/Pagination/README.md +11 -0
  274. package/src/components/Table/README.md +29 -44
  275. package/src/components/Table/Table.spec.js +5 -37
  276. package/src/components/Table/Table.vue +16 -91
  277. package/src/foundations/YoutubeVideo/YoutubeVideo.vue +1 -1
  278. package/src/index.js +3 -2
  279. package/assets/css/components/buttons.css +0 -1
  280. package/assets/css/components/buttons.css.map +0 -1
  281. package/assets/css/components/cardDeck.css +0 -1
  282. package/assets/css/components/cardDeck.css.map +0 -1
  283. package/assets/css/components/links.css +0 -1
  284. package/assets/css/components/links.css.map +0 -1
  285. package/assets/css/components/modal.css +0 -1
  286. package/assets/css/components/modal.css.map +0 -1
  287. package/assets/css/components/panel.css +0 -1
  288. package/assets/css/components/panel.css.map +0 -1
  289. package/assets/css/components/tables.css +0 -1
  290. package/assets/css/components/tables.css.map +0 -1
  291. package/assets/js/modules/modal.js +0 -69
  292. package/assets/sass/components/buttons.scss +0 -252
  293. package/assets/sass/components/cardDeck.scss +0 -108
  294. package/assets/sass/components/links.scss +0 -99
  295. package/assets/sass/components/modal.scss +0 -136
  296. package/assets/sass/components/panel.scss +0 -161
  297. package/assets/sass/components/tables.scss +0 -291
  298. package/assets/ts/modules/modal.ts +0 -91
  299. package/src/components/CardDeck/CardDeck.spec.js +0 -99
  300. package/src/components/CardDeck/CardDeck.vue +0 -77
  301. package/src/components/CardDeck/README.md +0 -25
  302. package/src/components/Modal/Modal.spec.js +0 -22
  303. package/src/components/Modal/Modal.vue +0 -43
  304. package/src/components/Modal/README.md +0 -20
@@ -0,0 +1,100 @@
1
+ // @ts-nocheck
2
+ function createAppliedFilters(container, filters) {
3
+ function addFilterButton(filters, input) {
4
+ let shouldRemoveFilter = false;
5
+ let inputName = input.getAttribute('name');
6
+ if (inputName.includes('[]'))
7
+ inputName = inputName.replace('[]', `[${input.value}]`);
8
+ let filter = filters.querySelector(`[data-name="${inputName}"]`);
9
+ if (filter && input.getAttribute('type') == 'checkbox')
10
+ shouldRemoveFilter = true;
11
+ let filterText = input.getAttribute('data-filter-text');
12
+ if (!filter) {
13
+ filter = document.createElement('button');
14
+ filters.appendChild(filter);
15
+ }
16
+ filter.setAttribute('type', 'button');
17
+ filter.classList.add('filter');
18
+ filter.setAttribute('data-name', inputName);
19
+ filter.innerHTML = filterText.replace('$value', input.value);
20
+ // If the value
21
+ if (!input.value || shouldRemoveFilter)
22
+ filter.remove();
23
+ // If input has an ancestor with data-filter and all of inputs in that parent have been filled in then we need to transform the filter
24
+ if (input.parentNode.closest('[data-filter-text]')) {
25
+ let parent = input.parentNode.closest('[data-filter-text]');
26
+ let allValuesSet = true;
27
+ inputName = "";
28
+ parent.querySelectorAll('input').forEach((element, index) => {
29
+ let name = element.getAttribute('name');
30
+ // create a joined inputname for the parent filter
31
+ inputName += `${index != 0 ? ',' : ''}${name}`;
32
+ if (filters.querySelector(`[data-name="${name}"]`))
33
+ filters.querySelector(`[data-name="${name}"]`).remove();
34
+ if (element.value) {
35
+ let childFilter = document.createElement('button');
36
+ childFilter.setAttribute('type', 'button');
37
+ childFilter.classList.add('filter');
38
+ childFilter.setAttribute('data-name', name);
39
+ childFilter.innerHTML = filterText.replace('$value', element.value);
40
+ filters.appendChild(childFilter);
41
+ }
42
+ else
43
+ allValuesSet = false;
44
+ });
45
+ if (filters.querySelector(`[data-name="${inputName}"]`))
46
+ filters.querySelector(`[data-name="${inputName}"]`).remove();
47
+ if (allValuesSet) {
48
+ let newFilterText = parent.getAttribute('data-filter-text');
49
+ parent.querySelectorAll('input').forEach((element, index) => {
50
+ let name = element.getAttribute('name');
51
+ // Remove all the child filter tags
52
+ if (filters.querySelector(`[data-name="${name}"]`))
53
+ filters.querySelector(`[data-name="${name}"]`).remove();
54
+ newFilterText = newFilterText.replace(`$${index + 1}`, element.value);
55
+ });
56
+ let parentFilter = document.createElement('button');
57
+ parentFilter.setAttribute('type', 'button');
58
+ parentFilter.classList.add('filter');
59
+ parentFilter.setAttribute('data-name', inputName);
60
+ parentFilter.innerHTML = newFilterText;
61
+ filters.appendChild(parentFilter);
62
+ }
63
+ }
64
+ }
65
+ // check for inputs on load
66
+ Array.from(container.querySelectorAll('input[type="checkbox"]:checked')).forEach((input, index) => {
67
+ addFilterButton(filters, input);
68
+ });
69
+ container.addEventListener('change', function (event) {
70
+ if (event && event.target instanceof HTMLElement && event.target.closest('input[data-filter-text]')) {
71
+ let input = event.target.closest('input[data-filter-text]');
72
+ addFilterButton(filters, input);
73
+ }
74
+ ;
75
+ }, false);
76
+ filters.addEventListener('click', function (event) {
77
+ if (event && event.target instanceof HTMLElement && event.target.closest('.filter')) {
78
+ let filter = event.target.closest('.filter');
79
+ let names = filter.getAttribute('data-name').split(',');
80
+ for (var t = 0; t < names.length; t++) {
81
+ let name = names[t];
82
+ let selector = `[name="${name}"]`;
83
+ if (name.match(/\[(.*)\]/)) {
84
+ let newName = name.replace(/\[(.*)\]/, `[]`);
85
+ let value = name.replace(/.*\[(.*)\]/, `$1`);
86
+ selector = `[name="${newName}"][value="${value}"]`;
87
+ }
88
+ let inputs = container.querySelectorAll(selector);
89
+ for (var i = 0; i < inputs.length; i++) {
90
+ let input = inputs[i];
91
+ if (input.getAttribute('type') != 'radio' && input.getAttribute('type') != 'checkbox')
92
+ inputs[i].value = "";
93
+ inputs[i].checked = false;
94
+ }
95
+ }
96
+ filter.remove();
97
+ }
98
+ }, false);
99
+ }
100
+ export default createAppliedFilters;
@@ -0,0 +1,45 @@
1
+ function createDataLayer() {
2
+ window.dataLayer = window.dataLayer || [];
3
+ window.dataLayer.push({
4
+ "event": "Pageview",
5
+ "pageTitle": document.title
6
+ });
7
+ // Global events to track
8
+ document.addEventListener('click', (event) => {
9
+ if (event && event.target instanceof HTMLElement && event.target.closest('[open] summary')) {
10
+ window.dataLayer.push({
11
+ "event": "closeDetails",
12
+ // @ts-ignore: Object is possibly 'null'.
13
+ "detailsTitle": event.target.closest('summary').textContent
14
+ });
15
+ }
16
+ else if (event && event.target instanceof HTMLElement && event.target.closest('summary')) {
17
+ window.dataLayer.push({
18
+ "event": "openDetails",
19
+ // @ts-ignore: Object is possibly 'null'.
20
+ "detailsTitle": event.target.closest('summary').textContent
21
+ });
22
+ }
23
+ if (event && event.target instanceof HTMLElement && event.target.closest('a')) {
24
+ window.dataLayer.push({
25
+ "event": "linkClicked",
26
+ // @ts-ignore: Object is possibly 'null'.
27
+ "linkText": event.target.closest('a').hasAttribute('title') ? event.target.closest('a').getAttribute('title') : event.target.closest('a').textContent,
28
+ // @ts-ignore: Object is possibly 'null'.
29
+ "class": (event.target.closest('a').hasAttribute('class') ? event.target.closest('a').getAttribute('class') : ''),
30
+ // @ts-ignore: Object is possibly 'null'.
31
+ "href": event.target.closest('a').getAttribute('href')
32
+ });
33
+ }
34
+ if (event && event.target instanceof HTMLElement && event.target.closest('button')) {
35
+ window.dataLayer.push({
36
+ "event": "buttonClicked",
37
+ // @ts-ignore: Object is possibly 'null'.
38
+ "buttonText": event.target.closest('button').textContent,
39
+ // @ts-ignore: Object is possibly 'null'.
40
+ "class": (event.target.closest('button').hasAttribute('class') ? event.target.closest('button').getAttribute('class') : '')
41
+ });
42
+ }
43
+ });
44
+ }
45
+ export default createDataLayer;
@@ -0,0 +1,32 @@
1
+ // @ts-nocheck
2
+ function filterlist(list, input) {
3
+ addFilterlistEventListeners(list, input);
4
+ }
5
+ function addFilterlistEventListeners(list, input) {
6
+ var timer;
7
+ input.addEventListener('keyup', (event) => {
8
+ clearTimeout(timer);
9
+ timer = setTimeout(function () {
10
+ filterTheList(list, input.value);
11
+ }, 500);
12
+ });
13
+ input.addEventListener('change', (event) => {
14
+ clearTimeout(timer);
15
+ filterTheList(list, input.value);
16
+ });
17
+ }
18
+ export const filterTheList = function (list, searchTerm) {
19
+ Array.from(list.querySelectorAll(':scope > li')).forEach((item, index) => {
20
+ let content = item.textContent.toLowerCase();
21
+ item.classList.add('d-none');
22
+ if (content.includes(searchTerm.toLowerCase()))
23
+ item.classList.remove('d-none');
24
+ });
25
+ // Data layer Web component created
26
+ window.dataLayer = window.dataLayer || [];
27
+ window.dataLayer.push({
28
+ "event": "Filtered list",
29
+ "value": searchTerm
30
+ });
31
+ };
32
+ export default filterlist;
@@ -1,4 +1,5 @@
1
1
  // @ts-nocheck
2
+ import { createEmbed } from "./youtubevideo.js";
2
3
  /**
3
4
  * Global helper functions to help maintain and enhance framework elements.
4
5
  * @module Helpers
@@ -19,62 +20,114 @@ export const addBodyClasses = (body) => {
19
20
  * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.
20
21
  */
21
22
  export const addGlobalEvents = (body) => {
22
- if (location.hash && document.querySelector(location.hash + ':not([open]) summary')) {
23
- const summary = document.querySelector(location.hash + ' summary');
24
- if (summary instanceof HTMLElement)
25
- summary.click();
26
- }
27
- window.addEventListener('hashchange', function () {
28
- const hash = location.hash.replace('#', '');
29
- const label = document.querySelector(`label[for="${hash}"]`);
30
- const summary = document.querySelector(location.hash + ' summary');
23
+ const checkElements = function (hash) {
24
+ const label = document.querySelector(`label[for="${hash.replace('#', '')}"]`);
25
+ const summary = document.querySelector(hash + ' summary');
26
+ const dialog = document.querySelector(`dialog${hash}`);
31
27
  if (label instanceof HTMLElement)
32
28
  label.click();
33
29
  else if (summary instanceof HTMLElement)
34
30
  summary.click();
35
- }, false);
36
- return null;
37
- };
38
- /**
39
- * Check if an element contains certain elements that needs enhancing with the JavaScript helpers, it is recommended to do this on the page body after the dom is loaded. Elements that are loaded via ajax should also run this function.
40
- * @param {HTMLElement} element Dom element, this doesn't have to be the body but it is recommended.
41
- */
42
- export const checkElements = (element) => {
43
- // Tables
44
- Array.from(element.querySelectorAll('table')).forEach((table, index) => {
45
- tableStacked(table);
46
- tableWrap(table);
31
+ else if (dialog instanceof HTMLElement)
32
+ dialog.showModal();
33
+ };
34
+ if (location.hash)
35
+ checkElements(location.hash);
36
+ window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);
37
+ addEventListener("popstate", (event) => {
38
+ if (event.state.type == "pagination") {
39
+ let form = document.querySelector(`#${event.state.form}`);
40
+ let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);
41
+ if (pageInput)
42
+ pageInput.value = event.state.page;
43
+ else
44
+ form.innerHTML += `<input name="page" type="hidden" data-pagination="true" value="${event.state.page}" />`;
45
+ form.dispatchEvent(new Event("submit"));
46
+ }
47
47
  });
48
- };
49
- /**
50
- * Wrap tables with a table wrapper div to help maintain its responsive design.
51
- * @param {HTMLElement} table Dom table element
52
- */
53
- export const tableWrap = (table) => {
54
- if (!table.parentNode.classList.contains('table__wrapper')) {
55
- const tableHTML = table.outerHTML;
56
- table.outerHTML = `<div class="table__wrapper">${tableHTML}</div>`;
57
- }
58
- };
59
- /**
60
- * Creates data attributes to be used by the CSS for mobile views.
61
- * @param {HTMLElement} table Dom table element
62
- */
63
- export const tableStacked = (table) => {
64
- const colHeadings = Array.from(table.querySelectorAll('thead th'));
65
- const colRows = Array.from(table.querySelectorAll('tbody tr'));
66
- colRows.forEach((row, index) => {
67
- const cells = Array.from(row.querySelectorAll('th, td'));
68
- cells.forEach((cell, cellIndex) => {
69
- const heading = colHeadings[cellIndex];
70
- if (typeof heading != "undefined") {
71
- let tempDiv = document.createElement("div");
72
- tempDiv.innerHTML = heading.innerHTML;
73
- let headingText = tempDiv.textContent || tempDiv.innerText || "";
74
- cell.setAttribute('data-label', headingText);
48
+ // Dialogs/modals
49
+ document.addEventListener('click', (event) => {
50
+ // Modal
51
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-modal]')) {
52
+ const button = event.target.closest('[data-modal]');
53
+ const modalID = button.hasAttribute('data-modal') ? button.getAttribute('data-modal') : button.getAttribute('data-filter');
54
+ const dialog = document.querySelector(`dialog#${modalID}`);
55
+ // Create close button is needed
56
+ dialog.innerHTML = `<button class="dialog__close">Close</button>${dialog.innerHTML}`;
57
+ let videoButton = dialog.querySelector('.youtube-embed a');
58
+ if (videoButton) {
59
+ createEmbed(videoButton);
75
60
  }
76
- });
61
+ dialog.showModal();
62
+ window.dataLayer = window.dataLayer || [];
63
+ window.dataLayer.push({
64
+ "event": "openModal",
65
+ "id": modalID
66
+ });
67
+ }
68
+ ;
69
+ // Close modal
70
+ if (event && event.target instanceof HTMLElement && event.target.closest('button.dialog__close')) {
71
+ const dialog = event.target.closest('dialog[open]');
72
+ event.preventDefault();
73
+ dialog.close();
74
+ window.dataLayer = window.dataLayer || [];
75
+ window.dataLayer.push({
76
+ "event": "closeModal",
77
+ "id": dialog.getAttribute('id')
78
+ });
79
+ }
80
+ if (event && event.target instanceof HTMLElement && event.target.closest('dialog[open]')) {
81
+ const dialog = event.target.closest('dialog[open]');
82
+ const dialogDimensions = dialog.getBoundingClientRect();
83
+ if (event.clientX < dialogDimensions.left || event.clientX > dialogDimensions.right || event.clientY < dialogDimensions.top || event.clientY > dialogDimensions.bottom) {
84
+ dialog.close();
85
+ window.dataLayer = window.dataLayer || [];
86
+ window.dataLayer.push({
87
+ "event": "closeModal",
88
+ "id": dialog.getAttribute('id')
89
+ });
90
+ }
91
+ }
92
+ // Popover
93
+ if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__wrapper > button')) {
94
+ // Close existing open popover
95
+ let btn = event.target.closest('.dialog__wrapper > button');
96
+ let parent = event.target.closest('.dialog__wrapper > button').parentNode;
97
+ let dataEvent = "openPopover";
98
+ let popover = parent.querySelector(':scope > dialog');
99
+ if (document.querySelector('dialog[open]') && document.querySelector('dialog[open]') != popover)
100
+ document.querySelector('dialog[open]').close();
101
+ if (popover.hasAttribute('open')) {
102
+ popover.close();
103
+ dataEvent = "closePopover";
104
+ popover.removeAttribute('style');
105
+ btn.classList.remove('active');
106
+ }
107
+ else {
108
+ popover.show();
109
+ btn.classList.add('active');
110
+ var position = btn.getBoundingClientRect();
111
+ let topOffset = position.top;
112
+ let leftOffset = position.left;
113
+ if (btn.closest('iam-table')) {
114
+ let container = btn.closest('iam-table').parentNode.getBoundingClientRect();
115
+ topOffset -= container.top;
116
+ leftOffset -= container.left;
117
+ }
118
+ if (popover.classList.contains('dialog--fix')) {
119
+ popover.setAttribute('style', `position:fixed;top: ${topOffset}px; left: ${leftOffset}px; margin: 3rem 0 0 0;`);
120
+ }
121
+ }
122
+ window.dataLayer = window.dataLayer || [];
123
+ window.dataLayer.push({
124
+ "event": dataEvent,
125
+ "id": btn.textContent
126
+ });
127
+ }
128
+ ;
77
129
  });
130
+ return null;
78
131
  };
79
132
  export const isNumeric = function (str) {
80
133
  if (typeof str != "string")
@@ -0,0 +1,33 @@
1
+ const createPaginationButttons = function (controller, pagination) {
2
+ if (!controller.getAttribute('data-pages'))
3
+ return false;
4
+ if (!controller.getAttribute('data-page'))
5
+ controller.setAttribute('data-page', 1);
6
+ let currentPage = controller.getAttribute('data-page');
7
+ let numberPages = controller.getAttribute('data-pages');
8
+ let numberRows = controller.getAttribute('data-total');
9
+ let showRows = controller.getAttribute('data-show');
10
+ let addRows = controller.getAttribute('data-increment');
11
+ if (numberPages <= 1) {
12
+ pagination.innerHTML = '';
13
+ return false;
14
+ }
15
+ let strButtons = '';
16
+ for (let i = 1; i <= numberPages; i++) {
17
+ if (i == currentPage)
18
+ strButtons += `<li class="page-item active" aria-current="page"><span class="page-link">${i}</span></li>`;
19
+ else
20
+ strButtons += `<li class="page-item"><a href="?page=${i}" class="page-link" data-page="${i}">${i}</a></li>`;
21
+ }
22
+ pagination.innerHTML = `<ul class="pagination mb-0 d-none d-sm-flex">
23
+ ${currentPage == 1 ? `<li class="page-item disabled"><span class="page-link">Previous</span></li>` : `<li class="page-item"><a href="?page=${parseInt(currentPage) - 1}" class="page-link" data-page="${parseInt(currentPage) - 1}">Previous</a></li>`}
24
+ ${strButtons}
25
+ ${currentPage == numberPages ? `<li class="page-item disabled"><span class="page-link">Next</span></li>` : `<li class="page-item"><a href="?page=${parseInt(currentPage) + 1}" class="page-link" data-page="${parseInt(currentPage) + 1}">Next</a></li>`}
26
+ </ul>`;
27
+ pagination.innerHTML += `<div class="d-sm-none text-center">
28
+ <span class="d-block pb-2">You've viewed ${showRows} of ${numberRows} results</span>
29
+ <a href="?show=${parseInt(showRows) + parseInt(addRows)}" class="btn btn-primary w-100 m-0" data-show="${parseInt(showRows) + parseInt(addRows)}">Load more results</a>
30
+ </div>`;
31
+ return true;
32
+ };
33
+ export default createPaginationButttons;