123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 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.
|