frmindex.pas 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. unit frmindex;
  2. {$mode ObjFPC}
  3. interface
  4. uses
  5. SysUtils, Classes, Rtl.HTMLActions, htmlfragment, dbwebwidget, webwidget,
  6. dbhtmlwidgets, DB, Web, jsondataset, localjsondataset;
  7. type
  8. { TIndexFragment }
  9. TIndexFragment = class(THTMLFragment)
  10. actSelectCountry: THTMLElementAction;
  11. selCountry: TDBSelectWidget;
  12. DSCountries: TDataSource;
  13. alIndex: THTMLElementActionList;
  14. alShowHide: THTMLElementAction;
  15. jdsCountries: TLocalJSONDataset;
  16. jdsCountriesContinent: TStringField;
  17. jdsCountriesContinentFull: TStringField;
  18. jdsCountriesFlagCode: TStringField;
  19. jdsCountriesISO2: TStringField;
  20. jdsCountriesISO3: TStringField;
  21. jdsCountriesName: TStringField;
  22. jdsCountriesPrefix: TIntegerField;
  23. procedure actSelectCountryExecute(Sender: TObject; Event: TJSEvent);
  24. procedure alShowHideExecute(Sender: TObject; Event: TJSEvent);
  25. procedure DataModuleRendered(Sender: TObject);
  26. procedure ltwFlagsGetGroupValue(Sender: TObject;
  27. aDataset: TDataset; aValue: TLoopTemplateValue);
  28. procedure jdsCountriesCalcFields(DataSet: TDataSet);
  29. private
  30. public
  31. end;
  32. var
  33. IndexFragment: TIndexFragment;
  34. implementation
  35. uses JS;
  36. {$R *.lfm}
  37. var
  38. // In countrycodes.js
  39. Countries : TJSArray; external name 'countries';
  40. { TIndexFragment }
  41. procedure TIndexFragment.ltwFlagsGetGroupValue(Sender: TObject;
  42. aDataset: TDataset; aValue: TLoopTemplateValue);
  43. begin
  44. aValue.Value:=IntToStr((aDataset.RecNo-1) div 4);
  45. end;
  46. procedure TIndexFragment.jdsCountriesCalcFields(DataSet: TDataSet);
  47. Var
  48. S : String;
  49. begin
  50. jdsCountriesFlagCode.AsString:=LowerCase(jdsCountriesISO2.AsString);
  51. Case jdsCountriesContinent.AsString of
  52. 'AF' : S:='Africa';
  53. 'AN' : S:='Antarctica';
  54. 'AS' : S:='Asia';
  55. 'EU' : S:='Europe';
  56. 'OC' : S:='Oceania';
  57. 'NA' : S:='North America';
  58. 'SA' : S:='South America';
  59. end;
  60. jdsCountriesContinentFull.AsString:=S;
  61. end;
  62. procedure TIndexFragment.DataModuleRendered(Sender: TObject);
  63. begin
  64. jdsCountries.Rows:=Countries;
  65. end;
  66. procedure TIndexFragment.alShowHideExecute(Sender: TObject; Event: TJSEvent);
  67. begin
  68. if jdsCountries.Active then
  69. begin
  70. jdsCountries.Close;
  71. (sender as THTMLElementAction).Value:='Fill select';
  72. end
  73. else
  74. begin
  75. if not Assigned(jdsCountries.Rows) then
  76. jdsCountries.Rows:=Countries;
  77. jdsCountries.Open;
  78. (sender as THTMLElementAction).Value:='Clear select';
  79. end;
  80. end;
  81. procedure TIndexFragment.actSelectCountryExecute(Sender: TObject; Event: TJSEvent);
  82. Var
  83. ISO,Country : String;
  84. begin
  85. ISO:=actSelectCountry.Value;
  86. if jdsCountries.Locate('ISO2',ISO,[loCaseInsensitive]) then
  87. Country:=jdsCountriesName.AsString
  88. else
  89. Country:='unknown ISO code: '+ISO;
  90. window.alert('You chose : '+Country+' ('+ISO+')');
  91. end;
  92. end.