diff --git a/components/pas2js/pjscontroller.pp b/components/pas2js/pjscontroller.pp index 8b18fd8dd8..eb2fe56fa6 100644 --- a/components/pas2js/pjscontroller.pp +++ b/components/pas2js/pjscontroller.pp @@ -19,6 +19,8 @@ Type Public Constructor Create; Destructor Destroy; override; + Class Procedure DoneInstance; + Class Function instance : TPJSController; Procedure Hook; virtual; Procedure UnHook; virtual; end; @@ -30,16 +32,21 @@ Const PJSProjectHTMLFile = 'PasJSHTMLFile'; PJSProjectPort = 'PasJSPort'; -Function PJSController : TPJSController; implementation -uses PJSDsgnOptions; +uses FileUtil, LazFileUtils, PJSDsgnOptions; Var ctrl : TPJSController; -Function PJSController : TPJSController; +Class Procedure TPJSController.DoneInstance; + +begin + FreeAndNil(Ctrl) +end; + +Class Function TPJSController.Instance : TPJSController; begin if ctrl=Nil then @@ -56,6 +63,9 @@ begin Result:=PJSOptions.BrowserFileName; if Result='' then Result:=GetStandardBrowser; + IdeMacros.SubstituteMacros(Result); + if (Result<>'') and not FilenameIsAbsolute(Result) then + Result:=FindDefaultExecutablePath(Result); end; function TPJSController.GetPasJSNodeJS(const s: string; const Data: PtrInt; @@ -65,6 +75,9 @@ begin Result:=PJSOptions.NodeJSFileName; if Result='' then Result:=GetStandardNodeJS; + IdeMacros.SubstituteMacros(Result); + if (Result<>'') and not FilenameIsAbsolute(Result) then + Result:=FindDefaultExecutablePath(Result); end; function TPJSController.GetProjectURL(const s: string; const Data: PtrInt; var Abort: boolean): string; @@ -74,24 +87,34 @@ Var begin Abort:=LazarusIDE.ActiveProject.CustomData[PJSProjectWebBrowser]<>'1'; + Writeln('LazarusIDE.ActiveProject.CustomData[PJSProjectWebBrowser]: ',LazarusIDE.ActiveProject.CustomData[PJSProjectWebBrowser]); if Abort then exit; Result:=LazarusIDE.ActiveProject.CustomData[PJSProjectURL]; + Writeln('LazarusIDE.ActiveProject.CustomData[PJSProjectURL]: ',LazarusIDE.ActiveProject.CustomData[PJSProjectURL]); if (Result='') then begin FN:=LazarusIDE.ActiveProject.CustomData[PJSProjectHTMLFile]; + Writeln('LazarusIDE.ActiveProject.CustomData[PJSProjectHTMLFile]: ',LazarusIDE.ActiveProject.CustomData[PJSProjectHTMLFile]); if (FN='') then FN:=ChangeFileExt(ExtractFileName(LazarusIDE.ActiveProject.ProjectInfoFile),'.html'); Result:=LazarusIDE.ActiveProject.CustomData[PJSProjectPort]; - if (Result<>'') then + if (Result<>'') and (Result<>'0') then Result:=Format('http://localhost:%s/%s',[Result,FN]) + else + {$IFDEF WINDOWS} + Result:=Format('file:///%s',[ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile)+FN]); + {$ELSE} + Result:=Format('file://%s',[ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile)+FN]); + {$ENDIF} end; Abort:=(Result=''); + Writeln('GetProjectURL : ',Result); end; constructor TPJSController.Create; begin - Hook; + // Nothing for the moment end; destructor TPJSController.Destroy; @@ -109,10 +132,10 @@ end; procedure TPJSController.UnHook; begin - + // Nothing for the moment end; finalization - FreeAndNil(Ctrl); + TPJSController.DoneInstance; end. diff --git a/components/pas2js/pjsdsgnregister.pas b/components/pas2js/pjsdsgnregister.pas index d8eaf3208f..87a0d47bac 100644 --- a/components/pas2js/pjsdsgnregister.pas +++ b/components/pas2js/pjsdsgnregister.pas @@ -90,6 +90,7 @@ procedure Register; begin PJSOptions:=TPas2jsOptions.Create; PJSOptions.Load; + TPJSController.Instance.Hook; // register new-project items RegisterProjectDescriptor(TProjectPas2JSWebApp.Create); RegisterProjectDescriptor(TProjectPas2JSNodeJSApp.Create); @@ -246,14 +247,16 @@ begin CompOpts.SetAlternativeCompile( '$MakeExe(pas2js) -Jc -Jminclude -Tnodejs "-Fu$(ProjUnitPath)" $Name($(ProjFile))',true); RunParams:=AProject.RunParameters; - //ToDo RunParams.UseLaunchingApplication:=True; - //ToDo RunParams.LaunchingApplicationPathPlusParams:='$(Pas2JSNodeJS) "$MakeDir($(ProjPath))$NameOnly($(ProjFile)).js"'; + RunParams.UseLaunchingApplication:=True; + RunParams.LaunchingApplicationPathPlusParams:='$(Pas2JSNodeJS) "$MakeDir($(ProjPath))$NameOnly($(ProjFile)).js"'; // create program source NewSource:=CreateProjectSource; AProject.MainFile.SetSourceText(NewSource,true); AProject.AddPackageDependency('pas2js_rtl'); + if naoUseNodeJSApp in Options then + AProject.AddPackageDependency('fcl_base_pas2js'); end; @@ -497,8 +500,8 @@ begin CompOpts.SetAlternativeCompile( '$MakeExe(pas2js) -Jirtl.js -Jc -Jminclude -Tbrowser "-Fu$(ProjUnitPath)" $Name($(ProjFile))',true); RunParams:=AProject.RunParameters; - //ToDo RunParams.UseLaunchingApplication:=True; - //ToDo RunParams.LaunchingApplicationPathPlusParams:=GetBrowserCommand(CompOpts.TargetFileName); + RunParams.UseLaunchingApplication:=True; + RunParams.LaunchingApplicationPathPlusParams:=GetBrowserCommand(CompOpts.TargetFileName); AProject.MainFile.SetSourceText(CreateProjectSource,true); AProject.CustomData.Values[PJSProjectWebBrowser]:='1'; if baoUseURL in Options then