pas2js/demo/xterm/xtermdemo.lpr
2021-12-24 13:44:37 +01:00

87 lines
1.8 KiB
ObjectPascal

program xtermdemo;
{$mode objfpc}
uses
browserapp, JS, Classes, SysUtils, Web, xterm;
type
{ TMyApplication }
TMyApplication = class(TBrowserApplication)
FTerminal : TXTerm.TTerminal;
FTermEl : TJSHTMLElement;
Finp : TJSHTMLInputElement;
FBtnSend : TJSHTMLButtonElement;
procedure doRun; override;
private
function DoData(data: String): Boolean;
function DoKey(key : TXTerm.TOnKeyCallbackDataType): Boolean;
function DoSendClick(aEvent: TJSMouseEvent): boolean;
end;
function TMyApplication.DoKey(key : TXTerm.TOnKeyCallbackDataType): Boolean;
Var
printable : Boolean;
begin
Result:=true;
With key do
printable :=Not (domEvent.altKey or domEvent.metaKey or domEvent.ctrlKey or domEvent.metaKey);
if key.domEvent.Key=TJSKeyNames.BackSpace then
FTerminal.write(#8' '#8)
else if key.domEvent.Key=TJSKeyNames.Enter then
FTerminal.writeln('')
else if Printable then
FTerminal.write(Key.Key)
end;
function TMyApplication.DoData(data: String): Boolean;
begin
Result:=True;
if Data=#8 then
begin
console.log('backspace detected');
FTerminal.Write(data+' '+data)
end
else
begin
console.log('OnData : ',Data, (length(data)));
FTerminal.Write(data)
end;
end;
procedure TMyApplication.doRun;
begin
FTermEl:=GetHTMLElement('xterm');
FInp:=TJSHTMLInputElement(GetHTMLElement('edtInput'));
FBtnSend:=TJSHTMLButtonElement(GetHTMLElement('btnSend'));
FBtnSend.OnClick:=@DoSendClick;
FTerminal:=TXTerm.TTerminal.New;
FTerminal.open(FTermEl);
// FTerminal.OnData(@DoData);
FTerminal.OnKey(@DoKey);
Terminate;
end;
function TMyApplication.DoSendClick(aEvent: TJSMouseEvent): boolean;
begin
FTerminal.Writeln(Finp.Value);
end;
var
Application : TMyApplication;
begin
Application:=TMyApplication.Create(nil);
Application.Initialize;
Application.Run;
end.