pas2jsdsgn: progressive web app: auto create serviceworker project

This commit is contained in:
mattias 2022-04-05 23:48:20 +02:00
parent 612e6e1932
commit fc055bd7fb
4 changed files with 174 additions and 107 deletions

View File

@ -2,10 +2,10 @@ object WebBrowserProjectOptionsForm: TWebBrowserProjectOptionsForm
Left = 431 Left = 431
Height = 538 Height = 538
Top = 310 Top = 310
Width = 635 Width = 632
Caption = 'Pas2JS Browser project options' Caption = 'Pas2JS Browser project options'
ClientHeight = 538 ClientHeight = 538
ClientWidth = 635 ClientWidth = 632
OnCreate = FormCreate OnCreate = FormCreate
OnShow = FormShow OnShow = FormShow
Position = poScreenCenter Position = poScreenCenter
@ -54,7 +54,7 @@ object WebBrowserProjectOptionsForm: TWebBrowserProjectOptionsForm
Left = 6 Left = 6
Height = 40 Height = 40
Top = 492 Top = 492
Width = 623 Width = 620
OKButton.Name = 'OKButton' OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True OKButton.DefaultCaption = True
HelpButton.Name = 'HelpButton' HelpButton.Name = 'HelpButton'
@ -125,15 +125,16 @@ object WebBrowserProjectOptionsForm: TWebBrowserProjectOptionsForm
AnchorSideLeft.Control = RBUseURL AnchorSideLeft.Control = RBUseURL
AnchorSideTop.Control = RBUseURL AnchorSideTop.Control = RBUseURL
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = edtWasmProgram AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 70 Left = 70
Height = 30 Height = 30
Top = 364 Top = 364
Width = 559 Width = 556
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 32 BorderSpacing.Left = 32
BorderSpacing.Top = 6 BorderSpacing.Top = 6
BorderSpacing.Right = 6
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
ItemHeight = 0 ItemHeight = 0
TabOrder = 8 TabOrder = 8
@ -197,7 +198,7 @@ object WebBrowserProjectOptionsForm: TWebBrowserProjectOptionsForm
Left = 70 Left = 70
Height = 30 Height = 30
Top = 180 Top = 180
Width = 559 Width = 556
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 32 BorderSpacing.Left = 32
BorderSpacing.Top = 6 BorderSpacing.Top = 6

View File

@ -68,7 +68,7 @@ type
function CreateHTMLFile(AProject: TLazProject; aScriptFileName: String function CreateHTMLFile(AProject: TLazProject; aScriptFileName: String
): TLazProjectFile; virtual; ): TLazProjectFile; virtual;
function CreateProjectSource: String; virtual; function CreateProjectSource: String; virtual;
Function DoInitDescriptor : TModalResult; override; Function DoInitDescriptor: TModalResult; override;
function GetNextPort: Word; virtual; function GetNextPort: Word; virtual;
function ShowOptionsDialog: TModalResult; virtual; function ShowOptionsDialog: TModalResult; virtual;
function ShowModalOptions(Frm: TWebBrowserProjectOptionsForm): TModalResult; virtual; function ShowModalOptions(Frm: TWebBrowserProjectOptionsForm): TModalResult; virtual;
@ -92,10 +92,11 @@ type
{ TProjectPas2JSServiceWorker } { TProjectPas2JSServiceWorker }
TProjectPas2JSServiceWorker = class(TProjectDescriptor) TProjectPas2JSServiceWorker = class(TProjectDescriptor)
protected
function CreateProjectSource: String; virtual;
public public
constructor Create; override; constructor Create; override;
function CreateProjectSource: String; virtual;
function InitServiceWorkerProject(AProject: TLazProject;
LPRFilename: string): TModalResult; virtual;
function GetLocalizedName: string; override; function GetLocalizedName: string; override;
function GetLocalizedDescription: string; override; function GetLocalizedDescription: string; override;
function InitProject(AProject: TLazProject): TModalResult; override; function InitProject(AProject: TLazProject): TModalResult; override;
@ -111,6 +112,7 @@ type
FImagesDir: string; FImagesDir: string;
FManifestFilename: string; FManifestFilename: string;
FProjectDir: string; FProjectDir: string;
FServiceWorker: TProjectPas2JSServiceWorker;
FServiceWorkerLPR: string; FServiceWorkerLPR: string;
FWebDir: string; FWebDir: string;
protected protected
@ -141,6 +143,7 @@ type
property WebDir: string read FWebDir write FWebDir; property WebDir: string read FWebDir write FWebDir;
property ManifestFilename: string read FManifestFilename write FManifestFilename; property ManifestFilename: string read FManifestFilename write FManifestFilename;
property IconSizes: TWordDynArray read FIconSizes write FIconSizes; property IconSizes: TWordDynArray read FIconSizes write FIconSizes;
property ServiceWorker: TProjectPas2JSServiceWorker read FServiceWorker write FServiceWorker;
end; end;
{ TProjectPas2JSNodeJSApp } { TProjectPas2JSNodeJSApp }
@ -261,6 +264,8 @@ procedure Register;
Var Var
ViewCategory : TIDECommandCategory; ViewCategory : TIDECommandCategory;
IDECommand : TIDECommand; IDECommand : TIDECommand;
SrvWorker: TProjectPas2JSServiceWorker;
PWA: TProjectPas2JSProgressiveWebApp;
begin begin
MenuHandler:=TPas2JSMenuHandler.Create; MenuHandler:=TPas2JSMenuHandler.Create;
@ -271,8 +276,11 @@ begin
// register new-project items // register new-project items
RegisterProjectDescriptor(TProjectPas2JSWebApp.Create); RegisterProjectDescriptor(TProjectPas2JSWebApp.Create);
RegisterProjectDescriptor(TProjectPas2JSProgressiveWebApp.Create); PWA:=TProjectPas2JSProgressiveWebApp.Create;
RegisterProjectDescriptor(TProjectPas2JSServiceWorker.Create); RegisterProjectDescriptor(PWA);
SrvWorker:=TProjectPas2JSServiceWorker.Create;
RegisterProjectDescriptor(SrvWorker);
PWA.ServiceWorker:=SrvWorker;
RegisterProjectDescriptor(TProjectPas2JSNodeJSApp.Create); RegisterProjectDescriptor(TProjectPas2JSNodeJSApp.Create);
RegisterProjectDescriptor(TProjectPas2JSModuleApp.Create); RegisterProjectDescriptor(TProjectPas2JSModuleApp.Create);
Pas2JSHTMLClassDef:=TPas2JSHTMLClassDef.Create; Pas2JSHTMLClassDef:=TPas2JSHTMLClassDef.Create;
@ -313,7 +321,6 @@ function TProjectPas2JSProgressiveWebApp.FileToWebFile(aFilename: string
): string; ): string;
begin begin
Result:=CreateRelativePath(aFilename,WebDir); Result:=CreateRelativePath(aFilename,WebDir);
debugln(['AAA1 TProjectPas2JSProgressiveWebApp.FileToWebFile File=',aFilename,' WebDir=',WebDir,' Result=',Result]);
Result:=FilenameToURLPath(Result); Result:=FilenameToURLPath(Result);
end; end;
@ -338,8 +345,9 @@ end;
function TProjectPas2JSProgressiveWebApp.ShowModalOptions( function TProjectPas2JSProgressiveWebApp.ShowModalOptions(
Frm: TWebBrowserProjectOptionsForm): TModalResult; Frm: TWebBrowserProjectOptionsForm): TModalResult;
var var
CurProjDir, LPRFilename: String; CurProjDir: String;
Overwrites: TStringList; Overwrites: TStringList;
SaveDlg: TIDESaveDialog;
function CheckOverwriteFile(aFilename: string): string; function CheckOverwriteFile(aFilename: string): string;
begin begin
@ -364,15 +372,35 @@ begin
Result:=inherited ShowModalOptions(Frm); Result:=inherited ShowModalOptions(Frm);
if Result<>mrOk then exit; if Result<>mrOk then exit;
CurProjDir:=LazSelectDirectory('Project directory'); SaveDlg:=IDESaveDialogClass.Create(nil);
if CurProjDir='' then exit(mrCancel);
CurProjDir:=AppendPathDelim(CleanAndExpandDirectory(CurProjDir));
ProjectDir:=CurProjDir;
Overwrites:=TStringList.Create; Overwrites:=TStringList.Create;
try try
LPRFilename:=CheckOverwriteFile(CurProjDir+ExtractFileName(MainSrcFileName)); InitIDEFileDialog(SaveDlg);
CheckOverwriteFile(ChangeFileExt(LPRFilename,'.lpi')); SaveDlg.Title:='New project file (.lpr)';
SaveDlg.Filter:='Project Pascal file (*.lpr;*.pas)|*.lpr;*.pas';
if not SaveDlg.Execute then
exit(mrCancel);
MainSrcFileName:=SaveDlg.FileName;
if not FilenameIsAbsolute(MainSrcFileName) then
begin
IDEMessageDialog('Error','Please choose a file with full path.',mtError,[mbOk]);
exit(mrCancel);
end;
MainSrcFileName:=CleanAndExpandFilename(MainSrcFileName);
if CompareFileExt(MainSrcFileName,'.lpi')=0 then
MainSrcFileName:=ChangeFileExt(MainSrcFileName,'.lpr');
if ExtractFileExt(MainSrcFileName)='' then
MainSrcFileName:=MainSrcFileName+'.lpr';
CurProjDir:=ExtractFilePath(MainSrcFileName);
if CurProjDir='' then exit(mrCancel);
CurProjDir:=AppendPathDelim(CurProjDir);
ProjectDir:=CurProjDir;
CheckOverwriteFile(MainSrcFileName);
CheckOverwriteFile(ChangeFileExt(MainSrcFileName,'.lpi'));
ScriptFilename:=ExtractFileNameOnly(MainSrcFileName)+'.js'; ScriptFilename:=ExtractFileNameOnly(MainSrcFileName)+'.js';
ServiceWorkerLPR:=CheckOverwriteFile(ProjectDir+ServiceWorkerLPR); ServiceWorkerLPR:=CheckOverwriteFile(ProjectDir+ServiceWorkerLPR);
@ -393,10 +421,10 @@ begin
end; end;
finally finally
SaveDlg.Free;
Overwrites.Free; Overwrites.Free;
end; end;
MainSrcFileName:=LPRFilename;
if CompareFilenames(ExtractFileNameOnly(MainSrcFileName),MainSrcName)<>0 then if CompareFilenames(ExtractFileNameOnly(MainSrcFileName),MainSrcName)<>0 then
MainSrcName:=ExtractFileNameOnly(MainSrcFileName); MainSrcName:=ExtractFileNameOnly(MainSrcFileName);
end; end;
@ -411,7 +439,7 @@ begin
//debugln(['Info: [TProjectPas2JSProgressiveWebApp.CreateManifestFile] "',AFileName,'"']); //debugln(['Info: [TProjectPas2JSProgressiveWebApp.CreateManifestFile] "',AFileName,'"']);
Result:=AProject.CreateProjectFile(AFileName); Result:=AProject.CreateProjectFile(AFileName);
Result.IsPartOfProject:=true; Result.IsPartOfProject:=true;
AProject.CustomData.Values[PJSProjectManifestFile]:=CreateRelativePath(ProjectDir,Result.Filename); AProject.CustomData.Values[PJSProjectManifestFile]:=CreateRelativePath(Result.Filename,ProjectDir);
AProject.AddFile(Result,false); AProject.AddFile(Result,false);
Src:=TStringList.Create; Src:=TStringList.Create;
try try
@ -615,17 +643,10 @@ end;
function TProjectPas2JSProgressiveWebApp.InitProject(AProject: TLazProject function TProjectPas2JSProgressiveWebApp.InitProject(AProject: TLazProject
): TModalResult; ): TModalResult;
var var
CurProjDir, MainFilename, TargetFilename: String; CurProjDir: String;
CompOpts: TLazCompilerOptions;
begin begin
Result:=inherited InitProject(AProject);
if Result<>mrOk then exit;
Result:=mrCancel; Result:=mrCancel;
CurProjDir:=ChompPathDelim(ProjectDir);
// lpi
MainFilename:=AProject.MainFile.Filename;
CurProjDir:=ChompPathDelim(ExtractFilePath(MainFilename));
AProject.ProjectInfoFile:=ChangeFileExt(MainFilename,'.lpi');
// create directories // create directories
if not FilenameIsAbsolute(CurProjDir) then if not FilenameIsAbsolute(CurProjDir) then
@ -633,31 +654,73 @@ begin
debugln(['Error (pas2jsdsgn): [20220403220423] TProjectPas2JSProgressiveWebApp.InitProject project directory not absolute: '+CurProjDir]); debugln(['Error (pas2jsdsgn): [20220403220423] TProjectPas2JSProgressiveWebApp.InitProject project directory not absolute: '+CurProjDir]);
exit; exit;
end; end;
if CompareFilenames(CurProjDir,ChompPathDelim(ProjectDir))<>0 then if not InteractiveForceDir(CurProjDir,false) then
begin
debugln(['Error (pas2jsdsgn): [20220403221017] TProjectPas2JSProgressiveWebApp.InitProject project directory has switched: '+CurProjDir]);
exit;
end;
if not ForceDirectoriesUTF8(CurProjDir) then
begin begin
IDEMessageDialog('Error','Unable to create directory "'+CurProjDir+'".',mtError,[mbOK]); IDEMessageDialog('Error','Unable to create directory "'+CurProjDir+'".',mtError,[mbOK]);
exit; exit;
end; end;
CurProjDir:=AppendPathDelim(CurProjDir);
if not InteractiveForceDir(WebDir,true) then exit; if not InteractiveForceDir(WebDir,true) then exit;
if not InteractiveForceDir(ImagesDir,true) then exit; if not InteractiveForceDir(ImagesDir,true) then exit;
// create service worker project
AProject.ProjectInfoFile:=ChangeFileExt(ServiceWorkerLPR,'.lpi');
Result:=ServiceWorker.InitServiceWorkerProject(AProject,ServiceWorkerLPR);
if Result<>mrOk then exit;
Result:=mrOk;
end;
function TProjectPas2JSProgressiveWebApp.CreateStartFiles(AProject: TLazProject
): TModalResult;
var
CompOpts: TLazCompilerOptions;
TargetFilename, MainFilename: String;
begin
Result:=mrCancel;
// Note: InitProject has initialized the ServiceWorker project
CompOpts:=AProject.LazCompilerOptions; CompOpts:=AProject.LazCompilerOptions;
TargetFilename:=AppendPathDelim(WebDir)+'ServiceWorker';
// save ServiceWorker.lpr
if not InteractiveSaveFile(ServiceWorkerLPR) then exit;
LazarusIDE.DoOpenEditorFile(ServiceWorkerLPR,-1,-1,
[ofProjectLoading,ofRegularFile]);
// save ServiceWorker.lpi
if LazarusIDE.DoSaveProject([sfQuietUnitCheck])<>mrOk then exit;
LazarusIDE.DoCloseEditorFile(ServiceWorkerLPR,[cfQuiet,cfProjectClosing]);
// delete ServiceWorker.lpr from project
if AProject.MainFileID<>0 then
raise Exception.Create('20220405231537');
AProject.MainFileID:=-1;
AProject.RemoveUnit(0,false);
AProject.CustomData.Remove(PJSProjectServiceWorker);
// initialize PWA project
AProject.ProjectInfoFile:=ChangeFileExt(MainSrcFileName,'.lpi');
// create PWA lpr and index.html
if inherited InitProject(AProject)<>mrOk then exit;
// make sure lpi has same case as lpr
MainFilename:=AProject.MainFile.Filename;
AProject.ProjectInfoFile:=ChangeFileExt(MainFilename,'.lpi');
// set PWA targetfilename
TargetFilename:=AppendPathDelim(WebDir)+MainSrcName; TargetFilename:=AppendPathDelim(WebDir)+MainSrcName;
CompOpts.TargetFilename:=TargetFilename; CompOpts.TargetFilename:=TargetFilename;
// index.html (created in inherited InitProject) // save index.html
if baoCreateHtml in Options then if baoCreateHtml in Options then
begin begin
if not InteractiveSaveFile(HTMLFilename) then exit; if not InteractiveSaveFile(HTMLFilename) then exit;
end; end;
// open lpr and index.html in source editor
if inherited CreateStartFiles(AProject)<>mrOk then exit;
// manifest.json // manifest.json
CreateManifestFile(AProject,ManifestFilename); CreateManifestFile(AProject,ManifestFilename);
if not InteractiveSaveFile(ManifestFilename) then exit; if not InteractiveSaveFile(ManifestFilename) then exit;
@ -669,20 +732,13 @@ begin
if not CopyFavIcon then exit; if not CopyFavIcon then exit;
if not CopyIcons then exit; if not CopyIcons then exit;
// serviceworker.lpr/lpi
// save lpr // save lpr
if not InteractiveSaveFile(MainFilename) then exit; if not InteractiveSaveFile(MainFilename) then exit;
Result:=mrOk;
end;
function TProjectPas2JSProgressiveWebApp.CreateStartFiles(AProject: TLazProject
): TModalResult;
begin
Result:=inherited CreateStartFiles(AProject);
// save lpi // save lpi
LazarusIDE.DoSaveProject([sfQuietUnitCheck]); if LazarusIDE.DoSaveProject([sfQuietUnitCheck])<>mrOk then exit;
Result:=mrOk;
end; end;
{ TProjectPas2JSServiceWorker } { TProjectPas2JSServiceWorker }
@ -744,6 +800,26 @@ begin
end; end;
end; end;
function TProjectPas2JSServiceWorker.InitServiceWorkerProject(
AProject: TLazProject; LPRFilename: string): TModalResult;
var
MainFile: TLazProjectFile;
CompOpts: TLazCompilerOptions;
begin
MainFile:=AProject.CreateProjectFile(LPRFilename);
MainFile.IsPartOfProject:=true;
AProject.AddFile(MainFile,false);
AProject.MainFileID:=0;
CompOpts:=AProject.LazCompilerOptions;
SetDefaultServiceWorkerCompileOptions(CompOpts);
CompOpts.TargetFilename:=ExtractFileNameOnly(LPRFilename);
SetDefaultServiceWorkerRunParams(AProject.RunParameters.GetOrCreate('Default'));
AProject.MainFile.SetSourceText(CreateProjectSource,true);
AProject.CustomData.Values[PJSProject]:='1';
AProject.CustomData.Values[PJSProjectServiceWorker]:='1';
Result:=mrOk;
end;
constructor TProjectPas2JSServiceWorker.Create; constructor TProjectPas2JSServiceWorker.Create;
begin begin
inherited Create; inherited Create;
@ -763,22 +839,11 @@ end;
function TProjectPas2JSServiceWorker.InitProject(AProject: TLazProject function TProjectPas2JSServiceWorker.InitProject(AProject: TLazProject
): TModalResult; ): TModalResult;
var
MainFile: TLazProjectFile;
CompOpts: TLazCompilerOptions;
begin begin
Result:=inherited InitProject(AProject); Result:=inherited InitProject(AProject);
MainFile:=AProject.CreateProjectFile('ServiceWorker.lpr'); if Result<>mrOk then
MainFile.IsPartOfProject:=true; exit;
AProject.AddFile(MainFile,false); Result:=InitServiceWorkerProject(AProject,'ServiceWorker.lpr');
AProject.MainFileID:=0;
CompOpts:=AProject.LazCompilerOptions;
SetDefaultServiceWorkerCompileOptions(CompOpts);
CompOpts.TargetFilename:='ServiceWorker';
SetDefaultServiceWorkerRunParams(AProject.RunParameters.GetOrCreate('Default'));
AProject.MainFile.SetSourceText(CreateProjectSource,true);
AProject.CustomData.Values[PJSProject]:='1';
AProject.CustomData.Values[PJSProjectServiceWorker]:='1';
end; end;
function TProjectPas2JSServiceWorker.CreateStartFiles(AProject: TLazProject function TProjectPas2JSServiceWorker.CreateStartFiles(AProject: TLazProject
@ -1489,6 +1554,15 @@ begin
finally finally
Src.Free; Src.Free;
end; end;
HTMLFile.CustomData[PJSIsProjectHTMLFile]:='1';
if baoMaintainHTML in Options then
AProject.CustomData.Values[PJSProjectMaintainHTML]:='1';
if baoUseBrowserConsole in Options then
AProject.CustomData[PJSProjectWebBrowser]:='1';
if baoRunOnReady in options then
AProject.CustomData[PJSProjectRunAtReady]:='1';
Result:=HTMLFile; Result:=HTMLFile;
end; end;
@ -1580,8 +1654,7 @@ end;
function TProjectPas2JSWebApp.InitProject(AProject: TLazProject): TModalResult; function TProjectPas2JSWebApp.InitProject(AProject: TLazProject): TModalResult;
var var
MainFile, MainFile: TLazProjectFile;
HTMLFile : TLazProjectFile;
CompOpts: TLazCompilerOptions; CompOpts: TLazCompilerOptions;
begin begin
@ -1620,18 +1693,8 @@ begin
if baoCreateHtml in Options then if baoCreateHtml in Options then
begin begin
debugln(['Info: [TProjectPas2JSWebApp.InitProject] HTMLFilename=',HTMLFilename]); debugln(['Info: [TProjectPas2JSWebApp.InitProject] HTMLFilename=',HTMLFilename]);
HTMLFile:=CreateHTMLFile(aProject,ScriptFilename); CreateHTMLFile(AProject,ScriptFilename);
HTMLFile.CustomData[PJSIsProjectHTMLFile]:='1';
if baoMaintainHTML in Options then
AProject.CustomData.Values[PJSProjectMaintainHTML]:='1';
if baoUseBrowserConsole in Options then
AProject.CustomData[PJSProjectWebBrowser]:='1';
if baoRunOnReady in options then
AProject.CustomData[PJSProjectRunAtReady]:='1';
end; end;
//AProject.AddPackageDependency('pas2js_rtl');
//if baoUseBrowserApp in Options then
// AProject.AddPackageDependency('fcl_base_pas2js');
end; end;
function TProjectPas2JSWebApp.CreateStartFiles(AProject: TLazProject function TProjectPas2JSWebApp.CreateStartFiles(AProject: TLazProject
@ -1639,12 +1702,14 @@ function TProjectPas2JSWebApp.CreateStartFiles(AProject: TLazProject
var var
MainFile: TLazProjectFile; MainFile: TLazProjectFile;
begin begin
// open lpr in source editor
MainFile:=AProject.MainFile; MainFile:=AProject.MainFile;
Result:=LazarusIDE.DoOpenEditorFile(MainFile.Filename,-1,-1, Result:=LazarusIDE.DoOpenEditorFile(MainFile.Filename,-1,-1,
[ofProjectLoading,ofRegularFile]); [ofProjectLoading,ofRegularFile]);
if Result<>mrOK then if Result<>mrOK then
exit; exit;
// open html in source editor
if baoCreateHtml in Options then if baoCreateHtml in Options then
Result:=LazarusIDE.DoOpenEditorFile(HTMLFilename,-1,-1, Result:=LazarusIDE.DoOpenEditorFile(HTMLFilename,-1,-1,
[ofProjectLoading,ofRegularFile]); [ofProjectLoading,ofRegularFile]);

View File

@ -2,9 +2,9 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
Left = 0 Left = 0
Height = 372 Height = 372
Top = 0 Top = 0
Width = 495 Width = 492
ClientHeight = 372 ClientHeight = 372
ClientWidth = 495 ClientWidth = 492
TabOrder = 0 TabOrder = 0
DesignLeft = 473 DesignLeft = 473
DesignTop = 400 DesignTop = 400
@ -12,7 +12,7 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
Left = 12 Left = 12
Height = 23 Height = 23
Top = 8 Top = 8
Width = 267 Width = 250
Caption = 'Project is a Web Browser (pas2js) project' Caption = 'Project is a Web Browser (pas2js) project'
OnChange = CBWebProjectChange OnChange = CBWebProjectChange
TabOrder = 0 TabOrder = 0
@ -22,11 +22,12 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideTop.Control = CBWebProject AnchorSideTop.Control = CBWebProject
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 12 Left = 12
Height = 16 Height = 15
Top = 37 Top = 37
Width = 107 Width = 98
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Project HTML file:' Caption = 'Project HTML file:'
ParentColor = False
end end
object CBHTMLFile: TComboBox object CBHTMLFile: TComboBox
AnchorSideLeft.Control = CBWebProject AnchorSideLeft.Control = CBWebProject
@ -35,9 +36,9 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideRight.Control = Owner AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 12 Left = 12
Height = 29 Height = 30
Top = 55 Top = 54
Width = 467 Width = 464
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Right = 16 BorderSpacing.Right = 16
@ -52,7 +53,7 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
Left = 12 Left = 12
Height = 23 Height = 23
Top = 90 Top = 90
Width = 142 Width = 129
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Maintain HTML File' Caption = 'Maintain HTML File'
OnChange = CBMaintainHTMLFileChange OnChange = CBMaintainHTMLFileChange
@ -65,7 +66,7 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
Left = 36 Left = 36
Height = 23 Height = 23
Top = 148 Top = 148
Width = 313 Width = 287
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Run rtl when all page resources are fully loaded' Caption = 'Run rtl when all page resources are fully loaded'
TabOrder = 3 TabOrder = 3
@ -75,7 +76,7 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideTop.Control = RBStartServerAt AnchorSideTop.Control = RBStartServerAt
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 76 Left = 76
Height = 27 Height = 30
Top = 231 Top = 231
Width = 82 Width = 82
BorderSpacing.Left = 32 BorderSpacing.Left = 32
@ -92,7 +93,7 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
Left = 44 Left = 44
Height = 23 Height = 23
Top = 206 Top = 206
Width = 180 Width = 168
BorderSpacing.Left = 32 BorderSpacing.Left = 32
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Start HTTP Server on port' Caption = 'Start HTTP Server on port'
@ -108,9 +109,9 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideRight.Control = Owner AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 76 Left = 76
Height = 27 Height = 30
Top = 285 Top = 288
Width = 403 Width = 400
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Right = 16 BorderSpacing.Right = 16
@ -123,8 +124,8 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 44 Left = 44
Height = 23 Height = 23
Top = 260 Top = 263
Width = 173 Width = 161
BorderSpacing.Top = 2 BorderSpacing.Top = 2
Caption = 'Use this URL to start app' Caption = 'Use this URL to start app'
OnChange = RBUseURLChange OnChange = RBUseURLChange
@ -137,7 +138,7 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
Left = 12 Left = 12
Height = 23 Height = 23
Top = 177 Top = 177
Width = 194 Width = 182
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Project needs a HTTP Server' Caption = 'Project needs a HTTP Server'
OnChange = CBUseHTTPServerChange OnChange = CBUseHTTPServerChange
@ -150,7 +151,7 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
Left = 36 Left = 36
Height = 23 Height = 23
Top = 119 Top = 119
Width = 341 Width = 313
BorderSpacing.Left = 24 BorderSpacing.Left = 24
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Use Browser Console unit to display writeln() output' Caption = 'Use Browser Console unit to display writeln() output'
@ -161,9 +162,9 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideBottom.Control = Owner AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 12 Left = 12
Height = 30 Height = 31
Top = 336 Top = 335
Width = 138 Width = 130
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
@ -176,10 +177,10 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideBottom.Control = Owner AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 156 Left = 148
Height = 30 Height = 31
Top = 336 Top = 335
Width = 161 Width = 150
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.Left = 6 BorderSpacing.Left = 6
@ -193,10 +194,10 @@ object Pas2JSProjectOptionsFrame: TPas2JSProjectOptionsFrame
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideBottom.Control = Owner AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 323 Left = 304
Height = 30 Height = 31
Top = 336 Top = 335
Width = 133 Width = 124
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.Left = 6 BorderSpacing.Left = 6

View File

@ -105,7 +105,7 @@ Var
Compiler : String; Compiler : String;
begin begin
DebugLn(['SetPasJSCompileOptions START']); //DebugLn(['SetPasJSCompileOptions START']);
CompOpts.UnitOutputDirectory:='js'; CompOpts.UnitOutputDirectory:='js';
CompOpts.TargetFileExt:='.js'; CompOpts.TargetFileExt:='.js';