unit frmDemo; {$mode objfpc} interface uses Classes, SysUtils, web, webwidget, htmlwidgets, widgetdemo, propertygridwidget, webrouter; Type { THelpDemoContainer } THelpDemoContainer = class(TDemoContainer) Protected Function HTMLTag: String; override; Procedure ApplyWidgetSettings(aElement: TJSHTMLElement); override; public class function WebWidgetClass: TCustomWebWidgetClass; override; end; { TDemoForm } TDemoForm = Class(TComponent) Private Fcontainer : TDemoContainer; FSelectedClass : TDemoContainerClass; FDemoParent : TJSHTMLElement; FPropertyGrid : TSimplePropertyGridWidget; FCBshowconsole: TJSHTMLInputelement; FConsole: TJSHTMLElement; Flist : TSimpleLoopTemplateWidget; procedure DoGetValue(Sender: TObject; aValue: TLoopTemplateValue); procedure DoRoute(URl: String; aRoute: TRoute; Params: TStrings); procedure DoSelectDemo(Sender: TObject; Event: TJSEvent); function DoShowConsole(Event: TEventListenerEvent): boolean; procedure ShowSelected; Public Constructor Create(aOwner : TComponent) ; override; Procedure Show; property SelectedClass : TDemoContainerClass Read FSelectedClass; end; implementation Const SDemoContainerID = 'democontainer'; SDemoListID = 'demolist'; SPropertyGridID = 'propertygrid'; SShowconsoleID = 'showconsole'; SpasjsconsoleID = 'pasjsconsole'; { THelpDemoContainer } function THelpDemoContainer.HTMLTag: String; begin Result:='p'; end; procedure THelpDemoContainer.ApplyWidgetSettings(aElement: TJSHTMLElement); begin inherited ApplyWidgetSettings(aElement); aElement.innerHTML:='Please select an element in the list located at the left of the screen'; end; class function THelpDemoContainer.WebWidgetClass: TCustomWebWidgetClass; begin Result:=Nil; end; { TDemoForm } procedure TDemoForm.ShowSelected; Var C: TDemoContainerClass; begin C:=FSelectedClass; if C=Nil then C:=THelpDemoContainer; FDemoParent.InnerHTML:=''; if Assigned(FContainer) then FreeAndNil(FContainer); FDemoParent.InnerHTML:=''; // To be sure FContainer:=C.Create(Self); FContainer.Name:='CurrentContainer'; FContainer.ParentID:=SDemoContainerID; FContainer.Refresh; FContainer.ShowDemo; FPropertyGrid.Subject:=FContainer.InspectorInstance; FPropertyGrid.LookupRoot:=FContainer; FPropertyGrid.Refresh; end; procedure TDemoForm.DoSelectDemo(Sender: TObject; Event: TJSEvent); begin { Writeln('Changed : ',Flist.SelectedIndex); if Flist.SelectedIndex>=0 then Writeln('Value : ',Flist.Values[Flist.SelectedIndex]); FSelectedClass:=TDemoFactory.Instance.FindDemoClass(Flist.Values[Flist.SelectedIndex]);} ShowSelected; end; function TDemoForm.DoShowConsole(Event: TEventListenerEvent): boolean; begin if FCBShowConsole.checked then FConsole.style.cssText:='' else FConsole.style.cssText:='display: none;' end; constructor TDemoForm.Create(aOwner: TComponent); begin inherited Create(aOwner); Flist:=TSimpleLoopTemplateWidget.Create(Self); Flist.OnGetValue:=@DoGetValue; FList.HeaderTemplate:='