123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- program demointeractions;
- {$MODE OBJFPC}
- {$MODESWITCH EXTERNALCLASS}
- uses
- JS,
- Web,
- SysUtils,
- ChartJS;
- function createConfig(const mode: string; intersect: Boolean): TChartConfiguration;
- var
- dataset: TChartLineDataset;
- begin
- Result := TChartConfiguration.new;
- Result.type_ := 'line';
- Result.data := TChartData.new;
- Result.data.labels := ['January', 'February', 'March', 'April', 'May',
- 'June', 'July'];
- Result.data.datasets_ := TJSArray.new;
- dataset := TChartLineDataset.new;
- dataset.label_ := 'My First dataset';
- dataset.borderColor := 'rgb(255, 99, 132)';
- dataset.backgroundColor := 'rgb(255, 99, 132)';
- dataset.data := [10, 30, 46, 2, 8, 50, 0];
- dataset.fill := False;
- Result.data.datasets_.push(dataset);
- dataset := TChartLineDataset.new;
- dataset.label_ := 'My Second dataset';
- dataset.borderColor := 'rgb(54, 162, 235)';
- dataset.backgroundColor := 'rgb(54, 162, 235)';
- dataset.data := [7, 49, 46, 13, 25, 30, 22];
- dataset.fill := False;
- Result.data.datasets_.push(dataset);
- Result.options := TChartOptions.new;
- Result.options.responsive := True;
- Result.options.title := TChartTitleConfiguration.new;
- Result.options.title.display := True;
- Result.options.title.text := 'Mode: ' + mode + ', intersect = ' +
- BoolToStr(intersect, 'true', 'false');
- Result.options.tooltips := TChartTooltipsConfiguration.new;
- Result.options.tooltips.mode := mode;
- Result.options.tooltips.intersect := intersect;
- Result.options.hover := TChartHover.new;
- Result.options.hover.mode := mode;
- Result.options.hover.intersect := intersect;
- end;
- var
- container, div_: TJSElement;
- canvas: TJSHTMLCanvasElement;
- hover: TChartHover;
- hovers: TJSArray;
- config: TChartConfiguration;
- ctx: TJSObject;
- begin
- container := document.querySelector('.demoarea');
- hovers := TJSArray.new;
- hover := TChartHover.new;
- hover.mode := 'index';
- hover.intersect := true;
- hovers.push(hover);
- hover := TChartHover.new;
- hover.mode := 'index';
- hover.intersect := False;
- hovers.push(hover);
- hover.mode := 'dataset';
- hover.intersect := True;
- hovers.push(hover);
- hover.mode := 'dataset';
- hover.intersect := False;
- hovers.push(hover);
- hover.mode := 'point';
- hover.intersect := True;
- hovers.push(hover);
- hover.mode := 'point';
- hover.intersect := False;
- hovers.push(hover);
- hover.mode := 'nearest';
- hover.intersect := True;
- hovers.push(hover);
- hover.mode := 'nearest';
- hover.intersect := False;
- hovers.push(hover);
- hover.mode := 'x';
- hover.intersect := True;
- hovers.push(hover);
- hover.mode := 'x';
- hover.intersect := False;
- hovers.push(hover);
- hover.mode := 'y';
- hover.intersect := True;
- hovers.push(hover);
- hover.mode := 'y';
- hover.intersect := False;
- hovers.forEach(
- function(element: JSValue; index: NativeInt; arr: TJSArray): Boolean
- var
- details: TChartHover;
- begin
- div_ := document.createElement('div');
- div_.classList.add('chart-container');
- canvas := TJSHTMLCanvasElement(document.createElement('canvas'));
- div_.appendChild(canvas);
- container.appendChild(div_);
- ctx := canvas.getContext('2d');
- details := TChartHover(element);
- config := createConfig(details.mode, details.intersect);
- TChart.new(ctx, config);
- end);
- end.
|