You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

180 lines
4.8 KiB

  1. import { $ } from '../../../src/js/utils/dom';
  2. import { shuffle, getRandomBias } from '../../../src/js/utils/helpers';
  3. import { fireballOver25, fireball_2_5, fireball_5_25, lineCompositeData,
  4. barCompositeData, typeData, trendsData, moonData } from './data';
  5. import dc from './demoConfig';
  6. import { docSectionBuilder } from './docSectionBuilder';
  7. let Chart = frappe.Chart; // eslint-disable-line no-undef
  8. let dcb = new docSectionBuilder(Chart);
  9. let lineComposite = new Chart("#line-composite-1", dc.lineComposite.config);
  10. let barComposite = new Chart("#bar-composite-1", dc.barComposite.config);
  11. lineComposite.parent.addEventListener('data-select', (e) => {
  12. let i = e.index;
  13. barComposite.updateDatasets([
  14. fireballOver25[i], fireball_5_25[i], fireball_2_5[i]
  15. ]);
  16. });
  17. let section = document.querySelector('.demo-main');
  18. dcb.setParent(section);
  19. dcb.setSys(dc.demoMain);
  20. dcb.make();
  21. // Update values chart
  22. // ================================================================================
  23. let updateDataAllLabels = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon", "Tue",
  24. "Wed", "Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri",
  25. "Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon"];
  26. let getRandom = () => Math.floor(getRandomBias(-40, 60, 0.8, 1));
  27. let updateDataAllValues = Array.from({length: 30}, getRandom);
  28. // We're gonna be shuffling this
  29. let updateDataAllIndices = updateDataAllLabels.map((d,i) => i);
  30. let getUpdateData = (source_array, length=10) => {
  31. let indices = updateDataAllIndices.slice(0, length);
  32. return indices.map((index) => source_array[index]);
  33. };
  34. let updateData = {
  35. labels: getUpdateData(updateDataAllLabels),
  36. datasets: [{
  37. "values": getUpdateData(updateDataAllValues)
  38. }],
  39. yMarkers: [
  40. {
  41. label: "Altitude",
  42. value: 25,
  43. type: 'dashed'
  44. }
  45. ],
  46. yRegions: [
  47. {
  48. label: "Range",
  49. start: 10,
  50. end: 45
  51. },
  52. ],
  53. };
  54. let updateChart = new Chart("#chart-update", {
  55. data: updateData,
  56. type: 'line',
  57. height: 300,
  58. colors: ['#ff6c03'],
  59. lineOptions: {
  60. // hideLine: 1,
  61. regionFill: 1
  62. },
  63. });
  64. let chartUpdateButtons = document.querySelector('.chart-update-buttons');
  65. chartUpdateButtons.querySelector('[data-update="random"]').addEventListener("click", () => {
  66. shuffle(updateDataAllIndices);
  67. let value = getRandom();
  68. let start = getRandom();
  69. let end = getRandom();
  70. let data = {
  71. labels: updateDataAllLabels.slice(0, 10),
  72. datasets: [{values: getUpdateData(updateDataAllValues)}],
  73. yMarkers: [
  74. {
  75. label: "Altitude",
  76. value: value,
  77. type: 'dashed'
  78. }
  79. ],
  80. yRegions: [
  81. {
  82. label: "Range",
  83. start: start,
  84. end: end
  85. },
  86. ],
  87. };
  88. updateChart.update(data);
  89. });
  90. chartUpdateButtons.querySelector('[data-update="add"]').addEventListener("click", () => {
  91. let index = updateChart.state.datasetLength; // last index to add
  92. if(index >= updateDataAllIndices.length) return;
  93. updateChart.addDataPoint(
  94. updateDataAllLabels[index], [updateDataAllValues[index]]
  95. );
  96. });
  97. chartUpdateButtons.querySelector('[data-update="remove"]').addEventListener("click", () => {
  98. updateChart.removeDataPoint();
  99. });
  100. document.querySelector('.export-update').addEventListener('click', () => {
  101. updateChart.export();
  102. });
  103. // Trends Chart
  104. // ================================================================================
  105. section = document.querySelector('.trends-plot');
  106. dcb.setParent(section);
  107. dcb.setSys(dc.trendsPlot);
  108. dcb.make();
  109. let eventsData = {
  110. labels: ["Ganymede", "Callisto", "Io", "Europa"],
  111. datasets: [
  112. {
  113. "values": moonData.distances,
  114. "formatted": moonData.distances.map(d => d*1000 + " km")
  115. }
  116. ]
  117. };
  118. let eventsChart = new Chart("#chart-events", {
  119. title: "Jupiter's Moons: Semi-major Axis (1000 km)",
  120. data: eventsData,
  121. type: 'bar',
  122. height: 330,
  123. colors: ['grey'],
  124. isNavigable: 1,
  125. });
  126. let dataDiv = document.querySelector('.chart-events-data');
  127. eventsChart.parent.addEventListener('data-select', (e) => {
  128. let name = moonData.names[e.index];
  129. dataDiv.querySelector('.moon-name').innerHTML = name;
  130. dataDiv.querySelector('.semi-major-axis').innerHTML = moonData.distances[e.index] * 1000;
  131. dataDiv.querySelector('.mass').innerHTML = moonData.masses[e.index];
  132. dataDiv.querySelector('.diameter').innerHTML = moonData.diameters[e.index];
  133. dataDiv.querySelector('img').src = "./assets/img/" + name.toLowerCase() + ".jpg";
  134. });
  135. // Heatmap
  136. // ================================================================================
  137. section = document.querySelector('.heatmap');
  138. dcb.setParent(section);
  139. dcb.setSys(dc.heatmap);
  140. dcb.make();
  141. section = document.querySelector('.codepen');
  142. dcb.setParent(section);
  143. dcb.setSys(dc.codePenDemo);
  144. dcb.make();
  145. section = document.querySelector('.options');
  146. dcb.setParent(section);
  147. dcb.setSys(dc.optionsList);
  148. dcb.make();
  149. section = document.querySelector('.installation');
  150. dcb.setParent(section);
  151. dcb.setSys(dc.installation);
  152. dcb.make();