$dateField = $('<input type="' + type + '">').insertAfter($dataField);
copyAttributes($dataField, $dateField, ['placeholder', 'style', 'class', 'disabled']);
$dateField.addClass('crm-form-' + type);
- settings.minDate = settings.minDate ? CRM.utils.makeDate(settings.minDate) : null;
- settings.maxDate = settings.maxDate ? CRM.utils.makeDate(settings.maxDate) : null;
if (hasDatepicker) {
+ settings.minDate = settings.minDate ? CRM.utils.makeDate(settings.minDate) : null;
+ settings.maxDate = settings.maxDate ? CRM.utils.makeDate(settings.maxDate) : null;
settings.dateFormat = typeof settings.date === 'string' ? settings.date : CRM.config.dateInputFormat;
settings.changeMonth = _.includes(settings.dateFormat, 'm');
settings.changeYear = _.includes(settings.dateFormat, 'y');
+ if (!settings.yearRange && settings.minDate !== null && settings.maxDate !== null) {
+ settings.yearRange = '' + CRM.utils.formatDate(settings.minDate, 'yy') + ':' + CRM.utils.formatDate(settings.maxDate, 'yy');
+ }
$dateField.addClass('crm-form-date').datepicker(settings);
} else {
$dateField.attr('min', settings.minDate ? CRM.utils.formatDate(settings.minDate, 'yy') : '1000');
};
$.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() {
- //Declare the defaults for DataTables
+ // Recall pageLength for this table
+ 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 = {
"processing": true,
"serverSide": true,
};
//Include any table specific data
var settings = $.extend(true, defaults, $(this).data('table'));
+ // Remember pageLength
+ $(this).on('length.dt', function(e, settings, len) {
+ if (settings.ajax && window.localStorage) {
+ localStorage['dataTablePageLength:' + simplifyUrl(settings.ajax)] = len;
+ }
+ });
//Make the DataTables call
$(this).DataTable(settings);
});