mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-03 14:00:30 +02:00
pas2jsdsgn: progressive web app: auto create serviceworker project
This commit is contained in:
parent
612e6e1932
commit
fc055bd7fb
@ -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
|
||||||
|
@ -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]);
|
||||||
|
@ -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
|
||||||
|
@ -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';
|
||||||
|
Loading…
Reference in New Issue
Block a user