|
31 | 31 | var persistOptions = config.state === 'none' ? {} : { |
32 | 32 | stateSave: true, |
33 | 33 | stateLoadCallback: function(settings) { |
34 | | - state.time = Date.now(); |
35 | | - return state; |
| 34 | + var copy = JSON.parse(JSON.stringify(state)); |
| 35 | + copy.time = Date.now(); |
| 36 | + return copy; |
36 | 37 | } |
37 | 38 | }; |
38 | 39 |
|
|
45 | 46 | _init: true |
46 | 47 | } |
47 | 48 | }).done(function(data) { |
48 | | - var rebuild = true, cached; |
| 49 | + var rebuild = (Object.keys(state).length === 0), cached, baseState; |
49 | 50 |
|
50 | 51 | var dtOpts = $.extend({}, data.options, config.options, options, persistOptions, { |
51 | 52 | ajax: function (request, drawCallback, settings) { |
|
66 | 67 | }); |
67 | 68 |
|
68 | 69 | root.html(data.template); |
69 | | - fulfill(dt = $('table', root).DataTable(dtOpts)); |
| 70 | + dt = $('table', root).DataTable(dtOpts); |
| 71 | + if (config.state !== 'none') { |
| 72 | + dt.on('stateSaveParams.dt', (e, settings, data) => { |
| 73 | + //$.extend(data, $('form[name={{ filterForm.vars.name }}]').serializeObject()); |
| 74 | + data = $.param(data).split('&'); |
| 75 | + baseState = baseState || data; |
| 76 | + var diff = data.filter(el => { return baseState.indexOf(el) === -1 && el.indexOf('time=') !== 0; }); |
| 77 | + switch (config.state) { |
| 78 | + case 'fragment': |
| 79 | + history.replaceState(null, null, '#' + decodeURIComponent(diff.join('&'))); |
| 80 | + break; |
| 81 | + case 'query': |
| 82 | + history.replaceState(null, null, '#' + decodeURIComponent(diff.join('&'))); |
| 83 | + break; |
| 84 | + } |
| 85 | + }); |
| 86 | + } |
| 87 | + |
| 88 | + fulfill(dt); |
70 | 89 | }).fail(function(xhr, cause, msg) { |
71 | 90 | console.error('DataTables request failed: ' + msg); |
72 | 91 | reject(cause); |
|
0 commit comments