123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- program demotime;
- {$MODE OBJFPC}
- {$MODESWITCH EXTERNALCLASS}
- uses
- JS,
- Web,
- Math,
- ChartJS;
- function moment(const date: JSValue; const fmt: string): TJSDate; external name 'moment';
- function randomNumber(const min, max: Double): Double;
- begin
- Result := Random * (max - min) + min;
- end;
- function randomBar(const date: TJSDate; const lastClose: Double): TChartTYData;
- var
- open, close: Double;
- begin
- open := randomNumber(lastClose * 0.95, lastClose * 1.05);
- close := randomNumber(open * 0.95, open * 1.05);
- Result := TChartTYData.new(date.valueOf, close);
- end;
- procedure generateData(const date, data, labels); assembler;
- asm
- while (data.length < 60) {
- date = date.clone().add(1, 'd');
- if (date.isoWeekday() <= 5) {
- data.push(pas.program.randomBar(date, data[data.length - 1].y));
- labels.push(date);
- }
- }
- end;
- const
- dateFormat = 'MMMM DD YYYY';
- var
- select: TJSHTMLSelectElement;
- chart: TChart;
- config: TChartConfiguration;
- dataset: TChartLineDataset;
- data, labels: TJSArray;
- date: TJSDate;
- axis: TChartScaleCartesianTime;
- begin
- date := moment('April 01 2017', dateFormat);
- data := TJSArray.new(randomBar(date, 30));
- labels := TJSArray.new(date);
- generateData(date, data, labels);
- dataset := TChartLineDataset.new;
- dataset.label_ := 'CHRT - Chart.js Corporation';
- dataset.backgroundColor := 'rgba(255, 99, 132, 0.5)';
- dataset.borderColor := 'rgb(255, 99, 132)';
- dataset.data_ := data;
- dataset.type_ := 'line';
- dataset.pointRadius := 0;
- dataset.fill := False;
- dataset.lineTension := 0;
- dataset.borderWidth := 2;
- axis := TChartScaleCartesianTime.new;
- axis.type_ := 'time';
- axis.distribution := 'series';
- axis.ticks := TChartScaleCartesianTimeTick.new;
- axis.ticks.source := 'labels';
- config := TChartConfiguration.new;
- config.type_ := 'bar';
- config.data := TChartData.new;
- config.data.datasets := [dataset];
- config.options := TChartOptions.new;
- config.options.scales := TChartScalesConfiguration.new;
- config.options.scales.xAxes_ := TJSArray.new(axis);
- chart := TChart.new('myChart', config);
- select := TJSHTMLSelectElement(document.getElementById('type'));
- select.addEventListener('change',
- procedure
- begin
- chart.config.data.datasets[0].type_ := select.value;
- chart.update;
- end);
- end.
|