demobootstrap.pp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. unit demobootstrap;
  2. {$mode objfpc}
  3. interface
  4. uses
  5. sysutils, classes, web, js, webwidget, htmlwidgets, bootstrapwidgets, widgetdemo;
  6. Type
  7. { TSimpleToastWidgetDemo }
  8. TSimpleToastWidgetDemo = class(TDemoContainer)
  9. public
  10. class function WebWidgetClass: TCustomWebWidgetClass; override;
  11. Procedure ShowDemo; override;
  12. end;
  13. { TToastManagerDemo }
  14. TToastManagerDemo = class(TDemoContainer)
  15. private
  16. procedure DoShowToast(Sender: TObject; Event: TJSEvent);
  17. Protected
  18. FLabelClosable:TLabelWidget;
  19. FLabelHeader:TLabelWidget;
  20. FLabelBody:TLabelWidget;
  21. FLabelContextual:TLabelWidget;
  22. FHeader : TTextInputWidget;
  23. FBody : TTextAreaWidget;
  24. FContextual : TSelectWidget;
  25. FClosable : TCheckboxInputWidget;
  26. FShowButton: TBootstrapButton;
  27. public
  28. Class Function Demohelp : String; override;
  29. Class Function Description : String; override;
  30. class function WebWidgetClass: TCustomWebWidgetClass; override;
  31. Function GetInspectorInstance: TObject; override;
  32. Procedure ShowDemo; override;
  33. end;
  34. { TBootstrapButtonDemo }
  35. TBootstrapButtonDemo = class(TDemoContainer)
  36. Private
  37. public
  38. class function WebWidgetClass: TCustomWebWidgetClass; override;
  39. Procedure ShowDemo; override;
  40. end;
  41. { TBootstrapModalDemo }
  42. TBootstrapModalDemo = class(TDemoContainer)
  43. Private
  44. FShow : TBootstrapButton;
  45. FHide : TBootstrapButton;
  46. FMemo : TTextAreaWidget;
  47. procedure DoHideDialog(Sender: TObject; Event: TJSEvent);
  48. procedure DoModalHide(Sender: TObject; El: TJSHTMLElement; Values: TStrings);
  49. procedure DoShowDialog(Sender: TObject; Event: TJSEvent);
  50. Function Modal : TBootstrapModal;
  51. public
  52. Class Function Demohelp : String; override;
  53. Class Function Description : String; override;
  54. class function WebWidgetClass: TCustomWebWidgetClass; override;
  55. Function GetInspectorInstance: TObject; override;
  56. Procedure ShowDemo; override;
  57. end;
  58. implementation
  59. { TBootstrapModalDemo }
  60. procedure TBootstrapModalDemo.DoHideDialog(Sender: TObject; Event: TJSEvent);
  61. begin
  62. Modal.Hide;
  63. end;
  64. procedure TBootstrapModalDemo.DoModalHide(Sender: TObject; El: TJSHTMLElement; Values: TStrings);
  65. begin
  66. Fmemo.Lines.Add('Modal closed and returned '+IntToStr(Values.Count)+' values.');
  67. FMemo.Lines.AddStrings(Values);
  68. end;
  69. procedure TBootstrapModalDemo.DoShowDialog(Sender: TObject; Event: TJSEvent);
  70. begin
  71. Modal.Show;
  72. end;
  73. function TBootstrapModalDemo.Modal: TBootstrapModal;
  74. begin
  75. Result:=WidgetInstance as TBootstrapModal;
  76. end;
  77. class function TBootstrapModalDemo.Demohelp: String;
  78. begin
  79. Result:='Bootstrap modal showas a modal template and returns list of form values on close (hide)';
  80. end;
  81. class function TBootstrapModalDemo.Description: String;
  82. begin
  83. Result:='Bootstrap modal demo';
  84. end;
  85. class function TBootstrapModalDemo.WebWidgetClass: TCustomWebWidgetClass;
  86. begin
  87. Result:=TBootStrapModal;
  88. end;
  89. function TBootstrapModalDemo.GetInspectorInstance: TObject;
  90. begin
  91. Result:=inherited GetInspectorInstance;
  92. end;
  93. Const
  94. SampleModal =
  95. '<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> '+
  96. ' <div class="modal-dialog" role="document">'+
  97. ' <div class="modal-content">'+
  98. ' <div class="modal-header">'+
  99. ' <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>'+
  100. ' <button type="button" class="close" data-dismiss="modal" aria-label="Close">'+
  101. ' <span aria-hidden="true">&times;</span>'+
  102. ' </button>'+
  103. ' </div>'+
  104. ' <div class="modal-body">'+
  105. ' <p>Modal body text goes here.</p>'+
  106. ' </div>'+
  107. ' <div class="modal-footer">'+
  108. ' <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>'+
  109. ' <button type="button" class="btn btn-primary">Save changes</button>'+
  110. ' </div>'+
  111. ' </div>'+
  112. ' </div>'+
  113. '</div>';
  114. procedure TBootstrapModalDemo.ShowDemo;
  115. Var
  116. T : TContextual;
  117. R : TRowWidget;
  118. C : TColWidget;
  119. Procedure AddRow;
  120. begin
  121. R:=TRowWidget.Create(Self);
  122. R.Parent:=Self;
  123. C:=TColWidget.Create(Self);
  124. C.DefaultColSpan:=6;
  125. C.Parent:=R;
  126. end;
  127. begin
  128. inherited ShowDemo;
  129. Modal.Template:=SampleModal;
  130. AddRow;
  131. C.DefaultColSpan:=6;
  132. FShow:=TBootstrapButton.Create(Self);
  133. FShow.OnClick:=@DoShowDialog;
  134. FShow.Contextual:=cPrimary;
  135. FShow.Parent:=C;
  136. FShow.Text:='Show dialog';
  137. C:=TColWidget.Create(Self);
  138. C.Parent:=R;
  139. C.DefaultColSpan:=6;
  140. FHide:=TBootstrapButton.Create(Self);
  141. FHide.OnClick:=@DoHideDialog;
  142. FHide.Contextual:=cSecondary;
  143. FHide.Parent:=C;
  144. FHide.Text:='Hide dialog';
  145. AddRow;
  146. With TLabelWidget.Create(Self) do
  147. begin
  148. Text:='Log:';
  149. Parent:=C;
  150. end;
  151. AddRow;
  152. FMemo:=TTextAreaWidget.Create(Self);
  153. FMemo.Parent:=C;
  154. FMemo.Columns:=80;
  155. FMemo.Rows:=25;
  156. Modal.OnHide:=@DoModalHide;
  157. Refresh;
  158. end;
  159. { TToastManagerDemo }
  160. procedure TToastManagerDemo.DoShowToast(Sender: TObject; Event: TJSEvent);
  161. Var
  162. T : TContextual;
  163. begin
  164. if FContextual.SelectedIndex<>-1 then
  165. T:=TContextual(FContextual.SelectedIndex)
  166. else
  167. T:=cNone;
  168. TToastManager.Instance.ShowToast(FHeader.Value,FBody.Lines.text,T,FClosable.Checked);
  169. end;
  170. class function TToastManagerDemo.Demohelp: String;
  171. begin
  172. Result:='Toast manager demo: click button to show a toast in the top-left corner';
  173. end;
  174. class function TToastManagerDemo.Description: String;
  175. begin
  176. Result:='Toast manager demo';
  177. end;
  178. class function TToastManagerDemo.WebWidgetClass: TCustomWebWidgetClass;
  179. begin
  180. Result:=Nil;
  181. end;
  182. function TToastManagerDemo.GetInspectorInstance: TObject;
  183. begin
  184. Result:=TToastManager.Instance;
  185. end;
  186. procedure TToastManagerDemo.ShowDemo;
  187. Var
  188. T : TContextual;
  189. R : TRowWidget;
  190. C : TColWidget;
  191. Procedure AddRow;
  192. begin
  193. R:=TRowWidget.Create(Self);
  194. R.Parent:=Self;
  195. C:=TColWidget.Create(Self);
  196. C.Parent:=R;
  197. end;
  198. begin
  199. inherited ShowDemo;
  200. TToastManager.Instance.ParentID:='toastarea-stack';
  201. // Contextual
  202. AddRow;
  203. FLabelContextual:=TLabelWidget.Create(Self);
  204. FLabelContextual.Text:='Contextual class for message';
  205. FContextual:=TSelectWidget.Create(Self);
  206. For T in TContextual do
  207. FContextual.Items.Add(ContextualNames[t]);
  208. FContextual.SelectedIndex:=0;
  209. FLabelContextual.LabelFor:=FContextual;
  210. FLabelContextual.Parent:=C;
  211. FContextual.Parent:=C;
  212. FContextual.Classes:='form-control';
  213. // Header
  214. AddRow;
  215. FLabelHeader:=TLabelWidget.Create(Self);
  216. FLabelHeader.Text:='Toast header';
  217. FHeader:=TTextInputWidget.Create(Self);
  218. FHeader.Value:='The message title';
  219. FLabelHeader.LabelFor:=FHeader;
  220. FLabelHeader.Parent:=C;
  221. FHeader.Parent:=C;
  222. FHeader.Classes:='form-control';
  223. // Body
  224. AddRow;
  225. FLabelBody:=TLabelWidget.Create(Self);
  226. FLabelBody.Text:='Toast body';
  227. FBody:=TTextAreaWidget.Create(Self);
  228. FBody.Lines.Text:='A nice message to show';
  229. FLabelBody.LabelFor:=FBody;
  230. FLabelBody.Parent:=C;
  231. FBody.Parent:=C;
  232. FBody.Classes:='form-control';
  233. // Closable checkbox
  234. AddRow;
  235. FLabelClosable:=TLabelWidget.Create(Self);
  236. FLabelClosable.Text:='Allow to close toast';
  237. FClosable:=TCheckboxInputWidget.Create(Self);
  238. FClosable.Classes:='form-check-input';
  239. FLabelClosable.LabelFor:=FClosable;
  240. FLabelClosable.Parent:=C;
  241. FClosable.Parent:=C;
  242. // button
  243. AddRow;
  244. FShowButton:=TBootstrapButton.Create(Self);
  245. FShowButton.Text:='Show toast';
  246. FShowButton.Parent:=C;
  247. FShowButton.OnClick:=@DoShowToast;
  248. Refresh;
  249. end;
  250. { TBootstrapButtonDemo }
  251. class function TBootstrapButtonDemo.WebWidgetClass: TCustomWebWidgetClass;
  252. begin
  253. Result:=TBootstrapButton;
  254. end;
  255. procedure TBootstrapButtonDemo.ShowDemo;
  256. begin
  257. inherited ShowDemo;
  258. WidgetInstance.OnClick:=@DoClick;
  259. end;
  260. { TToastManagerDemo }
  261. class function TSimpleToastWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  262. begin
  263. Result:=TSimpleToastWidget;
  264. end;
  265. procedure TSimpleToastWidgetDemo.ShowDemo;
  266. begin
  267. inherited ShowDemo;
  268. end;
  269. initialization
  270. TBootstrapButtonDemo.RegisterDemo;
  271. TSimpleToastWidgetDemo.RegisterDemo;
  272. TToastManagerDemo.RegisterDemo;
  273. TBootstrapModalDemo.Registerdemo;
  274. end.