2
0
Эх сурвалжийг харах

* Some changes to accomodate streaming

Michaël Van Canneyt 3 жил өмнө
parent
commit
255280a10b

+ 69 - 9
packages/bootstrap/bootstrapwidgets.pp

@@ -38,7 +38,10 @@ Type
     FHeaderImage: String;
     FHeaderImage: String;
     FHideDelay: Integer;
     FHideDelay: Integer;
     FMinWidth: Integer;
     FMinWidth: Integer;
+    FOnHide: TNotifyEvent;
+    FShowing: Boolean;
     FSmallHeader: String;
     FSmallHeader: String;
+    FUnrenderOnHide: Boolean;
     procedure SetAnimate(AValue: Boolean);
     procedure SetAnimate(AValue: Boolean);
     procedure SetAutoHide(AValue: Boolean);
     procedure SetAutoHide(AValue: Boolean);
     procedure SetBody(AValue: String);
     procedure SetBody(AValue: String);
@@ -49,15 +52,19 @@ Type
     procedure SetHideDelay(AValue: Integer);
     procedure SetHideDelay(AValue: Integer);
     procedure SetMinWidth(AValue: Integer);
     procedure SetMinWidth(AValue: Integer);
     procedure SetSmallHeader(AValue: String);
     procedure SetSmallHeader(AValue: String);
+    procedure SetUnrenderOnHide(AValue: Boolean);
   Protected
   Protected
+    function BootstrapHide(aEvent: TJSEvent): Boolean; virtual;
     function BodyHTML: String; virtual;
     function BodyHTML: String; virtual;
     function CloseButtonHTML: String; virtual;
     function CloseButtonHTML: String; virtual;
     function HeaderHTML: String; virtual;
     function HeaderHTML: String; virtual;
     Function GetTemplateHTML: String; override;
     Function GetTemplateHTML: String; override;
     Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override;
     Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override;
+    procedure ApplyWidgetSettings(aElement: TJSHTMLElement); override;
   Public
   Public
     Constructor Create(aOwner : TComponent); override;
     Constructor Create(aOwner : TComponent); override;
     Procedure Hide;
     Procedure Hide;
+    Property Showing : Boolean Read FShowing;
   Published
   Published
     Property Header : String Read FHeader Write SetHeader;
     Property Header : String Read FHeader Write SetHeader;
     Property SmallHeader : String Read FSmallHeader Write SetSmallHeader;
     Property SmallHeader : String Read FSmallHeader Write SetSmallHeader;
@@ -69,8 +76,12 @@ Type
     Property AutoHide : Boolean Read FAutoHide Write SetAutoHide default True;
     Property AutoHide : Boolean Read FAutoHide Write SetAutoHide default True;
     Property Animate : Boolean Read FAnimate Write SetAnimate default False;
     Property Animate : Boolean Read FAnimate Write SetAnimate default False;
     Property MinWidth : Integer Read FMinWidth Write SetMinWidth default 200;
     Property MinWidth : Integer Read FMinWidth Write SetMinWidth default 200;
+    Property UnrenderOnHide : Boolean Read FUnrenderOnHide Write SetUnrenderOnHide;
+    Property OnHide : TNotifyEvent Read FOnHide Write FOnHide;
   end;
   end;
 
 
+  TBootstrapToastWidget = class (TSimpleToastWidget);
+
   // Encapsulates the global tag where the toasts are shown.
   // Encapsulates the global tag where the toasts are shown.
 
 
   { TToastManager }
   { TToastManager }
@@ -92,6 +103,7 @@ Type
     procedure SetMultiToast(AValue: Boolean);
     procedure SetMultiToast(AValue: Boolean);
    Protected
    Protected
     Class Function DefaultParentElement : TJSHTMLElement; override;
     Class Function DefaultParentElement : TJSHTMLElement; override;
+    Function BootstrapHide(Event : TJSEvent) : Boolean;
     Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override;
     Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override;
     Function GetContentElement: TJSHTMLELement; override;
     Function GetContentElement: TJSHTMLELement; override;
     Procedure InvalidateElement; override;
     Procedure InvalidateElement; override;
@@ -209,6 +221,7 @@ Type
     Function BootstrapHide(Event : TJSEvent) : Boolean;
     Function BootstrapHide(Event : TJSEvent) : Boolean;
     Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override;
     Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override;
     Function GetTemplateHTML: String; override;
     Function GetTemplateHTML: String; override;
+    procedure ApplyWidgetSettings(aElement: TJSHTMLElement); override;
     Procedure RefreshReferences; override;
     Procedure RefreshReferences; override;
     function GetTemplateManager: TCustomTemplateLoader; virtual;
     function GetTemplateManager: TCustomTemplateLoader; virtual;
     procedure DoShow; virtual;
     procedure DoShow; virtual;
@@ -241,6 +254,7 @@ Implementation
 
 
 Resourcestring
 Resourcestring
   SErrNoTemplateSet = '%s: No template set';
   SErrNoTemplateSet = '%s: No template set';
+  SErrCannotUnrenderFixedElementID = 'Cannot unrender when ElementID (%s) is set';
 
 
 function Toasts: TToastManager;
 function Toasts: TToastManager;
 begin
 begin
@@ -385,6 +399,11 @@ begin
   Result:=TJSHTMLElement(Document.body);
   Result:=TJSHTMLElement(Document.body);
 end;
 end;
 
 
+function TToastManager.BootstrapHide(Event: TJSEvent): Boolean;
+begin
+
+end;
+
 function TToastManager.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement;
 function TToastManager.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement;
 
 
 Var
 Var
@@ -467,15 +486,20 @@ begin
   S:=ContextualNames[Contextual];
   S:=ContextualNames[Contextual];
   if S<>'' then
   if S<>'' then
     S:='text-'+S;
     S:='text-'+S;
-  Result:=Result+ '<button type="button" class="ml-2 mb-1 close '+S+'" data-dismiss="toast" aria-label="Close">';
-  Result:=Result+ '   <span aria-hidden="true">&times;</span>';
+  if BootStrapVersion=bv4 then
+    S:=S+' close'
+  else
+    S:=S+' btn-close';
+  Result:=Result+ '<button type="button" class="xml-2 xmb-1 close '+S+'" data-dismiss="toast" data-bs-dismiss="toast" aria-label="Close">';
+  if BootstrapVersion=bv4 then
+    Result:=Result+ '   <span aria-hidden="true">&times;</span>';
   Result:=Result+ '</button>';
   Result:=Result+ '</button>';
 end;
 end;
 
 
 function TSimpleToastWidget.HeaderHTML: String;
 function TSimpleToastWidget.HeaderHTML: String;
 
 
 Var
 Var
-  S : String;
+  me,S : String;
 
 
 begin
 begin
   S:=ContextualNames[Contextual];
   S:=ContextualNames[Contextual];
@@ -484,7 +508,11 @@ begin
   Result:='<div class="toast-header '+S+'">';
   Result:='<div class="toast-header '+S+'">';
   if HeaderImage<>'' then
   if HeaderImage<>'' then
     Result:=Result+'<img src="'+HeaderImage+'" class="rounded mr-2">';
     Result:=Result+'<img src="'+HeaderImage+'" class="rounded mr-2">';
-  Result:=Result+'<div class="mr-auto">'+Header+'</div>';
+  if BootStrapVersion=bv4 then
+    me:='mr'
+  else
+    me:='me';
+  Result:=Result+'<div class="'+me+'-auto">'+Header+'</div>';
   if (SmallHeader<>'') then
   if (SmallHeader<>'') then
     Result:=Result+'<small>'+SmallHeader+'</small>';
     Result:=Result+'<small>'+SmallHeader+'</small>';
   if CloseButton then
   if CloseButton then
@@ -562,6 +590,25 @@ begin
   if isRendered then Refresh;
   if isRendered then Refresh;
 end;
 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;
 function TSimpleToastWidget.BodyHTML: String;
 
 
 Var
 Var
@@ -591,8 +638,14 @@ end;
 function TSimpleToastWidget.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement;
 function TSimpleToastWidget.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement;
 begin
 begin
   Result:=inherited DoRenderHTML(aParent, aElement);
   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;
 end;
 
 
 constructor TSimpleToastWidget.Create(aOwner: TComponent);
 constructor TSimpleToastWidget.Create(aOwner: TComponent);
@@ -738,6 +791,8 @@ Var
 begin
 begin
   Result:=False;
   Result:=False;
   FShowing:=False;
   FShowing:=False;
+  if FHideEl=Nil then
+    FHideEl:=TJSHTMLElement(Event.targetElement);
   // Writeln('In bootstraphide callback ', assigned(onhide));
   // Writeln('In bootstraphide callback ', assigned(onhide));
   If Assigned(OnHide) then
   If Assigned(OnHide) then
     begin
     begin
@@ -763,13 +818,18 @@ function TBootstrapModal.DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTM
 begin
 begin
   FHideEl:=Nil;
   FHideEl:=Nil;
   Result:=inherited DoRenderHTML(aParent, aElement);
   Result:=inherited DoRenderHTML(aParent, aElement);
-  JQuery(Result).modal(New([
+end;
+
+procedure TBootstrapModal.ApplyWidgetSettings(aElement: TJSHTMLElement);
+
+begin
+  JQuery(aElement).modal(New([
     'backdrop', BackDrop,
     'backdrop', BackDrop,
     'keyboard', keyboard,
     'keyboard', keyboard,
     'focus',Focus,
     'focus',Focus,
     'show',ShowOnRender
     'show',ShowOnRender
   ]));
   ]));
-  jQuery(Result).on_('hidden.bs.modal',@BootstrapHide);
+  jQuery(aElement).on_('hidden.bs.modal',@BootstrapHide);
 end;
 end;
 
 
 function TBootstrapModal.GetTemplateHTML: String;
 function TBootstrapModal.GetTemplateHTML: String;
@@ -841,7 +901,7 @@ procedure TBootstrapModal.Show;
   end;
   end;
 
 
 begin
 begin
-  if (Template<>'') Then
+  if (Template<>'') or (ElementID<>'') Then
     DoShow
     DoShow
   else if TemplateName<>'' then
   else if TemplateName<>'' then
     GetTemplateManager.IfTemplate(TemplateName,@DoShowTemplate)
     GetTemplateManager.IfTemplate(TemplateName,@DoShowTemplate)