From 77c1d9b1f267a2b54588c25c80e01d68ebf44307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Sat, 28 May 2022 14:55:03 +0200 Subject: [PATCH] * Bulma components, fixes in stubs --- .../pas2js/components/images/mkimages.sh | 2 +- .../pas2js/components/images/tbulmamodal.png | Bin 0 -> 366 bytes .../components/images/tbulmamodal_150.png | Bin 0 -> 517 bytes .../components/images/tbulmamodal_200.png | Bin 0 -> 489 bytes .../components/images/tbulmatoastwidget.png | Bin 0 -> 591 bytes .../images/tbulmatoastwidget_150.png | Bin 0 -> 887 bytes .../images/tbulmatoastwidget_200.png | Bin 0 -> 1178 bytes .../pas2js/components/pas2jsc_images.res | Bin 25268 -> 29686 bytes .../pas2js/components/pas2jscomponents.lpk | 5 + .../pas2js/components/pas2jscomponents.pas | 2 +- .../pas2js/components/regpas2jscomponents.pas | 26 +- .../stubs/stub.bootstraptablewidget.pas | 1 - .../components/stubs/stub.bulmawidgets.pas | 490 ++++++++++++++++++ .../components/stubs/stub.htmlwidgets.pp | 2 +- .../components/stubs/stub.jsondataset.pp | 2 +- 15 files changed, 524 insertions(+), 6 deletions(-) create mode 100644 components/pas2js/components/images/tbulmamodal.png create mode 100644 components/pas2js/components/images/tbulmamodal_150.png create mode 100644 components/pas2js/components/images/tbulmamodal_200.png create mode 100644 components/pas2js/components/images/tbulmatoastwidget.png create mode 100644 components/pas2js/components/images/tbulmatoastwidget_150.png create mode 100644 components/pas2js/components/images/tbulmatoastwidget_200.png create mode 100644 components/pas2js/components/stubs/stub.bulmawidgets.pas diff --git a/components/pas2js/components/images/mkimages.sh b/components/pas2js/components/images/mkimages.sh index 4e5f893822..3f34d54adf 100755 --- a/components/pas2js/components/images/mkimages.sh +++ b/components/pas2js/components/images/mkimages.sh @@ -1,2 +1,2 @@ #!/bin/sh -exec ../../../../tools/lazres ../pas2jsc_images.res tsqldbrestconnection.png thtmlelementactionlist.png tsqldbrestdataset.png tbootstrapmodal*.png tbootstraptoastwidget*.png ttemplateloader*.png tlocaljsondataset*.png tdbbootstraptablewidget*.png tdblooptemplatewidget*.png tdbselectwidget*.png +exec ../../../../tools/lazres ../pas2jsc_images.res tsqldbrestconnection.png thtmlelementactionlist.png tsqldbrestdataset.png tbootstrapmodal*.png tbootstraptoastwidget*.png ttemplateloader*.png tlocaljsondataset*.png tdbbootstraptablewidget*.png tdblooptemplatewidget*.png tdbselectwidget*.png tbulma*.png diff --git a/components/pas2js/components/images/tbulmamodal.png b/components/pas2js/components/images/tbulmamodal.png new file mode 100644 index 0000000000000000000000000000000000000000..7b932d57a32c6fea47b0f29ba6848044947eee02 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ zh^c}wqi2xH2cV#2iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0woJzX3_ zJUZWA-RtFSC~@p#Jb%*eE7}$dHm_cM?yH!NUR>9L@(0IPEj zCr&)Y(0=hlk3e?tPvzpSMC&i^Hx3$nWXZ2MbP0 Hl+XkKU#yZN literal 0 HcmV?d00001 diff --git a/components/pas2js/components/images/tbulmamodal_150.png b/components/pas2js/components/images/tbulmamodal_150.png new file mode 100644 index 0000000000000000000000000000000000000000..c717ff3a74fd3fd55f54df487bfba68d2ab11aa2 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSc;uILpXq-h9ji|$mcBZh%9Dc zP_zJHM%QVE2|z)~64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<_&n><|{ zLn2z=-thO5aTICzc%MhM^Jc3e(@^ld)iuT!KZuW6FG}3YTSSF zf8>oXn8fdsEPdDIy4W%f?Jqp`hHb`c7REl(;z?rSu4t&;(|Z2mCyuk$LMJcx?A-l> zV|L-DIS$K?7nR&-_-v7>Dw5^e{@H3%#b=Yb=kMQ%^fi!{dbN`E*U6&C{6D6iNRIk* z_>+_U2isO&tGx#=r)} zOS0o^{b!iw<@e8iPxsE<5i1|Ayx?UoUbV$^;WoS7sS^bkme%QSxm4|x%X^Q5w|>>( zHZ!%IH8RFsu4f*5MxG8h&{!a|Su1yORsRl#(7yUZ56_g{1V$Nyr>mdKI;Vst0FfEn Avj6}9 literal 0 HcmV?d00001 diff --git a/components/pas2js/components/images/tbulmamodal_200.png b/components/pas2js/components/images/tbulmamodal_200.png new file mode 100644 index 0000000000000000000000000000000000000000..3a916f9e856c1de2ad9628a6fae8fbfd7fc6aa01 GIT binary patch literal 489 zcmV@~8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10cJ@=K~!jg?U}(!!$1^8Pm74VHVWz&sed3w{E+HeSAJM)|3RYL zD5UOE3c8r2nG6#;g)}e0ci=&jl=fVb$zm=jN~=tPC*TcO0lz(&6|evv3r8LF$TOY6j~ zl-VA{RK5$Szik>u`d48hwYd_eS1AVtXC`CQ~A!JUT`Fs5}~hL z0v|X9hg&fvn3Sg?ihj<32jCM=#RR4>8*IsEhe&%Mw`)@1%9SsfV9Mk+(>hvtfdI8I00000NkvXXu0mjf3WCFs literal 0 HcmV?d00001 diff --git a/components/pas2js/components/images/tbulmatoastwidget.png b/components/pas2js/components/images/tbulmatoastwidget.png new file mode 100644 index 0000000000000000000000000000000000000000..2d07b30765964bcc37ce66a3a67bbf54ec06e5db GIT binary patch literal 591 zcmV-V0?B06wXmpm z=qK<&DmJ!lBy?vf>XHyE)#wJXLxi@ACaA=yOFI_Nd(!EoQ^%R{Pu}F@|GwwBU--}1 zkmJo}9LH|-ByJub@Dz(h6`#Wds;D(NRoundoW_EKm`(!TVFYK;hb`&sP25O&Q^Ru{ z_?z%ye8)#zL^+2+Wej2_d33qi!wQx~Sh{lvZbUckVF^Qxmq+j$_pz~n@C;pefL}PA zksTs_GuYaK@C@59iz$@gv`Erm8-!;VN-|Hu4SW{vwF{f@1!H9q|3~eyvC>GD7WiveD2WcN<#4+Qmdm1gdh5trbqdE@;QPe9GKx>=Y=_AS zS&~PIK~)o@pyB zS+=A}xc4Om18ZHbgHBu$VX0c(3#;aRwk)RWxcxYRH+U(kt%RNE7qjL(_TZU_!s}+1 zT*ue+;}ty7d{t)W8}5jKxhAqbTEg38Nyfdx7;cNE>BkPSH|9mvO!KGga8tx^ dSDv5p;146CfNGnm-3tH!002ovPDHLkV1k6@2+jZi literal 0 HcmV?d00001 diff --git a/components/pas2js/components/images/tbulmatoastwidget_150.png b/components/pas2js/components/images/tbulmatoastwidget_150.png new file mode 100644 index 0000000000000000000000000000000000000000..984c4a43df0b1d5193b1fab57b81b079851f9bcd GIT binary patch literal 887 zcmV--1Bm>IP)|f|XA;ZhiV`1P!7at5$e9)TA^2KgQmRJfor-$|1?KRtTI{TcN zbLPb_EZA$U-{rf0>-yVV$NyuX3!T}x4{NX-H)Brp{fVD(8eick{+>L|YcT_xF^WrQ z)GU{90FQ@_wrCfjL2SjFSXSx#PKv~DQD8xo+i^!l{tVv22NiR(EP7!)ojgTMcQgJyBQrRa_0lU$Jo#M5=fg=ad6| zy`91{%29kN?Vzc~Ey|@Zj;C4)u9CKBL)xxGJs?wH2w#V4IDoNe+}B4k1@?#UQ^CbUN|tM%t#ZNk&4WQXumwDyzytX7+pV5a2O{&s2b88R>f3J*{(J+&&j6j zv#9KBVXW7S8r};Ihv4m~eAC8YuP}h`gToHETN%z((?IBf%>RQ$CiikX%A%FNl3tbHg5zNWm*&*FsieEB_WEtC?36+t}5n3PKI z)j=w~Jx1|M7~PIfaYg+f40*XIz0)^ovaOq;8lhrdZ^E~gz6;V#{XTBMJyJe3AM?W2 z1=s$Lxl)HnGb~YV`J$Z19z2a3yEWVi@(3-KMs!kIKcB~USHDiW#lOcs{fC>>P`dyC N002ovPDHLkV1k$on;`%I literal 0 HcmV?d00001 diff --git a/components/pas2js/components/images/tbulmatoastwidget_200.png b/components/pas2js/components/images/tbulmatoastwidget_200.png new file mode 100644 index 0000000000000000000000000000000000000000..46c99315d746effbbdfc15a018be1e5b7da91ecd GIT binary patch literal 1178 zcmV;L1ZDe)P)@~8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Q$s}K~!jg?b%z1l~oi6@Sn#a#~CGaf-WOrYT1KCS`$`GJ_s=y z5xqqQ#+0OyMNkjDR$x;I!OUxPd+72|&<%=;pfCuUF)g}aX;xFtSZWsOIOFuN&uR8| z{Jt~iocZR=JotwV``df1wf}tkw$|F5#aT=Vb8@iJgw?nXS7AApVqvks@nSiEA25K= zup6T}aHtstY{2vQ1LJj;!*~u|MVr%(W;}>}Qy`sH_Td4{n=bNq;-`$kf5Z#ehV{4< z=LyTJsaRiD?7I&yVtAwaQ&M6)Eq=#rbob6z$j(@i>K>CR195W0BGqSUi0kCq6Q2#6)wqC6!5X+ zW}WgWkOMBlK@+?_#oRQ(Et1o9ZG#9_gSC>&y1QJUMe+!Hypimx#10eueo=NBZk0T7 zS{u!-3M`QP$y?&ic(*^)aB9`#VG}$DN{yFCjsIZLj8Ll%i}9}szAFmY7zunJ996Rw zf8xXFdt(6|QN#O<~li|QQ(tcn^2q@xABf(JTOtXJ}h>XGjgHtAroo+Tf1T%|Zb zX-!>_q0|@2luBO(Lbb~GrpWhZ$X*!99DAhpWBn$q@KhHT977{OgGP088}rP;KJ zJ0rdW@N(3!t->I)1=~&VeW`$5QRn&@p;Q~XqWb4>g`_KywGU*0V@Qh?$b_BQAYG`w0AkDMP z8}o6$3C3_cYZ*^v*&GcX6&2r2u+lElaHrjS;wh^CD8HBo(chRkx@i<^tz zUklfJzi{jw6;6#YVQI7pPfsfaw|$+kQOmI(k4ldbszNJH2!G+U<;+n_ sNBI&O7M!K;h0|x3aJrmsFt4idADgwnaAsV7-v9sr07*qoM6N<$g0*BTApigX literal 0 HcmV?d00001 diff --git a/components/pas2js/components/pas2jsc_images.res b/components/pas2js/components/pas2jsc_images.res index 63b04e3789d39719b9457cad86b5f6cb5f4de125..ca7cae47a5c368a4d4b8f94562514521c44ee544 100644 GIT binary patch delta 171 zcmdmTl=0hh#tmDN#Pb*#7)%%#82e q%LPQ4gdH$-OwJb--~3J}jY-%8Q*v{@=vroM5b%SKr2uH delta 9 QcmezNoN>!h#tmDN02|!}9{>OV diff --git a/components/pas2js/components/pas2jscomponents.lpk b/components/pas2js/components/pas2jscomponents.lpk index 60b45a78fa..5be0790c2a 100644 --- a/components/pas2js/components/pas2jscomponents.lpk +++ b/components/pas2js/components/pas2jscomponents.lpk @@ -112,6 +112,11 @@ + + + + + diff --git a/components/pas2js/components/pas2jscomponents.pas b/components/pas2js/components/pas2jscomponents.pas index cd5b3d9ced..8b04ecdf98 100644 --- a/components/pas2js/components/pas2jscomponents.pas +++ b/components/pas2js/components/pas2jscomponents.pas @@ -14,7 +14,7 @@ uses stub.web, stub.bootstrapwidgets, frmpas2jsedithtml, p2jselementactions, Stub.Data.HTMLActions, frmselecthtmlactions, stub.jsondataset, stub.bootstraptablewidget, stub.dbwebwidget, stub.dbhtmlwidgets, - stub.htmlwidgets, LazarusPackageIntf; + stub.htmlwidgets, stub.bulmawidgets, LazarusPackageIntf; implementation diff --git a/components/pas2js/components/regpas2jscomponents.pas b/components/pas2js/components/regpas2jscomponents.pas index aa70df72f9..c9b3df489c 100644 --- a/components/pas2js/components/regpas2jscomponents.pas +++ b/components/pas2js/components/regpas2jscomponents.pas @@ -7,7 +7,7 @@ interface uses Classes, SysUtils, ProjectIntf, PropEdits, ComponentEditors, fpjsondataset, dbpropedits, db, stub.htmlfragment, stub.htmlactions, stub.data.htmlactions, stub.restdataset, - stub.webwidget, stub.bootstrapwidgets, stub.bootstraptablewidget, + stub.webwidget, stub.bootstrapwidgets, stub.bootstraptablewidget, stub.bulmawidgets, stub.templateloader, stub.jsondataset, stub.dbwebwidget, stub.dbhtmlwidgets; Type @@ -237,6 +237,13 @@ Type Procedure RequiredUnits(Units: TStrings); override; end; + { TBulmaWidgetRequirements } + + TBulmaWidgetRequirements = Class(TComponentRequirements) + public + Procedure RequiredUnits(Units: TStrings); override; + end; + { TLogBridge } TLogBridge = Class(TObject) @@ -279,6 +286,8 @@ begin RegisterComponentRequirements(TDBHTMLButtonElementAction,TDBElementActionRequirements); RegisterComponentRequirements(TBootstrapModal,THTMLBootstrapWidgetRequirements); RegisterComponentRequirements(TBootstrapToastWidget,THTMLBootstrapWidgetRequirements); + RegisterComponentRequirements(TBulmaModal,TBulmaWidgetRequirements); + RegisterComponentRequirements(TBulmaToastWidget,TBulmaWidgetRequirements); RegisterComponentRequirements(TTemplateLoader,TRTLTemplateLoaderRequirements); RegisterComponentRequirements(TLocalJSONDataset,TJSONDatasetRequirements); RegisterComponentRequirements(TDBBootstrapTableWidget,TDBBootstrapTableWidgetRequirements); @@ -321,6 +330,13 @@ begin RegisterPropertyEditor(TypeInfo(string),TBSTableColumn, 'FieldName', TBSColumnFieldProperty); RegisterPropertyEditor(TypeInfo(string),TBSTableColumn, 'WidthUnits', TWidthUnitsProperty); RegisterPropertyEditor(TypeInfo(string),TBSTableColumn, 'ButtonURLTarget', TTargetProperty); + // + RegisterPropertyEditor(TypeInfo(String),TBulmaModal,'ParentID',TElementIDPropertyEditor); + RegisterPropertyEditor(TypeInfo(String),TBulmaModal,'ElementID',TElementIDPropertyEditor); + RegisterPropertyEditor(TypeInfo(String),TBulmaModal,'Template',TTemplatePropertyEditor); + RegisterPropertyEditor(TypeInfo(String),TBulmaToastWidget,'Header',TTemplatePropertyEditor); + RegisterPropertyEditor(TypeInfo(String),TBulmaToastWidget,'Body',TTemplatePropertyEditor); + // Maybe make a THTMLFragmentString = type string // Same for ElementID/ParentID : TDOMIDString = type string RegisterPropertyEditor(TypeInfo(String),TCustomLoopTemplateWidget,'HeaderTemplate',THTMLFragmentPropertyEditor); @@ -366,6 +382,7 @@ procedure register; begin RegisterComponents('Pas2js',[THTMLElementActionList,TBootstrapModal,TBootstrapToastWidget,TTemplateLoader]); + RegisterComponents('Pas2js Bulma',[TBulmaModal,TBulmaToastWidget]); RegisterComponents('Pas2js Data Access',[TSQLDBRestConnection,TSQLDBRestDataset,TLocalJSONDataset]); RegisterComponents('Pas2js Data Controls',[TDBBootstrapTableWidget,TDBLoopTemplateWidget,TDBSelectWidget]); RegisterClasses([TJSONDateField, TJSONTimeField, TJSONDateTimeField]); @@ -378,6 +395,13 @@ begin RegisterRESTHandling; end; +{ TBulmaWidgetRequirements } + +procedure TBulmaWidgetRequirements.RequiredUnits(Units: TStrings); +begin + Units.text:='bulmawidgets'; +end; + { TSelectFieldProperty } procedure TDBSelectFieldProperty.FillValues(const Values: TStringList); diff --git a/components/pas2js/components/stubs/stub.bootstraptablewidget.pas b/components/pas2js/components/stubs/stub.bootstraptablewidget.pas index b4d431597b..b453c7480b 100644 --- a/components/pas2js/components/stubs/stub.bootstraptablewidget.pas +++ b/components/pas2js/components/stubs/stub.bootstraptablewidget.pas @@ -545,7 +545,6 @@ function TDataTablesFieldMap.GetValueByName(S: String): JSValue; begin if S<>'' then; Result:=''; - // end; end. diff --git a/components/pas2js/components/stubs/stub.bulmawidgets.pas b/components/pas2js/components/stubs/stub.bulmawidgets.pas new file mode 100644 index 0000000000..aef956a249 --- /dev/null +++ b/components/pas2js/components/stubs/stub.bulmawidgets.pas @@ -0,0 +1,490 @@ +unit stub.bulmawidgets; + +{$mode objfpc} +{$h+} +{ $modeswitch externalclass} + +Interface + +uses + Stub.web, + SysUtils, + Classes, + stub.templateloader, + stub.webwidget; + +Const + DefaultClose = 'DefaultCloseClicks'; + +Type + + { TBulmaModal } + TOnModalHideEvent = Procedure (Sender : TObject; CloseEl : TJSHTMLElement; Values : TStrings) of object; + + TModalItemKind = (mikValue,mikClose); + + { TModalReferenceItem } + + TModalReferenceItem = Class(TReferenceItem) + private + FInitialValue: String; + FKind: TModalItemKind; + Protected + Public + Procedure Assign(Source : TPersistent); override; + Published + Property Kind : TModalItemKind Read FKind Write FKind; + Property InitialValue : String Read FInitialValue Write FInitialValue; + end; + + { TModalReferences } + + TModalReferences = Class(TWebWidgetReferences) + private + function GetMR(aIndex : Integer): TModalReferenceItem; + procedure SetMR(aIndex : Integer; AValue: TModalReferenceItem); + Public + Property ModalRefs[aIndex : Integer] : TModalReferenceItem Read GetMR Write SetMR; default; + end; + + TBulmaModal = Class(TCustomWebWidget) + private + FBackDrop: Boolean; + FFocus: Boolean; + FKeyBoard: Boolean; + FOnHide: TOnModalHideEvent; + FShowOnRender: Boolean; + FTemplate: String; + FTemplateLoader: TCustomTemplateLoader; + FTemplateName: String; + FRemoveOnHide: Boolean; + FOKButtonName: String; + FCancelButtonName: String; + FCloseButtonName: String; + FOnRender: TNotifyEvent; + FOnShow: TNotifyEvent; + function GetModalReferences: TModalReferences; + procedure SetModalReferences(AValue: TModalReferences); + procedure SetTemplateLoader(AValue: TCustomTemplateLoader); + protected + function CreateReferences: TWebWidgetReferences; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + Public + Constructor Create(aOwner : TComponent); override; + Destructor Destroy; override; + Published + Property ParentID; + Property ElementID; + Property Styles; + Property StyleRefresh; + Property References : TModalReferences Read GetModalReferences Write SetModalReferences; + Property ShowOnRender: Boolean Read FShowOnRender Write FShowOnrender default False; + Property RemoveOnHide : Boolean Read FRemoveOnHide Write FRemoveOnHide default True; + Property BackDrop : Boolean Read FBackDrop Write FBackDrop default false; + Property KeyBoard : Boolean Read FKeyBoard Write FKeyBoard default false; + Property Focus : Boolean Read FFocus Write FFocus default false; + Property OKButtonName : String Read FOKButtonName write FOKButtonName; + Property CancelButtonName : String Read FCancelButtonName Write FCancelButtonName; + Property CloseButtonName : String Read FCloseButtonName Write FCloseButtonName; + // Template gets precedence over templatename; + Property Template : String Read FTemplate Write FTemplate; + Property TemplateName : String Read FTemplateName Write FTemplateName; + Property TemplateLoader : TCustomTemplateLoader Read FTemplateLoader Write SetTemplateLoader; + Property OnHide : TOnModalHideEvent Read FOnHide Write FOnHide; + Property OnRender : TNotifyEvent Read FOnRender Write FOnRender; + Property OnShow : TNotifyEvent Read FOnShow Write FOnShow; + end; + + { TSimpleToastWidget } + TContextual = (cNone, + cPrimary,cLink,cInfo,cSuccess,cWarning,cDanger, + cWhite,cLight,cDark,cBlack,cText,cGhost); + TToastPosition = (tpDefault, + tpTopRight,tpTopLeft,tpTopCenter, + tpBottomRight,tpBottomLeft,tpBottomCenter, + tpCenter); + + // Single toast message + + TBaseBulmaToastWidget = Class(TCustomWebWidget) + private + FAnimate: Boolean; + FAutoHide: Boolean; + FBody: String; + FBoolean: Boolean; + FContextual: TContextual; + FHeader: String; + FHeaderImage: String; + FHideDelay: Integer; + FMinWidth: Integer; + FSingle: Boolean; + FPosition: TToastPosition; + procedure SetAnimate(AValue: Boolean); + procedure SetAutoHide(AValue: Boolean); + procedure SetBody(AValue: String); + procedure SetBoolean(AValue: Boolean); + procedure SetContextual(AValue: TContextual); + procedure SetHeader(AValue: String); + procedure SetHeaderImage(AValue: String); + procedure SetHideDelay(AValue: Integer); + procedure SetMinWidth(AValue: Integer); + Protected + FElement : TJSHTMLElement; + function BodyHTML: String; virtual; + function HeaderHTML: String; virtual; + Public + Constructor Create(aOwner : TComponent); override; + Procedure Refresh; + procedure Hide; + Protected + Property Header : String Read FHeader Write SetHeader; + Property Body : String Read FBody Write SetBody; + Property HeaderImage : String Read FHeaderImage Write SetHeaderImage; + Property CloseButton : Boolean Read FBoolean Write SetBoolean; + Property Contextual : TContextual Read FContextual write SetContextual; + Property HideDelay : Integer Read FHideDelay Write SetHideDelay default 2000; + 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 Single : Boolean Read FSingle Write FSingle; + Property Position : TToastPosition Read FPosition Write FPosition default tpTopRight; + end; + + TBulmaToastWidget = class(TBaseBulmaToastWidget) + Property ParentID; + Property ElementID; + Property Header; + Property Body; + Property HeaderImage; + Property CloseButton; + Property Contextual; + Property HideDelay; + Property AutoHide; + Property Animate; + Property MinWidth; + Property Single; + Property Position; + end; + + // Encapsulates the global tag where the toasts are shown. + + { TToastManager } + + TToastManager = Class(TComponent) + Private + class var + _instance : TToastManager; + _ToastID : NativeInt; + Private + FAnimate: Boolean; + FAutoHide: Boolean; + FHideDelay: Integer; + FMinheight: Integer; + FMinWidth: Integer; + FMultiToast: Boolean; + FToastIcon: String; + FParentID: String; + FToastPosition: TToastPosition; + procedure SetMinHeight(AValue: Integer); + procedure SetMultiToast(AValue: Boolean); + procedure SetParentID(const Value: String); + class function CreateElement(aTag : String; aID: String = ''): TJSHTMLElement; static; + Public + Constructor Create(aOwner : TComponent); override; + class function Instance : TToastManager; + Class Function getToastID : String; + Procedure clear; + function ShowToast(const aHeader, aBody: String; aContext: TContextual=cNone; Closable: Boolean=True; aDelay : Integer = 0): TBaseBulmaToastWidget; + Published + Property ParentID : String Read FParentID Write SetParentID; + Property MultiToast : Boolean Read FMultiToast Write SetMultiToast; + Property MinHeight : Integer Read FMinheight Write SetMinHeight default 250; + Property ToastHideDelay : Integer Read FHideDelay Write FHideDelay default 2000; + Property ToastAutoHide : Boolean Read FAutoHide Write FAutoHide default True; + Property ToastAnimate : Boolean Read FAnimate Write FAnimate default False; + Property ToastMinWidth : Integer Read FMinWidth Write FMinWidth default 200; + Property ToastIcon : String Read FToastIcon Write FToastIcon; + Property ToastPosition : TToastPosition Read FToastPosition Write FToastPosition; + end; + +Const + ContextualNames : Array[TContextual] of string + = ('','primary','link','info','success','warning','danger', + 'white','light','dark','black','text','ghost'); + ToastPositionNames : Array[TToastPosition] of string = + ('top-right','top-right','top-left','top-center', + 'bottom-right','bottom-left','bottom-center', + 'center'); + +Function Toasts : TToastManager; + +Implementation + +{ TModalReferenceItem } + +procedure TModalReferenceItem.Assign(Source: TPersistent); + +Var + MRI : TModalReferenceItem absolute Source; + +begin + if Source is TModalReferenceItem then + begin + Self.Kind:=MRI.Kind; + Self.InitialValue:=MRI.InitialValue; + end; + inherited Assign(Source); +end; + + +{ TModalReferences } + +function TModalReferences.GetMR(aIndex : Integer): TModalReferenceItem; +begin + Result:=TModalReferenceItem(Items[aIndex]) +end; + +procedure TModalReferences.SetMR(aIndex : Integer; AValue: TModalReferenceItem); +begin + Items[aIndex]:=aValue; +end; + + +{ TBulmaModal } + + +procedure TBulmaModal.SetModalReferences(AValue: TModalReferences); +begin + References.Assign(aValue); +end; + +procedure TBulmaModal.SetTemplateLoader(AValue: TCustomTemplateLoader); +begin + if FTemplateLoader=AValue then Exit; + if assigned(FTemplateLoader) then + FTemplateLoader.RemoveFreeNotification(Self); + FTemplateLoader:=AValue; + if assigned(FTemplateLoader) then + FTemplateLoader.FreeNotification(Self); +end; + + +function TBulmaModal.CreateReferences: TWebWidgetReferences; +begin + Result:=TModalReferences.Create(Self,TModalReferenceItem); +end; + +procedure TBulmaModal.Notification(AComponent: TComponent; Operation: TOperation + ); +begin + inherited Notification(AComponent, Operation); + if (Operation=opRemove) and (aComponent=TemplateLoader) then + FTemplateLoader:=Nil; +end; + + +destructor TBulmaModal.Destroy; +begin + inherited; +end; + + +constructor TBulmaModal.Create(aOwner: TComponent); +begin + inherited; + FRemoveOnHide:=True; +end; + + +function TBulmaModal.GetModalReferences: TModalReferences; +begin + Result:=TModalReferences(Inherited References); +end; + + +{ TBulmaToast } + +function Toasts: TToastManager; +begin + Result:=TToastManager.Instance; +end; + +{ TToastManager } + +class function TToastManager.Instance: TToastManager; +begin + if _instance=Nil then + _instance:=TToastManager.Create(Nil); + Result:=_instance; +end; + + +procedure TToastManager.SetMinHeight(AValue: Integer); +begin + if FMinheight=AValue then Exit; + FMinheight:=AValue; +end; + +procedure TToastManager.SetMultiToast(AValue: Boolean); +begin + if FMultiToast=AValue then Exit; + FMultiToast:=AValue; +end; + +procedure TToastManager.SetParentID(const Value: String); +begin + FParentID:=Value; +end; + + + +class function TToastManager.getToastID: String; +begin + Inc(_ToastID); + Result:='toast-'+intToStr(_ToastID); +end; + +Class Function TToastManager.CreateElement(aTag : String; aID : String = '') : TJSHTMLElement; + +begin + Result:=nil; + if aTag='' then; + if aID='' then; +end; + + +procedure TToastManager.clear; +begin +end; + +constructor TToastManager.Create(aOwner: TComponent); +begin + inherited Create(aOwner); + FMinHeight:=250; + FMinWidth:=200; + FMultiToast:=True; + FHideDelay:=2000; + FAutoHide:=True; + FAnimate:=False; +end; + +function TToastManager.ShowToast(const aHeader, aBody: String; aContext : TContextual = cNone; Closable: Boolean = True; aDelay : Integer = 0): TBaseBulmaToastWidget; + + +begin + if aHeader=aBody then; + if aContext<>cnone then; + if closable then; + if aDelay=0 then; + Result:=Nil; +end; + +{ TBaseBulmaToastWidget } + + +procedure TBaseBulmaToastWidget.SetBody(AValue: String); +begin + if FBody=AValue then Exit; + FBody:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetAnimate(AValue: Boolean); +begin + if FAnimate=AValue then Exit; + FAnimate:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetAutoHide(AValue: Boolean); +begin + if FAutoHide=AValue then Exit; + FAutoHide:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetBoolean(AValue: Boolean); +begin + if FBoolean=AValue then Exit; + FBoolean:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetContextual(AValue: TContextual); +begin + if FContextual=AValue then Exit; + FContextual:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetHeader(AValue: String); +begin + if FHeader=AValue then Exit; + FHeader:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetHeaderImage(AValue: String); +begin + if FHeaderImage=AValue then Exit; + FHeaderImage:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetHideDelay(AValue: Integer); +begin + if FHideDelay=AValue then Exit; + FHideDelay:=AValue; +end; + +procedure TBaseBulmaToastWidget.SetMinWidth(AValue: Integer); +begin + if FMinWidth=AValue then Exit; + FMinWidth:=AValue; +end; + + +function TBaseBulmaToastWidget.HeaderHTML: String; + +Var + S : String; + +begin + Result:=''; + if (Header='') and (HeaderImage='') then + exit; + S:=ContextualNames[Contextual]; + if S<>'' then + S:=' is-'+S; + Result:='

'; + if HeaderImage<>'' then + Result:=Result+''; + Result:=Result+Header; + Result:=Result+'

' +end; + + +function TBaseBulmaToastWidget.BodyHTML: String; + +begin + Result:='
'; + Result:=Result+HeaderHTML; + Result:=Result+'

'+Body+'

'; + Result:=Result+'
'; +end; + + +constructor TBaseBulmaToastWidget.Create(aOwner: TComponent); +begin + inherited Create(aOwner); + FMinWidth:=200; + FAutoHide:=True; + FHideDelay:=2000; + FPosition:=tpTopRight; +end; + +procedure TBaseBulmaToastWidget.Hide; +begin + +end; + + +procedure TBaseBulmaToastWidget.Refresh; + +Begin +end; + +end. diff --git a/components/pas2js/components/stubs/stub.htmlwidgets.pp b/components/pas2js/components/stubs/stub.htmlwidgets.pp index 522d3cbe95..94c24a9ea4 100644 --- a/components/pas2js/components/stubs/stub.htmlwidgets.pp +++ b/components/pas2js/components/stubs/stub.htmlwidgets.pp @@ -20,7 +20,7 @@ unit stub.htmlwidgets; interface uses - Classes, SysUtils, stub.webwidget, stub.js, stub.web; + Classes, SysUtils, stub.webwidget, stub.web; Type TTextMode = (tmText,tmHTML); diff --git a/components/pas2js/components/stubs/stub.jsondataset.pp b/components/pas2js/components/stubs/stub.jsondataset.pp index 5e164b7943..84a162205c 100644 --- a/components/pas2js/components/stubs/stub.jsondataset.pp +++ b/components/pas2js/components/stubs/stub.jsondataset.pp @@ -5,7 +5,7 @@ unit stub.jsondataset; interface uses - Classes, SysUtils, db, fpjsondataset; + Classes, SysUtils, fpjsondataset; Type { TCustomLocalJSONDataset }