@ntlab/ntjs-assets 2.100.0 → 2.101.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/assets/js/DataTables/DataTables/js/dataTables.js +110 -122
  2. package/assets/js/DataTables/DataTables/js/dataTables.min.js +2 -2
  3. package/assets/js/DataTables/Extensions/AutoFill/js/autoFill.bootstrap5.min.js +1 -1
  4. package/assets/js/DataTables/Extensions/AutoFill/js/autoFill.dataTables.min.js +1 -1
  5. package/assets/js/DataTables/Extensions/AutoFill/js/dataTables.autoFill.js +6 -4
  6. package/assets/js/DataTables/Extensions/AutoFill/js/dataTables.autoFill.min.js +2 -2
  7. package/assets/js/DataTables/Extensions/Buttons/css/buttons.bootstrap5.css +56 -39
  8. package/assets/js/DataTables/Extensions/Buttons/css/buttons.bootstrap5.min.css +1 -1
  9. package/assets/js/DataTables/Extensions/Buttons/js/buttons.bootstrap5.js +14 -6
  10. package/assets/js/DataTables/Extensions/Buttons/js/buttons.bootstrap5.min.js +1 -1
  11. package/assets/js/DataTables/Extensions/Buttons/js/buttons.html5.js +8 -3
  12. package/assets/js/DataTables/Extensions/Buttons/js/buttons.html5.min.js +1 -1
  13. package/assets/js/DataTables/Extensions/Buttons/js/buttons.print.js +0 -16
  14. package/assets/js/DataTables/Extensions/Buttons/js/buttons.print.min.js +1 -1
  15. package/assets/js/DataTables/Extensions/Buttons/js/dataTables.buttons.js +15 -8
  16. package/assets/js/DataTables/Extensions/Buttons/js/dataTables.buttons.min.js +2 -2
  17. package/assets/js/DataTables/Extensions/DateTime/css/dataTables.dateTime.css +123 -131
  18. package/assets/js/DataTables/Extensions/DateTime/css/dataTables.dateTime.min.css +1 -1
  19. package/assets/js/DataTables/Extensions/DateTime/js/dataTables.dateTime.js +45 -16
  20. package/assets/js/DataTables/Extensions/DateTime/js/dataTables.dateTime.min.js +2 -2
  21. package/assets/js/DataTables/Extensions/FixedColumns/css/fixedColumns.bootstrap5.css +13 -17
  22. package/assets/js/DataTables/Extensions/FixedColumns/css/fixedColumns.bootstrap5.min.css +1 -1
  23. package/assets/js/DataTables/Extensions/FixedColumns/css/fixedColumns.dataTables.css +13 -17
  24. package/assets/js/DataTables/Extensions/FixedColumns/css/fixedColumns.dataTables.min.css +1 -1
  25. package/assets/js/DataTables/Extensions/FixedColumns/js/FixedColumns.js +1 -1
  26. package/assets/js/DataTables/Extensions/FixedColumns/js/dataTables.fixedColumns.js +4 -4
  27. package/assets/js/DataTables/Extensions/FixedColumns/js/dataTables.fixedColumns.min.js +2 -2
  28. package/assets/js/DataTables/Extensions/FixedColumns/js/fixedColumns.bootstrap5.min.js +1 -1
  29. package/assets/js/DataTables/Extensions/FixedColumns/js/fixedColumns.dataTables.min.js +1 -1
  30. package/assets/js/DataTables/Extensions/FixedColumns/js/index.js +3 -3
  31. package/assets/js/DataTables/Extensions/RowGroup/js/dataTables.rowGroup.js +30 -12
  32. package/assets/js/DataTables/Extensions/RowGroup/js/dataTables.rowGroup.min.js +2 -2
  33. package/assets/js/DataTables/Extensions/SearchBuilder/js/dataTables.searchBuilder.js +16 -9
  34. package/assets/js/DataTables/Extensions/SearchBuilder/js/dataTables.searchBuilder.min.js +2 -2
  35. package/assets/js/DataTables/Extensions/StateRestore/js/StateRestore.js +19 -12
  36. package/assets/js/DataTables/Extensions/StateRestore/js/StateRestoreCollection.js +81 -12
  37. package/assets/js/DataTables/Extensions/StateRestore/js/dataTables.stateRestore.js +105 -28
  38. package/assets/js/DataTables/Extensions/StateRestore/js/dataTables.stateRestore.min.js +2 -2
  39. package/assets/js/DataTables/Extensions/StateRestore/js/index.js +5 -4
  40. package/assets/js/DataTables/Extensions/StateRestore/js/stateRestore.bootstrap5.min.js +1 -1
  41. package/assets/js/DataTables/Extensions/StateRestore/js/stateRestore.dataTables.min.js +1 -1
  42. package/assets/js/cdn.json +8 -8
  43. package/package.json +1 -1
@@ -26,7 +26,7 @@ var StateRestore = /** @class */ (function () {
26
26
  dt: table,
27
27
  identifier: identifier,
28
28
  isPreDefined: isPreDefined,
29
- savedState: null,
29
+ savedState: state,
30
30
  tableId: state && state.stateRestore ? state.stateRestore.tableId : undefined
31
31
  };
32
32
  this.dom = {
@@ -476,13 +476,6 @@ var StateRestore = /** @class */ (function () {
476
476
  }
477
477
  }
478
478
  }
479
- // If the state is predefined there is no need to save it over ajax or to local storage
480
- if (this.s.isPreDefined) {
481
- if (passedSuccessCallback) {
482
- passedSuccessCallback.call(this);
483
- }
484
- return;
485
- }
486
479
  var ajaxData = {
487
480
  action: 'save',
488
481
  stateRestore: (_a = {},
@@ -549,6 +542,12 @@ var StateRestore = /** @class */ (function () {
549
542
  * @returns boolean indicating if the objects match
550
543
  */
551
544
  StateRestore.prototype._deepCompare = function (state1, state2) {
545
+ if (state1 === null && state2 === null) {
546
+ return true;
547
+ }
548
+ else if (state1 === null || state2 === null) {
549
+ return false;
550
+ }
552
551
  // Put keys and states into arrays as this makes the later code easier to work
553
552
  var states = [state1, state2];
554
553
  var keys = [Object.keys(state1).sort(), Object.keys(state2).sort()];
@@ -625,6 +624,12 @@ var StateRestore = /** @class */ (function () {
625
624
  }
626
625
  // If the type is an object then further deep comparisons are required
627
626
  if (typeof states[0][keys[0][i]] === 'object') {
627
+ // Arrays must be the same length to be matched
628
+ if (Array.isArray(states[0][keys[0][i]]) && Array.isArray(states[1][keys[1][i]])) {
629
+ if (states[0][keys[0][i]].length !== states[1][keys[0][i]].length) {
630
+ return false;
631
+ }
632
+ }
628
633
  if (!this._deepCompare(states[0][keys[0][i]], states[1][keys[1][i]])) {
629
634
  return false;
630
635
  }
@@ -701,7 +706,7 @@ var StateRestore = /** @class */ (function () {
701
706
  });
702
707
  $(document).on('keyup', function (e) { return _this._keyupFunction(e); });
703
708
  };
704
- StateRestore.version = '1.4.1';
709
+ StateRestore.version = '1.4.2';
705
710
  StateRestore.classes = {
706
711
  background: 'dtsr-background',
707
712
  closeButton: 'dtsr-popover-close',
@@ -745,13 +750,13 @@ var StateRestore = /** @class */ (function () {
745
750
  duplicateError: 'A state with this name already exists.',
746
751
  emptyError: 'Name cannot be empty.',
747
752
  emptyStates: 'No saved states',
748
- removeConfirm: 'Are you sure you want to remove %s?',
753
+ removeConfirm: 'Are you sure you want to remove "%s"?',
749
754
  removeError: 'Failed to remove state.',
750
755
  removeJoiner: ' and ',
751
756
  removeSubmit: 'Remove',
752
757
  removeTitle: 'Remove State',
753
758
  renameButton: 'Rename',
754
- renameLabel: 'New Name for %s:',
759
+ renameLabel: 'New Name for "%s":',
755
760
  renameTitle: 'Rename State'
756
761
  },
757
762
  modalCloseButton: true,
@@ -792,7 +797,9 @@ var StateRestore = /** @class */ (function () {
792
797
  searchBuilder: false,
793
798
  searchPanes: false,
794
799
  select: false
795
- }
800
+ },
801
+ createButton: null,
802
+ createState: null
796
803
  };
797
804
  return StateRestore;
798
805
  }());
@@ -180,6 +180,7 @@ var StateRestoreCollection = /** @class */ (function () {
180
180
  ajaxFunction = function () {
181
181
  $.ajax({
182
182
  data: ajaxData,
183
+ dataType: 'json',
183
184
  success: function (data) {
184
185
  _this._addPreDefined(data);
185
186
  },
@@ -426,11 +427,19 @@ var StateRestoreCollection = /** @class */ (function () {
426
427
  that.s.states.push(this);
427
428
  that._collectionRebuild();
428
429
  };
429
- var loadedState = preDefined[state];
430
- var newState = new StateRestore(this_1.s.dt, $.extend(true, {}, this_1.c, loadedState.c !== undefined ?
431
- { saveState: loadedState.c.saveState } :
432
- undefined, true), state, loadedState, true, successCallback);
433
- newState.s.savedState = loadedState;
430
+ var loadedState = this_1._fixTypes(preDefined[state]);
431
+ var stateConfig = $.extend(true, {}, this_1.c, loadedState.c !== undefined ?
432
+ {
433
+ saveState: loadedState.c.saveState,
434
+ remove: loadedState.c.remove,
435
+ rename: loadedState.c.rename,
436
+ save: loadedState.c.save
437
+ } :
438
+ undefined, true);
439
+ if (this_1.c.createState) {
440
+ this_1.c.createState(stateConfig, loadedState);
441
+ }
442
+ var newState = new StateRestore(this_1.s.dt, stateConfig, state, loadedState, true, successCallback);
434
443
  $(this_1.s.dt.table().node()).on('dtsr-modal-inserted', function () {
435
444
  newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });
436
445
  newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });
@@ -516,7 +525,7 @@ var StateRestoreCollection = /** @class */ (function () {
516
525
  if (split.includes('removeState') && (!this.c.remove || !state.c.remove)) {
517
526
  split.splice(split.indexOf('removeState'), 1);
518
527
  }
519
- stateButtons.push({
528
+ var buttonConfig = {
520
529
  _stateRestore: state,
521
530
  attr: {
522
531
  title: state.s.identifier
@@ -527,7 +536,11 @@ var StateRestoreCollection = /** @class */ (function () {
527
536
  extend: 'stateRestore',
528
537
  text: StateRestore.entityEncode(state.s.identifier),
529
538
  popoverTitle: StateRestore.entityEncode(state.s.identifier)
530
- });
539
+ };
540
+ if (this.c.createButton) {
541
+ this.c.createButton(buttonConfig, state.s.savedState);
542
+ }
543
+ stateButtons.push(buttonConfig);
531
544
  }
532
545
  }
533
546
  button.collectionRebuild(stateButtons);
@@ -689,6 +702,7 @@ var StateRestoreCollection = /** @class */ (function () {
689
702
  });
690
703
  // Append all of the toggles that are to be inserted
691
704
  var checkboxesEl = this.dom.checkboxInputRow
705
+ .css('display', togglesToInsert.length ? 'block' : 'none')
692
706
  .appendTo(this.dom.creationForm)
693
707
  .find('div.dtsr-input')
694
708
  .empty();
@@ -783,6 +797,59 @@ var StateRestoreCollection = /** @class */ (function () {
783
797
  // Need to save the state before the focus is lost when the modal is interacted with
784
798
  this.s.dt.state.save();
785
799
  };
800
+ /**
801
+ * Make sure the data for a state contains the expected data types
802
+ *
803
+ * @param state State
804
+ */
805
+ StateRestoreCollection.prototype._fixTypes = function (state) {
806
+ var i;
807
+ var fixNum = function (d, prop) {
808
+ var val = d[prop];
809
+ if (val !== undefined) {
810
+ d[prop] = typeof val === 'number' ? val : parseInt(val);
811
+ }
812
+ };
813
+ var fixBool = function (d, prop) {
814
+ var val = d[prop];
815
+ if (val !== undefined) {
816
+ d[prop] = typeof val !== 'string'
817
+ ? val
818
+ : val === 'true'
819
+ ? true
820
+ : false;
821
+ }
822
+ };
823
+ fixNum(state, 'start');
824
+ fixNum(state, 'length');
825
+ fixNum(state, 'time');
826
+ if (state.order) {
827
+ for (i = 0; i < state.order.length; i++) {
828
+ fixNum(state.order[i], 0);
829
+ }
830
+ }
831
+ if (state.search) {
832
+ fixBool(state.search, 'caseInsensitive');
833
+ fixBool(state.search, 'regex');
834
+ fixBool(state.search, 'smart');
835
+ fixBool(state.search, 'visible');
836
+ fixBool(state.search, 'return');
837
+ }
838
+ if (state.columns) {
839
+ for (i = 0; i < state.columns.length; i++) {
840
+ fixBool(state.columns[i], 'caseInsensitive');
841
+ fixBool(state.columns[i], 'regex');
842
+ fixBool(state.columns[i], 'smart');
843
+ fixBool(state.columns[i], 'visible');
844
+ }
845
+ }
846
+ if (state.colReorder) {
847
+ for (i = 0; i < state.colReorder.length; i++) {
848
+ fixNum(state.colReorder, i);
849
+ }
850
+ }
851
+ return state;
852
+ };
786
853
  /**
787
854
  * This callback is called when a state is removed.
788
855
  * This removes the state from storage and also strips it's button from the container
@@ -875,10 +942,10 @@ var StateRestoreCollection = /** @class */ (function () {
875
942
  var _this = this;
876
943
  var keys = Object.keys(localStorage);
877
944
  var _loop_2 = function (key) {
878
- // eslint-disable-next-line no-useless-escape
879
- if (key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname + '$')) ||
880
- key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname +
881
- '_' + this_2.s.dt.table().node().id + '$'))) {
945
+ // Check if the key belongs to this page / table
946
+ if (key.startsWith('DataTables_stateRestore_') &&
947
+ (key.endsWith(location.pathname) ||
948
+ key.endsWith(location.pathname + '_' + this_2.s.dt.table().node().id))) {
882
949
  var loadedState_1 = JSON.parse(localStorage.getItem(key));
883
950
  if (loadedState_1.stateRestore.isPreDefined ||
884
951
  (loadedState_1.stateRestore.tableId &&
@@ -1022,7 +1089,9 @@ var StateRestoreCollection = /** @class */ (function () {
1022
1089
  searchBuilder: false,
1023
1090
  searchPanes: false,
1024
1091
  select: false
1025
- }
1092
+ },
1093
+ createButton: null,
1094
+ createState: null
1026
1095
  };
1027
1096
  return StateRestoreCollection;
1028
1097
  }());
@@ -1,4 +1,4 @@
1
- /*! StateRestore 1.4.1
1
+ /*! StateRestore 1.4.2
2
2
  * © SpryMedia Ltd - datatables.net/license
3
3
  */
4
4
 
@@ -79,7 +79,7 @@ var DataTable = $.fn.dataTable;
79
79
  dt: table,
80
80
  identifier: identifier,
81
81
  isPreDefined: isPreDefined,
82
- savedState: null,
82
+ savedState: state,
83
83
  tableId: state && state.stateRestore ? state.stateRestore.tableId : undefined
84
84
  };
85
85
  this.dom = {
@@ -529,13 +529,6 @@ var DataTable = $.fn.dataTable;
529
529
  }
530
530
  }
531
531
  }
532
- // If the state is predefined there is no need to save it over ajax or to local storage
533
- if (this.s.isPreDefined) {
534
- if (passedSuccessCallback) {
535
- passedSuccessCallback.call(this);
536
- }
537
- return;
538
- }
539
532
  var ajaxData = {
540
533
  action: 'save',
541
534
  stateRestore: (_a = {},
@@ -602,6 +595,12 @@ var DataTable = $.fn.dataTable;
602
595
  * @returns boolean indicating if the objects match
603
596
  */
604
597
  StateRestore.prototype._deepCompare = function (state1, state2) {
598
+ if (state1 === null && state2 === null) {
599
+ return true;
600
+ }
601
+ else if (state1 === null || state2 === null) {
602
+ return false;
603
+ }
605
604
  // Put keys and states into arrays as this makes the later code easier to work
606
605
  var states = [state1, state2];
607
606
  var keys = [Object.keys(state1).sort(), Object.keys(state2).sort()];
@@ -678,6 +677,12 @@ var DataTable = $.fn.dataTable;
678
677
  }
679
678
  // If the type is an object then further deep comparisons are required
680
679
  if (typeof states[0][keys[0][i]] === 'object') {
680
+ // Arrays must be the same length to be matched
681
+ if (Array.isArray(states[0][keys[0][i]]) && Array.isArray(states[1][keys[1][i]])) {
682
+ if (states[0][keys[0][i]].length !== states[1][keys[0][i]].length) {
683
+ return false;
684
+ }
685
+ }
681
686
  if (!this._deepCompare(states[0][keys[0][i]], states[1][keys[1][i]])) {
682
687
  return false;
683
688
  }
@@ -754,7 +759,7 @@ var DataTable = $.fn.dataTable;
754
759
  });
755
760
  $$2(document).on('keyup', function (e) { return _this._keyupFunction(e); });
756
761
  };
757
- StateRestore.version = '1.4.1';
762
+ StateRestore.version = '1.4.2';
758
763
  StateRestore.classes = {
759
764
  background: 'dtsr-background',
760
765
  closeButton: 'dtsr-popover-close',
@@ -798,13 +803,13 @@ var DataTable = $.fn.dataTable;
798
803
  duplicateError: 'A state with this name already exists.',
799
804
  emptyError: 'Name cannot be empty.',
800
805
  emptyStates: 'No saved states',
801
- removeConfirm: 'Are you sure you want to remove %s?',
806
+ removeConfirm: 'Are you sure you want to remove "%s"?',
802
807
  removeError: 'Failed to remove state.',
803
808
  removeJoiner: ' and ',
804
809
  removeSubmit: 'Remove',
805
810
  removeTitle: 'Remove State',
806
811
  renameButton: 'Rename',
807
- renameLabel: 'New Name for %s:',
812
+ renameLabel: 'New Name for "%s":',
808
813
  renameTitle: 'Rename State'
809
814
  },
810
815
  modalCloseButton: true,
@@ -845,7 +850,9 @@ var DataTable = $.fn.dataTable;
845
850
  searchBuilder: false,
846
851
  searchPanes: false,
847
852
  select: false
848
- }
853
+ },
854
+ createButton: null,
855
+ createState: null
849
856
  };
850
857
  return StateRestore;
851
858
  }());
@@ -1031,6 +1038,7 @@ var DataTable = $.fn.dataTable;
1031
1038
  ajaxFunction = function () {
1032
1039
  $$1.ajax({
1033
1040
  data: ajaxData,
1041
+ dataType: 'json',
1034
1042
  success: function (data) {
1035
1043
  _this._addPreDefined(data);
1036
1044
  },
@@ -1277,11 +1285,19 @@ var DataTable = $.fn.dataTable;
1277
1285
  that.s.states.push(this);
1278
1286
  that._collectionRebuild();
1279
1287
  };
1280
- var loadedState = preDefined[state];
1281
- var newState = new StateRestore(this_1.s.dt, $$1.extend(true, {}, this_1.c, loadedState.c !== undefined ?
1282
- { saveState: loadedState.c.saveState } :
1283
- undefined, true), state, loadedState, true, successCallback);
1284
- newState.s.savedState = loadedState;
1288
+ var loadedState = this_1._fixTypes(preDefined[state]);
1289
+ var stateConfig = $$1.extend(true, {}, this_1.c, loadedState.c !== undefined ?
1290
+ {
1291
+ saveState: loadedState.c.saveState,
1292
+ remove: loadedState.c.remove,
1293
+ rename: loadedState.c.rename,
1294
+ save: loadedState.c.save
1295
+ } :
1296
+ undefined, true);
1297
+ if (this_1.c.createState) {
1298
+ this_1.c.createState(stateConfig, loadedState);
1299
+ }
1300
+ var newState = new StateRestore(this_1.s.dt, stateConfig, state, loadedState, true, successCallback);
1285
1301
  $$1(this_1.s.dt.table().node()).on('dtsr-modal-inserted', function () {
1286
1302
  newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });
1287
1303
  newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });
@@ -1367,7 +1383,7 @@ var DataTable = $.fn.dataTable;
1367
1383
  if (split.includes('removeState') && (!this.c.remove || !state.c.remove)) {
1368
1384
  split.splice(split.indexOf('removeState'), 1);
1369
1385
  }
1370
- stateButtons.push({
1386
+ var buttonConfig = {
1371
1387
  _stateRestore: state,
1372
1388
  attr: {
1373
1389
  title: state.s.identifier
@@ -1378,7 +1394,11 @@ var DataTable = $.fn.dataTable;
1378
1394
  extend: 'stateRestore',
1379
1395
  text: StateRestore.entityEncode(state.s.identifier),
1380
1396
  popoverTitle: StateRestore.entityEncode(state.s.identifier)
1381
- });
1397
+ };
1398
+ if (this.c.createButton) {
1399
+ this.c.createButton(buttonConfig, state.s.savedState);
1400
+ }
1401
+ stateButtons.push(buttonConfig);
1382
1402
  }
1383
1403
  }
1384
1404
  button.collectionRebuild(stateButtons);
@@ -1540,6 +1560,7 @@ var DataTable = $.fn.dataTable;
1540
1560
  });
1541
1561
  // Append all of the toggles that are to be inserted
1542
1562
  var checkboxesEl = this.dom.checkboxInputRow
1563
+ .css('display', togglesToInsert.length ? 'block' : 'none')
1543
1564
  .appendTo(this.dom.creationForm)
1544
1565
  .find('div.dtsr-input')
1545
1566
  .empty();
@@ -1634,6 +1655,59 @@ var DataTable = $.fn.dataTable;
1634
1655
  // Need to save the state before the focus is lost when the modal is interacted with
1635
1656
  this.s.dt.state.save();
1636
1657
  };
1658
+ /**
1659
+ * Make sure the data for a state contains the expected data types
1660
+ *
1661
+ * @param state State
1662
+ */
1663
+ StateRestoreCollection.prototype._fixTypes = function (state) {
1664
+ var i;
1665
+ var fixNum = function (d, prop) {
1666
+ var val = d[prop];
1667
+ if (val !== undefined) {
1668
+ d[prop] = typeof val === 'number' ? val : parseInt(val);
1669
+ }
1670
+ };
1671
+ var fixBool = function (d, prop) {
1672
+ var val = d[prop];
1673
+ if (val !== undefined) {
1674
+ d[prop] = typeof val !== 'string'
1675
+ ? val
1676
+ : val === 'true'
1677
+ ? true
1678
+ : false;
1679
+ }
1680
+ };
1681
+ fixNum(state, 'start');
1682
+ fixNum(state, 'length');
1683
+ fixNum(state, 'time');
1684
+ if (state.order) {
1685
+ for (i = 0; i < state.order.length; i++) {
1686
+ fixNum(state.order[i], 0);
1687
+ }
1688
+ }
1689
+ if (state.search) {
1690
+ fixBool(state.search, 'caseInsensitive');
1691
+ fixBool(state.search, 'regex');
1692
+ fixBool(state.search, 'smart');
1693
+ fixBool(state.search, 'visible');
1694
+ fixBool(state.search, 'return');
1695
+ }
1696
+ if (state.columns) {
1697
+ for (i = 0; i < state.columns.length; i++) {
1698
+ fixBool(state.columns[i], 'caseInsensitive');
1699
+ fixBool(state.columns[i], 'regex');
1700
+ fixBool(state.columns[i], 'smart');
1701
+ fixBool(state.columns[i], 'visible');
1702
+ }
1703
+ }
1704
+ if (state.colReorder) {
1705
+ for (i = 0; i < state.colReorder.length; i++) {
1706
+ fixNum(state.colReorder, i);
1707
+ }
1708
+ }
1709
+ return state;
1710
+ };
1637
1711
  /**
1638
1712
  * This callback is called when a state is removed.
1639
1713
  * This removes the state from storage and also strips it's button from the container
@@ -1726,10 +1800,10 @@ var DataTable = $.fn.dataTable;
1726
1800
  var _this = this;
1727
1801
  var keys = Object.keys(localStorage);
1728
1802
  var _loop_2 = function (key) {
1729
- // eslint-disable-next-line no-useless-escape
1730
- if (key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname + '$')) ||
1731
- key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname +
1732
- '_' + this_2.s.dt.table().node().id + '$'))) {
1803
+ // Check if the key belongs to this page / table
1804
+ if (key.startsWith('DataTables_stateRestore_') &&
1805
+ (key.endsWith(location.pathname) ||
1806
+ key.endsWith(location.pathname + '_' + this_2.s.dt.table().node().id))) {
1733
1807
  var loadedState_1 = JSON.parse(localStorage.getItem(key));
1734
1808
  if (loadedState_1.stateRestore.isPreDefined ||
1735
1809
  (loadedState_1.stateRestore.tableId &&
@@ -1873,12 +1947,14 @@ var DataTable = $.fn.dataTable;
1873
1947
  searchBuilder: false,
1874
1948
  searchPanes: false,
1875
1949
  select: false
1876
- }
1950
+ },
1951
+ createButton: null,
1952
+ createState: null
1877
1953
  };
1878
1954
  return StateRestoreCollection;
1879
1955
  }());
1880
1956
 
1881
- /*! StateRestore 1.4.1
1957
+ /*! StateRestore 1.4.2
1882
1958
  * © SpryMedia Ltd - datatables.net/license
1883
1959
  */
1884
1960
  setJQuery$1($);
@@ -2140,8 +2216,9 @@ var DataTable = $.fn.dataTable;
2140
2216
  0;
2141
2217
  });
2142
2218
  var button = dt.button('SaveStateRestore:name');
2143
- var stateButtons = button[0] !== undefined && button[0].inst.c.buttons[0].buttons !== undefined ?
2144
- button[0].inst.c.buttons[0].buttons :
2219
+ var buttonIndex = parseInt(button.index());
2220
+ var stateButtons = button[0] !== undefined && button[0].inst.c.buttons[buttonIndex].buttons !== undefined ?
2221
+ button[0].inst.c.buttons[buttonIndex].buttons :
2145
2222
  [];
2146
2223
  // remove any states from the previous rebuild - if they are still there they will be added later
2147
2224
  for (var i = 0; i < stateButtons.length; i++) {