demointeractions.lpr 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. program demointeractions;
  2. {$MODE OBJFPC}
  3. {$MODESWITCH EXTERNALCLASS}
  4. uses
  5. JS,
  6. Web,
  7. SysUtils,
  8. ChartJS;
  9. function createConfig(const mode: string; intersect: Boolean): TChartConfiguration;
  10. var
  11. dataset: TChartLineDataset;
  12. begin
  13. Result := TChartConfiguration.new;
  14. Result.type_ := 'line';
  15. Result.data := TChartData.new;
  16. Result.data.labels := ['January', 'February', 'March', 'April', 'May',
  17. 'June', 'July'];
  18. Result.data.datasets_ := TJSArray.new;
  19. dataset := TChartLineDataset.new;
  20. dataset.label_ := 'My First dataset';
  21. dataset.borderColor := 'rgb(255, 99, 132)';
  22. dataset.backgroundColor := 'rgb(255, 99, 132)';
  23. dataset.data := [10, 30, 46, 2, 8, 50, 0];
  24. dataset.fill := False;
  25. Result.data.datasets_.push(dataset);
  26. dataset := TChartLineDataset.new;
  27. dataset.label_ := 'My Second dataset';
  28. dataset.borderColor := 'rgb(54, 162, 235)';
  29. dataset.backgroundColor := 'rgb(54, 162, 235)';
  30. dataset.data := [7, 49, 46, 13, 25, 30, 22];
  31. dataset.fill := False;
  32. Result.data.datasets_.push(dataset);
  33. Result.options := TChartOptions.new;
  34. Result.options.responsive := True;
  35. Result.options.title := TChartTitleConfiguration.new;
  36. Result.options.title.display := True;
  37. Result.options.title.text := 'Mode: ' + mode + ', intersect = ' +
  38. BoolToStr(intersect, 'true', 'false');
  39. Result.options.tooltips := TChartTooltipsConfiguration.new;
  40. Result.options.tooltips.mode := mode;
  41. Result.options.tooltips.intersect := intersect;
  42. Result.options.hover := TChartHover.new;
  43. Result.options.hover.mode := mode;
  44. Result.options.hover.intersect := intersect;
  45. end;
  46. var
  47. container, div_: TJSElement;
  48. canvas: TJSHTMLCanvasElement;
  49. hover: TChartHover;
  50. hovers: TJSArray;
  51. config: TChartConfiguration;
  52. ctx: TJSObject;
  53. begin
  54. container := document.querySelector('.demoarea');
  55. hovers := TJSArray.new;
  56. hover := TChartHover.new;
  57. hover.mode := 'index';
  58. hover.intersect := true;
  59. hovers.push(hover);
  60. hover := TChartHover.new;
  61. hover.mode := 'index';
  62. hover.intersect := False;
  63. hovers.push(hover);
  64. hover.mode := 'dataset';
  65. hover.intersect := True;
  66. hovers.push(hover);
  67. hover.mode := 'dataset';
  68. hover.intersect := False;
  69. hovers.push(hover);
  70. hover.mode := 'point';
  71. hover.intersect := True;
  72. hovers.push(hover);
  73. hover.mode := 'point';
  74. hover.intersect := False;
  75. hovers.push(hover);
  76. hover.mode := 'nearest';
  77. hover.intersect := True;
  78. hovers.push(hover);
  79. hover.mode := 'nearest';
  80. hover.intersect := False;
  81. hovers.push(hover);
  82. hover.mode := 'x';
  83. hover.intersect := True;
  84. hovers.push(hover);
  85. hover.mode := 'x';
  86. hover.intersect := False;
  87. hovers.push(hover);
  88. hover.mode := 'y';
  89. hover.intersect := True;
  90. hovers.push(hover);
  91. hover.mode := 'y';
  92. hover.intersect := False;
  93. hovers.forEach(
  94. function(element: JSValue; index: NativeInt; arr: TJSArray): Boolean
  95. var
  96. details: TChartHover;
  97. begin
  98. div_ := document.createElement('div');
  99. div_.classList.add('chart-container');
  100. canvas := TJSHTMLCanvasElement(document.createElement('canvas'));
  101. div_.appendChild(canvas);
  102. container.appendChild(div_);
  103. ctx := canvas.getContext('2d');
  104. details := TChartHover(element);
  105. config := createConfig(details.mode, details.intersect);
  106. TChart.new(ctx, config);
  107. end);
  108. end.