From 255280a10baa05002fc3205c57759de9150ad8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Sun, 1 May 2022 16:31:46 +0200 Subject: [PATCH] * Some changes to accomodate streaming --- packages/bootstrap/bootstrapwidgets.pp | 78 +++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 9 deletions(-) diff --git a/packages/bootstrap/bootstrapwidgets.pp b/packages/bootstrap/bootstrapwidgets.pp index 3af7409..ed47532 100644 --- a/packages/bootstrap/bootstrapwidgets.pp +++ b/packages/bootstrap/bootstrapwidgets.pp @@ -38,7 +38,10 @@ Type FHeaderImage: String; FHideDelay: Integer; FMinWidth: Integer; + FOnHide: TNotifyEvent; + FShowing: Boolean; FSmallHeader: String; + FUnrenderOnHide: Boolean; procedure SetAnimate(AValue: Boolean); procedure SetAutoHide(AValue: Boolean); procedure SetBody(AValue: String); @@ -49,15 +52,19 @@ Type procedure SetHideDelay(AValue: Integer); procedure SetMinWidth(AValue: Integer); procedure SetSmallHeader(AValue: String); + procedure SetUnrenderOnHide(AValue: Boolean); Protected + function BootstrapHide(aEvent: TJSEvent): Boolean; virtual; function BodyHTML: String; virtual; function CloseButtonHTML: String; virtual; function HeaderHTML: String; virtual; Function GetTemplateHTML: String; override; Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override; + procedure ApplyWidgetSettings(aElement: TJSHTMLElement); override; Public Constructor Create(aOwner : TComponent); override; Procedure Hide; + Property Showing : Boolean Read FShowing; Published Property Header : String Read FHeader Write SetHeader; Property SmallHeader : String Read FSmallHeader Write SetSmallHeader; @@ -69,8 +76,12 @@ Type Property AutoHide : Boolean Read FAutoHide Write SetAutoHide default True; Property Animate : Boolean Read FAnimate Write SetAnimate default False; Property MinWidth : Integer Read FMinWidth Write SetMinWidth default 200; + Property UnrenderOnHide : Boolean Read FUnrenderOnHide Write SetUnrenderOnHide; + Property OnHide : TNotifyEvent Read FOnHide Write FOnHide; end; + TBootstrapToastWidget = class (TSimpleToastWidget); + // Encapsulates the global tag where the toasts are shown. { TToastManager } @@ -92,6 +103,7 @@ Type procedure SetMultiToast(AValue: Boolean); Protected Class Function DefaultParentElement : TJSHTMLElement; override; + Function BootstrapHide(Event : TJSEvent) : Boolean; Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override; Function GetContentElement: TJSHTMLELement; override; Procedure InvalidateElement; override; @@ -209,6 +221,7 @@ Type Function BootstrapHide(Event : TJSEvent) : Boolean; Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override; Function GetTemplateHTML: String; override; + procedure ApplyWidgetSettings(aElement: TJSHTMLElement); override; Procedure RefreshReferences; override; function GetTemplateManager: TCustomTemplateLoader; virtual; procedure DoShow; virtual; @@ -241,6 +254,7 @@ Implementation Resourcestring SErrNoTemplateSet = '%s: No template set'; + SErrCannotUnrenderFixedElementID = 'Cannot unrender when ElementID (%s) is set'; function Toasts: TToastManager; begin @@ -385,6 +399,11 @@ begin Result:=TJSHTMLElement(Document.body); end; +function TToastManager.BootstrapHide(Event: TJSEvent): Boolean; +begin + +end; + function TToastManager.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; Var @@ -467,15 +486,20 @@ begin S:=ContextualNames[Contextual]; if S<>'' then S:='text-'+S; - Result:=Result+ ''; end; function TSimpleToastWidget.HeaderHTML: String; Var - S : String; + me,S : String; begin S:=ContextualNames[Contextual]; @@ -484,7 +508,11 @@ begin Result:='
'; if HeaderImage<>'' then Result:=Result+''; - Result:=Result+'
'+Header+'
'; + if BootStrapVersion=bv4 then + me:='mr' + else + me:='me'; + Result:=Result+'
'+Header+'
'; if (SmallHeader<>'') then Result:=Result+''+SmallHeader+''; if CloseButton then @@ -562,6 +590,25 @@ begin if isRendered then Refresh; end; +procedure TSimpleToastWidget.SetUnrenderOnHide(AValue: Boolean); +begin + if FUnrenderOnHide=AValue then Exit; + if FixedElementID and aValue then + Raise EWidgets.CreateFmt(SErrCannotUnrenderFixedElementID,[ElementID]); + FUnrenderOnHide:=AValue; +end; + +function TSimpleToastWidget.BootstrapHide(aEvent: TJSEvent) : Boolean; + +begin + FShowing:=False; + // Writeln('In bootstraphide callback ', assigned(onhide)); + If Assigned(OnHide) then + OnHide(Self); + if UnrenderOnHide then + Unrender; +end; + function TSimpleToastWidget.BodyHTML: String; Var @@ -591,8 +638,14 @@ end; function TSimpleToastWidget.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; begin Result:=inherited DoRenderHTML(aParent, aElement); - JQuery(Result).toast(New(['animation',FAnimate,'autohide',autohide,'delay',FHideDelay])); - JQuery(Result).ToastShow; +end; + +procedure TSimpleToastWidget.ApplyWidgetSettings(aElement: TJSHTMLElement); +begin + inherited ApplyWidgetSettings(aElement); + JQuery(aElement).toast(New(['animation',FAnimate,'autohide',autohide,'delay',FHideDelay])); + JQuery(aElement).ToastShow; + jQuery(aElement).on_('hidden.bs.toast',@BootstrapHide); end; constructor TSimpleToastWidget.Create(aOwner: TComponent); @@ -738,6 +791,8 @@ Var begin Result:=False; FShowing:=False; + if FHideEl=Nil then + FHideEl:=TJSHTMLElement(Event.targetElement); // Writeln('In bootstraphide callback ', assigned(onhide)); If Assigned(OnHide) then begin @@ -763,13 +818,18 @@ function TBootstrapModal.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTM begin FHideEl:=Nil; Result:=inherited DoRenderHTML(aParent, aElement); - JQuery(Result).modal(New([ +end; + +procedure TBootstrapModal.ApplyWidgetSettings(aElement: TJSHTMLElement); + +begin + JQuery(aElement).modal(New([ 'backdrop', BackDrop, 'keyboard', keyboard, 'focus',Focus, 'show',ShowOnRender ])); - jQuery(Result).on_('hidden.bs.modal',@BootstrapHide); + jQuery(aElement).on_('hidden.bs.modal',@BootstrapHide); end; function TBootstrapModal.GetTemplateHTML: String; @@ -841,7 +901,7 @@ procedure TBootstrapModal.Show; end; begin - if (Template<>'') Then + if (Template<>'') or (ElementID<>'') Then DoShow else if TemplateName<>'' then GetTemplateManager.IfTemplate(TemplateName,@DoShowTemplate)