datatables.ajax.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /************************************************************************
  2. * Ajax extension for datatables *
  3. *************************************************************************/
  4. (function ($) {
  5. if (!$.fn.dataTableExt) {
  6. return;
  7. }
  8. var doAjax = function (listAction, requestData, callbackFunction, settings) {
  9. var inputFilter = {};
  10. //set table defined filters
  11. if (listAction.inputFilter) {
  12. inputFilter = $.extend(inputFilter, listAction.inputFilter());
  13. }
  14. //set paging filters
  15. if (settings.oInit.paging) {
  16. inputFilter = $.extend(inputFilter, {
  17. maxResultCount: requestData.length,
  18. skipCount: requestData.start
  19. });
  20. }
  21. //execute ajax function with filter
  22. if (listAction.ajaxFunction) {
  23. listAction.ajaxFunction(inputFilter)
  24. .done(function (result) {
  25. //store raw server response for custom rendering.
  26. settings.rawServerResponse = result;
  27. //html encoding can be disabled by adding "disableResponseHtmlEncoding: true" to "listAction" field
  28. var dataItems;
  29. if (listAction.disableResponseHtmlEncoding) {
  30. dataItems = result.items;
  31. } else {
  32. //HTML encodes the response items for XSS protection.
  33. dataItems = app.htmlUtils.htmlEncodeJson(result.items);
  34. }
  35. //invoke callback
  36. callbackFunction({
  37. recordsTotal: result.totalCount,
  38. recordsFiltered: result.totalCount,
  39. data: dataItems
  40. });
  41. })
  42. .always(function () {
  43. abp.ui.clearBusy(settings.nTable);
  44. });
  45. }
  46. }
  47. if (!$.fn.dataTable) {
  48. return;
  49. }
  50. $.extend(true, $.fn.dataTable.defaults, {
  51. ajax: function (requestData, callbackFunction, settings) {
  52. if (!settings) {
  53. return;
  54. }
  55. if (!settings.oInit) {
  56. return;
  57. }
  58. if (!settings.oInit.listAction) {
  59. return;
  60. }
  61. abp.ui.setBusy(settings.nTable);
  62. doAjax(settings.oInit.listAction, requestData, callbackFunction, settings);
  63. }
  64. });
  65. $.fn.dataTable.Api.register('ajax.reloadPage()', function () {
  66. // user paging is not reset on reload. https://datatables.net/reference/api/ajax.reload()
  67. this.ajax.reload(null, false);
  68. });
  69. })(jQuery);