};
$.fn.crmAjaxTable = function() {
+ // Strip the ids from ajax urls to make pageLength storage more generic
+ function simplifyUrl(ajax) {
+ // Datatables ajax prop could be a url string or an object containing the url
+ var url = typeof ajax === 'object' ? ajax.url : ajax;
+ return typeof url === 'string' ? url.replace(/[&?]\w*id=\d+/g, '') : null;
+ }
+
return $(this).each(function() {
// Recall pageLength for this table
- if ($(this).data('ajax') && window.localStorage && localStorage['dataTablePageLength:' + $(this).data('ajax')]) {
- $(this).data('pageLength', localStorage['dataTablePageLength:' + $(this).data('ajax')]);
+ var url = simplifyUrl($(this).data('ajax'));
+ if (url && window.localStorage && localStorage['dataTablePageLength:' + url]) {
+ $(this).data('pageLength', localStorage['dataTablePageLength:' + url]);
}
// Declare the defaults for DataTables
var defaults = {
// Remember pageLength
$(this).on('length.dt', function(e, settings, len) {
if (settings.ajax && window.localStorage) {
- localStorage['dataTablePageLength:' + settings.ajax] = len;
+ localStorage['dataTablePageLength:' + simplifyUrl(settings.ajax)] = len;
}
});
//Make the DataTables call