From 51d6683890ce7c9cc0bf21789f7785baf89a992a Mon Sep 17 00:00:00 2001 From: Agustin Moyano Date: Wed, 8 Jan 2020 09:27:05 -0300 Subject: [PATCH] Bug 20212: Extend datatables for API interaction This patch introduces an .api method --- koha-tmpl/intranet-tmpl/prog/js/datatables.js | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/koha-tmpl/intranet-tmpl/prog/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/js/datatables.js index a31db0614d..c95f78cbe7 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/datatables.js +++ b/koha-tmpl/intranet-tmpl/prog/js/datatables.js @@ -502,3 +502,71 @@ function filterDataTable( table, column, term ){ table.search( term ).draw("page"); } } + +jQuery.fn.dataTable.ext.errMode = function(settings, note, message) { + console.warn(message); +}; + +(function($) { + + $.fn.api = function(options) { + var settings = null; + if(options) { + settings = $.extend(true, {}, dataTablesDefaults, { + 'deferRender': true, + "paging": true, + 'serverSide': true, + 'searching': true, + 'pagingType': 'full', + 'ajax': { + 'type': 'GET', + 'cache': true, + 'dataSrc': 'data', + 'beforeSend': function(xhr, settings) { + this._xhr = xhr; + if(options.embed) { + xhr.setRequestHeader('x-koha-embed', Array.isArray(options.embed)?options.embed.join(','):options.embed); + } + }, + 'dataFilter': function(data, type) { + var json = {data: JSON.parse(data)}; + if(total = this._xhr.getResponseHeader('x-total-count')) { + json.recordsTotal = total; + json.recordsFiltered = total; + } + return JSON.stringify(json); + }, + 'data': function( data, settings ) { + var length = data.length; + var start = data.start; + + var dataSet = { + _page: Math.floor(start/length) + 1, + _per_page: length + }; + + var filter = data.search.value; + if (filter != '') { + dataSet.name = filter; + dataSet._match = 'starts_with'; + } + + if(options.columns) { + var order = data.order; + order.forEach(function (e,i) { + var order_col = e.column; + var order_by = options.columns[order_col].data; + var order_dir = e.dir == 'asc' ? '+' : '-'; + dataSet._order_by = order_dir + order_by; + }); + } + + return dataSet; + } + } + }, options); + } + return $(this).dataTable(settings); + }; + +})(jQuery); -- 2.25.0