mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 20:19:16 +02:00
pas2js: electron: package.json
This commit is contained in:
parent
252d8218ef
commit
c1f7d2fdfc
@ -112,6 +112,7 @@ type
|
|||||||
|
|
||||||
TMultiProjectPas2JSWebApp = class(TProjectPas2JSWebApp)
|
TMultiProjectPas2JSWebApp = class(TProjectPas2JSWebApp)
|
||||||
private
|
private
|
||||||
|
FLPGFilename: string;
|
||||||
FOverwrites: TStrings;
|
FOverwrites: TStrings;
|
||||||
FProjectDir: string;
|
FProjectDir: string;
|
||||||
FWebDir: string;
|
FWebDir: string;
|
||||||
@ -126,12 +127,14 @@ type
|
|||||||
function ShowModalOptions(Frm: TWebBrowserProjectOptionsForm
|
function ShowModalOptions(Frm: TWebBrowserProjectOptionsForm
|
||||||
): TModalResult; override;
|
): TModalResult; override;
|
||||||
function ProjectDirSelected: boolean; virtual; // called after user selected the lpr
|
function ProjectDirSelected: boolean; virtual; // called after user selected the lpr
|
||||||
|
function CreateProjectGroup(AProject: TLazProject; LPIFiles: array of string): boolean; virtual;
|
||||||
public
|
public
|
||||||
constructor Create; override;
|
constructor Create; override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Clear; override;
|
procedure Clear; override;
|
||||||
property ProjectDir: string read FProjectDir write FProjectDir;
|
property ProjectDir: string read FProjectDir write FProjectDir;
|
||||||
property WebDir: string read FWebDir write FWebDir;
|
property WebDir: string read FWebDir write FWebDir;
|
||||||
|
property LPGFilename: string read FLPGFilename write FLPGFilename;
|
||||||
property Overwrites: TStrings read FOverwrites write SetOverwrites; // list of overwrite warnings
|
property Overwrites: TStrings read FOverwrites write SetOverwrites; // list of overwrite warnings
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -143,7 +146,6 @@ type
|
|||||||
FCSSStyleFilename: string;
|
FCSSStyleFilename: string;
|
||||||
FIconSizes: TWordDynArray;
|
FIconSizes: TWordDynArray;
|
||||||
FImagesDir: string;
|
FImagesDir: string;
|
||||||
FLPGFilename: string;
|
|
||||||
FManifestFilename: string;
|
FManifestFilename: string;
|
||||||
FServiceWorker: TProjectPas2JSServiceWorker;
|
FServiceWorker: TProjectPas2JSServiceWorker;
|
||||||
FServiceWorkerLPR: string;
|
FServiceWorkerLPR: string;
|
||||||
@ -154,7 +156,6 @@ type
|
|||||||
): TLazProjectFile; virtual;
|
): TLazProjectFile; virtual;
|
||||||
function CreateCSSStyle(AProject: TLazProject; AFileName: String
|
function CreateCSSStyle(AProject: TLazProject; AFileName: String
|
||||||
): TLazProjectFile; virtual;
|
): TLazProjectFile; virtual;
|
||||||
function CreateProjectGroup(AProject: TLazProject): boolean; virtual;
|
|
||||||
function CopyFavIcon: boolean; virtual;
|
function CopyFavIcon: boolean; virtual;
|
||||||
function CopyIcons: boolean; virtual;
|
function CopyIcons: boolean; virtual;
|
||||||
public
|
public
|
||||||
@ -171,7 +172,6 @@ type
|
|||||||
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; // set by Register
|
property ServiceWorker: TProjectPas2JSServiceWorker read FServiceWorker write FServiceWorker; // set by Register
|
||||||
property LPGFilename: string read FLPGFilename write FLPGFilename;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TProjectPas2JSElectronWebApp - project descriptor creating
|
{ TProjectPas2JSElectronWebApp - project descriptor creating
|
||||||
@ -179,15 +179,17 @@ type
|
|||||||
|
|
||||||
TProjectPas2JSElectronWebApp = class(TMultiProjectPas2JSWebApp)
|
TProjectPas2JSElectronWebApp = class(TMultiProjectPas2JSWebApp)
|
||||||
private
|
private
|
||||||
FLPGFilename: string;
|
FPackageJSON: string;
|
||||||
FPackageFilename: string;
|
FPreloadLPI: string;
|
||||||
FPreloadLPR: string;
|
FPreloadLPR: string;
|
||||||
|
FRenderLPI: string;
|
||||||
FRenderLPR: string;
|
FRenderLPR: string;
|
||||||
protected
|
protected
|
||||||
function ProjectDirSelected: boolean; override;
|
function ProjectDirSelected: boolean; override;
|
||||||
function CreatePreloadProject(AProject: TLazProject): boolean; virtual;
|
function CreatePreloadProject(AProject: TLazProject): boolean; virtual;
|
||||||
function CreateRenderProject(AProject: TLazProject): boolean; virtual;
|
function CreateRenderProject(AProject: TLazProject): boolean; virtual;
|
||||||
function CreateWebAppProject(AProject: TLazProject): boolean; virtual;
|
function CreateWebAppProject(AProject: TLazProject): boolean; virtual;
|
||||||
|
function CreatePackageJSON(AProject: TLazProject): boolean; virtual;
|
||||||
public
|
public
|
||||||
constructor Create; override;
|
constructor Create; override;
|
||||||
procedure Clear; override;
|
procedure Clear; override;
|
||||||
@ -196,8 +198,10 @@ type
|
|||||||
function InitProject(AProject: TLazProject): TModalResult; override;
|
function InitProject(AProject: TLazProject): TModalResult; override;
|
||||||
function CreateStartFiles(AProject: TLazProject): TModalResult; override;
|
function CreateStartFiles(AProject: TLazProject): TModalResult; override;
|
||||||
property PreloadLPR: string read FPreloadLPR write FPreloadLPR;
|
property PreloadLPR: string read FPreloadLPR write FPreloadLPR;
|
||||||
|
property PreloadLPI: string read FPreloadLPI write FPreloadLPI;
|
||||||
property RenderLPR: string read FRenderLPR write FRenderLPR;
|
property RenderLPR: string read FRenderLPR write FRenderLPR;
|
||||||
property PackageFilename: string read FPackageFilename write FPackageFilename;
|
property RenderLPI: string read FRenderLPI write FRenderLPI;
|
||||||
|
property PackageJSON: string read FPackageJSON write FPackageJSON;
|
||||||
property LPGFilename: string read FLPGFilename write FLPGFilename;
|
property LPGFilename: string read FLPGFilename write FLPGFilename;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -511,6 +515,37 @@ begin
|
|||||||
ScriptFilename:=ExtractFileNameOnly(MainSrcFileName)+'.js';
|
ScriptFilename:=ExtractFileNameOnly(MainSrcFileName)+'.js';
|
||||||
CheckOverwriteFile(MainSrcFileName);
|
CheckOverwriteFile(MainSrcFileName);
|
||||||
CheckOverwriteFile(ChangeFileExt(MainSrcFileName,'.lpi'));
|
CheckOverwriteFile(ChangeFileExt(MainSrcFileName,'.lpi'));
|
||||||
|
LPGFilename:=CheckOverwriteFile(ChangeFileExt(MainSrcFileName,'.lpg'));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMultiProjectPas2JSWebApp.CreateProjectGroup(AProject: TLazProject;
|
||||||
|
LPIFiles: array of string): boolean;
|
||||||
|
var
|
||||||
|
Grp: TProjectGroup;
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
|
||||||
|
if AProject=nil then ;
|
||||||
|
|
||||||
|
if not IDEProjectGroupManager.NewProjectGroup(false) then
|
||||||
|
begin
|
||||||
|
debugln(['Error: TMultiProjectPas2JSWebApp.CreateProjectGroup failed to create new project group ']);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
Grp:=IDEProjectGroupManager.CurrentProjectGroup;
|
||||||
|
Grp.FileName:=LPGFilename;
|
||||||
|
|
||||||
|
for i:=low(LPIFiles) to high(LPIFiles) do
|
||||||
|
Grp.AddTarget(LPIFiles[i]);
|
||||||
|
|
||||||
|
if not IDEProjectGroupManager.SaveProjectGroup then
|
||||||
|
begin
|
||||||
|
debugln(['Error: TMultiProjectPas2JSWebApp.CreateProjectGroup failed writing project group "',Grp.FileName,'"']);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TMultiProjectPas2JSWebApp.Create;
|
constructor TMultiProjectPas2JSWebApp.Create;
|
||||||
@ -530,6 +565,7 @@ begin
|
|||||||
inherited Clear;
|
inherited Clear;
|
||||||
FProjectDir:='';
|
FProjectDir:='';
|
||||||
FWebDir:='';
|
FWebDir:='';
|
||||||
|
FLPGFilename:='quickstart.lpg';
|
||||||
if FOverwrites<>nil then
|
if FOverwrites<>nil then
|
||||||
FOverwrites.Clear;
|
FOverwrites.Clear;
|
||||||
end;
|
end;
|
||||||
@ -567,8 +603,6 @@ begin
|
|||||||
HTMLFilename:=CheckOverwriteFile(WebDir+HTMLFilename);
|
HTMLFilename:=CheckOverwriteFile(WebDir+HTMLFilename);
|
||||||
ManifestFilename:=CheckOverwriteFile(WebDir+ManifestFilename);
|
ManifestFilename:=CheckOverwriteFile(WebDir+ManifestFilename);
|
||||||
CSSStyleFilename:=CheckOverwriteFile(WebDir+CSSStyleFilename);
|
CSSStyleFilename:=CheckOverwriteFile(WebDir+CSSStyleFilename);
|
||||||
|
|
||||||
LPGFilename:=CheckOverwriteFile(ChangeFileExt(MainSrcFileName,'.lpg'));
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TProjectPas2JSProgressiveWebApp.CreateManifestFile(
|
function TProjectPas2JSProgressiveWebApp.CreateManifestFile(
|
||||||
@ -678,34 +712,6 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TProjectPas2JSProgressiveWebApp.CreateProjectGroup(
|
|
||||||
AProject: TLazProject): boolean;
|
|
||||||
var
|
|
||||||
ServiceWorkerLPI: String;
|
|
||||||
Grp: TProjectGroup;
|
|
||||||
begin
|
|
||||||
Result:=false;
|
|
||||||
|
|
||||||
ServiceWorkerLPI:=ChangeFileExt(ServiceWorkerLPR,'.lpi');
|
|
||||||
|
|
||||||
if not IDEProjectGroupManager.NewProjectGroup(false) then
|
|
||||||
begin
|
|
||||||
debugln(['Error: TProjectPas2JSProgressiveWebApp.CreateProjectGroup failed to create new project group ']);
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
Grp:=IDEProjectGroupManager.CurrentProjectGroup;
|
|
||||||
Grp.FileName:=LPGFilename;
|
|
||||||
Grp.AddTarget(AProject.ProjectInfoFile);
|
|
||||||
Grp.AddTarget(ServiceWorkerLPI);
|
|
||||||
if not IDEProjectGroupManager.SaveProjectGroup then
|
|
||||||
begin
|
|
||||||
debugln(['Error: TProjectPas2JSProgressiveWebApp.CreateProjectGroup failed writing project group "',Grp.FileName,'"']);
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
Result:=true;
|
|
||||||
end;
|
|
||||||
|
|
||||||
constructor TProjectPas2JSProgressiveWebApp.Create;
|
constructor TProjectPas2JSProgressiveWebApp.Create;
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
@ -730,6 +736,7 @@ begin
|
|||||||
FCSSStyleFilename:='style.css';
|
FCSSStyleFilename:='style.css';
|
||||||
FServiceWorkerLPR:='ServiceWorker.lpr';
|
FServiceWorkerLPR:='ServiceWorker.lpr';
|
||||||
FServiceWorkerJSFilename:='/ServiceWorker.js';
|
FServiceWorkerJSFilename:='/ServiceWorker.js';
|
||||||
|
FLPGFilename:='pwa1.lpg';
|
||||||
SetLength(FIconSizes,length(DefaultIconSizes));
|
SetLength(FIconSizes,length(DefaultIconSizes));
|
||||||
for i:=0 to high(DefaultIconSizes) do
|
for i:=0 to high(DefaultIconSizes) do
|
||||||
FIconSizes[i]:=DefaultIconSizes[i];
|
FIconSizes[i]:=DefaultIconSizes[i];
|
||||||
@ -843,7 +850,10 @@ begin
|
|||||||
if LazarusIDE.DoSaveProject([sfQuietUnitCheck])<>mrOk then exit;
|
if LazarusIDE.DoSaveProject([sfQuietUnitCheck])<>mrOk then exit;
|
||||||
|
|
||||||
// project group
|
// project group
|
||||||
if not CreateProjectGroup(AProject) then exit;
|
if not CreateProjectGroup(AProject,[
|
||||||
|
AProject.ProjectInfoFile,
|
||||||
|
ChangeFileExt(ServiceWorkerLPR,'.lpi')
|
||||||
|
]) then exit;
|
||||||
|
|
||||||
Result:=mrOk;
|
Result:=mrOk;
|
||||||
end;
|
end;
|
||||||
@ -967,14 +977,16 @@ function TProjectPas2JSElectronWebApp.ProjectDirSelected: boolean;
|
|||||||
begin
|
begin
|
||||||
Result:=inherited ProjectDirSelected;
|
Result:=inherited ProjectDirSelected;
|
||||||
|
|
||||||
|
WebDir:=ProjectDir;
|
||||||
|
|
||||||
PreloadLPR:=CheckOverwriteFile(ProjectDir+PreloadLPR);
|
PreloadLPR:=CheckOverwriteFile(ProjectDir+PreloadLPR);
|
||||||
CheckOverwriteFile(ChangeFileExt(PreloadLPR,'.lpi'));
|
PreloadLPI:=CheckOverwriteFile(ChangeFileExt(PreloadLPR,'.lpi'));
|
||||||
|
|
||||||
RenderLPR:=CheckOverwriteFile(ProjectDir+RenderLPR);
|
RenderLPR:=CheckOverwriteFile(ProjectDir+RenderLPR);
|
||||||
CheckOverwriteFile(ChangeFileExt(RenderLPR,'.lpi'));
|
RenderLPI:=CheckOverwriteFile(ChangeFileExt(RenderLPR,'.lpi'));
|
||||||
|
|
||||||
HTMLFilename:=CheckOverwriteFile(ProjectDir+HTMLFilename);
|
HTMLFilename:=CheckOverwriteFile(ProjectDir+HTMLFilename);
|
||||||
PackageFilename:=CheckOverwriteFile(ProjectDir+PackageFilename);
|
PackageJSON:=CheckOverwriteFile(ProjectDir+PackageJSON);
|
||||||
|
|
||||||
LPGFilename:=CheckOverwriteFile(ChangeFileExt(MainSrcFileName,'.lpg'));
|
LPGFilename:=CheckOverwriteFile(ChangeFileExt(MainSrcFileName,'.lpg'));
|
||||||
end;
|
end;
|
||||||
@ -1030,7 +1042,7 @@ begin
|
|||||||
Src.Add(' console.log("preload environment done");');
|
Src.Add(' console.log("preload environment done");');
|
||||||
Src.Add(' window.addEventListener("DOMContentLoaded",@DoRun);');
|
Src.Add(' window.addEventListener("DOMContentLoaded",@DoRun);');
|
||||||
Src.Add('end.');
|
Src.Add('end.');
|
||||||
AProject.MainFile.SetSourceText(Src.Text,true);
|
MainFile.SetSourceText(Src.Text,true);
|
||||||
finally
|
finally
|
||||||
Src.Free;
|
Src.Free;
|
||||||
end;
|
end;
|
||||||
@ -1086,7 +1098,7 @@ begin
|
|||||||
Src.Add(' el:=Document.getHTMLElementById("renderertext");');
|
Src.Add(' el:=Document.getHTMLElementById("renderertext");');
|
||||||
Src.Add(' el.innerHTML:="This text was produced in the Electron Renderer process using Pas2JS version <b>"+{$i %PAS2JSVERSION%}+"</b>";');
|
Src.Add(' el.innerHTML:="This text was produced in the Electron Renderer process using Pas2JS version <b>"+{$i %PAS2JSVERSION%}+"</b>";');
|
||||||
Src.Add('end.');
|
Src.Add('end.');
|
||||||
AProject.MainFile.SetSourceText(Src.Text,true);
|
MainFile.SetSourceText(Src.Text,true);
|
||||||
finally
|
finally
|
||||||
Src.Free;
|
Src.Free;
|
||||||
end;
|
end;
|
||||||
@ -1155,7 +1167,7 @@ begin
|
|||||||
Src.Add('begin');
|
Src.Add('begin');
|
||||||
Src.Add(' electron.app.addListener("ready",@CreateWindow);');
|
Src.Add(' electron.app.addListener("ready",@CreateWindow);');
|
||||||
Src.Add('end.');
|
Src.Add('end.');
|
||||||
AProject.MainFile.SetSourceText(Src.Text,true);
|
MainFile.SetSourceText(Src.Text,false);
|
||||||
finally
|
finally
|
||||||
Src.Free;
|
Src.Free;
|
||||||
end;
|
end;
|
||||||
@ -1170,6 +1182,39 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TProjectPas2JSElectronWebApp.CreatePackageJSON(AProject: TLazProject
|
||||||
|
): boolean;
|
||||||
|
var
|
||||||
|
aFile: TLazProjectFile;
|
||||||
|
Src: TStringList;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
|
||||||
|
aFile:=AProject.CreateProjectFile(PackageJSON);
|
||||||
|
aFile.IsPartOfProject:=true;
|
||||||
|
AProject.AddFile(aFile,false);
|
||||||
|
|
||||||
|
Src:=TStringList.Create;
|
||||||
|
try
|
||||||
|
Src.Add('{');
|
||||||
|
Src.Add(' "name": "quickstart-electron-app",');
|
||||||
|
Src.Add(' "version": "1.0.0",');
|
||||||
|
Src.Add(' "description": "Hello World!",');
|
||||||
|
Src.Add(' "main": "'+FileToWebFile(ScriptFilename)+'",');
|
||||||
|
Src.Add(' "author": "Lazarus - www.lazarus-ide.org",');
|
||||||
|
Src.Add(' "license": "LGPL2"');
|
||||||
|
Src.Add('}');
|
||||||
|
aFile.SetSourceText(Src.Text,false);
|
||||||
|
finally
|
||||||
|
Src.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if not InteractiveSaveFile(PackageJSON) then exit;
|
||||||
|
if LazarusIDE.DoOpenEditorFile(PackageJSON,-1,-1,[ofProjectLoading,ofRegularFile])<>mrOk then exit;
|
||||||
|
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TProjectPas2JSElectronWebApp.Create;
|
constructor TProjectPas2JSElectronWebApp.Create;
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
@ -1182,8 +1227,7 @@ begin
|
|||||||
PreloadLPR:='preload.lpr';
|
PreloadLPR:='preload.lpr';
|
||||||
RenderLPR:='render.lpr';
|
RenderLPR:='render.lpr';
|
||||||
HTMLFilename:='index.html';
|
HTMLFilename:='index.html';
|
||||||
PackageFilename:='package.json';
|
PackageJSON:='package.json';
|
||||||
LPGFilename:='electron1.lpg';
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TProjectPas2JSElectronWebApp.GetLocalizedName: string;
|
function TProjectPas2JSElectronWebApp.GetLocalizedName: string;
|
||||||
@ -1202,7 +1246,7 @@ begin
|
|||||||
AProject.CustomData.Values[PJSProject]:='1';
|
AProject.CustomData.Values[PJSProject]:='1';
|
||||||
|
|
||||||
// start with the render project
|
// start with the render project
|
||||||
AProject.ProjectInfoFile:=ChangeFileExt(PreloadLPR,'.lpi');
|
AProject.ProjectInfoFile:=PreloadLPI;
|
||||||
|
|
||||||
Result:=mrOk;
|
Result:=mrOk;
|
||||||
end;
|
end;
|
||||||
@ -1218,8 +1262,15 @@ begin
|
|||||||
|
|
||||||
//if not CreateHTMLFile(AProject,) then exit;
|
//if not CreateHTMLFile(AProject,) then exit;
|
||||||
|
|
||||||
// package.json
|
if not CreatePackageJSON(AProject) then exit;
|
||||||
// lpg
|
|
||||||
|
if not CreateProjectGroup(AProject,[
|
||||||
|
AProject.ProjectInfoFile,
|
||||||
|
PreloadLPI,
|
||||||
|
RenderLPI
|
||||||
|
]) then exit;
|
||||||
|
|
||||||
|
Result:=mrOk;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TPas2JSDTSToPasUnitDef }
|
{ TPas2JSDTSToPasUnitDef }
|
||||||
|
Loading…
Reference in New Issue
Block a user