mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 16:59:33 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			549 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			549 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
unit reglazwebextra;
 | 
						|
 | 
						|
{$mode objfpc}{$H+}
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
uses
 | 
						|
  Classes, SysUtils, fpwebdata,
 | 
						|
  sqldbwebdata, LazIDEIntf,srceditorintf,idemsgintf,
 | 
						|
  ProjectIntf, fpextjs,
 | 
						|
  extjsjson, extjsxml,
 | 
						|
  fpjsonrpc, controls, dialogs, forms,
 | 
						|
  jstree,jsparser,
 | 
						|
  fpextdirect,
 | 
						|
  webjsonrpc;
 | 
						|
 | 
						|
Type
 | 
						|
 | 
						|
  { TFileDescWebProviderDataModule }
 | 
						|
 | 
						|
  TFileDescWebProviderDataModule = class(TFileDescPascalUnitWithResource)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetInterfaceUsesSection: string; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
 | 
						|
  end;
 | 
						|
 | 
						|
  { TFileDescWebJSONRPCModule }
 | 
						|
 | 
						|
  TFileDescWebJSONRPCModule = class(TFileDescPascalUnitWithResource)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetInterfaceUsesSection: string; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
 | 
						|
  end;
 | 
						|
 | 
						|
 | 
						|
  { TFileDescExtDirectModule }
 | 
						|
 | 
						|
  TFileDescExtDirectModule = class(TFileDescPascalUnitWithResource)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetInterfaceUsesSection: string; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
 | 
						|
  end;
 | 
						|
 | 
						|
  { TSQLFileDescriptor }
 | 
						|
 | 
						|
  { TJSFileDescriptor }
 | 
						|
 | 
						|
  TJSFileDescriptor = class(TProjectFileDescriptor)
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function GetResourceSource(const ResourceName: string): string; override;
 | 
						|
    function CreateSource(const Filename, SourceName,
 | 
						|
                          ResourceName: string): string; override;
 | 
						|
    procedure UpdateDefaultPascalFileExtension(const DefPasExt: string); override;
 | 
						|
  end;
 | 
						|
 | 
						|
  TJSSyntaxChecker = Class(TComponent)
 | 
						|
  private
 | 
						|
    FSFN: String;
 | 
						|
  Public
 | 
						|
    Procedure ShowMessage(Const Msg : String);
 | 
						|
    Procedure ShowMessage(Const Fmt : String; Args : Array of const);
 | 
						|
    Procedure ShowException(Const Msg : String; E : Exception);
 | 
						|
    function CheckJavaScript (S : TStream): TModalResult;
 | 
						|
    function CheckSource(Sender: TObject; var Handled: boolean): TModalResult;
 | 
						|
    Property SourceFileName : String Read FSFN;
 | 
						|
 end;
 | 
						|
 | 
						|
  { THTTPApplicationDescriptor }
 | 
						|
  THTTPApplicationDescriptor = class(TProjectDescriptor)
 | 
						|
  private
 | 
						|
    FThreaded,
 | 
						|
    fReg : Boolean;
 | 
						|
    FDir,
 | 
						|
    FLoc : String;
 | 
						|
    FPort : Integer;
 | 
						|
    function GetOPtions: TModalResult;
 | 
						|
  public
 | 
						|
    constructor Create; override;
 | 
						|
    function GetLocalizedName: string; override;
 | 
						|
    function GetLocalizedDescription: string; override;
 | 
						|
    function InitProject(AProject: TLazProject): TModalResult; override;
 | 
						|
    function CreateStartFiles(AProject: TLazProject): TModalResult; override;
 | 
						|
  end;
 | 
						|
 | 
						|
Procedure Register;
 | 
						|
 | 
						|
resourcestring
 | 
						|
  rsWebDataProvi = 'Web DataProvider Module';
 | 
						|
  rsWEBDataProvi2 = 'WEB DataProvider Module%sA datamodule to handle data '
 | 
						|
    +'requests for WEB (HTTP) applications using WebDataProvider components.';
 | 
						|
  rsWebJSONRPCMo = 'Web JSON-RPC Module';
 | 
						|
  rsWEBJSONRPCMo2 = 'WEB JSON-RPC Module%sA datamodule to dispatch JSON-RPC '
 | 
						|
    +'requests in WEB (HTTP) applications using TJSONRPCHandler components.';
 | 
						|
  rsWebExtDirect = 'Web Ext.Direct Module';
 | 
						|
  rsWEBExtDirect2 = 'WEB Ext.Direct Module%sA datamodule to dispatch Ext.'
 | 
						|
    +'Direct requests in WEB (HTTP) applications using TJSONRPCHandler '
 | 
						|
    +'components.';
 | 
						|
  rsHTTPAppli = 'HTTP server Application';
 | 
						|
  rsHTTPAppli2 = 'HTTP server Application. Complete HTTP Server '
 | 
						|
    +'program in Free Pascal using webmodules. The program source '
 | 
						|
    +'is automatically maintained by Lazarus.';
 | 
						|
 | 
						|
Var
 | 
						|
   FileDescriptorWebProviderDataModule: TFileDescWebProviderDataModule;
 | 
						|
   ProjectDescriptorHTTPApplication : THTTPApplicationDescriptor;
 | 
						|
     FileDescriptorJSONRPCModule : TFileDescWebJSONRPCModule;
 | 
						|
   FileDescriptorExtDirectModule : TFileDescExtDirectModule;
 | 
						|
   AChecker : TJSSyntaxChecker;
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
uses propedits,FormEditingIntf, frmrpcmoduleoptions,frmnewhttpapp,
 | 
						|
     sqlstringspropertyeditordlg, registersqldb, weblazideintf;
 | 
						|
 | 
						|
Procedure Register;
 | 
						|
 | 
						|
begin
 | 
						|
   RegisterComponents('fpWeb',[TWebdataInputAdaptor,TFPWebDataProvider, TSQLDBWebDataProvider,
 | 
						|
                               TExtJSJSonWebdataInputAdaptor,TExtJSJSONDataFormatter,
 | 
						|
                               TExtJSXMLWebdataInputAdaptor,TExtJSXMLDataFormatter,
 | 
						|
                               TJSONRPCHandler,TJSONRPCDispatcher,TSessionJSONRPCDispatcher,
 | 
						|
                               TJSONRPCContentProducer,
 | 
						|
                               TExtDirectDispatcher,TExtDirectContentProducer]);
 | 
						|
   FileDescriptorWebProviderDataModule:=TFileDescWebProviderDataModule.Create;
 | 
						|
   FileDescriptorJSONRPCModule:=TFileDescWebJSONRPCModule.Create;
 | 
						|
   FileDescriptorExtDirectModule:=TFileDescExtDirectModule.Create;
 | 
						|
   RegisterProjectFileDescriptor(FileDescriptorWebProviderDataModule);
 | 
						|
   RegisterProjectFileDescriptor(FileDescriptorJSONRPCModule);
 | 
						|
   RegisterProjectFileDescriptor(FileDescriptorExtDirectModule);
 | 
						|
   FormEditingHook.RegisterDesignerBaseClass(TFPCustomWebProviderDataModule);
 | 
						|
   FormEditingHook.RegisterDesignerBaseClass(TFPWebProviderDataModule);
 | 
						|
   FormEditingHook.RegisterDesignerBaseClass(TJSONRPCModule);
 | 
						|
   FormEditingHook.RegisterDesignerBaseClass(TExtDirectModule);
 | 
						|
   AChecker:=TJSSyntaxChecker.Create(Nil);
 | 
						|
   LazarusIDE.AddHandlerOnQuickSyntaxCheck(@AChecker.CheckSource,False);
 | 
						|
   RegisterPropertyEditor(TStrings.ClassInfo, TSQLDBWebDataProvider,  'SelectSQL', TSQLStringsPropertyEditor);
 | 
						|
   RegisterPropertyEditor(TStrings.ClassInfo, TSQLDBWebDataProvider,  'InsertSQL', TSQLStringsPropertyEditor);
 | 
						|
   RegisterPropertyEditor(TStrings.ClassInfo, TSQLDBWebDataProvider,  'DeleteSQL', TSQLStringsPropertyEditor);
 | 
						|
   RegisterPropertyEditor(TStrings.ClassInfo, TSQLDBWebDataProvider,  'UpdateSQL', TSQLStringsPropertyEditor);
 | 
						|
   ProjectDescriptorHTTPApplication:=THTTPApplicationDescriptor.Create;
 | 
						|
   RegisterProjectDescriptor(ProjectDescriptorHTTPApplication);
 | 
						|
end;
 | 
						|
 | 
						|
{ THTTPApplicationDescriptor }
 | 
						|
 | 
						|
constructor THTTPApplicationDescriptor.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='FPHTTPApplication';
 | 
						|
end;
 | 
						|
 | 
						|
function THTTPApplicationDescriptor.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsHTTPAppli;
 | 
						|
end;
 | 
						|
 | 
						|
function THTTPApplicationDescriptor.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=rsHTTPAppli2;
 | 
						|
end;
 | 
						|
 | 
						|
function THTTPApplicationDescriptor.GetOPtions : TModalResult;
 | 
						|
 | 
						|
begin
 | 
						|
  With TNewHTTPApplicationForm.Create(Application) do
 | 
						|
    try
 | 
						|
      Result:=ShowModal;
 | 
						|
      if Result=mrOK then
 | 
						|
        begin
 | 
						|
        FThreaded:=Threaded;
 | 
						|
        FPort:=Port;
 | 
						|
        FReg:=ServeFiles;
 | 
						|
        if Freg then
 | 
						|
          begin
 | 
						|
          FLoc:=Location;
 | 
						|
          FDir:=Directory;
 | 
						|
          end;
 | 
						|
        end;
 | 
						|
    finally
 | 
						|
      Free;
 | 
						|
    end;
 | 
						|
end;
 | 
						|
function THTTPApplicationDescriptor.InitProject(AProject: TLazProject
 | 
						|
  ): TModalResult;
 | 
						|
 | 
						|
Var
 | 
						|
  S : string;
 | 
						|
  le: string;
 | 
						|
  NewSource: String;
 | 
						|
  MainFile: TLazProjectFile;
 | 
						|
 | 
						|
begin
 | 
						|
  inherited InitProject(AProject);
 | 
						|
  Result:=GetOptions;
 | 
						|
  if Result<>mrOK then
 | 
						|
    Exit;
 | 
						|
  MainFile:=AProject.CreateProjectFile('httpproject1.lpr');
 | 
						|
  MainFile.IsPartOfProject:=true;
 | 
						|
  AProject.AddFile(MainFile,false);
 | 
						|
  AProject.MainFileID:=0;
 | 
						|
  // create program source
 | 
						|
  le:=LineEnding;
 | 
						|
  NewSource:='program httpproject1;'+le
 | 
						|
    +le
 | 
						|
    +'{$mode objfpc}{$H+}'+le
 | 
						|
    +le
 | 
						|
    +'uses'+le;
 | 
						|
  if FReg then
 | 
						|
    NewSource:=NewSource+'  fpwebfile,'+le;
 | 
						|
  NewSource:=NewSource
 | 
						|
    +'  fphttpapp;'+le
 | 
						|
    +le
 | 
						|
    +'begin'+le;
 | 
						|
  if Freg then
 | 
						|
    begin
 | 
						|
    S:=Format('  RegisterFileLocation(''%s'',''%s'');',[FLoc,FDir]);
 | 
						|
    NewSource:=NewSource+S+le
 | 
						|
    end;
 | 
						|
  NewSource:=NewSource
 | 
						|
    +'  Application.Title:=''httpproject1'';'+le
 | 
						|
    +Format('  Application.Port:=%d;'+le,[FPort]);
 | 
						|
  if FThreaded then
 | 
						|
    NewSource:=NewSource+'  Application.Threaded:=True;'+le;
 | 
						|
  NewSource:=NewSource
 | 
						|
    +'  Application.Initialize;'+le
 | 
						|
    +'  Application.Run;'+le
 | 
						|
    +'end.'+le
 | 
						|
    +le;
 | 
						|
  AProject.MainFile.SetSourceText(NewSource);
 | 
						|
 | 
						|
  // add
 | 
						|
  AProject.AddPackageDependency('FCL');
 | 
						|
  AProject.AddPackageDependency('WebLaz');
 | 
						|
  AProject.AddPackageDependency('LazWebExtra');
 | 
						|
 | 
						|
  // compiler options
 | 
						|
  AProject.LazCompilerOptions.Win32GraphicApp:=false;
 | 
						|
  AProject.Flags := AProject.Flags - [pfMainUnitHasCreateFormStatements];
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
function THTTPApplicationDescriptor.CreateStartFiles(AProject: TLazProject
 | 
						|
  ): TModalResult;
 | 
						|
begin
 | 
						|
  LazarusIDE.DoNewEditorFile(FileDescriptorWebModule,'','',
 | 
						|
                         [nfIsPartOfProject,nfOpenInEditor,nfCreateDefaultSrc]);
 | 
						|
  Result:= mrOK;
 | 
						|
end;
 | 
						|
 | 
						|
{ TFileDescWebProviderDataModule }
 | 
						|
 | 
						|
constructor TFileDescWebProviderDataModule.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='Web DataProvider Module';
 | 
						|
  ResourceClass:=TFPWebProviderDataModule;
 | 
						|
  UseCreateFormStatements:=False;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebProviderDataModule.GetInterfaceUsesSection: string;
 | 
						|
begin
 | 
						|
  Result:=inherited GetInterfaceUsesSection;
 | 
						|
  Result:=Result+', HTTPDefs, websession, fpHTTP, fpWeb, fpwebdata';
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebProviderDataModule.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsWebDataProvi;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebProviderDataModule.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsWEBDataProvi2, [#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebProviderDataModule.GetImplementationSource(const Filename,
 | 
						|
  SourceName, ResourceName: string): string;
 | 
						|
begin
 | 
						|
  Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
 | 
						|
  if GetResourceType = rtRes then
 | 
						|
    Result:=Result+'initialization'+LineEnding;
 | 
						|
  Result:=Result+'  RegisterHTTPModule(''T'+ResourceName+''',T'+ResourceName+');'+LineEnding;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
{ TFileDescWebJSONFPCModule }
 | 
						|
 | 
						|
constructor TFileDescWebJSONRPCModule.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='JSON-RPC Module';
 | 
						|
  ResourceClass:=TJSONRPCModule;
 | 
						|
  UseCreateFormStatements:=False;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebJSONRPCModule.GetInterfaceUsesSection: string;
 | 
						|
begin
 | 
						|
  Result:=inherited GetInterfaceUsesSection;
 | 
						|
  Result:=Result+', HTTPDefs, websession, fpHTTP, fpWeb, fpjsonrpc, webjsonrpc';
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebJSONRPCModule.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=rsWebJSONRPCMo;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebJSONRPCModule.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsWEBJSONRPCMo2, [#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescWebJSONRPCModule.GetImplementationSource(const Filename,
 | 
						|
  SourceName, ResourceName: string): string;
 | 
						|
 | 
						|
Var
 | 
						|
  RH,RM : Boolean;
 | 
						|
  CN,HP : String;
 | 
						|
 | 
						|
begin
 | 
						|
  RH:=False;
 | 
						|
  RM:=False;
 | 
						|
  CN:=ResourceName;
 | 
						|
  HP:=ResourceName;
 | 
						|
  With TJSONRPCModuleOptionsForm.Create(Application) do
 | 
						|
    try
 | 
						|
      If (ShowModal=mrOK) then
 | 
						|
        begin
 | 
						|
        RH:=RegisterHandlers;
 | 
						|
        If RH Then
 | 
						|
          CN:=JSONRPCClass;
 | 
						|
        RM:=RegisterModule;
 | 
						|
        If RM then
 | 
						|
          HP:=HTTPPath;
 | 
						|
        end;
 | 
						|
    finally
 | 
						|
      Free;
 | 
						|
    end;
 | 
						|
  Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
 | 
						|
  if (GetResourceType = rtRes) and (RM or RH) then
 | 
						|
    Result:=Result+'Initialization'+sLineBreak;
 | 
						|
  If RM then
 | 
						|
    Result:=Result+'  RegisterHTTPModule('''+HP+''',T'+ResourceName+');'+LineEnding;
 | 
						|
  If RH then
 | 
						|
    Result:=Result+'  JSONRPCHandlerManager.RegisterDatamodule(T'+ResourceName+','''+HP+''',);'+LineEnding;
 | 
						|
end;
 | 
						|
 | 
						|
{ TFileDescExtDirectModule }
 | 
						|
 | 
						|
constructor TFileDescExtDirectModule.Create;
 | 
						|
begin
 | 
						|
  inherited Create;
 | 
						|
  Name:='Ext.Direct Module';
 | 
						|
  ResourceClass:=TExtDirectModule;
 | 
						|
  UseCreateFormStatements:=False;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescExtDirectModule.GetInterfaceUsesSection: string;
 | 
						|
begin
 | 
						|
  Result:=inherited GetInterfaceUsesSection;
 | 
						|
  Result:=Result+', HTTPDefs, websession, fpHTTP, fpWeb, fpjsonrpc, webjsonrpc, fpextdirect';
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescExtDirectModule.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=inherited GetLocalizedName;
 | 
						|
  Result:=rsWebExtDirect;
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescExtDirectModule.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=Format(rsWEBExtDirect2, [#13]);
 | 
						|
end;
 | 
						|
 | 
						|
function TFileDescExtDirectModule.GetImplementationSource(const Filename,
 | 
						|
  SourceName, ResourceName: string): string;
 | 
						|
 | 
						|
Var
 | 
						|
  RH,RM : Boolean;
 | 
						|
  CN,HP : String;
 | 
						|
 | 
						|
begin
 | 
						|
  RH:=False;
 | 
						|
  RM:=False;
 | 
						|
  CN:=ResourceName;
 | 
						|
  HP:=ResourceName;
 | 
						|
  With TJSONRPCModuleOptionsForm.Create(Application) do
 | 
						|
    try
 | 
						|
      If (ShowModal=mrOK) then
 | 
						|
        begin
 | 
						|
        RH:=RegisterHandlers;
 | 
						|
        If RH Then
 | 
						|
          CN:=JSONRPCClass;
 | 
						|
        RM:=RegisterModule;
 | 
						|
        If RM then
 | 
						|
          HP:=HTTPPath;
 | 
						|
        end;
 | 
						|
    finally
 | 
						|
      Free;
 | 
						|
    end;
 | 
						|
  Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
 | 
						|
  if (GetResourceType = rtRes) and (RM or RH) then
 | 
						|
    Result:=Result+'Initialization'+sLineBreak;
 | 
						|
  If RM then
 | 
						|
    Result:=Result+'  RegisterHTTPModule('''+HP+''',T'+ResourceName+');'+LineEnding;
 | 
						|
  If RH then
 | 
						|
    Result:=Result+'  JSONRPCHandlerManager.RegisterDatamodule(T'+ResourceName+','''+HP+''',);'+LineEnding;
 | 
						|
end;
 | 
						|
 | 
						|
{ TJSSyntaxChecker }
 | 
						|
 | 
						|
 | 
						|
procedure TJSSyntaxChecker.ShowMessage(const Msg: String);
 | 
						|
begin
 | 
						|
  IDEMessagesWindow.AddMsg(SourceFileName+' : '+Msg,'',0,Nil);
 | 
						|
end;
 | 
						|
 | 
						|
procedure TJSSyntaxChecker.ShowMessage(const Fmt: String;
 | 
						|
  Args: array of const);
 | 
						|
begin
 | 
						|
  ShowMessage(Format(Fmt,Args));
 | 
						|
end;
 | 
						|
 | 
						|
procedure TJSSyntaxChecker.ShowException(const Msg: String; E: Exception);
 | 
						|
begin
 | 
						|
  If (Msg<>'') then
 | 
						|
    ShowMessage(Msg+' : '+E.Message)
 | 
						|
  else
 | 
						|
    ShowMessage(Msg+' : '+E.Message);
 | 
						|
end;
 | 
						|
 | 
						|
function TJSSyntaxChecker.CheckJavaScript(S : TStream): TModalResult;
 | 
						|
 | 
						|
Var
 | 
						|
  P : TJSParser;
 | 
						|
  E : TJSElement;
 | 
						|
begin
 | 
						|
  P:=TJSParser.Create(S);
 | 
						|
  try
 | 
						|
    try
 | 
						|
      E:=P.Parse;
 | 
						|
      E.Free;
 | 
						|
      ShowMessage('Javascript syntax OK');
 | 
						|
    except
 | 
						|
      On E : Exception do
 | 
						|
        ShowException('Javascript syntax error',E);
 | 
						|
    end;
 | 
						|
  finally
 | 
						|
    P.free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
function TJSSyntaxChecker.CheckSource(Sender: TObject; var Handled: boolean
 | 
						|
  ): TModalResult;
 | 
						|
 | 
						|
Var
 | 
						|
  AE : TSourceEditorInterface;
 | 
						|
  E : String;
 | 
						|
  S : TStringStream;
 | 
						|
 | 
						|
begin
 | 
						|
  IDEMessagesWindow.BeginBlock(False);
 | 
						|
  try
 | 
						|
    try
 | 
						|
    Handled:=False;
 | 
						|
    result:=mrNone;
 | 
						|
    AE:=SourceEditorManagerIntf.ActiveEditor;
 | 
						|
    If (AE<>Nil) then
 | 
						|
      begin
 | 
						|
      E:=ExtractFileExt(AE.FileName);
 | 
						|
      FSFN:=ExtractFileName(AE.FileName);
 | 
						|
      Handled:=CompareText(E,'.js')=0;
 | 
						|
      If Handled then
 | 
						|
        begin
 | 
						|
        S:=TStringStream.Create(AE.SourceText);
 | 
						|
        try
 | 
						|
          CheckJavaScript(S);
 | 
						|
          Result:=mrOK;
 | 
						|
        finally
 | 
						|
          S.Free;
 | 
						|
        end;
 | 
						|
        end;
 | 
						|
      end;
 | 
						|
    except
 | 
						|
      On E : Exception do
 | 
						|
        ShowException('Error during syntax check',E);
 | 
						|
    end;
 | 
						|
  finally
 | 
						|
    IDEMessagesWindow.EndBlock;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
{ TJSFileDescriptor }
 | 
						|
 | 
						|
constructor TJSFileDescriptor.Create;
 | 
						|
begin
 | 
						|
  Name:='SQL Script file';
 | 
						|
  DefaultFilename:='script.sql';
 | 
						|
  DefaultResFileExt:='';
 | 
						|
  DefaultFileExt:='.sql';
 | 
						|
  VisibleInNewDialog:=true;
 | 
						|
end;
 | 
						|
 | 
						|
function TJSFileDescriptor.GetLocalizedName: string;
 | 
						|
begin
 | 
						|
  Result:=inherited GetLocalizedName;
 | 
						|
end;
 | 
						|
 | 
						|
function TJSFileDescriptor.GetLocalizedDescription: string;
 | 
						|
begin
 | 
						|
  Result:=inherited GetLocalizedDescription;
 | 
						|
end;
 | 
						|
 | 
						|
function TJSFileDescriptor.GetResourceSource(const ResourceName: string
 | 
						|
  ): string;
 | 
						|
begin
 | 
						|
  Result:=inherited GetResourceSource(ResourceName);
 | 
						|
end;
 | 
						|
 | 
						|
function TJSFileDescriptor.CreateSource(const Filename, SourceName,
 | 
						|
  ResourceName: string): string;
 | 
						|
begin
 | 
						|
  Result:=inherited CreateSource(Filename, SourceName, ResourceName);
 | 
						|
end;
 | 
						|
 | 
						|
procedure TJSFileDescriptor.UpdateDefaultPascalFileExtension(
 | 
						|
  const DefPasExt: string);
 | 
						|
begin
 | 
						|
  inherited UpdateDefaultPascalFileExtension(DefPasExt);
 | 
						|
end;
 | 
						|
 | 
						|
finalization
 | 
						|
  FreeAndNil(AChecker);
 | 
						|
 | 
						|
end.
 | 
						|
 |