pas2js/demo/hotreload/hotreload.lpr

117 lines
3.0 KiB
ObjectPascal

program hotreload;
uses sysutils,js,web, hotreloadclient;
Type
{ TForm }
TForm = Class
Button1 : TJSElement;
Edit : TJSHTMLInputElement;
FLastReq : TJSXMLHttpRequest;
function RecompileClick(Event: TJSMouseEvent): boolean;
Constructor create; reintroduce;
private
function DoReloadChange(Event: TEventListenerEvent): boolean;
function doResponse(Event: TEventListenerEvent): boolean;
end;
function TForm.doResponse(Event: TEventListenerEvent): boolean;
Var
Data : TJSObject;
S : String;
begin
Result:=True;
console.warn('Compile request response received');
try
Data:=TJSJSON.parseObject(FLastReq.responseText);
if data['success'] then
begin
if isInteger(data['compileID']) then
begin
S:=String(data['compileID']);
Edit.value:=S;
end;
end
else
Edit.value:=''
except
console.error('Compile request response received non-json response: '+FLastReq.ResponseText);
end;
FLastReq:=nil;
end;
function TForm.RecompileClick(Event: TJSMouseEvent): boolean;
Var
Req : TJSXMLHttpRequest;
begin
Result:=True;
console.info('Recompile requested');
Req:=TJSXMLHttpRequest.new;
Req.addEventListener('load',@DoResponse);
Req.open('POST','$sys/compile');
Req.send;
FLastReq:=Req;
end;
constructor TForm.Create;
Var
D,Panel,PanelContent : TJSElement;
CB : TJSHTMLInputElement;
begin
Panel:=document.createElement('div');
// attrs are default array property...
Panel['class']:='panel panel-default';
PanelContent:=document.createElement('div');
PanelContent['class']:='panel-body';
Button1:=document.createElement('input');
Button1['id']:='Button1';
Button1['type']:='submit';
Button1['class']:='btn btn-default';
Button1['value']:='Recompile';
TJSHTMLElement(Button1).onclick:=@RecompileClick;
document.body.appendChild(Panel);
Edit:=TJSHTMLInputElement(document.createElement('input'));
Edit['id']:='recompileID';
Edit.readOnly:=true;
cb:=TJSHTMLInputElement(document.createElement('input'));
cb['id']:='autoreload';
cb['type']:='checkbox';
cb.onchange:=@DoReloadChange;
cb.checked:=THotReload.getglobal.options.Reload;
Panel.appendChild(PanelContent);
PanelContent.appendChild(Button1);
D:=Document.createElement('span');
D.id:='buildlabel';
D.appendChild(Document.createTextNode('Build ID'));
PanelContent.appendChild(D);
PanelContent.appendChild(Edit);
PanelContent.appendChild(cb);
D:=Document.createElement('span');
D.id:='reloadhint';
D.appendChild(Document.createTextNode('Reload page on build/sync'));
PanelContent.appendChild(D);
end;
function TForm.DoReloadChange(Event: TEventListenerEvent): boolean;
begin
Result:=True;
THotReload.getglobal.options.Reload:=not THotReload.getglobal.options.Reload;
end;
begin
THotReload.StartHotReload;
TForm.Create;
// THotReload.getglobal.options.Path:='status.json';
// THotReload.getglobal.options.log:=True;
end.