mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-07 14:37:47 +02:00
91 lines
2.3 KiB
ObjectPascal
91 lines
2.3 KiB
ObjectPascal
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.
|