@iamproperty/components 3.4.6 → 3.4.7

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 (149) hide show
  1. package/assets/css/components/accordion.css.map +1 -1
  2. package/assets/css/components/applied-filters.css +1 -0
  3. package/assets/css/components/applied-filters.css.map +1 -0
  4. package/assets/css/components/card.css +1 -1
  5. package/assets/css/components/card.css.map +1 -1
  6. package/assets/css/components/charts.css +1 -1
  7. package/assets/css/components/charts.css.map +1 -1
  8. package/assets/css/components/container.css +1 -1
  9. package/assets/css/components/container.css.map +1 -1
  10. package/assets/css/components/dialog.css +1 -0
  11. package/assets/css/components/dialog.css.map +1 -0
  12. package/assets/css/components/forms.css +1 -1
  13. package/assets/css/components/forms.css.map +1 -1
  14. package/assets/css/components/lists.css +1 -1
  15. package/assets/css/components/lists.css.map +1 -1
  16. package/assets/css/components/nav.css +1 -1
  17. package/assets/css/components/nav.css.map +1 -1
  18. package/assets/css/components/pagination.css +1 -0
  19. package/assets/css/components/pagination.css.map +1 -0
  20. package/assets/css/components/table.css +1 -0
  21. package/assets/css/components/table.css.map +1 -0
  22. package/assets/css/core.min.css +1 -1
  23. package/assets/css/core.min.css.map +1 -1
  24. package/assets/css/style.min.css +1 -1
  25. package/assets/css/style.min.css.map +1 -1
  26. package/assets/js/bundle.js +18 -11
  27. package/assets/js/components/accordion/accordion.component.js +6 -0
  28. package/assets/js/components/accordion/accordion.component.min.js +3 -3
  29. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  30. package/assets/js/components/applied-filters/applied-filters.component.js +26 -0
  31. package/assets/js/components/card/card.component.js +91 -0
  32. package/assets/js/components/card/card.component.min.js +21 -0
  33. package/assets/js/components/card/card.component.min.js.map +1 -0
  34. package/assets/js/components/filterlist/filterlist.component.js +49 -0
  35. package/assets/js/components/filterlist/filterlist.component.min.js +23 -0
  36. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -0
  37. package/assets/js/components/header/header.component.js +6 -0
  38. package/assets/js/components/header/header.component.min.js +2 -2
  39. package/assets/js/components/header/header.component.min.js.map +1 -1
  40. package/assets/js/components/pagination/pagination.component.js +34 -0
  41. package/assets/js/components/table/table.component.js +104 -0
  42. package/assets/js/components/table/table.component.min.js +24 -0
  43. package/assets/js/components/table/table.component.min.js.map +1 -0
  44. package/assets/js/components/tabs/tabs.component.js +6 -0
  45. package/assets/js/components/tabs/tabs.component.min.js +17 -0
  46. package/assets/js/components/tabs/tabs.component.min.js.map +1 -0
  47. package/assets/js/dynamic.js +7 -18
  48. package/assets/js/dynamic.min.js +2 -53
  49. package/assets/js/dynamic.min.js.map +1 -1
  50. package/assets/js/flat-components.js +27 -9
  51. package/assets/js/modules/applied-filters.js +100 -0
  52. package/assets/js/modules/data-layer.js +45 -0
  53. package/assets/js/modules/filterlist.js +32 -0
  54. package/assets/js/modules/helpers.js +77 -49
  55. package/assets/js/modules/pagination.js +33 -0
  56. package/assets/js/modules/table.js +507 -420
  57. package/assets/js/modules/tabs.js +6 -0
  58. package/assets/js/modules/youtubevideo.js +53 -61
  59. package/assets/js/scripts.bundle.js +77 -62
  60. package/assets/js/scripts.bundle.js.map +1 -1
  61. package/assets/js/scripts.bundle.min.js +2 -2
  62. package/assets/js/scripts.bundle.min.js.map +1 -1
  63. package/assets/js/tests/filterlist.spec.js +22 -0
  64. package/assets/js/tests/pagination.spec.js +15 -0
  65. package/assets/js/tests/table.spec.js +147 -0
  66. package/assets/sass/_components.scss +1 -2
  67. package/assets/sass/_corefiles.scss +5 -4
  68. package/assets/sass/_functions/utilities.scss +16 -0
  69. package/assets/sass/_functions/variables.scss +32 -18
  70. package/assets/sass/_tests/colours.spec.scss +1 -1
  71. package/assets/sass/components/applied-filters.scss +65 -0
  72. package/assets/sass/components/card.scss +177 -233
  73. package/assets/sass/components/charts.scss +4 -0
  74. package/assets/sass/components/container.scss +7 -2
  75. package/assets/sass/components/dialog.scss +202 -0
  76. package/assets/sass/components/forms.scss +37 -5
  77. package/assets/sass/components/lists.scss +15 -0
  78. package/assets/sass/components/nav.scss +5 -1
  79. package/assets/sass/components/pagination.scss +140 -0
  80. package/assets/sass/components/table.scss +419 -0
  81. package/assets/sass/foundations/icons.scss +1 -1
  82. package/assets/sass/{components → foundations}/links.scss +26 -0
  83. package/assets/sass/foundations/reboot.scss +19 -13
  84. package/assets/svg/illustrations/table.svg +165 -0
  85. package/assets/ts/bundle.ts +23 -12
  86. package/assets/ts/components/accordion/accordion.component.ts +7 -0
  87. package/assets/ts/components/applied-filters/README.md +5 -0
  88. package/assets/ts/components/applied-filters/applied-filters.component.ts +33 -0
  89. package/assets/ts/components/card/README.md +22 -0
  90. package/assets/ts/components/card/card.component.ts +117 -0
  91. package/assets/ts/components/filterlist/README.md +17 -0
  92. package/assets/ts/components/filterlist/filterlist.component.ts +60 -0
  93. package/assets/ts/components/header/header.component.ts +8 -0
  94. package/assets/ts/components/pagination/README.md +11 -0
  95. package/assets/ts/components/pagination/pagination.component.ts +45 -0
  96. package/assets/ts/components/table/README.md +23 -0
  97. package/assets/ts/components/table/table.component.ts +128 -0
  98. package/assets/ts/components/tabs/tabs.component.ts +7 -0
  99. package/assets/ts/dynamic.ts +12 -19
  100. package/assets/ts/flat-components.ts +37 -9
  101. package/assets/ts/modules/applied-filters.ts +146 -0
  102. package/assets/ts/modules/data-layer.ts +58 -0
  103. package/assets/ts/modules/filterlist.ts +46 -0
  104. package/assets/ts/modules/helpers.ts +90 -60
  105. package/assets/ts/modules/pagination.ts +44 -0
  106. package/assets/ts/modules/table.ts +598 -433
  107. package/assets/ts/modules/tabs.ts +8 -1
  108. package/assets/ts/modules/youtubevideo.ts +58 -63
  109. package/assets/ts/tests/filterlist.spec.ts +29 -0
  110. package/assets/ts/tests/pagination.spec.ts +21 -0
  111. package/assets/ts/tests/table.spec.ts +191 -0
  112. package/dist/components.es.js +1264 -1296
  113. package/dist/components.umd.js +70 -65
  114. package/dist/style.css +1 -1
  115. package/package.json +7 -5
  116. package/src/components/AppliedFilters/AppliedFilters.vue +20 -0
  117. package/src/components/AppliedFilters/README.md +5 -0
  118. package/src/components/Card/Card.vue +11 -112
  119. package/src/components/Card/README.md +16 -18
  120. package/src/components/Carousel/Carousel.vue +49 -10
  121. package/src/components/Chart/Chart.vue +46 -4
  122. package/src/components/Filterlist/Filterlist.vue +20 -0
  123. package/src/components/Filterlist/README.md +17 -0
  124. package/src/components/Pagination/Pagination.vue +30 -0
  125. package/src/components/Pagination/README.md +11 -0
  126. package/src/components/Table/README.md +29 -44
  127. package/src/components/Table/Table.spec.js +5 -37
  128. package/src/components/Table/Table.vue +16 -91
  129. package/src/foundations/YoutubeVideo/YoutubeVideo.vue +1 -1
  130. package/src/index.js +3 -2
  131. package/assets/css/components/cardDeck.css +0 -1
  132. package/assets/css/components/cardDeck.css.map +0 -1
  133. package/assets/css/components/links.css +0 -1
  134. package/assets/css/components/links.css.map +0 -1
  135. package/assets/css/components/modal.css +0 -1
  136. package/assets/css/components/modal.css.map +0 -1
  137. package/assets/css/components/tables.css +0 -1
  138. package/assets/css/components/tables.css.map +0 -1
  139. package/assets/js/modules/modal.js +0 -69
  140. package/assets/sass/components/cardDeck.scss +0 -108
  141. package/assets/sass/components/modal.scss +0 -136
  142. package/assets/sass/components/tables.scss +0 -291
  143. package/assets/ts/modules/modal.ts +0 -91
  144. package/src/components/CardDeck/CardDeck.spec.js +0 -99
  145. package/src/components/CardDeck/CardDeck.vue +0 -77
  146. package/src/components/CardDeck/README.md +0 -25
  147. package/src/components/Modal/Modal.spec.js +0 -22
  148. package/src/components/Modal/Modal.vue +0 -43
  149. package/src/components/Modal/README.md +0 -20
@@ -0,0 +1,46 @@
1
+ // @ts-nocheck
2
+ function filterlist(list: Element, input:Element) {
3
+
4
+ addFilterlistEventListeners(list,input);
5
+ }
6
+
7
+ function addFilterlistEventListeners(list: Element, input:Element) {
8
+
9
+ var timer;
10
+
11
+ input.addEventListener('keyup', (event) => {
12
+
13
+ clearTimeout(timer);
14
+ timer = setTimeout(function(){
15
+ filterTheList(list,input.value);
16
+ }, 500);
17
+ });
18
+
19
+ input.addEventListener('change', (event) => {
20
+
21
+ clearTimeout(timer);
22
+
23
+ filterTheList(list, input.value);
24
+ });
25
+ }
26
+
27
+ export const filterTheList = function (list: Element, searchTerm){
28
+
29
+ Array.from(list.querySelectorAll(':scope > li')).forEach((item, index) => {
30
+ let content = item.textContent.toLowerCase();
31
+
32
+ item.classList.add('d-none');
33
+
34
+ if(content.includes(searchTerm.toLowerCase()))
35
+ item.classList.remove('d-none');
36
+ });
37
+
38
+ // Data layer Web component created
39
+ window.dataLayer = window.dataLayer || [];
40
+ window.dataLayer.push({
41
+ "event": "Filtered list",
42
+ "value": searchTerm
43
+ });
44
+ }
45
+
46
+ export default filterlist;
@@ -1,4 +1,6 @@
1
1
  // @ts-nocheck
2
+ import { createEmbed } from "./youtubevideo";
3
+
2
4
  /**
3
5
  * Global helper functions to help maintain and enhance framework elements.
4
6
  * @module Helpers
@@ -8,7 +10,7 @@
8
10
  * Add global classes used by the CSS and later JavaScript.
9
11
  * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.
10
12
  */
11
- export const addBodyClasses = (body) => {
13
+ export const addBodyClasses = (body) => {
12
14
 
13
15
  body.classList.add("js-enabled");
14
16
 
@@ -26,85 +28,113 @@
26
28
  */
27
29
  export const addGlobalEvents = (body) => {
28
30
 
29
- if(location.hash && document.querySelector(location.hash+':not([open]) summary')) {
30
-
31
- const summary = document.querySelector(location.hash+' summary');
32
-
33
- if (summary instanceof HTMLElement)
34
- summary.click();
35
- }
36
-
37
- window.addEventListener('hashchange', function() {
31
+ const checkElements = function(hash){
38
32
 
39
- const hash = location.hash.replace('#','');
40
- const label = document.querySelector(`label[for="${hash}"]`);
41
- const summary = document.querySelector(location.hash+' summary');
33
+ const label = document.querySelector(`label[for="${hash.replace('#','')}"]`);
34
+ const summary = document.querySelector(hash+' summary');
35
+ const dialog = document.querySelector(`dialog${hash}`);
42
36
 
43
37
  if(label instanceof HTMLElement)
44
38
  label.click();
45
39
  else if(summary instanceof HTMLElement)
46
40
  summary.click();
47
-
48
- }, false);
41
+ else if(dialog instanceof HTMLElement)
42
+ dialog.showModal();
43
+ }
49
44
 
50
- return null
51
- }
45
+ if(location.hash)
46
+ checkElements(location.hash);
52
47
 
53
- /**
54
- * 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.
55
- * @param {HTMLElement} element Dom element, this doesn't have to be the body but it is recommended.
56
- */
57
- export const checkElements = (element) => {
48
+ window.addEventListener('hashchange', function() { checkElements(location.hash); }, false);
58
49
 
59
- // Tables
60
- Array.from(element.querySelectorAll('table')).forEach((table, index) => {
50
+ addEventListener("popstate", (event) => {
61
51
 
62
- tableStacked(table);
63
- tableWrap(table);
52
+ if(event.state.type == "pagination"){
53
+ let form = document.querySelector(`#${event.state.form}`);
54
+ let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);
55
+
56
+ if(pageInput)
57
+ pageInput.value = event.state.page;
58
+ else
59
+ form.innerHTML += `<input name="page" type="hidden" data-pagination="true" value="${event.state.page}" />`
60
+
61
+ form.dispatchEvent(new Event("submit"));
62
+ }
64
63
  });
65
- }
66
64
 
67
- /**
68
- * Wrap tables with a table wrapper div to help maintain its responsive design.
69
- * @param {HTMLElement} table Dom table element
70
- */
71
- export const tableWrap = (table) => {
72
-
73
- if(!table.parentNode.classList.contains('table__wrapper')){
74
-
75
- const tableHTML = table.outerHTML;
65
+ // Dialogs/modals
66
+ document.addEventListener('click', (event) => {
76
67
 
77
- table.outerHTML = `<div class="table__wrapper">${tableHTML}</div>`;
78
- }
79
- }
80
-
81
- /**
82
- * Creates data attributes to be used by the CSS for mobile views.
83
- * @param {HTMLElement} table Dom table element
84
- */
85
- export const tableStacked = (table) => {
68
+ // Modal
69
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-modal]')){
86
70
 
87
- const colHeadings = Array.from(table.querySelectorAll('thead th'));
88
- const colRows = Array.from(table.querySelectorAll('tbody tr'));
71
+ const button = event.target.closest('[data-modal]');
72
+ const modalID = button.getAttribute('data-modal');
73
+ const dialog = document.querySelector(`dialog#${modalID}`);
74
+
75
+ // Create close button is needed
76
+ if(dialog.parentNode.closest('form') && !dialog.querySelector(':scope > .dialog__close:first-child'))
77
+ dialog.innerHTML = `<button class="dialog__close" formmethod="dialog">Close</button>${dialog.innerHTML}`;
78
+ else if(!dialog.parentNode.closest('form') && !dialog.querySelector(':scope > form:first-child'))
79
+ dialog.innerHTML = `<form><button class="dialog__close" formmethod="dialog">Close</button></form>${dialog.innerHTML}`;
89
80
 
90
- colRows.forEach((row, index) => {
91
81
 
92
- const cells = Array.from(row.querySelectorAll('th, td'));
93
-
94
- cells.forEach((cell, cellIndex) => {
82
+ let videoButton = dialog.querySelector('.youtube-embed a');
95
83
 
96
- const heading = colHeadings[cellIndex];
97
- if(typeof heading != "undefined"){
84
+ if (videoButton){
85
+ createEmbed(videoButton)
86
+ }
98
87
 
99
- let tempDiv = document.createElement("div");
100
- tempDiv.innerHTML = heading.innerHTML;
101
- let headingText = tempDiv.textContent || tempDiv.innerText || "";
102
- cell.setAttribute('data-label',headingText);
88
+ dialog.showModal();
89
+
90
+ window.dataLayer = window.dataLayer || [];
91
+ window.dataLayer.push({
92
+ "event": "openModal",
93
+ "id": modalID
94
+ });
95
+ };
96
+ // Close modal
97
+ if (event && event.target instanceof HTMLElement && event.target.closest('dialog[open]')){
98
+ const dialog = event.target.closest('dialog[open]');
99
+ const dialogDimensions = dialog.getBoundingClientRect()
100
+ if (event.clientX < dialogDimensions.left || event.clientX > dialogDimensions.right || event.clientY < dialogDimensions.top || event.clientY > dialogDimensions.bottom) {
101
+ dialog.close()
102
+
103
+ window.dataLayer = window.dataLayer || [];
104
+ window.dataLayer.push({
105
+ "event": "closeModal",
106
+ "id": dialog.getAttribute('id')
107
+ });
103
108
  }
104
- });
109
+ }
110
+
111
+ // Popover
112
+ if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__wrapper > button')){
113
+
114
+ let btn = event.target.closest('.dialog__wrapper > button');
115
+ let parent = event.target.closest('.dialog__wrapper > button').parentNode;
116
+ let dataEvent = "openPopover"
117
+ let popover = parent.querySelector(':scope > dialog');
118
+
119
+ if(popover.hasAttribute('open')){
120
+
121
+ popover.close();
122
+ dataEvent = "closePopover"
123
+ }
124
+ else
125
+ popover.show();
126
+
127
+ window.dataLayer = window.dataLayer || [];
128
+
129
+ window.dataLayer.push({
130
+ "event": dataEvent,
131
+ "id": btn.textContent
132
+ });
133
+ };
105
134
  });
106
- }
107
135
 
136
+ return null
137
+ }
108
138
 
109
139
  export const isNumeric = function(str) {
110
140
  if (typeof str != "string") return false // we only process strings!
@@ -125,4 +155,4 @@ export const safeID = function(str){
125
155
  str = str.replace(/\W/g,'');
126
156
 
127
157
  return str;
128
- }
158
+ }
@@ -0,0 +1,44 @@
1
+ const createPaginationButttons = function(controller: any,pagination: any){
2
+
3
+ if(!controller.getAttribute('data-pages'))
4
+ return false;
5
+
6
+ if(!controller.getAttribute('data-page'))
7
+ controller.setAttribute('data-page', 1);
8
+
9
+ let currentPage = controller.getAttribute('data-page');
10
+ let numberPages = controller.getAttribute('data-pages');
11
+ let numberRows = controller.getAttribute('data-total');
12
+ let showRows = controller.getAttribute('data-show');
13
+ let addRows = controller.getAttribute('data-increment');
14
+
15
+ if(numberPages <= 1){
16
+
17
+ pagination.innerHTML = '';
18
+ return false;
19
+ }
20
+
21
+ let strButtons = '';
22
+
23
+ for (let i = 1; i <= numberPages; i++) {
24
+
25
+ if(i == currentPage)
26
+ strButtons += `<li class="page-item active" aria-current="page"><span class="page-link">${i}</span></li>`;
27
+ else
28
+ strButtons += `<li class="page-item"><a href="?page=${i}" class="page-link" data-page="${i}">${i}</a></li>`;
29
+ }
30
+
31
+ pagination.innerHTML = `<ul class="pagination mb-0 d-none d-sm-flex">
32
+ ${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>`}
33
+ ${strButtons}
34
+ ${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>`}
35
+ </ul>`;
36
+ pagination.innerHTML += `<div class="d-sm-none text-center">
37
+ <span class="d-block pb-2">You've viewed ${showRows} of ${numberRows} results</span>
38
+ <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>
39
+ </div>`;
40
+
41
+ return true;
42
+ }
43
+
44
+ export default createPaginationButttons;