mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-06 23:27:50 +02:00
117 lines
3.0 KiB
ObjectPascal
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.
|
|
|