mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-07 12:17:49 +02:00
135 lines
3.4 KiB
ObjectPascal
135 lines
3.4 KiB
ObjectPascal
program democlasstopas;
|
|
|
|
{$IFDEF FPC_DOTTEDUNITS}
|
|
uses System.SysUtils, System.Types, BrowserApi.Web, System.Classes, JSApi.JS, Browser.Console, System.Class2Pas;
|
|
{$ELSE FPC_DOTTEDUNITS}
|
|
uses Sysutils, Types, Web, Classes, JS, browserconsole, class2pas;
|
|
{$ENDIF FPC_DOTTEDUNITS}
|
|
|
|
Type
|
|
|
|
{ TGenCodeApp }
|
|
|
|
TGenCodeApp = Class
|
|
elHead : TJSHTMLElement;
|
|
btnGo : TJSHTMLElement;
|
|
btnLoad : TJSHTMLElement;
|
|
edtJSObject : TJSHTMLInputElement;
|
|
edtScript : TJSHTMLInputElement;
|
|
edtPascalClass : TJSHTMLInputElement;
|
|
edtPascalParentClass : TJSHTMLInputElement;
|
|
edtExternalName : TJSHTMLInputElement;
|
|
edtClassDefinition : TJSHTMLTextAreaElement;
|
|
Procedure Execute;
|
|
procedure ShowRTLProps(aClassName,aParentClassName,aJSClassName : String; O : TJSObject);
|
|
private
|
|
function DoGenCode(aEvent: TJSMouseEvent): boolean;
|
|
function DoLoad(aEvent: TJSMouseEvent): boolean;
|
|
function FindObject(aPath: String): TJSObject;
|
|
end;
|
|
|
|
procedure TGenCodeApp.ShowRTLProps(aClassName,aParentClassName,aJSClassName : String; O : TJSObject);
|
|
|
|
Var
|
|
S : TStrings;
|
|
|
|
begin
|
|
S:=TStringList.Create;
|
|
try
|
|
ClassToPas(aJSClassName,aClassName,aParentClassName,O,S,True);
|
|
edtClassDefinition.value:=S.Text;
|
|
finally
|
|
S.Free;
|
|
end;
|
|
end;
|
|
|
|
function TGenCodeApp.FindObject(aPath : String): TJSObject;
|
|
|
|
Var
|
|
p : JSValue;
|
|
O : TJSObject;
|
|
Path : TStringDynArray;
|
|
Done,S : String;
|
|
|
|
begin
|
|
Path:=aPath.Split('.');
|
|
Result:=nil;
|
|
O:=Window;
|
|
Done:='';
|
|
for S in Path do
|
|
begin
|
|
if Done<>'' then
|
|
Done:=Done+'.';
|
|
Done:=Done+S;
|
|
p:=O.Properties[S];
|
|
if Not Assigned(P) then
|
|
begin
|
|
Window.Alert('No object found at : '+Done);
|
|
exit;
|
|
end;
|
|
if Not isObject(P) then
|
|
begin
|
|
Window.Alert('Value at : '+Done+' is not an object');
|
|
exit;
|
|
end;
|
|
O:=TJSObject(P);
|
|
end;
|
|
Result:=O;
|
|
end;
|
|
|
|
function TGenCodeApp.DoGenCode(aEvent: TJSMouseEvent): boolean;
|
|
|
|
var
|
|
O : TJSObject;
|
|
|
|
begin
|
|
Result:=False;
|
|
if (edtPascalClass.value='') or (edtJSObject.Value='') or (edtExternalName.Value='') then
|
|
begin
|
|
Window.Alert('Please fill in all fields');
|
|
exit;
|
|
end;
|
|
O:=FindObject(edtJSObject.Value);
|
|
if Assigned(O) then
|
|
ShowRTLProps(edtPascalClass.value,edtPascalParentClass.Value,edtExternalName.Value,O);
|
|
end;
|
|
|
|
function TGenCodeApp.DoLoad(aEvent: TJSMouseEvent): boolean;
|
|
|
|
Var
|
|
El : TJSElement;
|
|
|
|
begin
|
|
if (edtScript.Value='') then
|
|
begin
|
|
Window.Alert('Please fill in URL');
|
|
exit;
|
|
end;
|
|
El:=Document.createElement('script');
|
|
EL.Properties['src']:=edtScript.Value;
|
|
elHead.appendChild(El);
|
|
end;
|
|
|
|
Procedure TGEncodeApp.Execute;
|
|
|
|
begin
|
|
elHead:=TJSHTMLElement(Document.GetElementByID('head'));
|
|
btnGo:=TJSHTMLButtonElement(Document.GetElementByID('go'));
|
|
btnLoad:=TJSHTMLButtonElement(Document.GetElementByID('load'));
|
|
edtJSObject:=TJSHTMLInputElement(Document.GetElementByID('edtJSObject'));
|
|
edtScript:=TJSHTMLInputElement(Document.GetElementByID('edtScript'));
|
|
edtPascalClass:=TJSHTMLInputElement(Document.GetElementByID('edtPascalClass'));
|
|
edtPascalParentClass:=TJSHTMLInputElement(Document.GetElementByID('edtPascalClassAncestor'));
|
|
edtExternalName:=TJSHTMLInputElement(Document.GetElementByID('edtExternalName'));
|
|
edtClassDefinition:=TJSHTMLTextAreaElement(Document.GetElementByID('edtClassDefinition'));
|
|
btnGo.onclick:=@DoGenCode;
|
|
btnLoad.onclick:=@DoLoad;
|
|
end;
|
|
|
|
|
|
begin
|
|
With TGenCodeApp.Create do
|
|
Execute;
|
|
end.
|
|
|