@iamproperty/components 3.2.0 → 3.4.5

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 (96) hide show
  1. package/README.md +30 -66
  2. package/assets/css/core.min.css.map +1 -1
  3. package/assets/css/style.min.css.map +1 -1
  4. package/assets/js/main.js +9 -9
  5. package/assets/js/modules/accordion.js +1 -0
  6. package/assets/js/modules/alert.js +37 -53
  7. package/assets/js/modules/carousel.js +74 -100
  8. package/assets/js/modules/chart.js +142 -209
  9. package/assets/js/modules/drawer.js +9 -15
  10. package/assets/js/modules/file-upload.js +30 -45
  11. package/assets/js/modules/form.js +111 -157
  12. package/assets/js/modules/helpers.js +64 -93
  13. package/assets/js/modules/modal.js +67 -88
  14. package/assets/js/modules/nav.js +17 -27
  15. package/assets/js/modules/orderablelist.js +84 -115
  16. package/assets/js/modules/table.js +387 -521
  17. package/assets/js/modules/testimonial.js +61 -80
  18. package/assets/js/modules/youtubevideo.js +104 -135
  19. package/assets/js/scripts.bundle.js +870 -936
  20. package/assets/js/scripts.bundle.js.map +1 -1
  21. package/assets/js/scripts.bundle.min.js +3 -3
  22. package/assets/js/scripts.bundle.min.js.map +1 -1
  23. package/assets/sass/_corefiles.scss +9 -9
  24. package/assets/sass/_forms.scss +1 -1
  25. package/assets/sass/_tests/{sass.spec.js → colours.spec.js} +2 -2
  26. package/assets/sass/_tests/func.spec.js +9 -0
  27. package/assets/sass/_tests/mixins.spec.js +9 -0
  28. package/assets/sass/_tests/typography.spec.js +9 -0
  29. package/assets/ts/main.ts +9 -9
  30. package/assets/ts/modules/accordion.ts +1 -0
  31. package/assets/ts/modules/alert.ts +58 -0
  32. package/assets/ts/modules/carousel.ts +103 -0
  33. package/assets/ts/modules/chart.ts +219 -0
  34. package/assets/ts/modules/drawer.ts +17 -0
  35. package/assets/ts/modules/file-upload.ts +49 -0
  36. package/assets/ts/modules/form.ts +169 -0
  37. package/assets/ts/modules/helpers.ts +120 -0
  38. package/assets/ts/modules/modal.ts +91 -0
  39. package/assets/ts/modules/nav.ts +29 -0
  40. package/assets/ts/modules/orderablelist.ts +123 -0
  41. package/assets/ts/modules/table.ts +586 -0
  42. package/assets/ts/modules/testimonial.ts +84 -0
  43. package/assets/ts/modules/youtubevideo.ts +146 -0
  44. package/dist/components.es.js +671 -750
  45. package/dist/components.umd.js +13 -13
  46. package/dist/style.css +1 -1
  47. package/package.json +54 -38
  48. package/src/components/Accordion/Accordion.vue +1 -1
  49. package/src/components/Alert/Alert.vue +1 -1
  50. package/src/{elements → components}/Card/Card.vue +1 -1
  51. package/src/components/CardDeck/CardDeck.spec.js +1 -1
  52. package/src/components/CardDeck/CardDeck.vue +1 -1
  53. package/src/components/Carousel/Carousel.vue +2 -2
  54. package/src/components/Chart/Chart.vue +2 -2
  55. package/src/{elements → components}/FileUploads/FileUploads.vue +1 -1
  56. package/src/components/Modal/Modal.vue +1 -1
  57. package/src/components/Nav/Nav.vue +2 -2
  58. package/src/components/NoteFeed/NoteFeed.vue +2 -2
  59. package/src/components/PropertySearchbar/PropertySearchbar.vue +1 -1
  60. package/src/{elements → components}/Table/Table.vue +1 -1
  61. package/src/components/Testimonial/Testimonial.vue +1 -1
  62. package/src/foundations/YoutubeVideo/YoutubeVideo.vue +1 -1
  63. package/src/index.js +4 -5
  64. package/assets/.DS_Store +0 -0
  65. package/assets/css/email.min.css +0 -1
  66. package/assets/css/email.min.css.map +0 -1
  67. package/assets/css/error.min.css +0 -1
  68. package/assets/css/error.min.css.map +0 -1
  69. package/assets/sass/components/drawer.scss +0 -47
  70. package/assets/ts/main.js +0 -57
  71. package/assets/ts/main.js.map +0 -1
  72. package/assets/ts/modules/accordion.js +0 -33
  73. package/assets/ts/modules/accordion.js.map +0 -1
  74. package/src/.DS_Store +0 -0
  75. package/src/components/Accordion/Accordion.screenshot.vue +0 -57
  76. package/src/components/Accordion/__screenshots__/win32/laptop/Accordion.png +0 -0
  77. package/src/components/Accordion/__screenshots__/win32/mobile/Accordion.png +0 -0
  78. package/src/components/Accordion/__screenshots__/win32/tablet/Accordion.png +0 -0
  79. package/src/components/Drawer/Drawer.vue +0 -53
  80. package/src/components/Drawer/README.md +0 -23
  81. /package/assets/sass/{elements → components}/buttons.scss +0 -0
  82. /package/assets/sass/{elements → components}/card.scss +0 -0
  83. /package/assets/sass/{elements → components}/container.scss +0 -0
  84. /package/assets/sass/{elements → components}/forms.scss +0 -0
  85. /package/assets/sass/{elements → components}/links.scss +0 -0
  86. /package/assets/sass/{elements → components}/lists.scss +0 -0
  87. /package/assets/sass/{elements → components}/panel.scss +0 -0
  88. /package/assets/sass/{elements → components}/tables.scss +0 -0
  89. /package/assets/sass/{elements → components}/tooltips.scss +0 -0
  90. /package/assets/sass/{elements → foundations}/type.scss +0 -0
  91. /package/src/{elements → components}/Card/README.md +0 -0
  92. /package/src/{elements → components}/FileUploads/README.md +0 -0
  93. /package/src/{elements → components}/Input/Input.vue +0 -0
  94. /package/src/{elements → components}/Input/README.md +0 -0
  95. /package/src/{elements → components}/Table/README.md +0 -0
  96. /package/src/{elements → components}/Table/Table.spec.js +0 -0
@@ -1,57 +1,41 @@
1
+ // @ts-nocheck
1
2
  function alert(element) {
2
-
3
- // Create a dissmissable button
4
- element.addEventListener('click', function(e){
5
-
6
- for (var target = e.target; target && target != this; target = target.parentNode) {
7
- if (target.matches('.btn-close')) {
8
-
9
- e.preventDefault();
10
-
11
- element.classList.remove('show');
3
+ // Create a dissmissable button
4
+ element.addEventListener('click', function (e) {
5
+ for (var target = e.target; target && target != this; target = target.parentNode) {
6
+ if (target.matches('.btn-close')) {
7
+ e.preventDefault();
8
+ element.classList.remove('show');
9
+ setTimeout(function () {
10
+ element.remove();
11
+ }, 300); // Execute something() 1 second later.
12
+ break;
13
+ }
14
+ }
15
+ }, false);
16
+ // Self disappearing alert
17
+ if (element.hasAttribute('data-timeout')) {
18
+ let timeOut = element.getAttribute('data-timeout');
12
19
  setTimeout(function () {
13
- element.remove();
14
- }, 300); // Execute something() 1 second later.
15
-
16
- break;
17
- }
20
+ element.classList.remove('show');
21
+ setTimeout(function () {
22
+ element.remove();
23
+ }, 300); // Execute something() 1 second later.
24
+ }, timeOut); // Execute something() 1 second later.
25
+ }
26
+ // Create an alert holder thats fixed to the bottom of the page, alerts with the class of alert--fix are then moved to this area. Creating a fixed but scrollable area that alerts can be stacked up on.
27
+ if (!document.querySelector('.alert__holder')) {
28
+ var bodyElement = document.getElementsByTagName("BODY")[0];
29
+ let newDiv = document.createElement("div");
30
+ newDiv.classList.add('alert__holder');
31
+ if (document.querySelector('main'))
32
+ document.querySelector('main').appendChild(newDiv);
33
+ else
34
+ document.body.appendChild(newDiv);
35
+ }
36
+ let alertHolder = document.querySelector('.alert__holder');
37
+ if (element.classList.contains('alert--fixed') && !element.parentNode.classList.contains('alert__wrapper')) {
38
+ alertHolder.appendChild(element);
18
39
  }
19
- }, false);
20
-
21
- // Self disappearing alert
22
- if(element.hasAttribute('data-timeout')){
23
-
24
- let timeOut = element.getAttribute('data-timeout');
25
-
26
- setTimeout(function () {
27
- element.classList.remove('show');
28
- setTimeout(function () {
29
- element.remove();
30
- }, 300); // Execute something() 1 second later.
31
- }, timeOut); // Execute something() 1 second later.
32
- }
33
-
34
-
35
-
36
- // Create an alert holder thats fixed to the bottom of the page, alerts with the class of alert--fix are then moved to this area. Creating a fixed but scrollable area that alerts can be stacked up on.
37
- if(!document.querySelector('.alert__holder')){
38
- var bodyElement = document.getElementsByTagName("BODY")[0];
39
-
40
- let newDiv = document.createElement("div");
41
- newDiv.classList.add('alert__holder');
42
-
43
- if(document.querySelector('main'))
44
- document.querySelector('main').appendChild(newDiv);
45
- else
46
- document.body.appendChild(newDiv);
47
- }
48
-
49
- let alertHolder = document.querySelector('.alert__holder');
50
-
51
- if(element.classList.contains('alert--fixed') && !element.parentNode.classList.contains('alert__wrapper')){
52
-
53
- alertHolder.appendChild(element);
54
- }
55
40
  }
56
-
57
- export default alert
41
+ export default alert;
@@ -1,102 +1,76 @@
1
+ // @ts-nocheck
1
2
  function carousel(carouselElement) {
2
-
3
- var scrollTimeout;
4
-
5
- let carouselInner = carouselElement.querySelector('.carousel__inner');
6
- let itemCount = carouselElement.querySelectorAll('.carousel__item').length;
7
- let cols = carouselElement.getAttribute('data-cols');
8
- let smCols = carouselElement.getAttribute('data-sm-cols');
9
- let mdCols = carouselElement.getAttribute('data-md-cols');
10
-
11
- carouselElement.querySelector('.carousel__controls a').classList.add('active');
12
-
13
- // On scroll we need to make sure the buttons get corrected and the next testimonial is shown
14
- carouselInner.addEventListener('scroll', function(e){
15
- clearTimeout(scrollTimeout);
16
- scrollTimeout = setTimeout(function(){
17
-
18
- let scrollArea = carouselInner.clientWidth;
19
- let scrollWidth = carouselInner.scrollWidth;
20
- let scrollLeft = carouselInner.scrollLeft;
21
- let targetSlide = Math.round((scrollLeft / scrollWidth) * itemCount) + 1;
22
- let lastItemOffset = carouselElement.querySelector('.carousel__item:last-child').offsetLeft;
23
-
24
- Array.from(carouselElement.querySelectorAll('.carousel__controls a')).forEach((link, index) => {
25
- link.classList.remove('active');
26
- });
27
-
28
- carouselElement.querySelector('.control-'+targetSlide).classList.add('active');
29
-
30
- // Disable the previous button
31
- if(targetSlide == 1)
32
- carouselElement.querySelector('.btn-prev').setAttribute('disabled','disabled');
33
- else
34
- carouselElement.querySelector('.btn-prev').removeAttribute('disabled');
35
-
36
- // Disable the next button if the last item is in view
37
- if(carouselInner.scrollLeft + scrollArea > lastItemOffset)
38
- carouselElement.querySelector('.btn-next').setAttribute('disabled','disabled');
39
- else
40
- carouselElement.querySelector('.btn-next').removeAttribute('disabled');
41
-
42
- }, 100);
43
-
44
- }, false);
45
-
46
- // when the buttons are used we need to make sure the carousel scrolls to the correct place
47
- carouselElement.addEventListener('click', function(e){
48
-
49
- for (var target = e.target; target && target != this; target = target.parentNode) {
50
- if (target.matches('.carousel__controls a')) {
51
-
52
- e.preventDefault();
53
-
54
- Array.from(carouselElement.querySelectorAll('.carousel__controls a')).forEach((link, index) => {
55
- link.classList.remove('active');
56
- });
57
- target.classList.add('active');
58
-
59
- const el = document.querySelector(target.getAttribute('href'));
60
-
61
- carouselInner.scroll({
62
- top: 0,
63
- left: el.offsetLeft,
64
- behavior: 'smooth'
65
- });
66
-
67
- break;
68
- }
69
- }
70
- }, false);
71
-
72
- carouselElement.addEventListener('click', function(e){
73
-
74
- for (var target = e.target; target && target != this; target = target.parentNode) {
75
- if (target.matches('.btn-next, .btn-prev')) {
76
-
77
- e.preventDefault();
78
- let scrollTo = target.classList.contains('btn-prev') ? carouselInner.scrollLeft - carouselInner.clientWidth : carouselInner.scrollLeft + carouselInner.clientWidth;
79
-
80
- carouselInner.scroll({
81
- top: 0,
82
- left: scrollTo,
83
- behavior: 'smooth'
84
- });
85
- break;
86
- }
87
- }
88
- }, false);
89
-
90
-
91
- // Add responsive hide button classes
92
- if(itemCount == 1)
93
- carouselElement.classList.add('hide-btns');
94
-
95
- if(smCols >= itemCount)
96
- carouselElement.classList.add('hide-sm-btns');
97
-
98
- if(mdCols >= itemCount)
99
- carouselElement.classList.add('hide-md-btns');
3
+ var scrollTimeout;
4
+ let carouselInner = carouselElement.querySelector('.carousel__inner');
5
+ let itemCount = carouselElement.querySelectorAll('.carousel__item').length;
6
+ let cols = carouselElement.getAttribute('data-cols');
7
+ let smCols = carouselElement.getAttribute('data-sm-cols');
8
+ let mdCols = carouselElement.getAttribute('data-md-cols');
9
+ carouselElement.querySelector('.carousel__controls a').classList.add('active');
10
+ // On scroll we need to make sure the buttons get corrected and the next testimonial is shown
11
+ carouselInner.addEventListener('scroll', function (e) {
12
+ clearTimeout(scrollTimeout);
13
+ scrollTimeout = setTimeout(function () {
14
+ let scrollArea = carouselInner.clientWidth;
15
+ let scrollWidth = carouselInner.scrollWidth;
16
+ let scrollLeft = carouselInner.scrollLeft;
17
+ let targetSlide = Math.round((scrollLeft / scrollWidth) * itemCount) + 1;
18
+ let lastItemOffset = carouselElement.querySelector('.carousel__item:last-child').offsetLeft;
19
+ Array.from(carouselElement.querySelectorAll('.carousel__controls a')).forEach((link, index) => {
20
+ link.classList.remove('active');
21
+ });
22
+ carouselElement.querySelector('.control-' + targetSlide).classList.add('active');
23
+ // Disable the previous button
24
+ if (targetSlide == 1)
25
+ carouselElement.querySelector('.btn-prev').setAttribute('disabled', 'disabled');
26
+ else
27
+ carouselElement.querySelector('.btn-prev').removeAttribute('disabled');
28
+ // Disable the next button if the last item is in view
29
+ if (carouselInner.scrollLeft + scrollArea > lastItemOffset)
30
+ carouselElement.querySelector('.btn-next').setAttribute('disabled', 'disabled');
31
+ else
32
+ carouselElement.querySelector('.btn-next').removeAttribute('disabled');
33
+ }, 100);
34
+ }, false);
35
+ // when the buttons are used we need to make sure the carousel scrolls to the correct place
36
+ carouselElement.addEventListener('click', function (e) {
37
+ for (var target = e.target; target && target != this; target = target.parentNode) {
38
+ if (target.matches('.carousel__controls a')) {
39
+ e.preventDefault();
40
+ Array.from(carouselElement.querySelectorAll('.carousel__controls a')).forEach((link, index) => {
41
+ link.classList.remove('active');
42
+ });
43
+ target.classList.add('active');
44
+ const el = document.querySelector(target.getAttribute('href'));
45
+ carouselInner.scroll({
46
+ top: 0,
47
+ left: el.offsetLeft,
48
+ behavior: 'smooth'
49
+ });
50
+ break;
51
+ }
52
+ }
53
+ }, false);
54
+ carouselElement.addEventListener('click', function (e) {
55
+ for (var target = e.target; target && target != this; target = target.parentNode) {
56
+ if (target.matches('.btn-next, .btn-prev')) {
57
+ e.preventDefault();
58
+ let scrollTo = target.classList.contains('btn-prev') ? carouselInner.scrollLeft - carouselInner.clientWidth : carouselInner.scrollLeft + carouselInner.clientWidth;
59
+ carouselInner.scroll({
60
+ top: 0,
61
+ left: scrollTo,
62
+ behavior: 'smooth'
63
+ });
64
+ break;
65
+ }
66
+ }
67
+ }, 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');
100
75
  }
101
-
102
- export default carousel
76
+ export default carousel;
@@ -1,218 +1,151 @@
1
- import { ucfirst, unsnake } from './helpers'
2
-
3
- function chart(chartElement,min,max,type) {
4
-
5
- let chartKey = chartElement.querySelector('.chart__key');
6
- let chartYaxis = chartElement.querySelector('.chart__yaxis');
7
- let chartGuidelines = chartElement.querySelector('.chart__guidelines');
8
-
9
- // Chart key
10
- if(chartKey && chartKey.childElementCount == 0){
11
- createChartKey(chartElement);
12
- }
13
-
14
- // Y Axis and Guidelines
15
- if(chartYaxis && chartYaxis.childElementCount == 0){
16
- createChartYaxis(chartElement);
17
- }
18
- if(chartGuidelines && chartGuidelines.childElementCount == 0){
19
- createChartGuidelines(chartElement);
20
- }
21
-
22
- // Create lines for line graph
23
- if(type == "line")
24
- createLines(chartElement,min,max);
25
-
26
- // Create pies
27
- if(type == "pie")
28
- createPies(chartElement);
29
-
30
- // Add css vars to cells
31
- Array.from(chartElement.querySelectorAll('tbody tr')).forEach((tr, index) => {
32
-
33
- let group = tr.querySelector('td:first-child, th:first-child') ? tr.querySelector('td:first-child, th:first-child').innerHTML : '';
34
-
35
- Array.from(tr.querySelectorAll('td[data-numeric]:not([data-numeric="0"]):not(:first-child)')).forEach((td, index) => {
36
-
37
- const value = Number.parseFloat(td.getAttribute('data-numeric'));
38
- let percent = ((value - min)/(max)) * 100;
39
- const content = td.innerHTML;
40
- const label = td.getAttribute('data-label');
41
- let bottom = 0;
42
-
43
- // If the value is negative the position below the 0 line
44
- if(min < 0){
45
- bottom = Math.abs((min)/(max)*100);
46
- if(value < 0){
47
- bottom = bottom - percent;
48
- }
49
- }
50
- td.setAttribute("style",`--bottom:${bottom}%;--percent:${percent}%;`);
51
-
52
-
53
- td.innerHTML = `<span data-group="${group}" data-label="${label}">${content}</span>`;
1
+ // @ts-nocheck
2
+ import { ucfirst, unsnake } from './helpers.js';
3
+ function chart(chartElement, min, max, type) {
4
+ let chartKey = chartElement.querySelector('.chart__key');
5
+ let chartYaxis = chartElement.querySelector('.chart__yaxis');
6
+ let chartGuidelines = chartElement.querySelector('.chart__guidelines');
7
+ // Chart key
8
+ if (chartKey && chartKey.childElementCount == 0) {
9
+ createChartKey(chartElement);
10
+ }
11
+ // Y Axis and Guidelines
12
+ if (chartYaxis && chartYaxis.childElementCount == 0) {
13
+ createChartYaxis(chartElement);
14
+ }
15
+ if (chartGuidelines && chartGuidelines.childElementCount == 0) {
16
+ createChartGuidelines(chartElement);
17
+ }
18
+ // Create lines for line graph
19
+ if (type == "line")
20
+ createLines(chartElement, min, max);
21
+ // Create pies
22
+ if (type == "pie")
23
+ createPies(chartElement);
24
+ // Add css vars to cells
25
+ Array.from(chartElement.querySelectorAll('tbody tr')).forEach((tr, index) => {
26
+ let group = tr.querySelector('td:first-child, th:first-child') ? tr.querySelector('td:first-child, th:first-child').innerHTML : '';
27
+ Array.from(tr.querySelectorAll('td[data-numeric]:not([data-numeric="0"]):not(:first-child)')).forEach((td, index) => {
28
+ const value = Number.parseFloat(td.getAttribute('data-numeric'));
29
+ let percent = ((value - min) / (max)) * 100;
30
+ const content = td.innerHTML;
31
+ const label = td.getAttribute('data-label');
32
+ let bottom = 0;
33
+ // If the value is negative the position below the 0 line
34
+ if (min < 0) {
35
+ bottom = Math.abs((min) / (max) * 100);
36
+ if (value < 0) {
37
+ bottom = bottom - percent;
38
+ }
39
+ }
40
+ td.setAttribute("style", `--bottom:${bottom}%;--percent:${percent}%;`);
41
+ td.innerHTML = `<span data-group="${group}" data-label="${label}">${content}</span>`;
42
+ });
54
43
  });
55
- });
56
- }
57
-
58
- export const createChartKey = function(chartElement){
59
-
60
- let chartKey = chartElement.querySelector('.chart__key');
61
-
62
- Array.from(chartElement.querySelectorAll('thead th')).forEach((arrayElement, index) => {
63
-
64
- chartKey.innerHTML += `<div class="key">${arrayElement.innerText}</div>`;
65
- });
66
- }
67
-
68
- export const createChartGuidelines = function(chartElement){
69
-
70
- let chartGuidelines = chartElement.querySelector('.chart__guidelines');
71
- const max = chartElement.getAttribute('data-max');
72
- const min = chartElement.getAttribute('data-min');
73
-
74
- chartGuidelines.innerHTML += `<div style="--value: 0;--percent:0%;" class="axis__point"><span>0</span></div>`;
75
- chartGuidelines.innerHTML += `<div style="--value: ${max};--percent:100%;" class="axis__point"><span>${max}</span></div>`;
76
- }
77
-
78
- export const createChartYaxis = function(chartElement){
79
-
80
- let chartYaxis = chartElement.querySelector('.chart__yaxis');
81
- const max = chartElement.getAttribute('data-max');
82
- const min = chartElement.getAttribute('data-min');
83
-
84
- chartYaxis.innerHTML += `<div style="--value: 0;--percent:0%;" class="axis__point"><span>0</span></div>`;
85
- chartYaxis.innerHTML += `<div style="--value: ${max};--percent:100%;" class="axis__point"><span>${max}</span></div>`;
86
44
  }
87
-
45
+ export const createChartKey = function (chartElement) {
46
+ let chartKey = chartElement.querySelector('.chart__key');
47
+ Array.from(chartElement.querySelectorAll('thead th')).forEach((arrayElement, index) => {
48
+ chartKey.innerHTML += `<div class="key">${arrayElement.innerText}</div>`;
49
+ });
50
+ };
51
+ export const createChartGuidelines = function (chartElement) {
52
+ let chartGuidelines = chartElement.querySelector('.chart__guidelines');
53
+ const max = chartElement.getAttribute('data-max');
54
+ const min = chartElement.getAttribute('data-min');
55
+ chartGuidelines.innerHTML += `<div style="--value: 0;--percent:0%;" class="axis__point"><span>0</span></div>`;
56
+ chartGuidelines.innerHTML += `<div style="--value: ${max};--percent:100%;" class="axis__point"><span>${max}</span></div>`;
57
+ };
58
+ export const createChartYaxis = function (chartElement) {
59
+ let chartYaxis = chartElement.querySelector('.chart__yaxis');
60
+ const max = chartElement.getAttribute('data-max');
61
+ const min = chartElement.getAttribute('data-min');
62
+ chartYaxis.innerHTML += `<div style="--value: 0;--percent:0%;" class="axis__point"><span>0</span></div>`;
63
+ chartYaxis.innerHTML += `<div style="--value: ${max};--percent:100%;" class="axis__point"><span>${max}</span></div>`;
64
+ };
88
65
  function getCoordinatesForPercent(percent) {
89
- const x = Math.cos(2 * Math.PI * percent);
90
- const y = Math.sin(2 * Math.PI * percent);
91
- return [x*100, y*100];
66
+ const x = Math.cos(2 * Math.PI * percent);
67
+ const y = Math.sin(2 * Math.PI * percent);
68
+ return [x * 100, y * 100];
92
69
  }
93
-
94
- export const createPies = function(chartElement){
95
-
96
- let returnString = '';
97
- let pieWrapper = chartElement.querySelector('.pies');
98
-
99
- Array.from(chartElement.querySelectorAll('tbody tr')).forEach((item, index) => {
100
-
101
- let paths = '';
102
- let tooltips = '';
103
-
104
- let cumulativePercent = 0;
105
-
106
- let total = 0;
107
-
108
- let titleKey = item.querySelectorAll('td')[0]
109
- let title = titleKey.innerHTML;
110
-
111
- Array.from(item.querySelectorAll('td')).forEach((cell, subindex) => {
112
-
113
- if(subindex != 0){
114
-
115
- let value = cell.getAttribute('data-numeric');
116
-
117
- value = value.replace('£','');
118
- value = value.replace('%','');
119
- value = Number.parseInt(value);
120
-
121
- total += value;
122
- }
70
+ export const createPies = function (chartElement) {
71
+ let returnString = '';
72
+ let pieWrapper = chartElement.querySelector('.pies');
73
+ Array.from(chartElement.querySelectorAll('tbody tr')).forEach((item, index) => {
74
+ let paths = '';
75
+ let tooltips = '';
76
+ let cumulativePercent = 0;
77
+ let total = 0;
78
+ let titleKey = item.querySelectorAll('td')[0];
79
+ let title = titleKey.innerHTML;
80
+ Array.from(item.querySelectorAll('td')).forEach((cell, subindex) => {
81
+ if (subindex != 0) {
82
+ let value = cell.getAttribute('data-numeric');
83
+ value = value.replace('£', '');
84
+ value = value.replace('%', '');
85
+ value = Number.parseInt(value);
86
+ total += value;
87
+ }
88
+ });
89
+ Array.from(item.querySelectorAll('td')).forEach((cell, subindex) => {
90
+ if (subindex != 0) {
91
+ let value = cell.getAttribute('data-numeric');
92
+ value = value.replace('£', '');
93
+ value = value.replace('%', '');
94
+ value = Number.parseInt(value);
95
+ let percent = value / total;
96
+ //lines[subindex-1] += `${command} ${spacer * index} ${100-percent} `;
97
+ const [startX, startY] = getCoordinatesForPercent(cumulativePercent);
98
+ // each slice starts where the last slice ended, so keep a cumulative percent
99
+ cumulativePercent += percent;
100
+ const [endX, endY] = getCoordinatesForPercent(cumulativePercent);
101
+ // if the slice is more than 50%, take the large arc (the long way around)
102
+ const largeArcFlag = percent > .5 ? 1 : 0;
103
+ // create an array and join it just for code readability
104
+ const pathData = [
105
+ `M ${startX} ${startY}`,
106
+ `A 100 100 0 ${largeArcFlag} 1 ${endX} ${endY}`,
107
+ `L 0 0`, // Line
108
+ ].join(' ');
109
+ paths += `<path d="${pathData}"></path>`;
110
+ tooltips += `<foreignObject x="-70" y="-70" width="140" height="140" style="transform: rotate(90deg)"><div><span class="h5 mb-0"><span class="total d-block">${ucfirst(unsnake(title))}</span> ${ucfirst(unsnake(cell.getAttribute('data-label')))}<br/> ${cell.innerHTML}</span></div></foreignObject>`;
111
+ }
112
+ });
113
+ returnString += `<div class="pie"><svg viewBox="-105 -105 210 210" style="transform: rotate(-90deg)" preserveAspectRatio="none">${paths}<foreignObject x="-70" y="-70" width="140" height="140" style="transform: rotate(90deg)"><div><span class="h5 mb-0">${title}</span></div></foreignObject>${tooltips}</svg></div>`;
123
114
  });
124
-
125
- Array.from(item.querySelectorAll('td')).forEach((cell, subindex) => {
126
-
127
- if(subindex != 0){
128
-
129
- let value = cell.getAttribute('data-numeric');
130
-
131
- value = value.replace('£','');
132
- value = value.replace('%','');
133
- value = Number.parseInt(value);
134
-
135
- let percent = value/total;
136
-
137
- //lines[subindex-1] += `${command} ${spacer * index} ${100-percent} `;
138
- const [startX, startY] = getCoordinatesForPercent(cumulativePercent);
139
-
140
- // each slice starts where the last slice ended, so keep a cumulative percent
141
- cumulativePercent += percent;
142
-
143
- const [endX, endY] = getCoordinatesForPercent(cumulativePercent);
144
-
145
- // if the slice is more than 50%, take the large arc (the long way around)
146
- const largeArcFlag = percent > .5 ? 1 : 0;
147
-
148
- // create an array and join it just for code readability
149
- const pathData = [
150
- `M ${startX} ${startY}`, // Move
151
- `A 100 100 0 ${largeArcFlag} 1 ${endX} ${endY}`, // Arc
152
- `L 0 0`, // Line
153
- ].join(' ');
154
-
155
- paths += `<path d="${pathData}"></path>`;
156
- tooltips += `<foreignObject x="-70" y="-70" width="140" height="140" style="transform: rotate(90deg)"><div><span class="h5 mb-0"><span class="total d-block">${ucfirst(unsnake(title))}</span> ${ucfirst(unsnake(cell.getAttribute('data-label')))}<br/> ${cell.innerHTML}</span></div></foreignObject>`;
157
- }
115
+ pieWrapper.innerHTML = returnString;
116
+ };
117
+ export const createLines = function (chartElement, min, max) {
118
+ let returnString = '';
119
+ let linesWrapper = chartElement.querySelector('.lines');
120
+ let items = Array.from(chartElement.querySelectorAll('tbody tr'));
121
+ let lines = Array();
122
+ let spacer = 200 / (items.length - 1);
123
+ // Creates the lines array from the fields array
124
+ Array.from(chartElement.querySelectorAll('thead th')).forEach((field, index) => {
125
+ if (index != 0) {
126
+ lines[index - 1] = '';
127
+ }
158
128
  });
159
-
160
- returnString += `<div class="pie"><svg viewBox="-105 -105 210 210" style="transform: rotate(-90deg)" preserveAspectRatio="none">${paths}<foreignObject x="-70" y="-70" width="140" height="140" style="transform: rotate(90deg)"><div><span class="h5 mb-0">${title}</span></div></foreignObject>${tooltips}</svg></div>`
161
- });
162
-
163
- pieWrapper.innerHTML = returnString;
164
- }
165
-
166
- export const createLines = function(chartElement,min,max){
167
-
168
- let returnString = '';
169
- let linesWrapper = chartElement.querySelector('.lines');
170
-
171
- let items = Array.from(chartElement.querySelectorAll('tbody tr'));
172
-
173
- let lines = Array();
174
- let spacer = 200/(items.length - 1);
175
-
176
- // Creates the lines array from the fields array
177
- Array.from(chartElement.querySelectorAll('thead th')).forEach((field, index) => {
178
-
179
- if(index != 0){
180
-
181
- lines[index-1] = '';
182
- }
183
- });
184
-
185
- // populate the lines array from the items array
186
- Array.from(chartElement.querySelectorAll('tbody tr')).forEach((item, index) => {
187
-
188
- Array.from(item.querySelectorAll('td')).forEach((cell, subindex) => {
189
-
190
- if(subindex != 0){
191
-
192
- let value = cell.getAttribute('data-numeric');
193
-
194
- value = value.replace('£','');
195
- value = value.replace('%','');
196
- value = Number.parseFloat(value) - min;
197
-
198
- const percent = (value/max) * 100;
199
-
200
- let command = index == 0 ? 'M' : 'L';
201
-
202
- lines[subindex-1] += `${command} ${spacer * index} ${100-percent} `;
203
- }
129
+ // populate the lines array from the items array
130
+ Array.from(chartElement.querySelectorAll('tbody tr')).forEach((item, index) => {
131
+ Array.from(item.querySelectorAll('td')).forEach((cell, subindex) => {
132
+ if (subindex != 0) {
133
+ let value = cell.getAttribute('data-numeric');
134
+ value = value.replace('£', '');
135
+ value = value.replace('%', '');
136
+ value = Number.parseFloat(value) - min;
137
+ const percent = (value / max) * 100;
138
+ let command = index == 0 ? 'M' : 'L';
139
+ lines[subindex - 1] += `${command} ${spacer * index} ${100 - percent} `;
140
+ }
141
+ });
204
142
  });
205
- });
206
-
207
- lines.forEach((line, index) => {
208
-
209
- returnString += `
143
+ lines.forEach((line, index) => {
144
+ returnString += `
210
145
  <svg viewBox="0 0 200 100" class="line" preserveAspectRatio="none">
211
146
  <path fill="none" d="${line}"></path>
212
- </svg>`
213
- });
214
-
215
- linesWrapper.innerHTML = returnString;
216
- }
217
-
218
- export default chart
147
+ </svg>`;
148
+ });
149
+ linesWrapper.innerHTML = returnString;
150
+ };
151
+ export default chart;