libbootstraptable.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. {
  2. This file is part of the Pas2JS run time library.
  3. Copyright (C) 2019 Michael Van Canneyt
  4. BootStrapTable mappings for pas2js
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. unit libbootstraptable;
  12. {$mode objfpc}
  13. {$modeswitch externalclass}
  14. interface
  15. uses
  16. types, web, libjquery, js, libbootstrap;
  17. Type
  18. TTableStyle = Class external name 'Object' (TJSObject)
  19. css: TJSObject;
  20. classes: string;
  21. end;
  22. TRowStyleHandler = reference to function (row: TJSObject; index : NativeInt) : TTableStyle;
  23. TCellStyleHandler = reference to function (Value : JSValue; Row : TJSObject; index : Integer) : TTableStyle;
  24. TRowSortHandler = reference to function (Const sortName,sortOrder : string; row: TJSObject) : nativeint;
  25. TColSortHandler = reference to function (Const fieldA,FieldB : JSValue; RowA,RowB: TJSObject) : nativeint;
  26. TAjaxHandler = reference to function (aURL : String; aSettings : TJSObject) : tJQXHR;
  27. TQueryParamsFunction = reference to function (params : TJSObject) : JSValue;
  28. TResponseFunction = reference to function (res : JSValue) : JSValue;
  29. TSearchFunction = reference to function (data : TJSArray; aText : String) : TJSArray;
  30. TIgnoreClickHandler = reference to function (el : TJSHTMLELement) : Boolean;
  31. TDetailFormatHandler = reference to function (Index :Integer; Row : TJSObject; el : TJSHTMLElement) : String;
  32. TDetailFilterHandler = reference to function (Index :Integer; Row : TJSObject) : boolean;
  33. TColFormatterHandler = reference to function (value : JSValue; row : TJSObject; Index : Integer; Field : String) : String;
  34. TFooterFormatterHandler = reference to function (Rows : TJSValueDynArray) : String;
  35. TDetailFormatterHandler = reference to function (index : integer; row : TJSObject; el : TJSHTMLElement) : String;
  36. TBootstrapTableColumn = Class external name 'Object' (TJSObject)
  37. field : String;
  38. title : String;
  39. titleTooltip : string;
  40. class_ : string; external name 'class';
  41. width : Integer;
  42. widthUnit : String;
  43. rowspan : Integer;
  44. colspan : Integer;
  45. align : String;
  46. halign : String;
  47. falign : String;
  48. valign : string;
  49. cellStyle : TCellStyleHandler;
  50. radio : boolean;
  51. checkbox : boolean;
  52. checkboxEnabled : Boolean;
  53. clickToSelect : Boolean;
  54. showSelectTitle : Boolean;
  55. sortable : Boolean;
  56. sortName : String;
  57. order : string;
  58. sorter : TColSortHandler;
  59. visible : Boolean;
  60. switchable : Boolean;
  61. cardVisible : Boolean;
  62. searchable : Boolean;
  63. formatter : TColFormatterHandler ;
  64. footerFormatter : TFooterFormatterHandler;
  65. detailFormatter : TDetailFormatterHandler;
  66. searchFormatter : boolean;
  67. escape : boolean;
  68. events : TJSObject;
  69. end;
  70. TBootstrapTableColumnArray = array of TBootstrapTableColumn;
  71. TFooterStyleHandler = Reference to function(col : TBootstrapTableColumn) : TTableStyle;
  72. TBootstrapTableOptions = class external name 'Object' (TJSObject)
  73. ajax : TAjaxHandler;
  74. ajaxOptions : TJSObject;
  75. buttonsAlign : String;
  76. buttonsClass : String;
  77. buttonsPrefix : String;
  78. buttonsToolbar : JSValue;
  79. cache : Boolean;
  80. cardView : Boolean;
  81. checkboxHeader : Boolean;
  82. classes : string;
  83. clickToSelect : Boolean;
  84. columns : TBootstrapTableColumnArray;
  85. contentType : string;
  86. customSearch : TSearchFunction;
  87. customSort : TRowSortHandler;
  88. data : JSValue; // Object or aray
  89. dataField : string;
  90. dataType : string;
  91. detailFilter : TDetailFilterHandler;
  92. detailFormatter : TDetailFormatHandler;
  93. detailView : Boolean;
  94. detailViewByClick : Boolean;
  95. detailViewIcon : Boolean;
  96. escape : Boolean;
  97. filterOptions : Boolean;
  98. footerStyle : TFooterStyleHandler;
  99. height : Integer;
  100. html : TJSObject;
  101. icons : TJSObject;
  102. iconSize : String;
  103. iconsPrefix : String;
  104. idField : String;
  105. ignoreClickToSelectOn : TIgnoreClickHandler;
  106. locale : string;
  107. maintainMetaData : Boolean;
  108. method : string;
  109. minimumCountColumns : NativeInt;
  110. multipleSelectRow : Boolean;
  111. onlyInfoPagination : Boolean;
  112. pageList : TNativeIntDynArray;
  113. pageNumber : NativeInt;
  114. pageSize : NativeInt;
  115. pagination : boolean;
  116. paginationDetailHAlign : string;
  117. paginationHAlign : string;
  118. paginationLoop : Boolean;
  119. paginationNextText : String;
  120. paginationPagesBySide : NativeInt;
  121. paginationPreText : string;
  122. paginationSuccessivelySize : NativeInt;
  123. paginationUseIntermediate : Boolean;
  124. paginationVAlign : string;
  125. queryParams : TQueryParamsFunction;
  126. queryParamsType : String;
  127. rememberOrder : boolean;
  128. resizable : boolean;
  129. responseHandler : TResponseFunction;
  130. rowAttributes : TRowStyleHandler;
  131. rowStyle : TRowStyleHandler;
  132. search : boolean;
  133. searchAlign : String;
  134. searchOnEnterKey : Boolean;
  135. searchText : string;
  136. searchTimeOut : Boolean;
  137. selectItemName : String;
  138. showButtonIcon : Boolean;
  139. showButtonIcons : Boolean;
  140. showButtonText : Boolean;
  141. showColumns : Boolean;
  142. showColumnsToggleAll : Boolean;
  143. showExtendedPagination : boolean;
  144. showFooter : Boolean;
  145. showFullscreen : Boolean;
  146. showHeader : Boolean;
  147. showPaginationSwitch : Boolean;
  148. showRefresh : Boolean;
  149. showSearchButton : Boolean;
  150. showSearchClearButton : Boolean;
  151. showToggle : Boolean;
  152. sidePagination : String;
  153. silentSort : Boolean;
  154. singleSelect : Boolean;
  155. smartDisplay : Boolean;
  156. sortable : boolean;
  157. sortClass : String;
  158. sortName : string;
  159. sortOrder : String;
  160. sortStable : boolean;
  161. strictSearch : Boolean;
  162. theadClasses : string;
  163. toolbar : JSValue;
  164. toolbarAlign : String;
  165. totalField : String;
  166. totalNotFiltered : NativeInt;
  167. totalNotFilteredField : String;
  168. totalRows : NativeInt;
  169. trimOnSearch : Boolean;
  170. undefinedText : String;
  171. uniqueId : Boolean;
  172. url : string;
  173. virtualScroll : Boolean;
  174. virtualScrollItemHeight : Integer;
  175. visibleSearch : Boolean;
  176. end;
  177. { TJSBootstrapTable }
  178. TRefreshOptions = class external name 'Object' (TJSObject)
  179. silent : boolean;
  180. url : string;
  181. pageNumber : Integer;
  182. pageSize : integer;
  183. query : TJSObject;
  184. end;
  185. TJSBootstrapTable = class helper(TBootstrap) for TJQuery
  186. private
  187. Public
  188. Function BootstrapTable(command : string) : JSValue; varargs; overload; external name 'bootstrapTable';
  189. Function BootstrapTable(options : TBootstrapTableOptions) : TJQuery; overload; external name 'bootstrapTable';
  190. Function BootstrapTable(options : TJSObject) : TJQuery; overload; external name 'bootstrapTable';
  191. Function getOptionsUnTyped : TJSObject;
  192. Function getOptions : TBootstrapTableOptions;
  193. function refreshOptions (Options : TBootstrapTableOptions) : TJQuery;
  194. function getData (useCurrentPage : Boolean = False; includeHiddenRows : Boolean = False) : JSValue;
  195. Function destroy : TJQuery; overload;
  196. Function GetSelections : TJSArray;
  197. Procedure Load(data : JSValue);
  198. procedure Append(data: JSValue);
  199. procedure Prepend(data: JSValue);
  200. procedure RemoveAll;
  201. Procedure insertRow(Index : Integer; RowData : JSValue);
  202. procedure updateRow(Index: Integer; RowData: JSValue; Replace: Boolean=False);
  203. function GetRowByUniqueID(aID : NativeInt): TJSObject;
  204. Procedure UpdateByUniqueID(aID : NativeInt;RowData: JSValue; Replace: Boolean=False);
  205. Procedure RemoveByUniqueID(aID : NativeInt);
  206. Procedure UpdateCell(aIndex : NativeInt; aField,aValue : string; ReInit : Boolean = true);
  207. Procedure UpdateCellByUniqueID(aId : NativeInt; aField,aValue : string; ReInit : Boolean = true);
  208. Procedure ShowRow(aIndex : NativeInt);
  209. Procedure ShowRowByUniqueID(aId : NativeInt);
  210. Function GetHiddenRows(doShow : Boolean = False) : TJSArray;
  211. Procedure ShowColumn(aField : String);
  212. Procedure ShowColumn(aFields : TStringDynArray);
  213. Procedure HideColumn(aField : String);
  214. Procedure HideColumn(aFields : TStringDynArray);
  215. function GetHiddenColumns: TJSArray;
  216. function GetVisibleColumns: TJSArray;
  217. Procedure ShowAllColumns;
  218. Procedure HideAllColumns;
  219. Procedure mergeCells(aIndex : integer; aField : String; RowSpan : Integer; ColSpan : Integer);
  220. Procedure CheckAll;
  221. Procedure UnCheckAll;
  222. Procedure CheckInvert;
  223. Procedure Check(aIndex : Integer);
  224. Procedure UnCheck(aIndex : Integer);
  225. Procedure CheckBy(Field : String; Values : TStringDynArray);
  226. Procedure UnCheckBy(Field : String; Values : TStringDynArray);
  227. Procedure RefreshTable(options : TRefreshOptions);
  228. Procedure RefreshTable(options : TJSObject);
  229. Procedure ResetView(options : TBootstrapTableOptions);
  230. Procedure ResetWidth;
  231. Procedure ShowLoading;
  232. Procedure HideLoading;
  233. Procedure TogglePagination;
  234. Procedure ToggleFullScreen;
  235. Procedure ToggleView;
  236. Procedure ResetSearch;
  237. Procedure FilterBy(aFilter : TJSObject; aOptions : TJSObject);
  238. Procedure scrollToRow(aValue : Integer);
  239. Procedure scrollToPixel(aValue : Integer);
  240. Procedure scrollToBottom;
  241. Function GetScrollPosition : NativeInt;
  242. Procedure SelectPage(aIndex : Integer);
  243. Procedure PrevPage;
  244. Procedure NextPage;
  245. procedure ToggleDetailView(Index : Integer);
  246. procedure ExpandRow(Index: Integer);
  247. procedure CollapseRow(Index: Integer);
  248. procedure CollapseAllRows;
  249. procedure ExpandAllRows;
  250. procedure UpdateColumnTitle(const aField,aTitle : String);
  251. procedure UpdateFormatText(const aFormat,aValue : String);
  252. end;
  253. implementation
  254. { TJSBootstrapTable }
  255. function TJSBootstrapTable.getOptionsUnTyped: TJSObject;
  256. begin
  257. Result:=TJSObject(BootstrapTable('getOptions'))
  258. end;
  259. function TJSBootstrapTable.getOptions: TBootstrapTableOptions;
  260. begin
  261. Result:=TBootstrapTableOptions(getoptionsUnTyped);
  262. end;
  263. function TJSBootstrapTable.refreshOptions(Options: TBootstrapTableOptions): TJQuery;
  264. begin
  265. Result:=TJQuery(BootstrapTable('refreshOptions',Options));
  266. end;
  267. function TJSBootstrapTable.getData(useCurrentPage: Boolean; includeHiddenRows: Boolean): JSValue;
  268. begin
  269. Result:=BootstrapTable('getdata',JS.New([
  270. 'useCurrentPage',useCurrentPage,
  271. 'includeHiddenRows',includeHiddenRows
  272. ]));
  273. end;
  274. function TJSBootstrapTable.destroy: TJQuery;
  275. begin
  276. Result:=TJQuery(BootstrapTable('destroy'));
  277. end;
  278. function TJSBootstrapTable.GetSelections: TJSArray;
  279. begin
  280. Result:=TJSArray(BootstrapTable('getSelections'));
  281. end;
  282. procedure TJSBootstrapTable.Load(data: JSValue);
  283. begin
  284. BootstrapTable('load',data);
  285. end;
  286. procedure TJSBootstrapTable.Append(data: JSValue);
  287. begin
  288. BootstrapTable('append',data);
  289. end;
  290. procedure TJSBootstrapTable.Prepend(data: JSValue);
  291. begin
  292. BootstrapTable('prepend',data);
  293. end;
  294. procedure TJSBootstrapTable.RemoveAll;
  295. begin
  296. BootstrapTable('removeAll');
  297. end;
  298. procedure TJSBootstrapTable.insertRow(Index: Integer; RowData: JSValue);
  299. begin
  300. BootstrapTable('insertRow',JS.new([
  301. 'index',index,
  302. 'row', RowData
  303. ]));
  304. end;
  305. procedure TJSBootstrapTable.updateRow(Index: Integer; RowData: JSValue; Replace : Boolean = False);
  306. begin
  307. BootstrapTable('updateRow',JS.new([
  308. 'index',index,
  309. 'row', rowData,
  310. 'replace', replace
  311. ]));
  312. end;
  313. function TJSBootstrapTable.GetRowByUniqueID(aID: NativeInt): TJSObject;
  314. begin
  315. Result:=TJSObject(BootstrapTable('getRowByUniqueId',aID));
  316. end;
  317. procedure TJSBootstrapTable.UpdateByUniqueID(aID: NativeInt; RowData: JSValue; Replace: Boolean);
  318. begin
  319. BootstrapTable('updateByUniqueId',JS.new([
  320. 'id',aId,
  321. 'row', rowData,
  322. 'replace', replace
  323. ]));
  324. end;
  325. procedure TJSBootstrapTable.RemoveByUniqueID(aID: NativeInt);
  326. begin
  327. BootstrapTable('removeByUniqueId',aID);
  328. end;
  329. procedure TJSBootstrapTable.UpdateCell(aIndex: NativeInt; aField, aValue: string; ReInit : Boolean = true);
  330. begin
  331. BootstrapTable('updateCell',JS.new([
  332. 'index',aIndex,
  333. 'field', aField,
  334. 'value', aValue,
  335. 'reinit', ReInit
  336. ]));
  337. end;
  338. procedure TJSBootstrapTable.UpdateCellByUniqueID(aId: NativeInt; aField, aValue: string; ReInit: Boolean);
  339. begin
  340. BootstrapTable('updateCellByUniqueID',JS.new([
  341. 'id',aId,
  342. 'field', aField,
  343. 'value', aValue,
  344. 'reinit', ReInit
  345. ]));
  346. end;
  347. procedure TJSBootstrapTable.ShowRow(aIndex: NativeInt);
  348. begin
  349. BootstrapTable('showRow',JS.new(['id',aIndex]));
  350. end;
  351. procedure TJSBootstrapTable.ShowRowByUniqueID(aId: NativeInt);
  352. begin
  353. BootstrapTable('showRow',JS.new(['uniqueId',aId]));
  354. end;
  355. function TJSBootstrapTable.GetHiddenRows(doShow: Boolean): TJSArray;
  356. begin
  357. Result:=TJSArray(BootstrapTable('getHiddenRows',doShow));
  358. end;
  359. procedure TJSBootstrapTable.ShowColumn(aField: String);
  360. begin
  361. BootstrapTable('showColumn',aField);
  362. end;
  363. procedure TJSBootstrapTable.ShowColumn(aFields: TStringDynArray);
  364. begin
  365. BootstrapTable('showColumn',aFields);
  366. end;
  367. procedure TJSBootstrapTable.HideColumn(aField: String);
  368. begin
  369. BootstrapTable('hideColumn',aField);
  370. end;
  371. procedure TJSBootstrapTable.HideColumn(aFields: TStringDynArray);
  372. begin
  373. BootstrapTable('hideColumn',aFields);
  374. end;
  375. function TJSBootstrapTable.GetHiddenColumns: TJSArray;
  376. begin
  377. Result:=TJSArray(BootstrapTable('getHiddenColumns'));
  378. end;
  379. function TJSBootstrapTable.GetVisibleColumns: TJSArray;
  380. begin
  381. Result:=TJSArray(BootstrapTable('getVisibleColumns'));
  382. end;
  383. procedure TJSBootstrapTable.ShowAllColumns;
  384. begin
  385. BootstrapTable('showAllColumns');
  386. end;
  387. procedure TJSBootstrapTable.HideAllColumns;
  388. begin
  389. BootstrapTable('hideAllColumns');
  390. end;
  391. procedure TJSBootstrapTable.mergeCells(aIndex: integer; aField: String; RowSpan: Integer; ColSpan: Integer);
  392. begin
  393. BootstrapTable('mergeCells',JS.New([
  394. 'index',aIndex,
  395. 'field',aField,
  396. 'rowspan',rowspan,
  397. 'colspan',colspan
  398. ]));
  399. end;
  400. procedure TJSBootstrapTable.CheckAll;
  401. begin
  402. BootStrapTable('checkAll');
  403. end;
  404. procedure TJSBootstrapTable.UnCheckAll;
  405. begin
  406. BootStrapTable('uncheckAll');
  407. end;
  408. procedure TJSBootstrapTable.CheckInvert;
  409. begin
  410. BootStrapTable('checkInvert');
  411. end;
  412. procedure TJSBootstrapTable.Check(aIndex: Integer);
  413. begin
  414. BootStrapTable('check',aIndex);
  415. end;
  416. procedure TJSBootstrapTable.UnCheck(aIndex: Integer);
  417. begin
  418. BootStrapTable('uncheck',aIndex);
  419. end;
  420. procedure TJSBootstrapTable.CheckBy(Field: String; Values: TStringDynArray);
  421. begin
  422. BootStrapTable('checkBy',JS.New(['field',Field,'values',Values]));
  423. end;
  424. procedure TJSBootstrapTable.UnCheckBy(Field: String; Values: TStringDynArray);
  425. begin
  426. BootStrapTable('uncheckBy',JS.New(['field',Field,'values',Values]));
  427. end;
  428. procedure TJSBootstrapTable.RefreshTable(options: TRefreshOptions);
  429. begin
  430. BootStrapTable('refresh',options);
  431. end;
  432. procedure TJSBootstrapTable.RefreshTable(options: TJSObject);
  433. begin
  434. BootStrapTable('refresh',options);
  435. end;
  436. procedure TJSBootstrapTable.ResetView(options: TBootstrapTableOptions);
  437. begin
  438. BootStrapTable('resetView',options);
  439. end;
  440. procedure TJSBootstrapTable.ResetWidth;
  441. begin
  442. BootStrapTable('resetWidth');
  443. end;
  444. procedure TJSBootstrapTable.ShowLoading;
  445. begin
  446. BootStrapTable('showLoading');
  447. end;
  448. procedure TJSBootstrapTable.HideLoading;
  449. begin
  450. BootStrapTable('hideLoading');
  451. end;
  452. procedure TJSBootstrapTable.TogglePagination;
  453. begin
  454. BootStrapTable('togglePagination');
  455. end;
  456. procedure TJSBootstrapTable.ToggleFullScreen;
  457. begin
  458. BootStrapTable('toggleFullScreen');
  459. end;
  460. procedure TJSBootstrapTable.ToggleView;
  461. begin
  462. BootStrapTable('toggleView');
  463. end;
  464. procedure TJSBootstrapTable.ResetSearch;
  465. begin
  466. BootStrapTable('resetSearch');
  467. end;
  468. procedure TJSBootstrapTable.FilterBy(aFilter: TJSObject; aOptions: TJSObject);
  469. begin
  470. BootStrapTable('filterBy',JS.New(['filter',aFilter,'options',aOptions]));
  471. end;
  472. procedure TJSBootstrapTable.scrollToRow(aValue: Integer);
  473. begin
  474. BootStrapTable('scrollTo',JS.New(['unit','rows','value',aValue]));
  475. end;
  476. procedure TJSBootstrapTable.scrollToPixel(aValue: Integer);
  477. begin
  478. BootStrapTable('scrollTo',JS.New(['unit','px','value',aValue]));
  479. end;
  480. procedure TJSBootstrapTable.scrollToBottom;
  481. begin
  482. BootStrapTable('scrollTo','bottom');
  483. end;
  484. function TJSBootstrapTable.GetScrollPosition: NativeInt;
  485. begin
  486. Result:=NativeInt(BootStrapTable('getScrollPosition'));
  487. end;
  488. procedure TJSBootstrapTable.SelectPage(aIndex: Integer);
  489. begin
  490. BootStrapTable('selectPage',aIndex);
  491. end;
  492. procedure TJSBootstrapTable.PrevPage;
  493. begin
  494. BootStrapTable('prevPage');
  495. end;
  496. procedure TJSBootstrapTable.NextPage;
  497. begin
  498. BootStrapTable('nextPage');
  499. end;
  500. procedure TJSBootstrapTable.ToggleDetailView(Index: Integer);
  501. begin
  502. BootStrapTable('toggleDetailView',Index);
  503. end;
  504. procedure TJSBootstrapTable.ExpandRow(Index: Integer);
  505. begin
  506. BootStrapTable('expandRow',Index);
  507. end;
  508. procedure TJSBootstrapTable.CollapseRow(Index: Integer);
  509. begin
  510. BootStrapTable('collapseRow',Index);
  511. end;
  512. procedure TJSBootstrapTable.CollapseAllRows;
  513. begin
  514. BootStrapTable('collapseAllRows');
  515. end;
  516. procedure TJSBootstrapTable.ExpandAllRows;
  517. begin
  518. BootStrapTable('expandAllRows');
  519. end;
  520. procedure TJSBootstrapTable.UpdateColumnTitle(const aField, aTitle: String);
  521. begin
  522. BootStrapTable('updateColumnTitle',JS.New(['field',aField,'title',aTitle]));
  523. end;
  524. procedure TJSBootstrapTable.UpdateFormatText(const aFormat, aValue: String);
  525. begin
  526. BootStrapTable('updateFormatText',aFormat,aValue);
  527. end;
  528. end.