frmdemo.pp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. unit frmdemo;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. sysutils, classes, web, webrouter;
  6. Type
  7. { TDemoForm }
  8. TDemoForm = Class
  9. Panel,
  10. PanelContent,
  11. labelContent : TJSElement;
  12. function DismissAlert(Event: TJSMouseEvent): boolean;
  13. function ButtonClick(Event: TJSMouseEvent): boolean;
  14. constructor Create(aFormNo : Integer; UseSlash : Boolean = False);
  15. private
  16. function DoLinkClick(aEvent: TJSMouseEvent): boolean;
  17. end;
  18. implementation
  19. function TDemoForm.DismissAlert(Event: TJSMouseEvent): boolean;
  20. begin
  21. PanelContent.removeChild(labelContent);
  22. Result:=true;
  23. end;
  24. function TDemoForm.ButtonClick(Event: TJSMouseEvent): boolean;
  25. begin
  26. Router.Push(String(TJSHTMLElement(Event.target).Dataset['link']));
  27. end;
  28. constructor TDemoForm.Create(aFormNo: Integer; UseSlash: Boolean);
  29. Var
  30. adiv, Link, Button : TJSHTMLElement;
  31. i : integer;
  32. Function MakeLink(aID : integer; ForURL : Boolean) : String;
  33. begin
  34. Result:='/form';
  35. if forURL and (Router.HistoryKind=hkHash) then
  36. Result:='#'+Result;
  37. if useSlash then
  38. Result:=Result+'/';
  39. Result:=Result+IntToStr(aID);
  40. end;
  41. begin
  42. Panel:=document.createElement('div');
  43. // attrs are default array property...
  44. Panel['class']:='panel panel-default';
  45. PanelContent:=document.createElement('div');
  46. PanelContent['class']:='panel-body';
  47. labelContent:=document.createElement('div');
  48. labelContent.innerHTML:='Hello from form '+IntToStr(aFormNo);
  49. labelContent['role']:='alert';
  50. labelContent['class']:='alert alert-info';
  51. TJSHTMLElement(labelContent).onclick:=@DismissAlert;
  52. aDiv:=TJSHTMLElement(document.createElement('div'));
  53. aDiv['style']:='padding: 0px 0px 10px 0px;';
  54. PanelContent.appendChild(adiv);
  55. For I:=1 to 5 do
  56. if (I<>aFormNo) then
  57. begin
  58. Link:=TJSHTMLElement(document.createElement('a'));
  59. link['href']:=MakeLink(i,True);
  60. link.innerHTML:='Go to form <span class="badge">'+IntToStr(i)+'</span>';
  61. if (Router.HistoryKind<>hkHTML5) then
  62. Link.onclick:=@DoLinkClick;
  63. adiv.appendChild(link);
  64. end;
  65. PanelContent.appendChild(labelContent);
  66. For I:=1 to 5 do
  67. if (I<>aFormNo) then
  68. begin
  69. Button:=TJSHTMLElement(document.createElement('button'));
  70. Button['class']:='btn btn-default';
  71. Button.InnerHTML:='Go to form '+IntToStr(i);
  72. Button.Dataset['link']:=MakeLink(i,false);
  73. Button.onclick:=@ButtonClick;
  74. PanelContent.appendChild(Button);
  75. end;
  76. document.body.appendChild(Panel);
  77. Panel.appendChild(PanelContent);
  78. end;
  79. function TDemoForm.DoLinkClick(aEvent: TJSMouseEvent): boolean;
  80. Var
  81. URL : String;
  82. p: Integer;
  83. begin
  84. URL:=String(aEvent.target['href']);
  85. P:=Pos('#',URL);
  86. URL:=Copy(URL,P+1,Length(URL)-P);
  87. Writeln('URL :',URL);
  88. Router.Push(URL);
  89. aEvent.preventDefault;
  90. end;
  91. end.