Remove deprecated :hover jQuery selector
[civicrm-core.git] / js / jquery / jquery.crmAjaxTable.js
1 // https://civicrm.org/licensing
2 (function($, _) {
3 "use strict";
4 /* jshint validthis: true */
5
6 $.fn.crmAjaxTable = function() {
7
8 // Strip the ids from ajax urls to make pageLength storage more generic
9 function simplifyUrl(ajax) {
10 // Datatables ajax prop could be a url string or an object containing the url
11 var url = typeof ajax === 'object' ? ajax.url : ajax;
12 return typeof url === 'string' ? url.replace(/[&?]\w*id=\d+/g, '') : null;
13 }
14
15 return $(this).each(function() {
16 // Recall pageLength for this table
17 var url = simplifyUrl($(this).data('ajax'));
18 if (url && window.localStorage && localStorage['dataTablePageLength:' + url]) {
19 $(this).data('pageLength', localStorage['dataTablePageLength:' + url]);
20 }
21 // Declare the defaults for DataTables
22 var defaults = {
23 "processing": true,
24 "serverSide": true,
25 "order": [],
26 "dom": '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
27 "pageLength": 25,
28 "pagingType": "full_numbers",
29 "drawCallback": function(settings) {
30 //Add data attributes to cells
31 $('thead th', settings.nTable).each( function( index ) {
32 $.each(this.attributes, function() {
33 if(this.name.match("^cell-")) {
34 var cellAttr = this.name.substring(5);
35 var cellValue = this.value;
36 $('tbody tr', settings.nTable).each( function() {
37 $('td:eq('+ index +')', this).attr( cellAttr, cellValue );
38 });
39 }
40 });
41 });
42 //Reload table after draw
43 $(settings.nTable).trigger('crmLoad');
44 }
45 };
46 //Include any table specific data
47 var settings = $.extend(true, defaults, $(this).data('table'));
48 // Remember pageLength
49 $(this).on('length.dt', function(e, settings, len) {
50 if (settings.ajax && window.localStorage) {
51 localStorage['dataTablePageLength:' + simplifyUrl(settings.ajax)] = len;
52 }
53 });
54 //Make the DataTables call
55 $(this).DataTable(settings);
56 });
57 };
58
59 })(CRM.$, CRM._);