").addClass("dt-rowReorder-float-parent").width(s).append(e).appendTo("body").scrollLeft(n));this.dom.clone=e,this.dom.cloneParent=t,this.s.domCloneOuterHeight=e.outerHeight()},_clonePosition:function(t){var e=this.s.start,o=this._eventToPage(t,"Y")-e.top,t=this._eventToPage(t,"X")-e.left,r=this.c.snapX,o=o+e.offsetTop,r=!0===r?e.offsetLeft:"number"==typeof r?e.offsetLeft+r:t+e.offsetLeft+this.dom.cloneParent.scrollLeft();o<0?o=0:o+this.s.domCloneOuterHeight>this.s.documentOuterHeight&&(o=this.s.documentOuterHeight-this.s.domCloneOuterHeight),this.dom.cloneParent.css({top:o,left:r})},_emitEvent:function(o,r){this.s.dt.iterator("table",function(t,e){v(t.nTable).triggerHandler(o+".dt",r)})},_eventToPage:function(t,e){return(-1!==t.type.indexOf("touch")?t.originalEvent.touches[0]:t)["page"+e]},_mouseDown:function(t,e){var o=this,r=this.s.dt,n=this.s.start,s=e.offset(),s=(n.top=this._eventToPage(t,"Y"),n.left=this._eventToPage(t,"X"),n.offsetTop=s.top,n.offsetLeft=s.left,n.nodes=v.unique(r.rows({page:"current"}).nodes().toArray()),this._cachePositions(),this._clone(e),this._clonePosition(t),(this.dom.target=e).addClass("dt-rowReorder-moving"),v(b).on("mouseup.rowReorder touchend.rowReorder",function(t){o._mouseUp(t)}).on("mousemove.rowReorder touchmove.rowReorder",function(t){o._mouseMove(t)}),v(d).width()===v(b).width()&&v(b.body).addClass("dt-rowReorder-noOverflow"),this.dom.dtScroll);this.s.scroll={windowHeight:v(d).height(),windowWidth:v(d).width(),dtTop:s.length?s.offset().top:null,dtLeft:s.length?s.offset().left:null,dtHeight:s.length?s.outerHeight():null,dtWidth:s.length?s.outerWidth():null}},_mouseMove:function(t){this._clonePosition(t);for(var e=this._eventToPage(t,"Y")-this.s.bodyTop,o=this.s.middles,r=null,n=this.s.dt,s=0,i=o.length;s
this.s.lastInsert?this.dom.target.insertAfter(n[r-1]):this.dom.target.insertBefore(n[r]),this._cachePositions(),this.s.lastInsert=r),this._shiftScroll(t)},_mouseUp:function(t){for(var e,o,r,n=this,s=this.s.dt,i=this.c.dataSrc,d=(this.dom.clone.remove(),this.dom.cloneParent.remove(),this.dom.clone=null,this.dom.cloneParent=null,this.dom.target.removeClass("dt-rowReorder-moving"),v(b).off(".rowReorder"),v(b.body).removeClass("dt-rowReorder-noOverflow"),clearInterval(this.s.scrollInterval),this.s.scrollInterval=null,this.s.start.nodes),l=v.unique(s.rows({page:"current"}).nodes().toArray()),a={},c=[],h=[],u=this.s.getDataFn,f=this.s.setDataFn,w=0,p=d.length;w n.windowHeight+v(d).scrollTop()-65&&(e=5),null!==n.dtTop&&t.pageYn.dtTop+n.dtHeight-65&&(o=5),e||o?(n.windowVert=e,n.dtVert=o,s=!0):this.s.scrollInterval&&(clearInterval(this.s.scrollInterval),this.s.scrollInterval=null),!this.s.scrollInterval&&s&&(this.s.scrollInterval=setInterval(function(){var t;n.windowVert&&(t=v(b).scrollTop(),v(b).scrollTop(t+n.windowVert),t!==v(b).scrollTop())&&(t=parseFloat(r.dom.cloneParent.css("top")),r.dom.cloneParent.css("top",t+n.windowVert)),n.dtVert&&(t=r.dom.dtScroll[0],n.dtVert)&&(t.scrollTop+=n.dtVert)},20))}}),s.defaults={dataSrc:0,editor:null,enable:!0,formOptions:{},selector:"td:first-child",snapX:!1,update:!0,excludedChildren:"a"},v.fn.dataTable.Api);return e.register("rowReorder()",function(){return this}),e.register("rowReorder.enable()",function(e){return e===t&&(e=!0),this.iterator("table",function(t){t.rowreorder&&(t.rowreorder.c.enable=e)})}),e.register("rowReorder.disable()",function(){return this.iterator("table",function(t){t.rowreorder&&(t.rowreorder.c.enable=!1)})}),s.version="1.3.3",v.fn.dataTable.RowReorder=s,v.fn.DataTable.RowReorder=s,v(b).on("init.dt.dtr",function(t,e,o){var r,n;"dt"===t.namespace&&(t=e.oInit.rowReorder,r=i.defaults.rowReorder,t||r)&&(n=v.extend({},t,r),!1!==t)&&new s(e,n)}),i});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap.js
deleted file mode 100644
index 55de9af..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*! Bootstrap 3 styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bs', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bs')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap.min.js
deleted file mode 100644
index 7d4a906..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bootstrap 3 styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-rowreorder"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(e,n){n.fn.dataTable||require("datatables.net-bs")(e,n),n.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),r(e,n),t(n,0,e.document)}:(r(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap4.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap4.js
deleted file mode 100644
index d91a3aa..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap4.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Bootstrap 4 styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bs4', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bs4')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap4.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap4.min.js
deleted file mode 100644
index cfe3f41..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap4.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bootstrap 4 styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-rowreorder"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(e,n){n.fn.dataTable||require("datatables.net-bs4")(e,n),n.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),r(e,n),t(n,0,e.document)}:(r(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap5.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap5.js
deleted file mode 100644
index eab37a0..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap5.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Bootstrap 5 styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bs5', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bs5')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap5.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap5.min.js
deleted file mode 100644
index 27a5e26..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bootstrap5.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bootstrap 5 styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs5","datatables.net-rowreorder"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(e,n){n.fn.dataTable||require("datatables.net-bs5")(e,n),n.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),r(e,n),t(n,0,e.document)}:(r(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bulma.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bulma.js
deleted file mode 100644
index c662b24..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bulma.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Bulma styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bm', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bm')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bulma.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bulma.min.js
deleted file mode 100644
index 007ec2e..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.bulma.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bulma styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bm","datatables.net-rowreorder"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(e,n){n.fn.dataTable||require("datatables.net-bm")(e,n),n.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),r(e,n),t(n,0,e.document)}:(r(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.dataTables.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.dataTables.js
deleted file mode 100644
index 76a4cc1..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.dataTables.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! DataTables styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-dt', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-dt')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.dataTables.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.dataTables.min.js
deleted file mode 100644
index 0e0a9f6..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.dataTables.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! DataTables styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(n){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-dt","datatables.net-rowreorder"],function(e){return n(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,t){t.fn.dataTable||require("datatables.net-dt")(e,t),t.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,t)},"undefined"!=typeof window?module.exports=function(e,t){return e=e||window,t=t||o(e),d(e,t),n(t,0,e.document)}:(d(window,o),module.exports=n(o,window,window.document))):n(jQuery,window,document)}(function(e,t,n,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.foundation.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.foundation.js
deleted file mode 100644
index 75a0cf0..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.foundation.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Foundation styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-zf', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-zf')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.foundation.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.foundation.min.js
deleted file mode 100644
index f6c3166..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.foundation.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Foundation styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-rowreorder"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(e,n){n.fn.dataTable||require("datatables.net-zf")(e,n),n.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),r(e,n),t(n,0,e.document)}:(r(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.jqueryui.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.jqueryui.js
deleted file mode 100644
index ecb5ebb..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.jqueryui.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! jQuery UI styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-jqui', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-jqui')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.jqueryui.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.jqueryui.min.js
deleted file mode 100644
index 1ccebd0..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.jqueryui.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery UI styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-rowreorder"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(e,n){n.fn.dataTable||require("datatables.net-jqui")(e,n),n.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),r(e,n),t(n,0,e.document)}:(r(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.semanticui.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.semanticui.js
deleted file mode 100644
index a2a888a..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.semanticui.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Semanic UI styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-se', 'datatables.net-rowreorder'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-se')(root, $);
- }
-
- if ( ! $.fn.dataTable.RowReorder ) {
- require('datatables.net-rowreorder')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.semanticui.min.js b/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.semanticui.min.js
deleted file mode 100644
index dc89ff8..0000000
--- a/public/assets/js/DataTables/RowReorder-1.3.3/js/rowReorder.semanticui.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Semanic UI styling wrapper for RowReorder
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-se","datatables.net-rowreorder"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(e,n){n.fn.dataTable||require("datatables.net-se")(e,n),n.fn.dataTable.RowReorder||require("datatables.net-rowreorder")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),r(e,n),t(n,0,e.document)}:(r(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap.css
deleted file mode 100644
index 849a26c..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap.css
+++ /dev/null
@@ -1,37 +0,0 @@
-div.dts {
- display: block !important;
-}
-div.dts tbody th,
-div.dts tbody td {
- white-space: nowrap;
-}
-div.dts div.dts_loading {
- z-index: 1;
-}
-div.dts div.dts_label {
- position: absolute;
- right: 10px;
- background: rgba(0, 0, 0, 0.8);
- color: white;
- box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
- text-align: right;
- border-radius: 3px;
- padding: 0.4em;
- z-index: 2;
- display: none;
-}
-div.dts div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.dts div.dataTables_scrollBody table {
- background-color: white;
- z-index: 2;
-}
-div.dts div.dataTables_paginate,
-div.dts div.dataTables_length {
- display: none;
-}
-
-div.DTS tbody tr {
- background-color: white;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap.min.css
deleted file mode 100644
index 8f7eae8..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 0, 0, 0.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none}div.DTS tbody tr{background-color:white}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap4.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap4.css
deleted file mode 100644
index ff5791a..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap4.css
+++ /dev/null
@@ -1,37 +0,0 @@
-div.dts {
- display: block !important;
-}
-div.dts tbody th,
-div.dts tbody td {
- white-space: nowrap;
-}
-div.dts div.dts_loading {
- z-index: 1;
-}
-div.dts div.dts_label {
- position: absolute;
- right: 10px;
- background: rgba(0, 0, 0, 0.8);
- color: white;
- box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
- text-align: right;
- border-radius: 3px;
- padding: 0.4em;
- z-index: 2;
- display: none;
-}
-div.dts div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.dts div.dataTables_scrollBody table {
- background-color: white;
- z-index: 2;
-}
-div.dts div.dataTables_paginate,
-div.dts div.dataTables_length {
- display: none;
-}
-
-div.DTS div.dataTables_scrollBody table {
- background-color: white;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap4.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap4.min.css
deleted file mode 100644
index a22cb2f..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap4.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 0, 0, 0.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none}div.DTS div.dataTables_scrollBody table{background-color:white}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap5.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap5.css
deleted file mode 100644
index ff5791a..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap5.css
+++ /dev/null
@@ -1,37 +0,0 @@
-div.dts {
- display: block !important;
-}
-div.dts tbody th,
-div.dts tbody td {
- white-space: nowrap;
-}
-div.dts div.dts_loading {
- z-index: 1;
-}
-div.dts div.dts_label {
- position: absolute;
- right: 10px;
- background: rgba(0, 0, 0, 0.8);
- color: white;
- box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
- text-align: right;
- border-radius: 3px;
- padding: 0.4em;
- z-index: 2;
- display: none;
-}
-div.dts div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.dts div.dataTables_scrollBody table {
- background-color: white;
- z-index: 2;
-}
-div.dts div.dataTables_paginate,
-div.dts div.dataTables_length {
- display: none;
-}
-
-div.DTS div.dataTables_scrollBody table {
- background-color: white;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap5.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap5.min.css
deleted file mode 100644
index a22cb2f..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bootstrap5.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 0, 0, 0.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none}div.DTS div.dataTables_scrollBody table{background-color:white}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bulma.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bulma.css
deleted file mode 100644
index ce5959d..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bulma.css
+++ /dev/null
@@ -1,33 +0,0 @@
-div.dts {
- display: block !important;
-}
-div.dts tbody th,
-div.dts tbody td {
- white-space: nowrap;
-}
-div.dts div.dts_loading {
- z-index: 1;
-}
-div.dts div.dts_label {
- position: absolute;
- right: 10px;
- background: rgba(0, 0, 0, 0.8);
- color: white;
- box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
- text-align: right;
- border-radius: 3px;
- padding: 0.4em;
- z-index: 2;
- display: none;
-}
-div.dts div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.dts div.dataTables_scrollBody table {
- background-color: white;
- z-index: 2;
-}
-div.dts div.dataTables_paginate,
-div.dts div.dataTables_length {
- display: none;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bulma.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bulma.min.css
deleted file mode 100644
index 08fb958..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.bulma.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 0, 0, 0.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.dataTables.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.dataTables.css
deleted file mode 100644
index ce5959d..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.dataTables.css
+++ /dev/null
@@ -1,33 +0,0 @@
-div.dts {
- display: block !important;
-}
-div.dts tbody th,
-div.dts tbody td {
- white-space: nowrap;
-}
-div.dts div.dts_loading {
- z-index: 1;
-}
-div.dts div.dts_label {
- position: absolute;
- right: 10px;
- background: rgba(0, 0, 0, 0.8);
- color: white;
- box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
- text-align: right;
- border-radius: 3px;
- padding: 0.4em;
- z-index: 2;
- display: none;
-}
-div.dts div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.dts div.dataTables_scrollBody table {
- background-color: white;
- z-index: 2;
-}
-div.dts div.dataTables_paginate,
-div.dts div.dataTables_length {
- display: none;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.dataTables.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.dataTables.min.css
deleted file mode 100644
index 08fb958..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 0, 0, 0.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.foundation.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.foundation.css
deleted file mode 100644
index 29d3a46..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.foundation.css
+++ /dev/null
@@ -1,17 +0,0 @@
-div.DTS tbody th,
-div.DTS tbody td {
- white-space: nowrap;
-}
-div.DTS div.DTS_Loading {
- z-index: 1;
-}
-div.DTS div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.DTS div.dataTables_scrollBody table {
- z-index: 2;
-}
-div.DTS div.dataTables_paginate,
-div.DTS div.dataTables_length {
- display: none;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.foundation.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.foundation.min.css
deleted file mode 100644
index 0c83fee..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.foundation.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.DTS tbody th,div.DTS tbody td{white-space:nowrap}div.DTS div.DTS_Loading{z-index:1}div.DTS div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.DTS div.dataTables_scrollBody table{z-index:2}div.DTS div.dataTables_paginate,div.DTS div.dataTables_length{display:none}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.jqueryui.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.jqueryui.css
deleted file mode 100644
index ce5959d..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.jqueryui.css
+++ /dev/null
@@ -1,33 +0,0 @@
-div.dts {
- display: block !important;
-}
-div.dts tbody th,
-div.dts tbody td {
- white-space: nowrap;
-}
-div.dts div.dts_loading {
- z-index: 1;
-}
-div.dts div.dts_label {
- position: absolute;
- right: 10px;
- background: rgba(0, 0, 0, 0.8);
- color: white;
- box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
- text-align: right;
- border-radius: 3px;
- padding: 0.4em;
- z-index: 2;
- display: none;
-}
-div.dts div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.dts div.dataTables_scrollBody table {
- background-color: white;
- z-index: 2;
-}
-div.dts div.dataTables_paginate,
-div.dts div.dataTables_length {
- display: none;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.jqueryui.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.jqueryui.min.css
deleted file mode 100644
index 08fb958..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.jqueryui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 0, 0, 0.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.semanticui.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.semanticui.css
deleted file mode 100644
index ce5959d..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.semanticui.css
+++ /dev/null
@@ -1,33 +0,0 @@
-div.dts {
- display: block !important;
-}
-div.dts tbody th,
-div.dts tbody td {
- white-space: nowrap;
-}
-div.dts div.dts_loading {
- z-index: 1;
-}
-div.dts div.dts_label {
- position: absolute;
- right: 10px;
- background: rgba(0, 0, 0, 0.8);
- color: white;
- box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
- text-align: right;
- border-radius: 3px;
- padding: 0.4em;
- z-index: 2;
- display: none;
-}
-div.dts div.dataTables_scrollBody {
- background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);
-}
-div.dts div.dataTables_scrollBody table {
- background-color: white;
- z-index: 2;
-}
-div.dts div.dataTables_paginate,
-div.dts div.dataTables_length {
- display: none;
-}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.semanticui.min.css b/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.semanticui.min.css
deleted file mode 100644
index 08fb958..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/css/scroller.semanticui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 0, 0, 0.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none}
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/dataTables.scroller.js b/public/assets/js/DataTables/Scroller-2.1.1/js/dataTables.scroller.js
deleted file mode 100644
index de27e27..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/dataTables.scroller.js
+++ /dev/null
@@ -1,1353 +0,0 @@
-/*! Scroller 2.1.1
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-/**
- * @summary Scroller
- * @description Virtual rendering for DataTables
- * @version 2.1.1
- * @author SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact www.sprymedia.co.uk/contact
- * @copyright SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- * MIT license - http://datatables.net/license/mit
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-
-
-/**
- * Scroller is a virtual rendering plug-in for DataTables which allows large
- * datasets to be drawn on screen every quickly. What the virtual rendering means
- * is that only the visible portion of the table (and a bit to either side to make
- * the scrolling smooth) is drawn, while the scrolling container gives the
- * visual impression that the whole table is visible. This is done by making use
- * of the pagination abilities of DataTables and moving the table around in the
- * scrolling container DataTables adds to the page. The scrolling container is
- * forced to the height it would be for the full table display using an extra
- * element.
- *
- * Note that rows in the table MUST all be the same height. Information in a cell
- * which expands on to multiple lines will cause some odd behaviour in the scrolling.
- *
- * Scroller is initialised by simply including the letter 'S' in the sDom for the
- * table you want to have this feature enabled on. Note that the 'S' must come
- * AFTER the 't' parameter in `dom`.
- *
- * Key features include:
- *
- * Speed! The aim of Scroller for DataTables is to make rendering large data sets fast
- * Full compatibility with deferred rendering in DataTables for maximum speed
- * Display millions of rows
- * Integration with state saving in DataTables (scrolling position is saved)
- * Easy to use
- *
- *
- * @class
- * @constructor
- * @global
- * @param {object} dt DataTables settings object or API instance
- * @param {object} [opts={}] Configuration object for Scroller. Options
- * are defined by {@link Scroller.defaults}
- *
- * @requires jQuery 1.7+
- * @requires DataTables 1.10.0+
- *
- * @example
- * $(document).ready(function() {
- * $('#example').DataTable( {
- * "scrollY": "200px",
- * "ajax": "media/dataset/large.txt",
- * "scroller": true,
- * "deferRender": true
- * } );
- * } );
- */
-var Scroller = function ( dt, opts ) {
- /* Sanity check - you just know it will happen */
- if ( ! (this instanceof Scroller) ) {
- alert( "Scroller warning: Scroller must be initialised with the 'new' keyword." );
- return;
- }
-
- if ( opts === undefined ) {
- opts = {};
- }
-
- var dtApi = $.fn.dataTable.Api( dt );
-
- /**
- * Settings object which contains customisable information for the Scroller instance
- * @namespace
- * @private
- * @extends Scroller.defaults
- */
- this.s = {
- /**
- * DataTables settings object
- * @type object
- * @default Passed in as first parameter to constructor
- */
- dt: dtApi.settings()[0],
-
- /**
- * DataTables API instance
- * @type DataTable.Api
- */
- dtApi: dtApi,
-
- /**
- * Pixel location of the top of the drawn table in the viewport
- * @type int
- * @default 0
- */
- tableTop: 0,
-
- /**
- * Pixel location of the bottom of the drawn table in the viewport
- * @type int
- * @default 0
- */
- tableBottom: 0,
-
- /**
- * Pixel location of the boundary for when the next data set should be loaded and drawn
- * when scrolling up the way.
- * @type int
- * @default 0
- * @private
- */
- redrawTop: 0,
-
- /**
- * Pixel location of the boundary for when the next data set should be loaded and drawn
- * when scrolling down the way. Note that this is actually calculated as the offset from
- * the top.
- * @type int
- * @default 0
- * @private
- */
- redrawBottom: 0,
-
- /**
- * Auto row height or not indicator
- * @type bool
- * @default 0
- */
- autoHeight: true,
-
- /**
- * Number of rows calculated as visible in the visible viewport
- * @type int
- * @default 0
- */
- viewportRows: 0,
-
- /**
- * setTimeout reference for state saving, used when state saving is enabled in the DataTable
- * and when the user scrolls the viewport in order to stop the cookie set taking too much
- * CPU!
- * @type int
- * @default 0
- */
- stateTO: null,
-
- stateSaveThrottle: function () {},
-
- /**
- * setTimeout reference for the redraw, used when server-side processing is enabled in the
- * DataTables in order to prevent DoSing the server
- * @type int
- * @default null
- */
- drawTO: null,
-
- heights: {
- jump: null,
- page: null,
- virtual: null,
- scroll: null,
-
- /**
- * Height of rows in the table
- * @type int
- * @default 0
- */
- row: null,
-
- /**
- * Pixel height of the viewport
- * @type int
- * @default 0
- */
- viewport: null,
- labelHeight: 0,
- xbar: 0
- },
-
- topRowFloat: 0,
- scrollDrawDiff: null,
- loaderVisible: false,
- forceReposition: false,
- baseRowTop: 0,
- baseScrollTop: 0,
- mousedown: false,
- lastScrollTop: 0
- };
-
- // @todo The defaults should extend a `c` property and the internal settings
- // only held in the `s` property. At the moment they are mixed
- this.s = $.extend( this.s, Scroller.oDefaults, opts );
-
- // Workaround for row height being read from height object (see above comment)
- this.s.heights.row = this.s.rowHeight;
-
- /**
- * DOM elements used by the class instance
- * @private
- * @namespace
- *
- */
- this.dom = {
- "force": document.createElement('div'),
- "label": $('0
'),
- "scroller": null,
- "table": null,
- "loader": null
- };
-
- // Attach the instance to the DataTables instance so it can be accessed in
- // future. Don't initialise Scroller twice on the same table
- if ( this.s.dt.oScroller ) {
- return;
- }
-
- this.s.dt.oScroller = this;
-
- /* Let's do it */
- this.construct();
-};
-
-
-
-$.extend( Scroller.prototype, {
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public methods - to be exposed via the DataTables API
- */
-
- /**
- * Calculate and store information about how many rows are to be displayed
- * in the scrolling viewport, based on current dimensions in the browser's
- * rendering. This can be particularly useful if the table is initially
- * drawn in a hidden element - for example in a tab.
- * @param {bool} [redraw=true] Redraw the table automatically after the recalculation, with
- * the new dimensions forming the basis for the draw.
- * @returns {void}
- */
- measure: function ( redraw )
- {
- if ( this.s.autoHeight )
- {
- this._calcRowHeight();
- }
-
- var heights = this.s.heights;
-
- if ( heights.row ) {
- heights.viewport = this._parseHeight($(this.dom.scroller).css('max-height'));
-
- this.s.viewportRows = parseInt( heights.viewport / heights.row, 10 )+1;
- this.s.dt._iDisplayLength = this.s.viewportRows * this.s.displayBuffer;
- }
-
- var label = this.dom.label.outerHeight();
-
- heights.xbar = this.dom.scroller.offsetHeight - this.dom.scroller.clientHeight;
- heights.labelHeight = label;
-
- if ( redraw === undefined || redraw )
- {
- this.s.dt.oInstance.fnDraw( false );
- }
- },
-
- /**
- * Get information about current displayed record range. This corresponds to
- * the information usually displayed in the "Info" block of the table.
- *
- * @returns {object} info as an object:
- * {
- * start: {int}, // the 0-indexed record at the top of the viewport
- * end: {int}, // the 0-indexed record at the bottom of the viewport
- * }
- */
- pageInfo: function()
- {
- var
- dt = this.s.dt,
- iScrollTop = this.dom.scroller.scrollTop,
- iTotal = dt.fnRecordsDisplay(),
- iPossibleEnd = Math.ceil(this.pixelsToRow(iScrollTop + this.s.heights.viewport, false, this.s.ani));
-
- return {
- start: Math.floor(this.pixelsToRow(iScrollTop, false, this.s.ani)),
- end: iTotal < iPossibleEnd ? iTotal-1 : iPossibleEnd-1
- };
- },
-
- /**
- * Calculate the row number that will be found at the given pixel position
- * (y-scroll).
- *
- * Please note that when the height of the full table exceeds 1 million
- * pixels, Scroller switches into a non-linear mode for the scrollbar to fit
- * all of the records into a finite area, but this function returns a linear
- * value (relative to the last non-linear positioning).
- * @param {int} pixels Offset from top to calculate the row number of
- * @param {int} [intParse=true] If an integer value should be returned
- * @param {int} [virtual=false] Perform the calculations in the virtual domain
- * @returns {int} Row index
- */
- pixelsToRow: function ( pixels, intParse, virtual )
- {
- var diff = pixels - this.s.baseScrollTop;
- var row = virtual ?
- (this._domain( 'physicalToVirtual', this.s.baseScrollTop ) + diff) / this.s.heights.row :
- ( diff / this.s.heights.row ) + this.s.baseRowTop;
-
- return intParse || intParse === undefined ?
- parseInt( row, 10 ) :
- row;
- },
-
- /**
- * Calculate the pixel position from the top of the scrolling container for
- * a given row
- * @param {int} iRow Row number to calculate the position of
- * @returns {int} Pixels
- */
- rowToPixels: function ( rowIdx, intParse, virtual )
- {
- var pixels;
- var diff = rowIdx - this.s.baseRowTop;
-
- if ( virtual ) {
- pixels = this._domain( 'virtualToPhysical', this.s.baseScrollTop );
- pixels += diff * this.s.heights.row;
- }
- else {
- pixels = this.s.baseScrollTop;
- pixels += diff * this.s.heights.row;
- }
-
- return intParse || intParse === undefined ?
- parseInt( pixels, 10 ) :
- pixels;
- },
-
-
- /**
- * Calculate the row number that will be found at the given pixel position (y-scroll)
- * @param {int} row Row index to scroll to
- * @param {bool} [animate=true] Animate the transition or not
- * @returns {void}
- */
- scrollToRow: function ( row, animate )
- {
- var that = this;
- var ani = false;
- var px = this.rowToPixels( row );
-
- // We need to know if the table will redraw or not before doing the
- // scroll. If it will not redraw, then we need to use the currently
- // displayed table, and scroll with the physical pixels. Otherwise, we
- // need to calculate the table's new position from the virtual
- // transform.
- var preRows = ((this.s.displayBuffer-1)/2) * this.s.viewportRows;
- var drawRow = row - preRows;
- if ( drawRow < 0 ) {
- drawRow = 0;
- }
-
- if ( (px > this.s.redrawBottom || px < this.s.redrawTop) && this.s.dt._iDisplayStart !== drawRow ) {
- ani = true;
- px = this._domain( 'virtualToPhysical', row * this.s.heights.row );
-
- // If we need records outside the current draw region, but the new
- // scrolling position is inside that (due to the non-linear nature
- // for larger numbers of records), we need to force position update.
- if ( this.s.redrawTop < px && px < this.s.redrawBottom ) {
- this.s.forceReposition = true;
- animate = false;
- }
- }
-
- if ( animate === undefined || animate )
- {
- this.s.ani = ani;
- $(this.dom.scroller).animate( {
- "scrollTop": px
- }, function () {
- // This needs to happen after the animation has completed and
- // the final scroll event fired
- setTimeout( function () {
- that.s.ani = false;
- }, 250 );
- } );
- }
- else
- {
- $(this.dom.scroller).scrollTop( px );
- }
- },
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Constructor
- */
-
- /**
- * Initialisation for Scroller
- * @returns {void}
- * @private
- */
- construct: function ()
- {
- var that = this;
- var dt = this.s.dtApi;
-
- /* Sanity check */
- if ( !this.s.dt.oFeatures.bPaginate ) {
- this.s.dt.oApi._fnLog( this.s.dt, 0, 'Pagination must be enabled for Scroller' );
- return;
- }
-
- /* Insert a div element that we can use to force the DT scrolling container to
- * the height that would be required if the whole table was being displayed
- */
- this.dom.force.style.position = "relative";
- this.dom.force.style.top = "0px";
- this.dom.force.style.left = "0px";
- this.dom.force.style.width = "1px";
-
- this.dom.scroller = $('div.'+this.s.dt.oClasses.sScrollBody, this.s.dt.nTableWrapper)[0];
- this.dom.scroller.appendChild( this.dom.force );
- this.dom.scroller.style.position = "relative";
-
- this.dom.table = $('>table', this.dom.scroller)[0];
- this.dom.table.style.position = "absolute";
- this.dom.table.style.top = "0px";
- this.dom.table.style.left = "0px";
-
- // Add class to 'announce' that we are a Scroller table
- $(dt.table().container()).addClass('dts DTS');
-
- // Add a 'loading' indicator
- if ( this.s.loadingIndicator )
- {
- this.dom.loader = $(''+this.s.dt.oLanguage.sLoadingRecords+'
')
- .css('display', 'none');
-
- $(this.dom.scroller.parentNode)
- .css('position', 'relative')
- .append( this.dom.loader );
- }
-
- this.dom.label.appendTo(this.dom.scroller);
-
- /* Initial size calculations */
- if ( this.s.heights.row && this.s.heights.row != 'auto' )
- {
- this.s.autoHeight = false;
- }
-
- // Scrolling callback to see if a page change is needed
- this.s.ingnoreScroll = true;
- $(this.dom.scroller).on( 'scroll.dt-scroller', function (e) {
- that._scroll.call( that );
- } );
-
- // In iOS we catch the touchstart event in case the user tries to scroll
- // while the display is already scrolling
- $(this.dom.scroller).on('touchstart.dt-scroller', function () {
- that._scroll.call( that );
- } );
-
- $(this.dom.scroller)
- .on('mousedown.dt-scroller', function () {
- that.s.mousedown = true;
- })
- .on('mouseup.dt-scroller', function () {
- that.s.labelVisible = false;
- that.s.mousedown = false;
- that.dom.label.css('display', 'none');
- });
-
- // On resize, update the information element, since the number of rows shown might change
- $(window).on( 'resize.dt-scroller', function () {
- that.measure( false );
- that._info();
- } );
-
- // Add a state saving parameter to the DT state saving so we can restore the exact
- // position of the scrolling.
- var initialStateSave = true;
- var loadedState = dt.state.loaded();
-
- dt.on( 'stateSaveParams.scroller', function ( e, settings, data ) {
- if ( initialStateSave && loadedState ) {
- data.scroller = loadedState.scroller;
- initialStateSave = false;
-
- if (data.scroller) {
- that.s.lastScrollTop = data.scroller.scrollTop;
- }
- }
- else {
- // Need to used the saved position on init
- data.scroller = {
- topRow: that.s.topRowFloat,
- baseScrollTop: that.s.baseScrollTop,
- baseRowTop: that.s.baseRowTop,
- scrollTop: that.s.lastScrollTop
- };
- }
- } );
-
- dt.on( 'stateLoadParams.scroller', function( e, settings, data ) {
- if (data.scroller !== undefined) {
- that.scrollToRow(data.scroller.topRow);
- }
- });
-
- if ( loadedState && loadedState.scroller ) {
- this.s.topRowFloat = loadedState.scroller.topRow;
- this.s.baseScrollTop = loadedState.scroller.baseScrollTop;
- this.s.baseRowTop = loadedState.scroller.baseRowTop;
- }
-
- this.measure( false );
-
- that.s.stateSaveThrottle = that.s.dt.oApi._fnThrottle( function () {
- that.s.dtApi.state.save();
- }, 500 );
-
- dt.on( 'init.scroller', function () {
- that.measure( false );
-
- // Setting to `jump` will instruct _draw to calculate the scroll top
- // position
- that.s.scrollType = 'jump';
- that._draw();
-
- // Update the scroller when the DataTable is redrawn
- dt.on( 'draw.scroller', function () {
- that._draw();
- });
- } );
-
- // Set height before the draw happens, allowing everything else to update
- // on draw complete without worry for roder.
- dt.on( 'preDraw.dt.scroller', function () {
- that._scrollForce();
- } );
-
- // Destructor
- dt.on( 'destroy.scroller', function () {
- $(window).off( 'resize.dt-scroller' );
- $(that.dom.scroller).off('.dt-scroller');
- $(that.s.dt.nTable).off( '.scroller' );
-
- $(that.s.dt.nTableWrapper).removeClass('DTS');
- $('div.DTS_Loading', that.dom.scroller.parentNode).remove();
-
- that.dom.table.style.position = "";
- that.dom.table.style.top = "";
- that.dom.table.style.left = "";
- } );
- },
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Private methods
- */
-
- /**
- * Automatic calculation of table row height. This is just a little tricky here as using
- * initialisation DataTables has tale the table out of the document, so we need to create
- * a new table and insert it into the document, calculate the row height and then whip the
- * table out.
- * @returns {void}
- * @private
- */
- _calcRowHeight: function ()
- {
- var dt = this.s.dt;
- var origTable = dt.nTable;
- var nTable = origTable.cloneNode( false );
- var tbody = $(' ').appendTo( nTable );
- var container = $(
- ''
- );
-
- // Want 3 rows in the sizing table so :first-child and :last-child
- // CSS styles don't come into play - take the size of the middle row
- $('tbody tr:lt(4)', origTable).clone().appendTo( tbody );
- var rowsCount = $('tr', tbody).length;
-
- if ( rowsCount === 1 ) {
- tbody.prepend(' ');
- tbody.append(' ');
- }
- else {
- for (; rowsCount < 3; rowsCount++) {
- tbody.append(' ');
- }
- }
-
- $('div.'+dt.oClasses.sScrollBody, container).append( nTable );
-
- // If initialised using `dom`, use the holding element as the insert point
- var insertEl = this.s.dt.nHolding || origTable.parentNode;
-
- if ( ! $(insertEl).is(':visible') ) {
- insertEl = 'body';
- }
-
- // Remove form element links as they might select over others (particularly radio and checkboxes)
- container.find("input").removeAttr("name");
-
- container.appendTo( insertEl );
- this.s.heights.row = $('tr', tbody).eq(1).outerHeight();
-
- container.remove();
- },
-
- /**
- * Draw callback function which is fired when the DataTable is redrawn. The main function of
- * this method is to position the drawn table correctly the scrolling container for the rows
- * that is displays as a result of the scrolling position.
- * @returns {void}
- * @private
- */
- _draw: function ()
- {
- var
- that = this,
- heights = this.s.heights,
- iScrollTop = this.dom.scroller.scrollTop,
- iTableHeight = $(this.s.dt.nTable).height(),
- displayStart = this.s.dt._iDisplayStart,
- displayLen = this.s.dt._iDisplayLength,
- displayEnd = this.s.dt.fnRecordsDisplay(),
- viewportEndY = iScrollTop + heights.viewport;
-
- // Disable the scroll event listener while we are updating the DOM
- this.s.skip = true;
-
- // If paging is reset
- if ( (this.s.dt.bSorted || this.s.dt.bFiltered) && displayStart === 0 && !this.s.dt._drawHold ) {
- this.s.topRowFloat = 0;
- }
-
- iScrollTop = this.s.scrollType === 'jump' ?
- this._domain( 'virtualToPhysical', this.s.topRowFloat * heights.row ) :
- iScrollTop;
-
- // Store positional information so positional calculations can be based
- // upon the current table draw position
- this.s.baseScrollTop = iScrollTop;
- this.s.baseRowTop = this.s.topRowFloat;
-
- // Position the table in the virtual scroller
- var tableTop = iScrollTop - ((this.s.topRowFloat - displayStart) * heights.row);
- if ( displayStart === 0 ) {
- tableTop = 0;
- }
- else if ( displayStart + displayLen >= displayEnd ) {
- tableTop = heights.scroll - iTableHeight;
- }
- else {
- var iTableBottomY = tableTop + iTableHeight;
- if (iTableBottomY < viewportEndY) {
- // The last row of the data is above the end of the viewport.
- // This means the background is visible, which is not what the user expects.
- var newTableTop = viewportEndY - iTableHeight;
- var diffPx = newTableTop - tableTop;
- this.s.baseScrollTop += diffPx + 1; // Update start row number in footer.
- tableTop = newTableTop; // Move table so last line of data is at the bottom of the viewport.
- }
- }
-
- this.dom.table.style.top = tableTop+'px';
-
- /* Cache some information for the scroller */
- this.s.tableTop = tableTop;
- this.s.tableBottom = iTableHeight + this.s.tableTop;
-
- // Calculate the boundaries for where a redraw will be triggered by the
- // scroll event listener
- var boundaryPx = (iScrollTop - this.s.tableTop) * this.s.boundaryScale;
- this.s.redrawTop = iScrollTop - boundaryPx;
- this.s.redrawBottom = iScrollTop + boundaryPx > heights.scroll - heights.viewport - heights.row ?
- heights.scroll - heights.viewport - heights.row :
- iScrollTop + boundaryPx;
-
- this.s.skip = false;
-
- if(that.s.ingnoreScroll) {
- // Restore the scrolling position that was saved by DataTable's state
- // saving Note that this is done on the second draw when data is Ajax
- // sourced, and the first draw when DOM soured
- if ( this.s.dt.oFeatures.bStateSave && this.s.dt.oLoadedState !== null &&
- typeof this.s.dt.oLoadedState.scroller != 'undefined' )
- {
- // A quirk of DataTables is that the draw callback will occur on an
- // empty set if Ajax sourced, but not if server-side processing.
- var ajaxSourced = (this.s.dt.sAjaxSource || that.s.dt.ajax) && ! this.s.dt.oFeatures.bServerSide ?
- true :
- false;
-
- if ( ( ajaxSourced && this.s.dt.iDraw >= 2) ||
- (!ajaxSourced && this.s.dt.iDraw >= 1) )
- {
- setTimeout( function () {
- $(that.dom.scroller).scrollTop( that.s.dt.oLoadedState.scroller.scrollTop );
-
- // In order to prevent layout thrashing we need another
- // small delay
- setTimeout( function () {
- that.s.ingnoreScroll = false;
- }, 0 );
- }, 0 );
- }
- }
- else {
- that.s.ingnoreScroll = false;
- }
- }
-
-
- // Because of the order of the DT callbacks, the info update will
- // take precedence over the one we want here. So a 'thread' break is
- // needed. Only add the thread break if bInfo is set
- if ( this.s.dt.oFeatures.bInfo ) {
- setTimeout( function () {
- that._info.call( that );
- }, 0 );
- }
-
- $(this.s.dt.nTable).triggerHandler('position.dts.dt', tableTop);
-
- // Hide the loading indicator
- if ( this.dom.loader && this.s.loaderVisible ) {
- this.dom.loader.css( 'display', 'none' );
- this.s.loaderVisible = false;
- }
- },
-
- /**
- * Convert from one domain to another. The physical domain is the actual
- * pixel count on the screen, while the virtual is if we had browsers which
- * had scrolling containers of infinite height (i.e. the absolute value)
- *
- * @param {string} dir Domain transform direction, `virtualToPhysical` or
- * `physicalToVirtual`
- * @returns {number} Calculated transform
- * @private
- */
- _domain: function ( dir, val )
- {
- var heights = this.s.heights;
- var diff;
- var magic = 10000; // the point at which the non-linear calculations start to happen
-
- // If the virtual and physical height match, then we use a linear
- // transform between the two, allowing the scrollbar to be linear
- if ( heights.virtual === heights.scroll ) {
- return val;
- }
-
- // In the first 10k pixels and the last 10k pixels, we want the scrolling
- // to be linear. After that it can be non-linear. It would be unusual for
- // anyone to mouse wheel through that much.
- if ( val < magic ) {
- return val;
- }
- else if ( dir === 'virtualToPhysical' && val >= heights.virtual - magic ) {
- diff = heights.virtual - val;
- return heights.scroll - diff;
- }
- else if ( dir === 'physicalToVirtual' && val >= heights.scroll - magic ) {
- diff = heights.scroll - val;
- return heights.virtual - diff;
- }
-
- // Otherwise, we want a non-linear scrollbar to take account of the
- // redrawing regions at the start and end of the table, otherwise these
- // can stutter badly - on large tables 30px (for example) scroll might
- // be hundreds of rows, so the table would be redrawing every few px at
- // the start and end. Use a simple linear eq. to stop this, effectively
- // causing a kink in the scrolling ratio. It does mean the scrollbar is
- // non-linear, but with such massive data sets, the scrollbar is going
- // to be a best guess anyway
- var m = (heights.virtual - magic - magic) / (heights.scroll - magic - magic);
- var c = magic - (m*magic);
-
- return dir === 'virtualToPhysical' ?
- (val-c) / m :
- (m*val) + c;
- },
-
- /**
- * Update any information elements that are controlled by the DataTable based on the scrolling
- * viewport and what rows are visible in it. This function basically acts in the same way as
- * _fnUpdateInfo in DataTables, and effectively replaces that function.
- * @returns {void}
- * @private
- */
- _info: function ()
- {
- if ( !this.s.dt.oFeatures.bInfo )
- {
- return;
- }
-
- var
- dt = this.s.dt,
- language = dt.oLanguage,
- iScrollTop = this.dom.scroller.scrollTop,
- iStart = Math.floor( this.pixelsToRow(iScrollTop, false, this.s.ani)+1 ),
- iMax = dt.fnRecordsTotal(),
- iTotal = dt.fnRecordsDisplay(),
- iPossibleEnd = Math.ceil( this.pixelsToRow(iScrollTop+this.s.heights.viewport, false, this.s.ani) ),
- iEnd = iTotal < iPossibleEnd ? iTotal : iPossibleEnd,
- sStart = dt.fnFormatNumber( iStart ),
- sEnd = dt.fnFormatNumber( iEnd ),
- sMax = dt.fnFormatNumber( iMax ),
- sTotal = dt.fnFormatNumber( iTotal ),
- sOut;
-
- if ( dt.fnRecordsDisplay() === 0 &&
- dt.fnRecordsDisplay() == dt.fnRecordsTotal() )
- {
- /* Empty record set */
- sOut = language.sInfoEmpty+ language.sInfoPostFix;
- }
- else if ( dt.fnRecordsDisplay() === 0 )
- {
- /* Empty record set after filtering */
- sOut = language.sInfoEmpty +' '+
- language.sInfoFiltered.replace('_MAX_', sMax)+
- language.sInfoPostFix;
- }
- else if ( dt.fnRecordsDisplay() == dt.fnRecordsTotal() )
- {
- /* Normal record set */
- sOut = language.sInfo.
- replace('_START_', sStart).
- replace('_END_', sEnd).
- replace('_MAX_', sMax).
- replace('_TOTAL_', sTotal)+
- language.sInfoPostFix;
- }
- else
- {
- /* Record set after filtering */
- sOut = language.sInfo.
- replace('_START_', sStart).
- replace('_END_', sEnd).
- replace('_MAX_', sMax).
- replace('_TOTAL_', sTotal) +' '+
- language.sInfoFiltered.replace(
- '_MAX_',
- dt.fnFormatNumber(dt.fnRecordsTotal())
- )+
- language.sInfoPostFix;
- }
-
- var callback = language.fnInfoCallback;
- if ( callback ) {
- sOut = callback.call( dt.oInstance,
- dt, iStart, iEnd, iMax, iTotal, sOut
- );
- }
-
- var n = dt.aanFeatures.i;
- if ( typeof n != 'undefined' )
- {
- for ( var i=0, iLen=n.length ; i heights.viewport ?
- 'jump' :
- 'cont';
-
- this.s.topRowFloat = this.s.scrollType === 'cont' ?
- this.pixelsToRow( iScrollTop, false, false ) :
- this._domain( 'physicalToVirtual', iScrollTop ) / heights.row;
-
- if ( this.s.topRowFloat < 0 ) {
- this.s.topRowFloat = 0;
- }
-
- /* Check if the scroll point is outside the trigger boundary which would required
- * a DataTables redraw
- */
- if ( this.s.forceReposition || iScrollTop < this.s.redrawTop || iScrollTop > this.s.redrawBottom ) {
- var preRows = Math.ceil( ((this.s.displayBuffer-1)/2) * this.s.viewportRows );
-
- iTopRow = parseInt(this.s.topRowFloat, 10) - preRows;
- this.s.forceReposition = false;
-
- if ( iTopRow <= 0 ) {
- /* At the start of the table */
- iTopRow = 0;
- }
- else if ( iTopRow + this.s.dt._iDisplayLength > this.s.dt.fnRecordsDisplay() ) {
- /* At the end of the table */
- iTopRow = this.s.dt.fnRecordsDisplay() - this.s.dt._iDisplayLength;
- if ( iTopRow < 0 ) {
- iTopRow = 0;
- }
- }
- else if ( iTopRow % 2 !== 0 ) {
- // For the row-striping classes (odd/even) we want only to start
- // on evens otherwise the stripes will change between draws and
- // look rubbish
- iTopRow++;
- }
-
- // Store calcuated value, in case the following condition is not met, but so
- // that the draw function will still use it.
- this.s.targetTop = iTopRow;
-
- if ( iTopRow != this.s.dt._iDisplayStart ) {
- /* Cache the new table position for quick lookups */
- this.s.tableTop = $(this.s.dt.nTable).offset().top;
- this.s.tableBottom = $(this.s.dt.nTable).height() + this.s.tableTop;
-
- var draw = function () {
- that.s.dt._iDisplayStart = that.s.targetTop;
- that.s.dt.oApi._fnDraw( that.s.dt );
- };
-
- /* Do the DataTables redraw based on the calculated start point - note that when
- * using server-side processing we introduce a small delay to not DoS the server...
- */
- if ( this.s.dt.oFeatures.bServerSide ) {
- this.s.forceReposition = true;
-
- clearTimeout( this.s.drawTO );
- this.s.drawTO = setTimeout( draw, this.s.serverWait );
- }
- else {
- draw();
- }
-
- if ( this.dom.loader && ! this.s.loaderVisible ) {
- this.dom.loader.css( 'display', 'block' );
- this.s.loaderVisible = true;
- }
- }
- }
- else {
- this.s.topRowFloat = this.pixelsToRow( iScrollTop, false, true );
- }
-
- this.s.lastScrollTop = iScrollTop;
- this.s.stateSaveThrottle();
-
- if ( this.s.scrollType === 'jump' && this.s.mousedown ) {
- this.s.labelVisible = true;
- }
- if (this.s.labelVisible) {
- var labelFactor = (heights.viewport-heights.labelHeight - heights.xbar) / heights.scroll;
-
- this.dom.label
- .html( this.s.dt.fnFormatNumber( parseInt( this.s.topRowFloat, 10 )+1 ) )
- .css( 'top', iScrollTop + (iScrollTop * labelFactor) )
- .css( 'right', 10 - this.dom.scroller.scrollLeft)
- .css( 'display', 'block' );
- }
- },
-
- /**
- * Force the scrolling container to have height beyond that of just the
- * table that has been drawn so the user can scroll the whole data set.
- *
- * Note that if the calculated required scrolling height exceeds a maximum
- * value (1 million pixels - hard-coded) the forcing element will be set
- * only to that maximum value and virtual / physical domain transforms will
- * be used to allow Scroller to display tables of any number of records.
- * @returns {void}
- * @private
- */
- _scrollForce: function ()
- {
- var heights = this.s.heights;
- var max = 1000000;
-
- heights.virtual = heights.row * this.s.dt.fnRecordsDisplay();
- heights.scroll = heights.virtual;
-
- if ( heights.scroll > max ) {
- heights.scroll = max;
- }
-
- // Minimum height so there is always a row visible (the 'no rows found'
- // if reduced to zero filtering)
- this.dom.force.style.height = heights.scroll > this.s.heights.row ?
- heights.scroll+'px' :
- this.s.heights.row+'px';
- }
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Statics
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-
-/**
- * Scroller default settings for initialisation
- * @namespace
- * @name Scroller.defaults
- * @static
- */
-Scroller.defaults = {
- /**
- * Scroller uses the boundary scaling factor to decide when to redraw the table - which it
- * typically does before you reach the end of the currently loaded data set (in order to
- * allow the data to look continuous to a user scrolling through the data). If given as 0
- * then the table will be redrawn whenever the viewport is scrolled, while 1 would not
- * redraw the table until the currently loaded data has all been shown. You will want
- * something in the middle - the default factor of 0.5 is usually suitable.
- * @type float
- * @default 0.5
- * @static
- */
- boundaryScale: 0.5,
-
- /**
- * The display buffer is what Scroller uses to calculate how many rows it should pre-fetch
- * for scrolling. Scroller automatically adjusts DataTables' display length to pre-fetch
- * rows that will be shown in "near scrolling" (i.e. just beyond the current display area).
- * The value is based upon the number of rows that can be displayed in the viewport (i.e.
- * a value of 1), and will apply the display range to records before before and after the
- * current viewport - i.e. a factor of 3 will allow Scroller to pre-fetch 1 viewport's worth
- * of rows before the current viewport, the current viewport's rows and 1 viewport's worth
- * of rows after the current viewport. Adjusting this value can be useful for ensuring
- * smooth scrolling based on your data set.
- * @type int
- * @default 7
- * @static
- */
- displayBuffer: 9,
-
- /**
- * Show (or not) the loading element in the background of the table. Note that you should
- * include the dataTables.scroller.css file for this to be displayed correctly.
- * @type boolean
- * @default false
- * @static
- */
- loadingIndicator: false,
-
- /**
- * Scroller will attempt to automatically calculate the height of rows for it's internal
- * calculations. However the height that is used can be overridden using this parameter.
- * @type int|string
- * @default auto
- * @static
- */
- rowHeight: "auto",
-
- /**
- * When using server-side processing, Scroller will wait a small amount of time to allow
- * the scrolling to finish before requesting more data from the server. This prevents
- * you from DoSing your own server! The wait time can be configured by this parameter.
- * @type int
- * @default 200
- * @static
- */
- serverWait: 200
-};
-
-Scroller.oDefaults = Scroller.defaults;
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Constants
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/**
- * Scroller version
- * @type String
- * @default See code
- * @name Scroller.version
- * @static
- */
-Scroller.version = "2.1.1";
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Initialisation
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-// Attach a listener to the document which listens for DataTables initialisation
-// events so we can automatically initialise
-$(document).on( 'preInit.dt.dtscroller', function (e, settings) {
- if ( e.namespace !== 'dt' ) {
- return;
- }
-
- var init = settings.oInit.scroller;
- var defaults = DataTable.defaults.scroller;
-
- if ( init || defaults ) {
- var opts = $.extend( {}, init, defaults );
-
- if ( init !== false ) {
- new Scroller( settings, opts );
- }
- }
-} );
-
-
-// Attach Scroller to DataTables so it can be accessed as an 'extra'
-$.fn.dataTable.Scroller = Scroller;
-$.fn.DataTable.Scroller = Scroller;
-
-
-// DataTables 1.10 API method aliases
-var Api = $.fn.dataTable.Api;
-
-Api.register( 'scroller()', function () {
- return this;
-} );
-
-// Undocumented and deprecated - is it actually useful at all?
-Api.register( 'scroller().rowToPixels()', function ( rowIdx, intParse, virtual ) {
- var ctx = this.context;
-
- if ( ctx.length && ctx[0].oScroller ) {
- return ctx[0].oScroller.rowToPixels( rowIdx, intParse, virtual );
- }
- // undefined
-} );
-
-// Undocumented and deprecated - is it actually useful at all?
-Api.register( 'scroller().pixelsToRow()', function ( pixels, intParse, virtual ) {
- var ctx = this.context;
-
- if ( ctx.length && ctx[0].oScroller ) {
- return ctx[0].oScroller.pixelsToRow( pixels, intParse, virtual );
- }
- // undefined
-} );
-
-// `scroller().scrollToRow()` is undocumented and deprecated. Use `scroller.toPosition()
-Api.register( ['scroller().scrollToRow()', 'scroller.toPosition()'], function ( idx, ani ) {
- this.iterator( 'table', function ( ctx ) {
- if ( ctx.oScroller ) {
- ctx.oScroller.scrollToRow( idx, ani );
- }
- } );
-
- return this;
-} );
-
-Api.register( 'row().scrollTo()', function ( ani ) {
- var that = this;
-
- this.iterator( 'row', function ( ctx, rowIdx ) {
- if ( ctx.oScroller ) {
- var displayIdx = that
- .rows( { order: 'applied', search: 'applied' } )
- .indexes()
- .indexOf( rowIdx );
-
- ctx.oScroller.scrollToRow( displayIdx, ani );
- }
- } );
-
- return this;
-} );
-
-Api.register( 'scroller.measure()', function ( redraw ) {
- this.iterator( 'table', function ( ctx ) {
- if ( ctx.oScroller ) {
- ctx.oScroller.measure( redraw );
- }
- } );
-
- return this;
-} );
-
-Api.register( 'scroller.page()', function() {
- var ctx = this.context;
-
- if ( ctx.length && ctx[0].oScroller ) {
- return ctx[0].oScroller.pageInfo();
- }
- // undefined
-} );
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/dataTables.scroller.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/dataTables.scroller.min.js
deleted file mode 100644
index 83c88ab..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/dataTables.scroller.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Scroller 2.1.1
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(o){var e,l;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(s){return o(s,window,document)}):"object"==typeof exports?(e=require("jquery"),l=function(s,t){t.fn.dataTable||require("datatables.net")(s,t)},"undefined"!=typeof window?module.exports=function(s,t){return s=s||window,t=t||e(s),l(s,t),o(t,s,s.document)}:(l(window,e),module.exports=o(e,window,window.document))):o(jQuery,window,document)}(function(f,i,o,a){"use strict";function l(s,t){this instanceof l?(t===a&&(t={}),s=f.fn.dataTable.Api(s),this.s={dt:s.settings()[0],dtApi:s,tableTop:0,tableBottom:0,redrawTop:0,redrawBottom:0,autoHeight:!0,viewportRows:0,stateTO:null,stateSaveThrottle:function(){},drawTO:null,heights:{jump:null,page:null,virtual:null,scroll:null,row:null,viewport:null,labelHeight:0,xbar:0},topRowFloat:0,scrollDrawDiff:null,loaderVisible:!1,forceReposition:!1,baseRowTop:0,baseScrollTop:0,mousedown:!1,lastScrollTop:0},this.s=f.extend(this.s,l.oDefaults,t),this.s.heights.row=this.s.rowHeight,this.dom={force:o.createElement("div"),label:f('0
'),scroller:null,table:null,loader:null},this.s.dt.oScroller||(this.s.dt.oScroller=this).construct()):alert("Scroller warning: Scroller must be initialised with the 'new' keyword.")}var r=f.fn.dataTable,s=(f.extend(l.prototype,{measure:function(s){this.s.autoHeight&&this._calcRowHeight();var t=this.s.heights,o=(t.row&&(t.viewport=this._parseHeight(f(this.dom.scroller).css("max-height")),this.s.viewportRows=parseInt(t.viewport/t.row,10)+1,this.s.dt._iDisplayLength=this.s.viewportRows*this.s.displayBuffer),this.dom.label.outerHeight());t.xbar=this.dom.scroller.offsetHeight-this.dom.scroller.clientHeight,t.labelHeight=o,s!==a&&!s||this.s.dt.oInstance.fnDraw(!1)},pageInfo:function(){var s=this.s.dt,t=this.dom.scroller.scrollTop,s=s.fnRecordsDisplay(),o=Math.ceil(this.pixelsToRow(t+this.s.heights.viewport,!1,this.s.ani));return{start:Math.floor(this.pixelsToRow(t,!1,this.s.ani)),end:sthis.s.redrawBottom||ltable",this.dom.scroller)[0],this.dom.table.style.position="absolute",this.dom.table.style.top="0px",this.dom.table.style.left="0px",f(s.table().container()).addClass("dts DTS"),this.s.loadingIndicator&&(this.dom.loader=f(''+this.s.dt.oLanguage.sLoadingRecords+"
").css("display","none"),f(this.dom.scroller.parentNode).css("position","relative").append(this.dom.loader)),this.dom.label.appendTo(this.dom.scroller),this.s.heights.row&&"auto"!=this.s.heights.row&&(this.s.autoHeight=!1),this.s.ingnoreScroll=!0,f(this.dom.scroller).on("scroll.dt-scroller",function(s){r._scroll.call(r)}),f(this.dom.scroller).on("touchstart.dt-scroller",function(){r._scroll.call(r)}),f(this.dom.scroller).on("mousedown.dt-scroller",function(){r.s.mousedown=!0}).on("mouseup.dt-scroller",function(){r.s.labelVisible=!1,r.s.mousedown=!1,r.dom.label.css("display","none")}),f(i).on("resize.dt-scroller",function(){r.measure(!1),r._info()}),e=!0,l=s.state.loaded(),s.on("stateSaveParams.scroller",function(s,t,o){e&&l?(o.scroller=l.scroller,e=!1,o.scroller&&(r.s.lastScrollTop=o.scroller.scrollTop)):o.scroller={topRow:r.s.topRowFloat,baseScrollTop:r.s.baseScrollTop,baseRowTop:r.s.baseRowTop,scrollTop:r.s.lastScrollTop}}),s.on("stateLoadParams.scroller",function(s,t,o){o.scroller!==a&&r.scrollToRow(o.scroller.topRow)}),l&&l.scroller&&(this.s.topRowFloat=l.scroller.topRow,this.s.baseScrollTop=l.scroller.baseScrollTop,this.s.baseRowTop=l.scroller.baseRowTop),this.measure(!1),r.s.stateSaveThrottle=r.s.dt.oApi._fnThrottle(function(){r.s.dtApi.state.save()},500),s.on("init.scroller",function(){r.measure(!1),r.s.scrollType="jump",r._draw(),s.on("draw.scroller",function(){r._draw()})}),s.on("preDraw.dt.scroller",function(){r._scrollForce()}),s.on("destroy.scroller",function(){f(i).off("resize.dt-scroller"),f(r.dom.scroller).off(".dt-scroller"),f(r.s.dt.nTable).off(".scroller"),f(r.s.dt.nTableWrapper).removeClass("DTS"),f("div.DTS_Loading",r.dom.scroller.parentNode).remove(),r.dom.table.style.position="",r.dom.table.style.top="",r.dom.table.style.left=""})):this.s.dt.oApi._fnLog(this.s.dt,0,"Pagination must be enabled for Scroller")},_calcRowHeight:function(){var s=this.s.dt,t=s.nTable,o=t.cloneNode(!1),e=f(" ").appendTo(o),l=f(''),r=(f("tbody tr:lt(4)",t).clone().appendTo(e),f("tr",e).length);if(1===r)e.prepend(" "),e.append(" ");else for(;r<3;r++)e.append(" ");f("div."+s.oClasses.sScrollBody,l).append(o);s=this.s.dt.nHolding||t.parentNode;f(s).is(":visible")||(s="body"),l.find("input").removeAttr("name"),l.appendTo(s),this.s.heights.row=f("tr",e).eq(1).outerHeight(),l.remove()},_draw:function(){var s=this,t=this.s.heights,o=this.dom.scroller.scrollTop,e=f(this.s.dt.nTable).height(),l=this.s.dt._iDisplayStart,r=this.s.dt._iDisplayLength,i=this.s.dt.fnRecordsDisplay(),a=o+t.viewport,n=(this.s.skip=!0,!this.s.dt.bSorted&&!this.s.dt.bFiltered||0!==l||this.s.dt._drawHold||(this.s.topRowFloat=0),o="jump"===this.s.scrollType?this._domain("virtualToPhysical",this.s.topRowFloat*t.row):o,this.s.baseScrollTop=o,this.s.baseRowTop=this.s.topRowFloat,o-(this.s.topRowFloat-l)*t.row),l=(0===l?n=0:i<=l+r?n=t.scroll-e:n+et.scroll-t.viewport-t.row?t.scroll-t.viewport-t.row:o+l,this.s.skip=!1,s.s.ingnoreScroll&&(this.s.dt.oFeatures.bStateSave&&null!==this.s.dt.oLoadedState&&void 0!==this.s.dt.oLoadedState.scroller?((r=!(!this.s.dt.sAjaxSource&&!s.s.dt.ajax||this.s.dt.oFeatures.bServerSide))&&2<=this.s.dt.iDraw||!r&&1<=this.s.dt.iDraw)&&setTimeout(function(){f(s.dom.scroller).scrollTop(s.s.dt.oLoadedState.scroller.scrollTop),setTimeout(function(){s.s.ingnoreScroll=!1},0)},0):s.s.ingnoreScroll=!1),this.s.dt.oFeatures.bInfo&&setTimeout(function(){s._info.call(s)},0),f(this.s.dt.nTable).triggerHandler("position.dts.dt",n),this.dom.loader&&this.s.loaderVisible&&(this.dom.loader.css("display","none"),this.s.loaderVisible=!1)},_domain:function(s,t){var o,e=this.s.heights,l=1e4;return e.virtual===e.scroll||t=e.virtual-l?(o=e.virtual-t,e.scroll-o):"physicalToVirtual"===s&&t>=e.scroll-l?(o=e.scroll-t,e.virtual-o):(e=l-(o=(e.virtual-l-l)/(e.scroll-l-l))*l,"virtualToPhysical"===s?(t-e)/o:o*t+e)},_info:function(){if(this.s.dt.oFeatures.bInfo){var s=this.s.dt,t=s.oLanguage,o=this.dom.scroller.scrollTop,e=Math.floor(this.pixelsToRow(o,!1,this.s.ani)+1),l=s.fnRecordsTotal(),r=s.fnRecordsDisplay(),o=Math.ceil(this.pixelsToRow(o+this.s.heights.viewport,!1,this.s.ani)),o=ro.viewport?"jump":"cont",this.s.topRowFloat="cont"===this.s.scrollType?this.pixelsToRow(e,!1,!1):this._domain("physicalToVirtual",e)/o.row,this.s.topRowFloat<0&&(this.s.topRowFloat=0),this.s.forceReposition||ethis.s.redrawBottom?(s=Math.ceil((this.s.displayBuffer-1)/2*this.s.viewportRows),s=parseInt(this.s.topRowFloat,10)-s,this.s.forceReposition=!1,s<=0?s=0:s+this.s.dt._iDisplayLength>this.s.dt.fnRecordsDisplay()?(s=this.s.dt.fnRecordsDisplay()-this.s.dt._iDisplayLength)<0&&(s=0):s%2!=0&&s++,(this.s.targetTop=s)!=this.s.dt._iDisplayStart&&(this.s.tableTop=f(this.s.dt.nTable).offset().top,this.s.tableBottom=f(this.s.dt.nTable).height()+this.s.tableTop,s=function(){t.s.dt._iDisplayStart=t.s.targetTop,t.s.dt.oApi._fnDraw(t.s.dt)},this.s.dt.oFeatures.bServerSide?(this.s.forceReposition=!0,clearTimeout(this.s.drawTO),this.s.drawTO=setTimeout(s,this.s.serverWait)):s(),this.dom.loader)&&!this.s.loaderVisible&&(this.dom.loader.css("display","block"),this.s.loaderVisible=!0)):this.s.topRowFloat=this.pixelsToRow(e,!1,!0),this.s.lastScrollTop=e,this.s.stateSaveThrottle(),"jump"===this.s.scrollType&&this.s.mousedown&&(this.s.labelVisible=!0),this.s.labelVisible&&(s=(o.viewport-o.labelHeight-o.xbar)/o.scroll,this.dom.label.html(this.s.dt.fnFormatNumber(parseInt(this.s.topRowFloat,10)+1)).css("top",e+e*s).css("right",10-this.dom.scroller.scrollLeft).css("display","block"))))},_scrollForce:function(){var s=this.s.heights;s.virtual=s.row*this.s.dt.fnRecordsDisplay(),s.scroll=s.virtual,1e6this.s.heights.row?s.scroll+"px":this.s.heights.row+"px"}}),l.oDefaults=l.defaults={boundaryScale:.5,displayBuffer:9,loadingIndicator:!1,rowHeight:"auto",serverWait:200},l.version="2.1.1",f(o).on("preInit.dt.dtscroller",function(s,t){var o,e;"dt"===s.namespace&&(s=t.oInit.scroller,o=r.defaults.scroller,s||o)&&(e=f.extend({},s,o),!1!==s)&&new l(t,e)}),f.fn.dataTable.Scroller=l,f.fn.DataTable.Scroller=l,f.fn.dataTable.Api);return s.register("scroller()",function(){return this}),s.register("scroller().rowToPixels()",function(s,t,o){var e=this.context;if(e.length&&e[0].oScroller)return e[0].oScroller.rowToPixels(s,t,o)}),s.register("scroller().pixelsToRow()",function(s,t,o){var e=this.context;if(e.length&&e[0].oScroller)return e[0].oScroller.pixelsToRow(s,t,o)}),s.register(["scroller().scrollToRow()","scroller.toPosition()"],function(t,o){return this.iterator("table",function(s){s.oScroller&&s.oScroller.scrollToRow(t,o)}),this}),s.register("row().scrollTo()",function(o){var e=this;return this.iterator("row",function(s,t){s.oScroller&&(t=e.rows({order:"applied",search:"applied"}).indexes().indexOf(t),s.oScroller.scrollToRow(t,o))}),this}),s.register("scroller.measure()",function(t){return this.iterator("table",function(s){s.oScroller&&s.oScroller.measure(t)}),this}),s.register("scroller.page()",function(){var s=this.context;if(s.length&&s[0].oScroller)return s[0].oScroller.pageInfo()}),r});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap.js
deleted file mode 100644
index ff13d34..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Bootstrap 3 styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bs', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bs')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap.min.js
deleted file mode 100644
index d8b755a..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bootstrap 3 styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-scroller"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,n){n.fn.dataTable||require("datatables.net-bs")(e,n),n.fn.dataTable.Scroller||require("datatables.net-scroller")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),d(e,n),t(n,0,e.document)}:(d(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap4.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap4.js
deleted file mode 100644
index aec23b1..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap4.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Bootstrap 4 styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bs4', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bs4')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap4.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap4.min.js
deleted file mode 100644
index 825b6bc..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap4.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bootstrap 4 styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-scroller"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,n){n.fn.dataTable||require("datatables.net-bs4")(e,n),n.fn.dataTable.Scroller||require("datatables.net-scroller")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),d(e,n),t(n,0,e.document)}:(d(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap5.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap5.js
deleted file mode 100644
index 8262a4e..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap5.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Bootstrap 5 styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bs5', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bs5')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap5.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap5.min.js
deleted file mode 100644
index 94bad51..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bootstrap5.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bootstrap 5 styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs5","datatables.net-scroller"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,n){n.fn.dataTable||require("datatables.net-bs5")(e,n),n.fn.dataTable.Scroller||require("datatables.net-scroller")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),d(e,n),t(n,0,e.document)}:(d(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bulma.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bulma.js
deleted file mode 100644
index b856f58..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bulma.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Bulma styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-bm', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-bm')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bulma.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bulma.min.js
deleted file mode 100644
index b242775..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.bulma.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Bulma styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bm","datatables.net-scroller"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,n){n.fn.dataTable||require("datatables.net-bm")(e,n),n.fn.dataTable.Scroller||require("datatables.net-scroller")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),d(e,n),t(n,0,e.document)}:(d(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.dataTables.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.dataTables.js
deleted file mode 100644
index 5b808e2..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.dataTables.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! DataTables styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-dt', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-dt')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.dataTables.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.dataTables.min.js
deleted file mode 100644
index f2ef3b3..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.dataTables.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! DataTables styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(n){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-dt","datatables.net-scroller"],function(e){return n(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,t){t.fn.dataTable||require("datatables.net-dt")(e,t),t.fn.dataTable.Scroller||require("datatables.net-scroller")(e,t)},"undefined"!=typeof window?module.exports=function(e,t){return e=e||window,t=t||o(e),d(e,t),n(t,0,e.document)}:(d(window,o),module.exports=n(o,window,window.document))):n(jQuery,window,document)}(function(e,t,n,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.foundation.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.foundation.js
deleted file mode 100644
index accbcc4..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.foundation.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Foundation styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-zf', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-zf')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.foundation.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.foundation.min.js
deleted file mode 100644
index a279177..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.foundation.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Foundation styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-scroller"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,n){n.fn.dataTable||require("datatables.net-zf")(e,n),n.fn.dataTable.Scroller||require("datatables.net-scroller")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),d(e,n),t(n,0,e.document)}:(d(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.jqueryui.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.jqueryui.js
deleted file mode 100644
index c17385e..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.jqueryui.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! jQuery UI styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-jqui', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-jqui')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.jqueryui.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.jqueryui.min.js
deleted file mode 100644
index 2222ce4..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.jqueryui.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery UI styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-scroller"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,n){n.fn.dataTable||require("datatables.net-jqui")(e,n),n.fn.dataTable.Scroller||require("datatables.net-scroller")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),d(e,n),t(n,0,e.document)}:(d(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.semanticui.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.semanticui.js
deleted file mode 100644
index 6d3ae53..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.semanticui.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! Semanic UI styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net-se', 'datatables.net-scroller'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net-se')(root, $);
- }
-
- if ( ! $.fn.dataTable.Scroller ) {
- require('datatables.net-scroller')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.semanticui.min.js b/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.semanticui.min.js
deleted file mode 100644
index 12c2d3c..0000000
--- a/public/assets/js/DataTables/Scroller-2.1.1/js/scroller.semanticui.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Semanic UI styling wrapper for Scroller
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(t){var o,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-se","datatables.net-scroller"],function(e){return t(e,window,document)}):"object"==typeof exports?(o=require("jquery"),d=function(e,n){n.fn.dataTable||require("datatables.net-se")(e,n),n.fn.dataTable.Scroller||require("datatables.net-scroller")(e,n)},"undefined"!=typeof window?module.exports=function(e,n){return e=e||window,n=n||o(e),d(e,n),t(n,0,e.document)}:(d(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(e,n,t,o){"use strict";return e.fn.dataTable});
\ No newline at end of file
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap.css
deleted file mode 100644
index 04c83e3..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap.css
+++ /dev/null
@@ -1,61 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(0, 136, 204, 0.9);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -6px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap.min.css
deleted file mode 100644
index 9cfdb16..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(0, 136, 204, 0.9);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap4.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap4.css
deleted file mode 100644
index b9218af..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap4.css
+++ /dev/null
@@ -1,61 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(2, 117, 216, 0.9);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -2px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap4.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap4.min.css
deleted file mode 100644
index 7543c28..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap4.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(2, 117, 216, 0.9);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-2px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap5.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap5.css
deleted file mode 100644
index d2128d3..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap5.css
+++ /dev/null
@@ -1,64 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(13, 110, 253, 0.9);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -5px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
-table.dataTable.table-sm tbody td.select-checkbox::before {
- margin-top: -9px;
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap5.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap5.min.css
deleted file mode 100644
index 2d95ccf..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bootstrap5.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(13, 110, 253, 0.9);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-5px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable.table-sm tbody td.select-checkbox::before{margin-top:-9px}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bulma.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bulma.css
deleted file mode 100644
index ef5c4d5..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bulma.css
+++ /dev/null
@@ -1,61 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(0, 209, 178, 0.9);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -2px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.bulma.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.bulma.min.css
deleted file mode 100644
index eeabec8..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.bulma.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(0, 209, 178, 0.9);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-2px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.dataTables.css b/public/assets/js/DataTables/Select-1.6.2/css/select.dataTables.css
deleted file mode 100644
index 26dd64a..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.dataTables.css
+++ /dev/null
@@ -1,61 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(13, 110, 253, 0.9);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -6px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.dataTables.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.dataTables.min.css
deleted file mode 100644
index fb2791a..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(13, 110, 253, 0.9);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.foundation.css b/public/assets/js/DataTables/Select-1.6.2/css/select.foundation.css
deleted file mode 100644
index 74ac2f3..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.foundation.css
+++ /dev/null
@@ -1,61 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(0, 137, 182, 0.9);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -6px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.foundation.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.foundation.min.css
deleted file mode 100644
index 624d69f..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.foundation.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(0, 137, 182, 0.9);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.jqueryui.css b/public/assets/js/DataTables/Select-1.6.2/css/select.jqueryui.css
deleted file mode 100644
index 26dd64a..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.jqueryui.css
+++ /dev/null
@@ -1,61 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(13, 110, 253, 0.9);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -6px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.jqueryui.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.jqueryui.min.css
deleted file mode 100644
index fb2791a..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.jqueryui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(13, 110, 253, 0.9);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.semanticui.css b/public/assets/js/DataTables/Select-1.6.2/css/select.semanticui.css
deleted file mode 100644
index 4f5320c..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.semanticui.css
+++ /dev/null
@@ -1,61 +0,0 @@
-table.dataTable > tbody > tr > .selected {
- background-color: rgba(0, 0, 0, 0.05);
- color: white;
-}
-table.dataTable > tbody > tr > td.select-checkbox,
-table.dataTable > tbody > tr > th.select-checkbox {
- position: relative;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,
-table.dataTable > tbody > tr > th.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:after {
- display: block;
- position: absolute;
- top: 1.2em;
- left: 50%;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
-}
-table.dataTable > tbody > tr > td.select-checkbox:before,
-table.dataTable > tbody > tr > th.select-checkbox:before {
- content: " ";
- margin-top: -3px;
- margin-left: -6px;
- border: 1px solid black;
- border-radius: 3px;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:before,
-table.dataTable > tbody > tr.selected > th.select-checkbox:before {
- border: 1px solid white;
-}
-table.dataTable > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable > tbody > tr.selected > th.select-checkbox:after {
- content: "✓";
- font-size: 20px;
- margin-top: -19px;
- margin-left: -6px;
- text-align: center;
- text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-table.dataTable.compact > tbody > tr > td.select-checkbox:before,
-table.dataTable.compact > tbody > tr > th.select-checkbox:before {
- margin-top: -12px;
-}
-table.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,
-table.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {
- margin-top: -16px;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
- margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
- div.dataTables_wrapper span.select-info,
- div.dataTables_wrapper span.select-item {
- margin-left: 0;
- display: block;
- }
-}
diff --git a/public/assets/js/DataTables/Select-1.6.2/css/select.semanticui.min.css b/public/assets/js/DataTables/Select-1.6.2/css/select.semanticui.min.css
deleted file mode 100644
index d6fdfe4..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/css/select.semanticui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable>tbody>tr>.selected{background-color:rgba(0, 0, 0, 0.05);color:white}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-3px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid white}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-19px;margin-left:-6px;text-align:center;text-shadow:1px 1px #b0bed9,-1px -1px #b0bed9,1px -1px #b0bed9,-1px 1px #b0bed9}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/public/assets/js/DataTables/Select-1.6.2/js/dataTables.select.js b/public/assets/js/DataTables/Select-1.6.2/js/dataTables.select.js
deleted file mode 100644
index 7bb9e00..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/js/dataTables.select.js
+++ /dev/null
@@ -1,1366 +0,0 @@
-/*! Select for DataTables 1.6.2
- * © SpryMedia Ltd - datatables.net/license/mit
- */
-
-(function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- var jq = require('jquery');
- var cjsRequires = function (root, $) {
- if ( ! $.fn.dataTable ) {
- require('datatables.net')(root, $);
- }
- };
-
- if (typeof window !== 'undefined') {
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = jq( root );
- }
-
- cjsRequires( root, $ );
- return factory( $, root, root.document );
- };
- }
- else {
- cjsRequires( window, jq );
- module.exports = factory( jq, window, window.document );
- }
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-
-// Version information for debugger
-DataTable.select = {};
-
-DataTable.select.version = '1.6.2';
-
-DataTable.select.init = function ( dt ) {
- var ctx = dt.settings()[0];
-
- if (ctx._select) {
- return;
- }
-
- var savedSelected = dt.state.loaded();
-
- var selectAndSave = function(e, settings, data) {
- if(data === null || data.select === undefined) {
- return;
- }
-
- // Clear any currently selected rows, before restoring state
- // None will be selected on first initialisation
- if (dt.rows({selected: true}).any()) {
- dt.rows().deselect();
- }
- if (data.select.rows !== undefined) {
- dt.rows(data.select.rows).select();
- }
-
- if (dt.columns({selected: true}).any()) {
- dt.columns().deselect();
- }
- if (data.select.columns !== undefined) {
- dt.columns(data.select.columns).select();
- }
-
- if (dt.cells({selected: true}).any()) {
- dt.cells().deselect();
- }
- if (data.select.cells !== undefined) {
- for(var i = 0; i < data.select.cells.length; i++) {
- dt.cell(data.select.cells[i].row, data.select.cells[i].column).select();
- }
- }
-
- dt.state.save();
- }
-
- dt
- .on('stateSaveParams', function(e, settings, data) {
- data.select = {};
- data.select.rows = dt.rows({selected:true}).ids(true).toArray();
- data.select.columns = dt.columns({selected:true})[0];
- data.select.cells = dt.cells({selected:true})[0].map(function(coords) {
- return {row: dt.row(coords.row).id(true), column: coords.column}
- });
- })
- .on('stateLoadParams', selectAndSave)
- .one('init', function() {
- selectAndSave(undefined, undefined, savedSelected);
- });
-
- var init = ctx.oInit.select;
- var defaults = DataTable.defaults.select;
- var opts = init === undefined ?
- defaults :
- init;
-
- // Set defaults
- var items = 'row';
- var style = 'api';
- var blurable = false;
- var toggleable = true;
- var info = true;
- var selector = 'td, th';
- var className = 'selected';
- var setStyle = false;
-
- ctx._select = {};
-
- // Initialisation customisations
- if ( opts === true ) {
- style = 'os';
- setStyle = true;
- }
- else if ( typeof opts === 'string' ) {
- style = opts;
- setStyle = true;
- }
- else if ( $.isPlainObject( opts ) ) {
- if ( opts.blurable !== undefined ) {
- blurable = opts.blurable;
- }
-
- if ( opts.toggleable !== undefined ) {
- toggleable = opts.toggleable;
- }
-
- if ( opts.info !== undefined ) {
- info = opts.info;
- }
-
- if ( opts.items !== undefined ) {
- items = opts.items;
- }
-
- if ( opts.style !== undefined ) {
- style = opts.style;
- setStyle = true;
- }
- else {
- style = 'os';
- setStyle = true;
- }
-
- if ( opts.selector !== undefined ) {
- selector = opts.selector;
- }
-
- if ( opts.className !== undefined ) {
- className = opts.className;
- }
- }
-
- dt.select.selector( selector );
- dt.select.items( items );
- dt.select.style( style );
- dt.select.blurable( blurable );
- dt.select.toggleable( toggleable );
- dt.select.info( info );
- ctx._select.className = className;
-
-
- // Sort table based on selected rows. Requires Select Datatables extension
- $.fn.dataTable.ext.order['select-checkbox'] = function ( settings, col ) {
- return this.api().column( col, {order: 'index'} ).nodes().map( function ( td ) {
- if ( settings._select.items === 'row' ) {
- return $( td ).parent().hasClass( settings._select.className );
- } else if ( settings._select.items === 'cell' ) {
- return $( td ).hasClass( settings._select.className );
- }
- return false;
- });
- };
-
- // If the init options haven't enabled select, but there is a selectable
- // class name, then enable
- if ( ! setStyle && $( dt.table().node() ).hasClass( 'selectable' ) ) {
- dt.select.style( 'os' );
- }
-};
-
-/*
-
-Select is a collection of API methods, event handlers, event emitters and
-buttons (for the `Buttons` extension) for DataTables. It provides the following
-features, with an overview of how they are implemented:
-
-## Selection of rows, columns and cells. Whether an item is selected or not is
- stored in:
-
-* rows: a `_select_selected` property which contains a boolean value of the
- DataTables' `aoData` object for each row
-* columns: a `_select_selected` property which contains a boolean value of the
- DataTables' `aoColumns` object for each column
-* cells: a `_selected_cells` property which contains an array of boolean values
- of the `aoData` object for each row. The array is the same length as the
- columns array, with each element of it representing a cell.
-
-This method of using boolean flags allows Select to operate when nodes have not
-been created for rows / cells (DataTables' defer rendering feature).
-
-## API methods
-
-A range of API methods are available for triggering selection and de-selection
-of rows. Methods are also available to configure the selection events that can
-be triggered by an end user (such as which items are to be selected). To a large
-extent, these of API methods *is* Select. It is basically a collection of helper
-functions that can be used to select items in a DataTable.
-
-Configuration of select is held in the object `_select` which is attached to the
-DataTables settings object on initialisation. Select being available on a table
-is not optional when Select is loaded, but its default is for selection only to
-be available via the API - so the end user wouldn't be able to select rows
-without additional configuration.
-
-The `_select` object contains the following properties:
-
-```
-{
- items:string - Can be `rows`, `columns` or `cells`. Defines what item
- will be selected if the user is allowed to activate row
- selection using the mouse.
- style:string - Can be `none`, `single`, `multi` or `os`. Defines the
- interaction style when selecting items
- blurable:boolean - If row selection can be cleared by clicking outside of
- the table
- toggleable:boolean - If row selection can be cancelled by repeated clicking
- on the row
- info:boolean - If the selection summary should be shown in the table
- information elements
-}
-```
-
-In addition to the API methods, Select also extends the DataTables selector
-options for rows, columns and cells adding a `selected` option to the selector
-options object, allowing the developer to select only selected items or
-unselected items.
-
-## Mouse selection of items
-
-Clicking on items can be used to select items. This is done by a simple event
-handler that will select the items using the API methods.
-
- */
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Local functions
- */
-
-/**
- * Add one or more cells to the selection when shift clicking in OS selection
- * style cell selection.
- *
- * Cell range is more complicated than row and column as we want to select
- * in the visible grid rather than by index in sequence. For example, if you
- * click first in cell 1-1 and then shift click in 2-2 - cells 1-2 and 2-1
- * should also be selected (and not 1-3, 1-4. etc)
- *
- * @param {DataTable.Api} dt DataTable
- * @param {object} idx Cell index to select to
- * @param {object} last Cell index to select from
- * @private
- */
-function cellRange( dt, idx, last )
-{
- var indexes;
- var columnIndexes;
- var rowIndexes;
- var selectColumns = function ( start, end ) {
- if ( start > end ) {
- var tmp = end;
- end = start;
- start = tmp;
- }
-
- var record = false;
- return dt.columns( ':visible' ).indexes().filter( function (i) {
- if ( i === start ) {
- record = true;
- }
-
- if ( i === end ) { // not else if, as start might === end
- record = false;
- return true;
- }
-
- return record;
- } );
- };
-
- var selectRows = function ( start, end ) {
- var indexes = dt.rows( { search: 'applied' } ).indexes();
-
- // Which comes first - might need to swap
- if ( indexes.indexOf( start ) > indexes.indexOf( end ) ) {
- var tmp = end;
- end = start;
- start = tmp;
- }
-
- var record = false;
- return indexes.filter( function (i) {
- if ( i === start ) {
- record = true;
- }
-
- if ( i === end ) {
- record = false;
- return true;
- }
-
- return record;
- } );
- };
-
- if ( ! dt.cells( { selected: true } ).any() && ! last ) {
- // select from the top left cell to this one
- columnIndexes = selectColumns( 0, idx.column );
- rowIndexes = selectRows( 0 , idx.row );
- }
- else {
- // Get column indexes between old and new
- columnIndexes = selectColumns( last.column, idx.column );
- rowIndexes = selectRows( last.row , idx.row );
- }
-
- indexes = dt.cells( rowIndexes, columnIndexes ).flatten();
-
- if ( ! dt.cells( idx, { selected: true } ).any() ) {
- // Select range
- dt.cells( indexes ).select();
- }
- else {
- // Deselect range
- dt.cells( indexes ).deselect();
- }
-}
-
-/**
- * Disable mouse selection by removing the selectors
- *
- * @param {DataTable.Api} dt DataTable to remove events from
- * @private
- */
-function disableMouseSelection( dt )
-{
- var ctx = dt.settings()[0];
- var selector = ctx._select.selector;
-
- $( dt.table().container() )
- .off( 'mousedown.dtSelect', selector )
- .off( 'mouseup.dtSelect', selector )
- .off( 'click.dtSelect', selector );
-
- $('body').off( 'click.dtSelect' + _safeId(dt.table().node()) );
-}
-
-/**
- * Attach mouse listeners to the table to allow mouse selection of items
- *
- * @param {DataTable.Api} dt DataTable to remove events from
- * @private
- */
-function enableMouseSelection ( dt )
-{
- var container = $( dt.table().container() );
- var ctx = dt.settings()[0];
- var selector = ctx._select.selector;
- var matchSelection;
-
- container
- .on( 'mousedown.dtSelect', selector, function(e) {
- // Disallow text selection for shift clicking on the table so multi
- // element selection doesn't look terrible!
- if ( e.shiftKey || e.metaKey || e.ctrlKey ) {
- container
- .css( '-moz-user-select', 'none' )
- .one('selectstart.dtSelect', selector, function () {
- return false;
- } );
- }
-
- if ( window.getSelection ) {
- matchSelection = window.getSelection();
- }
- } )
- .on( 'mouseup.dtSelect', selector, function() {
- // Allow text selection to occur again, Mozilla style (tested in FF
- // 35.0.1 - still required)
- container.css( '-moz-user-select', '' );
- } )
- .on( 'click.dtSelect', selector, function ( e ) {
- var items = dt.select.items();
- var idx;
-
- // If text was selected (click and drag), then we shouldn't change
- // the row's selected state
- if ( matchSelection ) {
- var selection = window.getSelection();
-
- // If the element that contains the selection is not in the table, we can ignore it
- // This can happen if the developer selects text from the click event
- if ( ! selection.anchorNode || $(selection.anchorNode).closest('table')[0] === dt.table().node() ) {
- if ( selection !== matchSelection ) {
- return;
- }
- }
- }
-
- var ctx = dt.settings()[0];
- var wrapperClass = dt.settings()[0].oClasses.sWrapper.trim().replace(/ +/g, '.');
-
- // Ignore clicks inside a sub-table
- if ( $(e.target).closest('div.'+wrapperClass)[0] != dt.table().container() ) {
- return;
- }
-
- var cell = dt.cell( $(e.target).closest('td, th') );
-
- // Check the cell actually belongs to the host DataTable (so child
- // rows, etc, are ignored)
- if ( ! cell.any() ) {
- return;
- }
-
- var event = $.Event('user-select.dt');
- eventTrigger( dt, event, [ items, cell, e ] );
-
- if ( event.isDefaultPrevented() ) {
- return;
- }
-
- var cellIndex = cell.index();
- if ( items === 'row' ) {
- idx = cellIndex.row;
- typeSelect( e, dt, ctx, 'row', idx );
- }
- else if ( items === 'column' ) {
- idx = cell.index().column;
- typeSelect( e, dt, ctx, 'column', idx );
- }
- else if ( items === 'cell' ) {
- idx = cell.index();
- typeSelect( e, dt, ctx, 'cell', idx );
- }
-
- ctx._select_lastCell = cellIndex;
- } );
-
- // Blurable
- $('body').on( 'click.dtSelect' + _safeId(dt.table().node()), function ( e ) {
- if ( ctx._select.blurable ) {
- // If the click was inside the DataTables container, don't blur
- if ( $(e.target).parents().filter( dt.table().container() ).length ) {
- return;
- }
-
- // Ignore elements which have been removed from the DOM (i.e. paging
- // buttons)
- if ( $(e.target).parents('html').length === 0 ) {
- return;
- }
-
- // Don't blur in Editor form
- if ( $(e.target).parents('div.DTE').length ) {
- return;
- }
-
- var event = $.Event('select-blur.dt');
- eventTrigger( dt, event, [ e.target, e ] );
-
- if ( event.isDefaultPrevented() ) {
- return;
- }
-
- clear( ctx, true );
- }
- } );
-}
-
-/**
- * Trigger an event on a DataTable
- *
- * @param {DataTable.Api} api DataTable to trigger events on
- * @param {boolean} selected true if selected, false if deselected
- * @param {string} type Item type acting on
- * @param {boolean} any Require that there are values before
- * triggering
- * @private
- */
-function eventTrigger ( api, type, args, any )
-{
- if ( any && ! api.flatten().length ) {
- return;
- }
-
- if ( typeof type === 'string' ) {
- type = type +'.dt';
- }
-
- args.unshift( api );
-
- $(api.table().node()).trigger( type, args );
-}
-
-/**
- * Update the information element of the DataTable showing information about the
- * items selected. This is done by adding tags to the existing text
- *
- * @param {DataTable.Api} api DataTable to update
- * @private
- */
-function info ( api )
-{
- var ctx = api.settings()[0];
-
- if ( ! ctx._select.info || ! ctx.aanFeatures.i ) {
- return;
- }
-
- if ( api.select.style() === 'api' ) {
- return;
- }
-
- var rows = api.rows( { selected: true } ).flatten().length;
- var columns = api.columns( { selected: true } ).flatten().length;
- var cells = api.cells( { selected: true } ).flatten().length;
-
- var add = function ( el, name, num ) {
- el.append( $(' ').append( api.i18n(
- 'select.'+name+'s',
- { _: '%d '+name+'s selected', 0: '', 1: '1 '+name+' selected' },
- num
- ) ) );
- };
-
- // Internal knowledge of DataTables to loop over all information elements
- $.each( ctx.aanFeatures.i, function ( i, el ) {
- el = $(el);
-
- var output = $(' ');
- add( output, 'row', rows );
- add( output, 'column', columns );
- add( output, 'cell', cells );
-
- var exisiting = el.children('span.select-info');
- if ( exisiting.length ) {
- exisiting.remove();
- }
-
- if ( output.text() !== '' ) {
- el.append( output );
- }
- } );
-}
-
-/**
- * Initialisation of a new table. Attach event handlers and callbacks to allow
- * Select to operate correctly.
- *
- * This will occur _after_ the initial DataTables initialisation, although
- * before Ajax data is rendered, if there is ajax data
- *
- * @param {DataTable.settings} ctx Settings object to operate on
- * @private
- */
-function init ( ctx ) {
- var api = new DataTable.Api( ctx );
- ctx._select_init = true;
-
- // Row callback so that classes can be added to rows and cells if the item
- // was selected before the element was created. This will happen with the
- // `deferRender` option enabled.
- //
- // This method of attaching to `aoRowCreatedCallback` is a hack until
- // DataTables has proper events for row manipulation If you are reviewing
- // this code to create your own plug-ins, please do not do this!
- ctx.aoRowCreatedCallback.push( {
- fn: function ( row, data, index ) {
- var i, ien;
- var d = ctx.aoData[ index ];
-
- // Row
- if ( d._select_selected ) {
- $( row ).addClass( ctx._select.className );
- }
-
- // Cells and columns - if separated out, we would need to do two
- // loops, so it makes sense to combine them into a single one
- for ( i=0, ien=ctx.aoColumns.length ; i idx2 ) {
- var tmp = idx2;
- idx2 = idx1;
- idx1 = tmp;
- }
-
- indexes.splice( idx2+1, indexes.length );
- indexes.splice( 0, idx1 );
- }
-
- if ( ! dt[type]( idx, { selected: true } ).any() ) {
- // Select range
- dt[type+'s']( indexes ).select();
- }
- else {
- // Deselect range - need to keep the clicked on row selected
- indexes.splice( $.inArray( idx, indexes ), 1 );
- dt[type+'s']( indexes ).deselect();
- }
-}
-
-/**
- * Clear all selected items
- *
- * @param {DataTable.settings} ctx Settings object of the host DataTable
- * @param {boolean} [force=false] Force the de-selection to happen, regardless
- * of selection style
- * @private
- */
-function clear( ctx, force )
-{
- if ( force || ctx._select.style === 'single' ) {
- var api = new DataTable.Api( ctx );
-
- api.rows( { selected: true } ).deselect();
- api.columns( { selected: true } ).deselect();
- api.cells( { selected: true } ).deselect();
- }
-}
-
-/**
- * Select items based on the current configuration for style and items.
- *
- * @param {object} e Mouse event object
- * @param {DataTables.Api} dt DataTable
- * @param {DataTable.settings} ctx Settings object of the host DataTable
- * @param {string} type Items to select
- * @param {int|object} idx Index of the item to select
- * @private
- */
-function typeSelect ( e, dt, ctx, type, idx )
-{
- var style = dt.select.style();
- var toggleable = dt.select.toggleable();
- var isSelected = dt[type]( idx, { selected: true } ).any();
-
- if ( isSelected && ! toggleable ) {
- return;
- }
-
- if ( style === 'os' ) {
- if ( e.ctrlKey || e.metaKey ) {
- // Add or remove from the selection
- dt[type]( idx ).select( ! isSelected );
- }
- else if ( e.shiftKey ) {
- if ( type === 'cell' ) {
- cellRange( dt, idx, ctx._select_lastCell || null );
- }
- else {
- rowColumnRange( dt, type, idx, ctx._select_lastCell ?
- ctx._select_lastCell[type] :
- null
- );
- }
- }
- else {
- // No cmd or shift click - deselect if selected, or select
- // this row only
- var selected = dt[type+'s']( { selected: true } );
-
- if ( isSelected && selected.flatten().length === 1 ) {
- dt[type]( idx ).deselect();
- }
- else {
- selected.deselect();
- dt[type]( idx ).select();
- }
- }
- } else if ( style == 'multi+shift' ) {
- if ( e.shiftKey ) {
- if ( type === 'cell' ) {
- cellRange( dt, idx, ctx._select_lastCell || null );
- }
- else {
- rowColumnRange( dt, type, idx, ctx._select_lastCell ?
- ctx._select_lastCell[type] :
- null
- );
- }
- }
- else {
- dt[ type ]( idx ).select( ! isSelected );
- }
- }
- else {
- dt[ type ]( idx ).select( ! isSelected );
- }
-}
-
-function _safeId( node ) {
- return node.id.replace(/[^a-zA-Z0-9\-\_]/g, '-');
-}
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables selectors
- */
-
-// row and column are basically identical just assigned to different properties
-// and checking a different array, so we can dynamically create the functions to
-// reduce the code size
-$.each( [
- { type: 'row', prop: 'aoData' },
- { type: 'column', prop: 'aoColumns' }
-], function ( i, o ) {
- DataTable.ext.selector[ o.type ].push( function ( settings, opts, indexes ) {
- var selected = opts.selected;
- var data;
- var out = [];
-
- if ( selected !== true && selected !== false ) {
- return indexes;
- }
-
- for ( var i=0, ien=indexes.length ; i 0 );
- } );
-
- this.disable();
- },
- destroy: function ( dt, node, config ) {
- dt.off( config._eventNamespace );
- }
- },
- showSelected: {
- text: i18n( 'showSelected', 'Show only selected' ),
- className: 'buttons-show-selected',
- action: function (e, dt, node, conf) {
- // Works by having a filtering function which will reduce to the selected
- // items only. So we can re-reference the function it gets stored in the
- // `conf` object
- if (conf._filter) {
- var idx = DataTable.ext.search.indexOf(conf._filter);
-
- if (idx !== -1) {
- DataTable.ext.search.splice(idx, 1);
- conf._filter = null;
- }
-
- this.active(false);
- }
- else {
- var fn = function (s, data, idx) {
- // Need to be sure we are operating on our table!
- if (s !== dt.settings()[0]) {
- return true;
- }
-
- let row = s.aoData[idx];
-
- return row._select_selected;
- }
-
- conf._filter = fn;
- DataTable.ext.search.push(fn);
-
- this.active(true);
- }
-
- dt.draw();
- }
- }
-} );
-
-$.each( [ 'Row', 'Column', 'Cell' ], function ( i, item ) {
- var lc = item.toLowerCase();
-
- DataTable.ext.buttons[ 'select'+item+'s' ] = {
- text: i18n( 'select'+item+'s', 'Select '+lc+'s' ),
- className: 'buttons-select-'+lc+'s',
- action: function () {
- this.select.items( lc );
- },
- init: function ( dt ) {
- var that = this;
-
- dt.on( 'selectItems.dt.DT', function ( e, ctx, items ) {
- that.active( items === lc );
- } );
- }
- };
-} );
-
-
-$.fn.DataTable.select = DataTable.select;
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Initialisation
- */
-
-// DataTables creation - check if select has been defined in the options. Note
-// this required that the table be in the document! If it isn't then something
-// needs to trigger this method unfortunately. The next major release of
-// DataTables will rework the events and address this.
-$(document).on( 'preInit.dt.dtSelect', function (e, ctx) {
- if ( e.namespace !== 'dt' ) {
- return;
- }
-
- DataTable.select.init( new DataTable.Api( ctx ) );
-} );
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/Select-1.6.2/js/dataTables.select.min.js b/public/assets/js/DataTables/Select-1.6.2/js/dataTables.select.min.js
deleted file mode 100644
index 46031d4..0000000
--- a/public/assets/js/DataTables/Select-1.6.2/js/dataTables.select.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Select for DataTables 1.6.2
- * © SpryMedia Ltd - datatables.net/license/mit
- */
-!function(l){var s,c;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return l(e,window,document)}):"object"==typeof exports?(s=require("jquery"),c=function(e,t){t.fn.dataTable||require("datatables.net")(e,t)},"undefined"!=typeof window?module.exports=function(e,t){return e=e||window,t=t||s(e),c(e,t),l(t,e,e.document)}:(c(window,s),module.exports=l(s,window,window.document))):l(jQuery,window,document)}(function(m,i,e,h){"use strict";var _=m.fn.dataTable;function r(n,e,t){function l(t,l){ls.indexOf(l)&&(e=l,l=t,t=e),!1);return s.filter(function(e){return e===t&&(c=!0),e===l?!(c=!1):c})}var c,t=n.cells({selected:!0}).any()||t?(c=l(t.column,e.column),s(t.row,e.row)):(c=l(0,e.column),s(0,e.row)),t=n.cells(t,c).flatten();n.cells(e,{selected:!0}).any()?n.cells(t).deselect():n.cells(t).select()}function s(e){var t=e.settings()[0]._select.selector;m(e.table().container()).off("mousedown.dtSelect",t).off("mouseup.dtSelect",t).off("click.dtSelect",t),m("body").off("click.dtSelect"+p(e.table().node()))}function c(o){var a,t=m(o.table().container()),l=o.settings()[0],s=l._select.selector;t.on("mousedown.dtSelect",s,function(e){(e.shiftKey||e.metaKey||e.ctrlKey)&&t.css("-moz-user-select","none").one("selectstart.dtSelect",s,function(){return!1}),i.getSelection&&(a=i.getSelection())}).on("mouseup.dtSelect",s,function(){t.css("-moz-user-select","")}).on("click.dtSelect",s,function(e){var t,l=o.select.items();if(a){var s=i.getSelection();if((!s.anchorNode||m(s.anchorNode).closest("table")[0]===o.table().node())&&s!==a)return}var c,s=o.settings()[0],n=o.settings()[0].oClasses.sWrapper.trim().replace(/ +/g,".");m(e.target).closest("div."+n)[0]==o.table().container()&&(n=o.cell(m(e.target).closest("td, th"))).any()&&(c=m.Event("user-select.dt"),u(o,c,[l,n,e]),c.isDefaultPrevented()||(c=n.index(),"row"===l?(t=c.row,w(e,o,s,"row",t)):"column"===l?(t=n.index().column,w(e,o,s,"column",t)):"cell"===l&&(t=n.index(),w(e,o,s,"cell",t)),s._select_lastCell=c))}),m("body").on("click.dtSelect"+p(o.table().node()),function(e){var t;!l._select.blurable||m(e.target).parents().filter(o.table().container()).length||0===m(e.target).parents("html").length||m(e.target).parents("div.DTE").length||(t=m.Event("select-blur.dt"),u(o,t,[e.target,e]),t.isDefaultPrevented())||f(l,!0)})}function u(e,t,l,s){s&&!e.flatten().length||("string"==typeof t&&(t+=".dt"),l.unshift(e),m(e.table().node()).trigger(t,l))}function n(o){var i=new _.Api(o);o._select_init=!0,o.aoRowCreatedCallback.push({fn:function(e,t,l){var s,c,n=o.aoData[l];for(n._select_selected&&m(e).addClass(o._select.className),s=0,c=o.aoColumns.length;s ').append(s.i18n("select."+t+"s",{_:"%d "+t+"s selected",0:"",1:"1 "+t+" selected"},l)))},m.each(e.aanFeatures.i,function(e,t){t=m(t);var l=m(' '),s=(a(l,"row",c),a(l,"column",n),a(l,"cell",o),t.children("span.select-info"));s.length&&s.remove(),""!==l.text()&&t.append(l)})),i.state.save()}),i.on("destroy.dtSelect",function(){m(i.rows({selected:!0}).nodes()).removeClass(i.settings()[0]._select.className),s(i),i.off(".dtSelect"),m("body").off(".dtSelect"+p(i.table().node()))})}function d(e,t,l,s){var c,n=e[t+"s"]({search:"applied"}).indexes(),s=m.inArray(s,n),o=m.inArray(l,n);e[t+"s"]({selected:!0}).any()||-1!==s?(o '),
- closeButton: $$2('x
'),
- confirmation: $$2('
'),
- confirmationButton: $$2(''),
- confirmationTitleRow: $$2('
'),
- dtContainer: $$2(this.s.dt.table().container()),
- duplicateError: $$2('' +
- this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError) +
- ' '),
- emptyError: $$2('' +
- this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError) +
- ' '),
- removeContents: $$2('' +
- this.s.dt
- .i18n('stateRestore.removeConfirm', this.c.i18n.removeConfirm)
- .replace(/%s/g, this.s.identifier) +
- '
'),
- removeError: $$2('' +
- this.s.dt.i18n('stateRestore.removeError', this.c.i18n.removeError) +
- ' '),
- removeTitle: $$2('' +
- this.s.dt.i18n('stateRestore.removeTitle', this.c.i18n.removeTitle) +
- ' '),
- renameContents: $$2('' +
- '' +
- this.s.dt
- .i18n('stateRestore.renameLabel', this.c.i18n.renameLabel)
- .replace(/%s/g, this.s.identifier) +
- ' ' +
- '
'),
- renameInput: $$2(' '),
- renameTitle: $$2('' +
- this.s.dt.i18n('stateRestore.renameTitle', this.c.i18n.renameTitle) +
- ' ')
- };
- // When a StateRestore instance is created the current state of the table should also be saved.
- this.save(state, successCallback);
- }
- /**
- * Removes a state from storage and then triggers the dtsr-remove event
- * so that the StateRestoreCollection class can remove it's references as well.
- *
- * @param skipModal Flag to indicate if the modal should be skipped or not
- */
- StateRestore.prototype.remove = function (skipModal) {
- var _a;
- var _this = this;
- if (skipModal === void 0) { skipModal = false; }
- // Check if removal of states is allowed
- if (!this.c.remove) {
- return false;
- }
- var removeFunction;
- var ajaxData = {
- action: 'remove',
- stateRestore: (_a = {},
- _a[this.s.identifier] = this.s.savedState,
- _a)
- };
- var successCallback = function () {
- _this.dom.confirmation.trigger('dtsr-remove');
- $$2(_this.s.dt.table().node()).trigger('stateRestore-change');
- _this.dom.background.click();
- _this.dom.confirmation.remove();
- $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });
- _this.dom.confirmationButton.off('click');
- };
- // If the remove is not happening over ajax remove it from local storage and then trigger the event
- if (!this.c.ajax) {
- removeFunction = function () {
- try {
- localStorage.removeItem('DataTables_stateRestore_' + _this.s.identifier + '_' + location.pathname +
- (_this.s.tableId ? '_' + _this.s.tableId : ''));
- successCallback();
- }
- catch (e) {
- _this.dom.confirmation.children('.' + _this.classes.modalError).remove();
- _this.dom.confirmation.append(_this.dom.removeError);
- return 'remove';
- }
- return true;
- };
- }
- // Ajax property has to be a string, not just true
- // Also only want to save if the table has been initialised and the states have been loaded in
- else if (typeof this.c.ajax === 'string' && this.s.dt.settings()[0]._bInitComplete) {
- removeFunction = function () {
- $$2.ajax({
- data: ajaxData,
- success: successCallback,
- type: 'POST',
- url: _this.c.ajax
- });
- return true;
- };
- }
- else if (typeof this.c.ajax === 'function') {
- removeFunction = function () {
- if (typeof _this.c.ajax === 'function') {
- _this.c.ajax.call(_this.s.dt, ajaxData, successCallback);
- }
- return true;
- };
- }
- // If the modal is to be skipped then remove straight away
- if (skipModal) {
- this.dom.confirmation.appendTo(this.dom.dtContainer);
- $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');
- removeFunction();
- this.dom.confirmation.remove();
- }
- // Otherwise display the modal
- else {
- this._newModal(this.dom.removeTitle, this.s.dt.i18n('stateRestore.removeSubmit', this.c.i18n.removeSubmit), removeFunction, this.dom.removeContents);
- }
- return true;
- };
- /**
- * Compares the state held within this instance with a state that is passed in
- *
- * @param state The state that is to be compared against
- * @returns boolean indicating if the states match
- */
- StateRestore.prototype.compare = function (state) {
- // Order
- if (!this.c.saveState.order) {
- state.order = undefined;
- }
- // Search
- if (!this.c.saveState.search) {
- state.search = undefined;
- }
- // Columns
- if (this.c.saveState.columns && state.columns) {
- for (var i = 0, ien = state.columns.length; i < ien; i++) {
- // Visibility
- if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.visible) {
- state.columns[i].visible = undefined;
- }
- // Search
- if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.search) {
- state.columns[i].search = undefined;
- }
- }
- }
- else if (!this.c.saveState.columns) {
- state.columns = undefined;
- }
- // Paging
- if (!this.c.saveState.paging) {
- state.page = undefined;
- }
- // SearchBuilder
- if (!this.c.saveState.searchBuilder) {
- state.searchBuilder = undefined;
- }
- // SearchPanes
- if (!this.c.saveState.searchPanes) {
- state.searchPanes = undefined;
- }
- // Select
- if (!this.c.saveState.select) {
- state.select = undefined;
- }
- // ColReorder
- if (!this.c.saveState.colReorder) {
- state.ColReorder = undefined;
- }
- // Scroller
- if (!this.c.saveState.scroller) {
- state.scroller = undefined;
- if (dataTable$1.Scroller !== undefined) {
- state.start = 0;
- }
- }
- // Paging
- if (!this.c.saveState.paging) {
- state.start = 0;
- }
- // Page Length
- if (!this.c.saveState.length) {
- state.length = undefined;
- }
- // Need to delete properties that we do not want to compare
- delete state.time;
- var copyState = this.s.savedState;
- delete copyState.time;
- delete copyState.c;
- delete copyState.stateRestore;
- // Perform a deep compare of the two state objects
- return this._deepCompare(state, copyState);
- };
- /**
- * Removes all of the dom elements from the document
- */
- StateRestore.prototype.destroy = function () {
- Object.values(this.dom).forEach(function (node) { return node.off().remove(); });
- };
- /**
- * Loads the state referenced by the identifier from storage
- *
- * @param state The identifier of the state that should be loaded
- * @returns the state that has been loaded
- */
- StateRestore.prototype.load = function () {
- var _this = this;
- var loadedState = this.s.savedState;
- var settings = this.s.dt.settings()[0];
- // Always want the states stored here to be loaded in - regardless of when they were created
- loadedState.time = +new Date();
- settings.oLoadedState = $$2.extend(true, {}, loadedState);
- // Click on a background if there is one to shut the collection
- $$2('div.dt-button-background').click();
- // Call the internal datatables function to implement the state on the table
- $$2.fn.dataTable.ext.oApi._fnImplementState(settings, loadedState, function () {
- var correctPaging = function (e, preSettings) {
- setTimeout(function () {
- var currpage = preSettings._iDisplayStart / preSettings._iDisplayLength;
- var intendedPage = loadedState.start / loadedState.length;
- // If the paging is incorrect then we have to set it again so that it is correct
- // This happens when a searchpanes filter is removed
- // This has to happen in a timeout because searchpanes only deselects after a timeout
- if (currpage >= 0 && intendedPage >= 0 && currpage !== intendedPage) {
- _this.s.dt.page(intendedPage).draw(false);
- }
- }, 50);
- };
- _this.s.dt.one('preDraw', correctPaging);
- _this.s.dt.draw(false);
- });
- return loadedState;
- };
- /**
- * Shows a modal that allows a state to be renamed
- *
- * @param newIdentifier Optional. The new identifier for this state
- */
- StateRestore.prototype.rename = function (newIdentifier, currentIdentifiers) {
- var _this = this;
- if (newIdentifier === void 0) { newIdentifier = null; }
- // Check if renaming of states is allowed
- if (!this.c.rename) {
- return;
- }
- var renameFunction = function () {
- var _a;
- if (newIdentifier === null) {
- var tempIdentifier = $$2('input.' + _this.classes.input.replace(/ /g, '.')).val();
- if (tempIdentifier.length === 0) {
- _this.dom.confirmation.children('.' + _this.classes.modalError).remove();
- _this.dom.confirmation.append(_this.dom.emptyError);
- return 'empty';
- }
- else if (currentIdentifiers.includes(tempIdentifier)) {
- _this.dom.confirmation.children('.' + _this.classes.modalError).remove();
- _this.dom.confirmation.append(_this.dom.duplicateError);
- return 'duplicate';
- }
- else {
- newIdentifier = tempIdentifier;
- }
- }
- var ajaxData = {
- action: 'rename',
- stateRestore: (_a = {},
- _a[_this.s.identifier] = newIdentifier,
- _a)
- };
- var successCallback = function () {
- _this.s.identifier = newIdentifier;
- _this.save(_this.s.savedState, function () { return null; }, false);
- _this.dom.removeContents = $$2('' +
- _this.s.dt
- .i18n('stateRestore.removeConfirm', _this.c.i18n.removeConfirm)
- .replace(/%s/g, _this.s.identifier) +
- '
');
- _this.dom.confirmation.trigger('dtsr-rename');
- _this.dom.background.click();
- _this.dom.confirmation.remove();
- $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });
- _this.dom.confirmationButton.off('click');
- };
- if (!_this.c.ajax) {
- try {
- localStorage.removeItem('DataTables_stateRestore_' + _this.s.identifier + '_' + location.pathname +
- (_this.s.tableId ? '_' + _this.s.tableId : ''));
- successCallback();
- }
- catch (e) {
- _this.dom.confirmation.children('.' + _this.classes.modalError).remove();
- _this.dom.confirmation.append(_this.dom.removeError);
- return false;
- }
- }
- else if (typeof _this.c.ajax === 'string' && _this.s.dt.settings()[0]._bInitComplete) {
- $$2.ajax({
- data: ajaxData,
- success: successCallback,
- type: 'POST',
- url: _this.c.ajax
- });
- }
- else if (typeof _this.c.ajax === 'function') {
- _this.c.ajax.call(_this.s.dt, ajaxData, successCallback);
- }
- return true;
- };
- // Check if a new identifier has been provided, if so no need for a modal
- if (newIdentifier !== null) {
- if (currentIdentifiers.includes(newIdentifier)) {
- throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));
- }
- else if (newIdentifier.length === 0) {
- throw new Error(this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError));
- }
- else {
- this.dom.confirmation.appendTo(this.dom.dtContainer);
- $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');
- renameFunction();
- this.dom.confirmation.remove();
- }
- }
- else {
- this.dom.renameInput.val(this.s.identifier);
- this.dom.renameContents.append(this.dom.renameInput);
- this._newModal(this.dom.renameTitle, this.s.dt.i18n('stateRestore.renameButton', this.c.i18n.renameButton), renameFunction, this.dom.renameContents);
- }
- };
- /**
- * Saves the tables current state using the identifier that is passed in.
- *
- * @param state Optional. If provided this is the state that will be saved rather than using the current state
- */
- StateRestore.prototype.save = function (state, passedSuccessCallback, callAjax) {
- var _a;
- var _this = this;
- if (callAjax === void 0) { callAjax = true; }
- // Check if saving states is allowed
- if (!this.c.save) {
- if (passedSuccessCallback) {
- passedSuccessCallback.call(this);
- }
- return;
- }
- // this.s.dt.state.save();
- var savedState;
- // If no state has been provided then create a new one from the current state
- this.s.dt.state.save();
- if (state === undefined) {
- savedState = this.s.dt.state();
- }
- else if (typeof state !== 'object') {
- return;
- }
- else {
- savedState = state;
- }
- if (savedState.stateRestore) {
- savedState.stateRestore.isPreDefined = this.s.isPreDefined;
- savedState.stateRestore.state = this.s.identifier;
- savedState.stateRestore.tableId = this.s.tableId;
- }
- else {
- savedState.stateRestore = {
- isPreDefined: this.s.isPreDefined,
- state: this.s.identifier,
- tableId: this.s.tableId
- };
- }
- this.s.savedState = savedState;
- // Order
- if (!this.c.saveState.order) {
- this.s.savedState.order = undefined;
- }
- // Search
- if (!this.c.saveState.search) {
- this.s.savedState.search = undefined;
- }
- // Columns
- if (this.c.saveState.columns && this.s.savedState.columns) {
- for (var i = 0, ien = this.s.savedState.columns.length; i < ien; i++) {
- // Visibility
- if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.visible) {
- this.s.savedState.columns[i].visible = undefined;
- }
- // Search
- if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.search) {
- this.s.savedState.columns[i].search = undefined;
- }
- }
- }
- else if (!this.c.saveState.columns) {
- this.s.savedState.columns = undefined;
- }
- // SearchBuilder
- if (!this.c.saveState.searchBuilder) {
- this.s.savedState.searchBuilder = undefined;
- }
- // SearchPanes
- if (!this.c.saveState.searchPanes) {
- this.s.savedState.searchPanes = undefined;
- }
- // Select
- if (!this.c.saveState.select) {
- this.s.savedState.select = undefined;
- }
- // ColReorder
- if (!this.c.saveState.colReorder) {
- this.s.savedState.ColReorder = undefined;
- }
- // Scroller
- if (!this.c.saveState.scroller) {
- this.s.savedState.scroller = undefined;
- if (dataTable$1.Scroller !== undefined) {
- this.s.savedState.start = 0;
- }
- }
- // Paging
- if (!this.c.saveState.paging) {
- this.s.savedState.start = 0;
- }
- // Page Length
- if (!this.c.saveState.length) {
- this.s.savedState.length = undefined;
- }
- this.s.savedState.c = this.c;
- // Need to remove the parent reference before we save the state
- // Its not needed to rebuild, but it does cause a circular reference when converting to JSON
- if (this.s.savedState.c.splitSecondaries.length) {
- for (var _i = 0, _b = this.s.savedState.c.splitSecondaries; _i < _b.length; _i++) {
- var secondary = _b[_i];
- if (secondary.parent) {
- secondary.parent = undefined;
- }
- }
- }
- // If the state is predefined there is no need to save it over ajax or to local storage
- if (this.s.isPreDefined) {
- if (passedSuccessCallback) {
- passedSuccessCallback.call(this);
- }
- return;
- }
- var ajaxData = {
- action: 'save',
- stateRestore: (_a = {},
- _a[this.s.identifier] = this.s.savedState,
- _a)
- };
- var successCallback = function () {
- if (passedSuccessCallback) {
- passedSuccessCallback.call(_this);
- }
- _this.dom.confirmation.trigger('dtsr-save');
- $$2(_this.s.dt.table().node()).trigger('stateRestore-change');
- };
- if (!this.c.ajax) {
- localStorage.setItem('DataTables_stateRestore_' + this.s.identifier + '_' + location.pathname +
- (this.s.tableId ? '_' + this.s.tableId : ''), JSON.stringify(this.s.savedState));
- successCallback();
- }
- else if (typeof this.c.ajax === 'string' && callAjax) {
- if (this.s.dt.settings()[0]._bInitComplete) {
- $$2.ajax({
- data: ajaxData,
- success: successCallback,
- type: 'POST',
- url: this.c.ajax
- });
- }
- else {
- this.s.dt.one('init', function () {
- $$2.ajax({
- data: ajaxData,
- success: successCallback,
- type: 'POST',
- url: _this.c.ajax
- });
- });
- }
- }
- else if (typeof this.c.ajax === 'function' && callAjax) {
- this.c.ajax.call(this.s.dt, ajaxData, successCallback);
- }
- };
- /**
- * Performs a deep compare of two state objects, returning true if they match
- *
- * @param state1 The first object to compare
- * @param state2 The second object to compare
- * @returns boolean indicating if the objects match
- */
- StateRestore.prototype._deepCompare = function (state1, state2) {
- // Put keys and states into arrays as this makes the later code easier to work
- var states = [state1, state2];
- var keys = [Object.keys(state1).sort(), Object.keys(state2).sort()];
- // If scroller is included then we need to remove the start value
- // as it can be different but yield the same results
- if (keys[0].includes('scroller')) {
- var startIdx = keys[0].indexOf('start');
- if (startIdx) {
- keys[0].splice(startIdx, 1);
- }
- }
- if (keys[1].includes('scroller')) {
- var startIdx = keys[1].indexOf('start');
- if (startIdx) {
- keys[1].splice(startIdx, 1);
- }
- }
- // We want to remove any private properties within the states
- for (var i = 0; i < keys[0].length; i++) {
- if (keys[0][i].indexOf('_') === 0) {
- keys[0].splice(i, 1);
- i--;
- continue;
- }
- // If scroller is included then we need to remove the following values
- // as they can be different but yield the same results
- if (keys[0][i] === 'baseRowTop' ||
- keys[0][i] === 'baseScrollTop' ||
- keys[0][i] === 'scrollTop' ||
- (!this.c.saveState.paging && keys[0][i] === 'page')) {
- keys[0].splice(i, 1);
- i--;
- continue;
- }
- }
- for (var i = 0; i < keys[1].length; i++) {
- if (keys[1][i].indexOf('_') === 0) {
- keys[1].splice(i, 1);
- i--;
- continue;
- }
- if (keys[1][i] === 'baseRowTop' ||
- keys[1][i] === 'baseScrollTop' ||
- keys[1][i] === 'scrollTop' ||
- (!this.c.saveState.paging && keys[0][i] === 'page')) {
- keys[1].splice(i, 1);
- i--;
- continue;
- }
- }
- if (keys[0].length === 0 && keys[1].length > 0 ||
- keys[1].length === 0 && keys[0].length > 0) {
- return false;
- }
- // We are only going to compare the keys that are common between both states
- for (var i = 0; i < keys[0].length; i++) {
- if (!keys[1].includes(keys[0][i])) {
- keys[0].splice(i, 1);
- i--;
- }
- }
- for (var i = 0; i < keys[1].length; i++) {
- if (!keys[0].includes(keys[1][i])) {
- keys[1].splice(i, 1);
- i--;
- }
- }
- // Then each key and value has to be checked against each other
- for (var i = 0; i < keys[0].length; i++) {
- // If the keys dont equal, or their corresponding types are different we can return false
- if (keys[0][i] !== keys[1][i] || typeof states[0][keys[0][i]] !== typeof states[1][keys[1][i]]) {
- return false;
- }
- // If the type is an object then further deep comparisons are required
- if (typeof states[0][keys[0][i]] === 'object') {
- if (!this._deepCompare(states[0][keys[0][i]], states[1][keys[1][i]])) {
- return false;
- }
- }
- else if (typeof states[0][keys[0][i]] === 'number' && typeof states[1][keys[1][i]] === 'number') {
- if (Math.round(states[0][keys[0][i]]) !== Math.round(states[1][keys[1][i]])) {
- return false;
- }
- }
- // Otherwise we can just check the value
- else if (states[0][keys[0][i]] !== states[1][keys[1][i]]) {
- return false;
- }
- }
- // If we get all the way to here there are no differences so return true for this object
- return true;
- };
- StateRestore.prototype._keyupFunction = function (e) {
- // If enter same action as pressing the button
- if (e.key === 'Enter') {
- this.dom.confirmationButton.click();
- }
- // If escape close modal
- else if (e.key === 'Escape') {
- $$2('div.' + this.classes.background.replace(/ /g, '.')).click();
- }
- };
- /**
- * Creates a new confirmation modal for the user to approve an action
- *
- * @param title The title that is to be displayed at the top of the modal
- * @param buttonText The text that is to be displayed in the confirmation button of the modal
- * @param buttonAction The action that should be taken when the confirmation button is pressed
- * @param modalContents The contents for the main body of the modal
- */
- StateRestore.prototype._newModal = function (title, buttonText, buttonAction, modalContents) {
- var _this = this;
- this.dom.background.appendTo(this.dom.dtContainer);
- this.dom.confirmationTitleRow.empty().append(title);
- this.dom.confirmationButton.html(buttonText);
- this.dom.confirmation
- .empty()
- .append(this.dom.confirmationTitleRow)
- .append(modalContents)
- .append($$2('
')
- .append(this.dom.confirmationButton))
- .appendTo(this.dom.dtContainer);
- $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');
- var inputs = modalContents.children('input');
- // If there is an input focus on that
- if (inputs.length > 0) {
- $$2(inputs[0]).focus();
- }
- // Otherwise focus on the confirmation button
- else {
- this.dom.confirmationButton.focus();
- }
- var background = $$2('div.' + this.classes.background.replace(/ /g, '.'));
- if (this.c.modalCloseButton) {
- this.dom.confirmation.append(this.dom.closeButton);
- this.dom.closeButton.on('click', function () { return background.click(); });
- }
- // When the button is clicked, call the appropriate action,
- // remove the background and modal from the screen and unbind the keyup event.
- this.dom.confirmationButton.on('click', function () { return buttonAction(); });
- this.dom.confirmation.on('click', function (e) {
- e.stopPropagation();
- });
- // When the button is clicked, remove the background and modal from the screen and unbind the keyup event.
- background.one('click', function () {
- _this.dom.background.remove();
- _this.dom.confirmation.remove();
- $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });
- });
- $$2(document).on('keyup', function (e) { return _this._keyupFunction(e); });
- };
- /**
- * Convert from camelCase notation to the internal Hungarian.
- * We could use the Hungarian convert function here, but this is cleaner
- *
- * @param {object} obj Object to convert
- * @returns {object} Inverted object
- * @memberof DataTable#oApi
- */
- StateRestore.prototype._searchToHung = function (obj) {
- return {
- bCaseInsensitive: obj.caseInsensitive,
- bRegex: obj.regex,
- bSmart: obj.smart,
- sSearch: obj.search
- };
- };
- StateRestore.version = '1.2.2';
- StateRestore.classes = {
- background: 'dtsr-background',
- closeButton: 'dtsr-popover-close',
- confirmation: 'dtsr-confirmation',
- confirmationButton: 'dtsr-confirmation-button',
- confirmationButtons: 'dtsr-confirmation-buttons',
- confirmationMessage: 'dtsr-confirmation-message dtsr-name-label',
- confirmationText: 'dtsr-confirmation-text',
- confirmationTitle: 'dtsr-confirmation-title',
- confirmationTitleRow: 'dtsr-confirmation-title-row',
- dtButton: 'dt-button',
- input: 'dtsr-input',
- modalError: 'dtsr-modal-error',
- renameModal: 'dtsr-rename-modal'
- };
- StateRestore.defaults = {
- _createInSaved: false,
- ajax: false,
- create: true,
- creationModal: false,
- i18n: {
- creationModal: {
- button: 'Create',
- colReorder: 'Column Order:',
- columns: {
- search: 'Column Search:',
- visible: 'Column Visibility:'
- },
- length: 'Page Length:',
- name: 'Name:',
- order: 'Sorting:',
- paging: 'Paging:',
- scroller: 'Scroll Position:',
- search: 'Search:',
- searchBuilder: 'SearchBuilder:',
- searchPanes: 'SearchPanes:',
- select: 'Select:',
- title: 'Create New State',
- toggleLabel: 'Includes:'
- },
- duplicateError: 'A state with this name already exists.',
- emptyError: 'Name cannot be empty.',
- emptyStates: 'No saved states',
- removeConfirm: 'Are you sure you want to remove %s?',
- removeError: 'Failed to remove state.',
- removeJoiner: ' and ',
- removeSubmit: 'Remove',
- removeTitle: 'Remove State',
- renameButton: 'Rename',
- renameLabel: 'New Name for %s:',
- renameTitle: 'Rename State'
- },
- modalCloseButton: true,
- remove: true,
- rename: true,
- save: true,
- saveState: {
- colReorder: true,
- columns: {
- search: true,
- visible: true
- },
- length: true,
- order: true,
- paging: true,
- scroller: true,
- search: true,
- searchBuilder: true,
- searchPanes: true,
- select: true
- },
- splitSecondaries: [
- 'updateState',
- 'renameState',
- 'removeState'
- ],
- toggle: {
- colReorder: false,
- columns: {
- search: false,
- visible: false
- },
- length: false,
- order: false,
- paging: false,
- scroller: false,
- search: false,
- searchBuilder: false,
- searchPanes: false,
- select: false
- }
- };
- return StateRestore;
- }());
-
- var $$1;
- var dataTable;
- function setJQuery(jq) {
- $$1 = jq;
- dataTable = jq.fn.dataTable;
- }
- var StateRestoreCollection = /** @class */ (function () {
- function StateRestoreCollection(settings, opts) {
- var _this = this;
- // Check that the required version of DataTables is included
- if (!dataTable || !dataTable.versionCheck || !dataTable.versionCheck('1.10.0')) {
- throw new Error('StateRestore requires DataTables 1.10 or newer');
- }
- // Check that Select is included
- // eslint-disable-next-line no-extra-parens
- if (!dataTable.Buttons) {
- throw new Error('StateRestore requires Buttons');
- }
- var table = new dataTable.Api(settings);
- this.classes = $$1.extend(true, {}, StateRestoreCollection.classes);
- if (table.settings()[0]._stateRestore !== undefined) {
- return;
- }
- // Get options from user
- this.c = $$1.extend(true, {}, StateRestoreCollection.defaults, opts);
- this.s = {
- dt: table,
- hasColReorder: dataTable.ColReorder !== undefined,
- hasScroller: dataTable.Scroller !== undefined,
- hasSearchBuilder: dataTable.SearchBuilder !== undefined,
- hasSearchPanes: dataTable.SearchPanes !== undefined,
- hasSelect: dataTable.select !== undefined,
- states: []
- };
- this.s.dt.on('xhr', function (e, xhrsettings, json) {
- // Has staterestore been used before? Is there anything to load?
- if (json && json.stateRestore) {
- _this._addPreDefined(json.stateRestore);
- }
- });
- this.dom = {
- background: $$1('
'),
- closeButton: $$1('x
'),
- colReorderToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.colReorder', this.c.i18n.creationModal.colReorder) +
- ' ' +
- '
'),
- columnsSearchToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.columns.search', this.c.i18n.creationModal.columns.search) +
- ' ' +
- '
'),
- columnsVisibleToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.columns.visible', this.c.i18n.creationModal.columns.visible) +
- ' ' +
- '
'),
- confirmation: $$1('
'),
- confirmationTitleRow: $$1('
'),
- createButtonRow: $$1(''),
- creation: $$1('
'),
- creationForm: $$1('
'),
- creationTitle: $$1('' +
- '
' +
- this.s.dt.i18n('stateRestore.creationModal.title', this.c.i18n.creationModal.title) +
- ' ' +
- '
'),
- dtContainer: $$1(this.s.dt.table().container()),
- duplicateError: $$1('' +
- this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError) +
- ' '),
- emptyError: $$1('' +
- this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError) +
- ' '),
- lengthToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.length', this.c.i18n.creationModal.length) +
- ' ' +
- '
'),
- nameInputRow: $$1('' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.name', this.c.i18n.creationModal.name) +
- ' ' +
- ' ' +
- '
'),
- orderToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.order', this.c.i18n.creationModal.order) +
- ' ' +
- '
'),
- pagingToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.paging', this.c.i18n.creationModal.paging) +
- ' ' +
- '
'),
- removeContents: $$1('
'),
- removeTitle: $$1('' +
- '
' +
- this.s.dt.i18n('stateRestore.removeTitle', this.c.i18n.removeTitle) +
- ' ' +
- ''),
- scrollerToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.scroller', this.c.i18n.creationModal.scroller) +
- ' ' +
- '
'),
- searchBuilderToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.searchBuilder', this.c.i18n.creationModal.searchBuilder) +
- ' ' +
- '
'),
- searchPanesToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.searchPanes', this.c.i18n.creationModal.searchPanes) +
- ' ' +
- '
'),
- searchToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.search', this.c.i18n.creationModal.search) +
- ' ' +
- '
'),
- selectToggle: $$1('' +
- ' ' +
- '' +
- this.s.dt.i18n('stateRestore.creationModal.select', this.c.i18n.creationModal.select) +
- ' ' +
- '
'),
- toggleLabel: $$1('' +
- this.s.dt.i18n('stateRestore.creationModal.toggleLabel', this.c.i18n.creationModal.toggleLabel) +
- ' ')
- };
- table.settings()[0]._stateRestore = this;
- this._searchForStates();
- // Has staterestore been used before? Is there anything to load?
- this._addPreDefined(this.c.preDefined);
- var ajaxFunction;
- var ajaxData = {
- action: 'load'
- };
- if (typeof this.c.ajax === 'function') {
- ajaxFunction = function () {
- if (typeof _this.c.ajax === 'function') {
- _this.c.ajax.call(_this.s.dt, ajaxData, function (s) { return _this._addPreDefined(s); });
- }
- };
- }
- else if (typeof this.c.ajax === 'string') {
- ajaxFunction = function () {
- $$1.ajax({
- data: ajaxData,
- success: function (data) {
- _this._addPreDefined(data);
- },
- type: 'POST',
- url: _this.c.ajax
- });
- };
- }
- if (typeof ajaxFunction === 'function') {
- if (this.s.dt.settings()[0]._bInitComplete) {
- ajaxFunction();
- }
- else {
- this.s.dt.one('preInit.dtsr', function () {
- ajaxFunction();
- });
- }
- }
- this.s.dt.on('destroy.dtsr', function () {
- _this.destroy();
- });
- this.s.dt.on('draw.dtsr buttons-action.dtsr', function () { return _this.findActive(); });
- return this;
- }
- /**
- * Adds a new StateRestore instance to the collection based on the current properties of the table
- *
- * @param identifier The value that is used to identify a state.
- * @returns The state that has been created
- */
- StateRestoreCollection.prototype.addState = function (identifier, currentIdentifiers, options) {
- var _this = this;
- // If creation/saving is not allowed then return
- if (!this.c.create || !this.c.save) {
- return;
- }
- // Check if the state exists before creating a new ones
- var state = this.getState(identifier);
- var createFunction = function (id, toggles) {
- if (id.length === 0) {
- return 'empty';
- }
- else if (currentIdentifiers.includes(id)) {
- return 'duplicate';
- }
- _this.s.dt.state.save();
- var that = _this;
- var successCallback = function () {
- that.s.states.push(this);
- that._collectionRebuild();
- };
- var currState = _this.s.dt.state();
- currState.stateRestore = {
- isPredefined: false,
- state: id,
- tableId: _this.s.dt.table().node().id
- };
- if (toggles.saveState) {
- var opts = _this.c.saveState;
- // We don't want to extend, but instead AND all properties of the saveState option
- for (var _i = 0, _a = Object.keys(toggles.saveState); _i < _a.length; _i++) {
- var key = _a[_i];
- if (!toggles.saveState[key]) {
- opts[key] = false;
- }
- }
- _this.c.saveState = opts;
- }
- var newState = new StateRestore(_this.s.dt.settings()[0], $$1.extend(true, {}, _this.c, options), id, currState, false, successCallback);
- $$1(_this.s.dt.table().node()).on('dtsr-modal-inserted', function () {
- newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });
- newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });
- newState.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });
- });
- return true;
- };
- // If there isn't already a state with this identifier
- if (state === null) {
- if (this.c.creationModal || options !== undefined && options.creationModal) {
- this._creationModal(createFunction, identifier, options);
- }
- else {
- var success = createFunction(identifier, {});
- if (success === 'empty') {
- throw new Error(this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError));
- }
- else if (success === 'duplicate') {
- throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));
- }
- }
- }
- else {
- throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));
- }
- };
- /**
- * Removes all of the states, showing a modal to the user for confirmation
- *
- * @param removeFunction The action to be taken when the action is confirmed
- */
- StateRestoreCollection.prototype.removeAll = function (removeFunction) {
- // There are no states to remove so just return
- if (this.s.states.length === 0) {
- return;
- }
- var ids = this.s.states.map(function (state) { return state.s.identifier; });
- var replacementString = ids[0];
- if (ids.length > 1) {
- replacementString = ids.slice(0, -1).join(', ') +
- this.s.dt.i18n('stateRestore.removeJoiner', this.c.i18n.removeJoiner) +
- ids.slice(-1);
- }
- $$1(this.dom.removeContents.children('span')).html(this.s.dt
- .i18n('stateRestore.removeConfirm', this.c.i18n.removeConfirm)
- .replace(/%s/g, replacementString));
- this._newModal(this.dom.removeTitle, this.s.dt.i18n('stateRestore.removeSubmit', this.c.i18n.removeSubmit), removeFunction, this.dom.removeContents);
- };
- /**
- * Removes all of the dom elements from the document for the collection and the stored states
- */
- StateRestoreCollection.prototype.destroy = function () {
- for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {
- var state = _a[_i];
- state.destroy();
- }
- Object.values(this.dom).forEach(function (node) {
- node.off();
- node.remove();
- });
- this.s.states = [];
- this.s.dt.off('.dtsr');
- $$1(this.s.dt.table().node()).off('.dtsr');
- };
- /**
- * Identifies active states and updates their button to reflect this.
- *
- * @returns An array containing objects with the details of currently active states
- */
- StateRestoreCollection.prototype.findActive = function () {
- // Make sure that the state is up to date
- this.s.dt.state.save();
- var currState = this.s.dt.state();
- // Make all of the buttons inactive so that only any that match will be marked as active
- var buttons = $$1('button.' + $$1.fn.DataTable.Buttons.defaults.dom.button.className.replace(/ /g, '.'));
- // Some of the styling libraries use a tags instead of buttons
- if (buttons.length === 0) {
- buttons = $$1('a.' + $$1.fn.DataTable.Buttons.defaults.dom.button.className.replace(/ /g, '.'));
- }
- for (var _i = 0, buttons_1 = buttons; _i < buttons_1.length; _i++) {
- var button = buttons_1[_i];
- this.s.dt.button($$1(button).parent()[0]).active(false);
- }
- var results = [];
- // Go through all of the states comparing if their state is the same to the current one
- for (var _a = 0, _b = this.s.states; _a < _b.length; _a++) {
- var state = _b[_a];
- if (state.compare(currState)) {
- results.push({
- data: state.s.savedState,
- name: state.s.identifier
- });
- // If so, find the corresponding button and mark it as active
- for (var _c = 0, buttons_2 = buttons; _c < buttons_2.length; _c++) {
- var button = buttons_2[_c];
- if ($$1(button).text() === state.s.identifier) {
- this.s.dt.button($$1(button).parent()[0]).active(true);
- break;
- }
- }
- }
- }
- return results;
- };
- /**
- * Gets a single state that has the identifier matching that which is passed in
- *
- * @param identifier The value that is used to identify a state
- * @returns The state that has been identified or null if no states have been identified
- */
- StateRestoreCollection.prototype.getState = function (identifier) {
- for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {
- var state = _a[_i];
- if (state.s.identifier === identifier) {
- return state;
- }
- }
- return null;
- };
- /**
- * Gets an array of all of the states
- *
- * @returns Any states that have been identified
- */
- StateRestoreCollection.prototype.getStates = function (ids) {
- if (ids === undefined) {
- return this.s.states;
- }
- else {
- var states = [];
- for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) {
- var id = ids_1[_i];
- var found = false;
- for (var _a = 0, _b = this.s.states; _a < _b.length; _a++) {
- var state = _b[_a];
- if (id === state.s.identifier) {
- states.push(state);
- found = true;
- break;
- }
- }
- if (!found) {
- states.push(undefined);
- }
- }
- return states;
- }
- };
- /**
- * Reloads states that are set via datatables config or over ajax
- *
- * @param preDefined Object containing the predefined states that are to be reintroduced
- */
- StateRestoreCollection.prototype._addPreDefined = function (preDefined) {
- var _this = this;
- // There is a potential issue here if sorting where the string parts of the name are the same,
- // only the number differs and there are many states - but this wouldn't be usfeul naming so
- // more of a priority to sort alphabetically
- var states = Object.keys(preDefined).sort(function (a, b) { return a > b ? 1 : a < b ? -1 : 0; });
- var _loop_1 = function (state) {
- for (var i = 0; i < this_1.s.states.length; i++) {
- if (this_1.s.states[i].s.identifier === state) {
- this_1.s.states.splice(i, 1);
- }
- }
- var that = this_1;
- var successCallback = function () {
- that.s.states.push(this);
- that._collectionRebuild();
- };
- var loadedState = preDefined[state];
- var newState = new StateRestore(this_1.s.dt, $$1.extend(true, {}, this_1.c, loadedState.c !== undefined ?
- { saveState: loadedState.c.saveState } :
- undefined, true), state, loadedState, true, successCallback);
- newState.s.savedState = loadedState;
- $$1(this_1.s.dt.table().node()).on('dtsr-modal-inserted', function () {
- newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });
- newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });
- newState.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });
- });
- };
- var this_1 = this;
- for (var _i = 0, states_1 = states; _i < states_1.length; _i++) {
- var state = states_1[_i];
- _loop_1(state);
- }
- };
- /**
- * Rebuilds all of the buttons in the collection of states to make sure that states and text is up to date
- */
- StateRestoreCollection.prototype._collectionRebuild = function () {
- var button = this.s.dt.button('SaveStateRestore:name');
- var stateButtons = [];
- // Need to get the original configuration object, so we can rebuild it
- // It might be nested, so need to traverse down the tree
- if (button[0]) {
- var idxs = button.index().split('-');
- stateButtons = button[0].inst.c.buttons;
- for (var i = 0; i < idxs.length; i++) {
- if (stateButtons[idxs[i]].buttons) {
- stateButtons = stateButtons[idxs[i]].buttons;
- }
- else {
- stateButtons = [];
- break;
- }
- }
- }
- // remove any states from the previous rebuild - if they are still there they will be added later
- for (var i = 0; i < stateButtons.length; i++) {
- if (stateButtons[i].extend === 'stateRestore') {
- stateButtons.splice(i, 1);
- i--;
- }
- }
- if (this.c._createInSaved) {
- stateButtons.push('createState');
- }
- var emptyText = '' +
- this.s.dt.i18n('stateRestore.emptyStates', this.c.i18n.emptyStates) +
- ' ';
- // If there are no states display an empty message
- if (this.s.states.length === 0) {
- // Don't want the empty text included more than twice
- if (!stateButtons.includes(emptyText)) {
- stateButtons.push(emptyText);
- }
- }
- else {
- // There are states to add so there shouldn't be any empty text left!
- while (stateButtons.includes(emptyText)) {
- stateButtons.splice(stateButtons.indexOf(emptyText), 1);
- }
- // There is a potential issue here if sorting where the string parts of the name are the same,
- // only the number differs and there are many states - but this wouldn't be usfeul naming so
- // more of a priority to sort alphabetically
- this.s.states = this.s.states.sort(function (a, b) {
- var aId = a.s.identifier;
- var bId = b.s.identifier;
- return aId > bId ?
- 1 :
- aId < bId ?
- -1 :
- 0;
- });
- // Construct the split property of each button
- for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {
- var state = _a[_i];
- var split = Object.assign([], this.c.splitSecondaries);
- if (split.includes('updateState') && (!this.c.save || !state.c.save)) {
- split.splice(split.indexOf('updateState'), 1);
- }
- if (split.includes('renameState') &&
- (!this.c.save || !state.c.save || !this.c.rename || !state.c.rename)) {
- split.splice(split.indexOf('renameState'), 1);
- }
- if (split.includes('removeState') && (!this.c.remove || !state.c.remove)) {
- split.splice(split.indexOf('removeState'), 1);
- }
- if (split.length > 0 &&
- !split.includes('' + state.s.identifier + ' ')) {
- split.unshift('' + state.s.identifier + ' ');
- }
- stateButtons.push({
- _stateRestore: state,
- attr: {
- title: state.s.identifier
- },
- config: {
- split: split
- },
- extend: 'stateRestore',
- text: state.s.identifier
- });
- }
- }
- button.collectionRebuild(stateButtons);
- // Need to disable the removeAllStates button if there are no states and it is present
- var buttons = this.s.dt.buttons();
- for (var _b = 0, buttons_3 = buttons; _b < buttons_3.length; _b++) {
- var butt = buttons_3[_b];
- if ($$1(butt.node).hasClass('dtsr-removeAllStates')) {
- if (this.s.states.length === 0) {
- this.s.dt.button(butt.node).disable();
- }
- else {
- this.s.dt.button(butt.node).enable();
- }
- }
- }
- };
- /**
- * Displays a modal that is used to get information from the user to create a new state.
- *
- * @param buttonAction The action that should be taken when the button is pressed
- * @param identifier The default identifier for the next new state
- */
- StateRestoreCollection.prototype._creationModal = function (buttonAction, identifier, options) {
- var _this = this;
- this.dom.creation.empty();
- this.dom.creationForm.empty();
- this.dom.nameInputRow.children('input').val(identifier);
- this.dom.creationForm.append(this.dom.nameInputRow);
- var tableConfig = this.s.dt.settings()[0].oInit;
- var togglesToInsert = [];
- var toggleDefined = options !== undefined && options.toggle !== undefined;
- // Order toggle - check toggle and saving enabled
- if (((!toggleDefined || options.toggle.order === undefined) && this.c.toggle.order ||
- toggleDefined && options.toggle.order) &&
- this.c.saveState.order &&
- (tableConfig.ordering === undefined || tableConfig.ordering)) {
- togglesToInsert.push(this.dom.orderToggle);
- }
- // Search toggle - check toggle and saving enabled
- if (((!toggleDefined || options.toggle.search === undefined) && this.c.toggle.search ||
- toggleDefined && options.toggle.search) &&
- this.c.saveState.search &&
- (tableConfig.searching === undefined || tableConfig.searching)) {
- togglesToInsert.push(this.dom.searchToggle);
- }
- // Paging toggle - check toggle and saving enabled
- if (((!toggleDefined || options.toggle.paging === undefined) && this.c.toggle.paging ||
- toggleDefined && options.toggle.paging) &&
- this.c.saveState.paging &&
- (tableConfig.paging === undefined || tableConfig.paging)) {
- togglesToInsert.push(this.dom.pagingToggle);
- }
- // Page Length toggle - check toggle and saving enabled
- if (((!toggleDefined || options.toggle.length === undefined) && this.c.toggle.length ||
- toggleDefined && options.toggle.length) &&
- this.c.saveState.length &&
- (tableConfig.length === undefined || tableConfig.length)) {
- togglesToInsert.push(this.dom.lengthToggle);
- }
- // ColReorder toggle - check toggle and saving enabled
- if (this.s.hasColReorder &&
- ((!toggleDefined || options.toggle.colReorder === undefined) && this.c.toggle.colReorder ||
- toggleDefined && options.toggle.colReorder) &&
- this.c.saveState.colReorder) {
- togglesToInsert.push(this.dom.colReorderToggle);
- }
- // Scroller toggle - check toggle and saving enabled
- if (this.s.hasScroller &&
- ((!toggleDefined || options.toggle.scroller === undefined) && this.c.toggle.scroller ||
- toggleDefined && options.toggle.scroller) &&
- this.c.saveState.scroller) {
- togglesToInsert.push(this.dom.scrollerToggle);
- }
- // SearchBuilder toggle - check toggle and saving enabled
- if (this.s.hasSearchBuilder &&
- ((!toggleDefined || options.toggle.searchBuilder === undefined) && this.c.toggle.searchBuilder ||
- toggleDefined && options.toggle.searchBuilder) &&
- this.c.saveState.searchBuilder) {
- togglesToInsert.push(this.dom.searchBuilderToggle);
- }
- // SearchPanes toggle - check toggle and saving enabled
- if (this.s.hasSearchPanes &&
- ((!toggleDefined || options.toggle.searchPanes === undefined) && this.c.toggle.searchPanes ||
- toggleDefined && options.toggle.searchPanes) &&
- this.c.saveState.searchPanes) {
- togglesToInsert.push(this.dom.searchPanesToggle);
- }
- // Select toggle - check toggle and saving enabled
- if (this.s.hasSelect &&
- ((!toggleDefined || options.toggle.select === undefined) && this.c.toggle.select ||
- toggleDefined && options.toggle.select) &&
- this.c.saveState.select) {
- togglesToInsert.push(this.dom.selectToggle);
- }
- // Columns toggle - check toggle and saving enabled
- if (typeof this.c.toggle.columns === 'boolean' &&
- ((!toggleDefined || options.toggle.order === undefined) && this.c.toggle.columns ||
- toggleDefined && options.toggle.order) &&
- this.c.saveState.columns) {
- togglesToInsert.push(this.dom.columnsSearchToggle);
- togglesToInsert.push(this.dom.columnsVisibleToggle);
- }
- else if ((!toggleDefined || options.toggle.columns === undefined) && typeof this.c.toggle.columns !== 'boolean' ||
- typeof options.toggle.order !== 'boolean') {
- if (typeof this.c.saveState.columns !== 'boolean' && this.c.saveState.columns) {
- // Column search toggle - check toggle and saving enabled
- if ((
- // columns.search is defined when passed in
- toggleDefined &&
- options.toggle.columns !== undefined &&
- typeof options.toggle.columns !== 'boolean' &&
- options.toggle.columns.search ||
- // Columns search is not defined when passed in but is in defaults
- (!toggleDefined ||
- options.toggle.columns === undefined ||
- typeof options.toggle.columns !== 'boolean' && options.toggle.columns.search === undefined) &&
- typeof this.c.toggle.columns !== 'boolean' &&
- this.c.toggle.columns.search) &&
- this.c.saveState.columns.search) {
- togglesToInsert.push(this.dom.columnsSearchToggle);
- }
- // Column visiblity toggle - check toggle and saving enabled
- if ((
- // columns.visible is defined when passed in
- toggleDefined &&
- options.toggle.columns !== undefined &&
- typeof options.toggle.columns !== 'boolean' &&
- options.toggle.columns.visible ||
- // Columns visible is not defined when passed in but is in defaults
- (!toggleDefined ||
- options.toggle.columns === undefined ||
- typeof options.toggle.columns !== 'boolean' && options.toggle.columns.visible === undefined) &&
- typeof this.c.toggle.columns !== 'boolean' &&
- this.c.toggle.columns.visible) &&
- this.c.saveState.columns.visible) {
- togglesToInsert.push(this.dom.columnsVisibleToggle);
- }
- }
- else if (this.c.saveState.columns) {
- togglesToInsert.push(this.dom.columnsSearchToggle);
- togglesToInsert.push(this.dom.columnsVisibleToggle);
- }
- }
- // Make sure that the toggles are displayed alphabetically
- togglesToInsert.sort(function (a, b) {
- var aVal = a.children('label.dtsr-check-label')[0].innerHTML;
- var bVal = b.children('label.dtsr-check-label')[0].innerHTML;
- if (aVal < bVal) {
- return -1;
- }
- else if (aVal > bVal) {
- return 1;
- }
- else {
- return 0;
- }
- });
- // Append all of the toggles that are to be inserted
- for (var _i = 0, togglesToInsert_1 = togglesToInsert; _i < togglesToInsert_1.length; _i++) {
- var toggle = togglesToInsert_1[_i];
- this.dom.creationForm.append(toggle);
- }
- // Insert the toggle label next to the first check box
- $$1(this.dom.creationForm.children('div.' + this.classes.checkRow)[0]).prepend(this.dom.toggleLabel);
- // Insert the creation modal and the background
- this.dom.background.appendTo(this.dom.dtContainer);
- this.dom.creation
- .append(this.dom.creationTitle)
- .append(this.dom.creationForm)
- .append(this.dom.createButtonRow)
- .appendTo(this.dom.dtContainer);
- $$1(this.s.dt.table().node()).trigger('dtsr-modal-inserted');
- var _loop_2 = function (toggle) {
- $$1(toggle.children('label:last-child')).on('click', function () {
- toggle.children('input').prop('checked', !toggle.children('input').prop('checked'));
- });
- };
- // Allow the label to be clicked to toggle the checkbox
- for (var _a = 0, togglesToInsert_2 = togglesToInsert; _a < togglesToInsert_2.length; _a++) {
- var toggle = togglesToInsert_2[_a];
- _loop_2(toggle);
- }
- var creationButton = $$1('button.' + this.classes.creationButton.replace(/ /g, '.'));
- var inputs = this.dom.creationForm.find('input');
- // If there is an input focus on that
- if (inputs.length > 0) {
- $$1(inputs[0]).focus();
- }
- // Otherwise focus on the confirmation button
- else {
- creationButton.focus();
- }
- var background = $$1('div.' + this.classes.background.replace(/ /g, '.'));
- var keyupFunction = function (e) {
- if (e.key === 'Enter') {
- creationButton.click();
- }
- else if (e.key === 'Escape') {
- background.click();
- }
- };
- if (this.c.modalCloseButton) {
- this.dom.creation.append(this.dom.closeButton);
- this.dom.closeButton.on('click', function () { return background.click(); });
- }
- creationButton.on('click', function () {
- // Get the values of the checkBoxes
- var saveState = {
- colReorder: _this.dom.colReorderToggle.children('input').is(':checked'),
- columns: {
- search: _this.dom.columnsSearchToggle.children('input').is(':checked'),
- visible: _this.dom.columnsVisibleToggle.children('input').is(':checked')
- },
- length: _this.dom.lengthToggle.children('input').is(':checked'),
- order: _this.dom.orderToggle.children('input').is(':checked'),
- paging: _this.dom.pagingToggle.children('input').is(':checked'),
- scroller: _this.dom.scrollerToggle.children('input').is(':checked'),
- search: _this.dom.searchToggle.children('input').is(':checked'),
- searchBuilder: _this.dom.searchBuilderToggle.children('input').is(':checked'),
- searchPanes: _this.dom.searchPanesToggle.children('input').is(':checked'),
- select: _this.dom.selectToggle.children('input').is(':checked')
- };
- // Call the buttons functionality passing in the identifier and what should be saved
- var success = buttonAction($$1('input.' + _this.classes.nameInput.replace(/ /g, '.')).val(), { saveState: saveState });
- if (success === true) {
- // Remove the dom elements as operation has completed
- _this.dom.background.remove();
- _this.dom.creation.remove();
- // Unbind the keyup function - don't want it to run unnecessarily on every keypress that occurs
- $$1(document).unbind('keyup', keyupFunction);
- }
- else {
- _this.dom.creation.children('.' + _this.classes.modalError).remove();
- _this.dom.creation.append(_this.dom[success + 'Error']);
- }
- });
- background.one('click', function () {
- // Remove the dome elements as operation has been cancelled
- _this.dom.background.remove();
- _this.dom.creation.remove();
- // Unbind the keyup function - don't want it to run unnecessarily on every keypress that occurs
- $$1(document).unbind('keyup', keyupFunction);
- // Rebuild the collection to ensure that the latest changes are present
- _this._collectionRebuild();
- });
- // Have to listen to the keyup event as `escape` doesn't trigger keypress
- $$1(document).on('keyup', keyupFunction);
- // Need to save the state before the focus is lost when the modal is interacted with
- this.s.dt.state.save();
- };
- /**
- * This callback is called when a state is removed.
- * This removes the state from storage and also strips it's button from the container
- *
- * @param identifier The value that is used to identify a state
- */
- StateRestoreCollection.prototype._removeCallback = function (identifier) {
- for (var i = 0; i < this.s.states.length; i++) {
- if (this.s.states[i].s.identifier === identifier) {
- this.s.states.splice(i, 1);
- i--;
- }
- }
- this._collectionRebuild();
- return true;
- };
- /**
- * Creates a new confirmation modal for the user to approve an action
- *
- * @param title The title that is to be displayed at the top of the modal
- * @param buttonText The text that is to be displayed in the confirmation button of the modal
- * @param buttonAction The action that should be taken when the confirmation button is pressed
- * @param modalContents The contents for the main body of the modal
- */
- StateRestoreCollection.prototype._newModal = function (title, buttonText, buttonAction, modalContents) {
- var _this = this;
- this.dom.background.appendTo(this.dom.dtContainer);
- this.dom.confirmationTitleRow.empty().append(title);
- var confirmationButton = $$1('' +
- buttonText +
- ' ');
- this.dom.confirmation
- .empty()
- .append(this.dom.confirmationTitleRow)
- .append(modalContents)
- .append($$1('
')
- .append(confirmationButton))
- .appendTo(this.dom.dtContainer);
- $$1(this.s.dt.table().node()).trigger('dtsr-modal-inserted');
- var inputs = modalContents.children('input');
- // If there is an input focus on that
- if (inputs.length > 0) {
- $$1(inputs[0]).focus();
- }
- // Otherwise focus on the confirmation button
- else {
- confirmationButton.focus();
- }
- var background = $$1('div.' + this.classes.background.replace(/ /g, '.'));
- var keyupFunction = function (e) {
- // If enter same action as pressing the button
- if (e.key === 'Enter') {
- confirmationButton.click();
- }
- // If escape close modal
- else if (e.key === 'Escape') {
- background.click();
- }
- };
- // When the button is clicked, call the appropriate action,
- // remove the background and modal from the screen and unbind the keyup event.
- confirmationButton.on('click', function () {
- var success = buttonAction(true);
- if (success === true) {
- _this.dom.background.remove();
- _this.dom.confirmation.remove();
- $$1(document).unbind('keyup', keyupFunction);
- confirmationButton.off('click');
- }
- else {
- _this.dom.confirmation.children('.' + _this.classes.modalError).remove();
- _this.dom.confirmation.append(_this.dom[success + 'Error']);
- }
- });
- this.dom.confirmation.on('click', function (e) {
- e.stopPropagation();
- });
- // When the button is clicked, remove the background and modal from the screen and unbind the keyup event.
- background.one('click', function () {
- _this.dom.background.remove();
- _this.dom.confirmation.remove();
- $$1(document).unbind('keyup', keyupFunction);
- });
- $$1(document).on('keyup', keyupFunction);
- };
- /**
- * Private method that checks for previously created states on initialisation
- */
- StateRestoreCollection.prototype._searchForStates = function () {
- var _this = this;
- var keys = Object.keys(localStorage);
- var _loop_3 = function (key) {
- // eslint-disable-next-line no-useless-escape
- if (key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname.replace(/\//g, '/') + '$')) ||
- key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname.replace(/\//g, '/') +
- '_' + this_2.s.dt.table().node().id + '$'))) {
- var loadedState_1 = JSON.parse(localStorage.getItem(key));
- if (loadedState_1.stateRestore.isPreDefined ||
- (loadedState_1.stateRestore.tableId &&
- loadedState_1.stateRestore.tableId !== this_2.s.dt.table().node().id)) {
- return "continue";
- }
- var that_1 = this_2;
- var successCallback = function () {
- this.s.savedState = loadedState_1;
- that_1.s.states.push(this);
- that_1._collectionRebuild();
- };
- var newState_1 = new StateRestore(this_2.s.dt, $$1.extend(true, {}, this_2.c, { saveState: loadedState_1.c.saveState }), loadedState_1.stateRestore.state, loadedState_1, false, successCallback);
- $$1(this_2.s.dt.table().node()).on('dtsr-modal-inserted', function () {
- newState_1.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState_1.s.identifier); });
- newState_1.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });
- newState_1.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });
- });
- }
- };
- var this_2 = this;
- for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
- var key = keys_1[_i];
- _loop_3(key);
- }
- };
- StateRestoreCollection.version = '1.0.0';
- StateRestoreCollection.classes = {
- background: 'dtsr-background',
- checkBox: 'dtsr-check-box',
- checkLabel: 'dtsr-check-label',
- checkRow: 'dtsr-check-row',
- closeButton: 'dtsr-popover-close',
- colReorderToggle: 'dtsr-colReorder-toggle',
- columnsSearchToggle: 'dtsr-columns-search-toggle',
- columnsVisibleToggle: 'dtsr-columns-visible-toggle',
- confirmation: 'dtsr-confirmation',
- confirmationButton: 'dtsr-confirmation-button',
- confirmationButtons: 'dtsr-confirmation-buttons',
- confirmationMessage: 'dtsr-confirmation-message dtsr-name-label',
- confirmationText: 'dtsr-confirmation-text',
- confirmationTitle: 'dtsr-confirmation-title',
- confirmationTitleRow: 'dtsr-confirmation-title-row',
- creation: 'dtsr-creation',
- creationButton: 'dtsr-creation-button',
- creationForm: 'dtsr-creation-form',
- creationText: 'dtsr-creation-text',
- creationTitle: 'dtsr-creation-title',
- dtButton: 'dt-button',
- emptyStates: 'dtsr-emptyStates',
- formRow: 'dtsr-form-row',
- leftSide: 'dtsr-left',
- lengthToggle: 'dtsr-length-toggle',
- modalError: 'dtsr-modal-error',
- modalFoot: 'dtsr-modal-foot',
- nameInput: 'dtsr-name-input',
- nameLabel: 'dtsr-name-label',
- orderToggle: 'dtsr-order-toggle',
- pagingToggle: 'dtsr-paging-toggle',
- rightSide: 'dtsr-right',
- scrollerToggle: 'dtsr-scroller-toggle',
- searchBuilderToggle: 'dtsr-searchBuilder-toggle',
- searchPanesToggle: 'dtsr-searchPanes-toggle',
- searchToggle: 'dtsr-search-toggle',
- selectToggle: 'dtsr-select-toggle',
- toggleLabel: 'dtsr-toggle-title'
- };
- StateRestoreCollection.defaults = {
- _createInSaved: false,
- ajax: false,
- create: true,
- creationModal: false,
- i18n: {
- creationModal: {
- button: 'Create',
- colReorder: 'Column Order',
- columns: {
- search: 'Column Search',
- visible: 'Column Visibility'
- },
- length: 'Page Length',
- name: 'Name:',
- order: 'Sorting',
- paging: 'Paging',
- scroller: 'Scroll Position',
- search: 'Search',
- searchBuilder: 'SearchBuilder',
- searchPanes: 'SearchPanes',
- select: 'Select',
- title: 'Create New State',
- toggleLabel: 'Includes:'
- },
- duplicateError: 'A state with this name already exists.',
- emptyError: 'Name cannot be empty.',
- emptyStates: 'No saved states',
- removeConfirm: 'Are you sure you want to remove %s?',
- removeError: 'Failed to remove state.',
- removeJoiner: ' and ',
- removeSubmit: 'Remove',
- removeTitle: 'Remove State',
- renameButton: 'Rename',
- renameLabel: 'New Name for %s:',
- renameTitle: 'Rename State'
- },
- modalCloseButton: true,
- preDefined: {},
- remove: true,
- rename: true,
- save: true,
- saveState: {
- colReorder: true,
- columns: {
- search: true,
- visible: true
- },
- length: true,
- order: true,
- paging: true,
- scroller: true,
- search: true,
- searchBuilder: true,
- searchPanes: true,
- select: true
- },
- splitSecondaries: [
- 'updateState',
- 'renameState',
- 'removeState'
- ],
- toggle: {
- colReorder: false,
- columns: {
- search: false,
- visible: false
- },
- length: false,
- order: false,
- paging: false,
- scroller: false,
- search: false,
- searchBuilder: false,
- searchPanes: false,
- select: false
- }
- };
- return StateRestoreCollection;
- }());
-
- /*! StateRestore 1.2.2
- * © SpryMedia Ltd - datatables.net/license
- */
- setJQuery$1($);
- setJQuery($);
- $.fn.dataTable.StateRestore = StateRestore;
- $.fn.DataTable.StateRestore = StateRestore;
- $.fn.dataTable.StateRestoreCollection = StateRestoreCollection;
- $.fn.DataTable.StateRestoreCollection = StateRestoreCollection;
- var apiRegister = DataTable.Api.register;
- apiRegister('stateRestore()', function () {
- return this;
- });
- apiRegister('stateRestore.state()', function (identifier) {
- var ctx = this.context[0];
- if (!ctx._stateRestore) {
- var api = DataTable.Api(ctx);
- var src = new DataTable.StateRestoreCollection(api, {});
- _stateRegen(api, src);
- }
- this[0] = ctx._stateRestore.getState(identifier);
- return this;
- });
- apiRegister('stateRestore.state.add()', function (identifier, options) {
- var ctx = this.context[0];
- if (!ctx._stateRestore) {
- var api = DataTable.Api(ctx);
- var src = new DataTable.StateRestoreCollection(api, {});
- _stateRegen(api, src);
- }
- if (!ctx._stateRestore.c.create) {
- return this;
- }
- if (ctx._stateRestore.addState) {
- var states = ctx._stateRestore.s.states;
- var ids = [];
- for (var _i = 0, states_1 = states; _i < states_1.length; _i++) {
- var intState = states_1[_i];
- ids.push(intState.s.identifier);
- }
- ctx._stateRestore.addState(identifier, ids, options);
- return this;
- }
- });
- apiRegister('stateRestore.states()', function (ids) {
- var ctx = this.context[0];
- if (!ctx._stateRestore) {
- var api = DataTable.Api(ctx);
- var src = new DataTable.StateRestoreCollection(api, {});
- _stateRegen(api, src);
- }
- this.length = 0;
- this.push.apply(this, ctx._stateRestore.getStates(ids));
- return this;
- });
- apiRegister('stateRestore.state().save()', function () {
- var ctx = this[0];
- // Check if saving states is allowed
- if (ctx.c.save) {
- ctx.save();
- }
- return this;
- });
- apiRegister('stateRestore.state().rename()', function (newIdentifier) {
- var ctx = this.context[0];
- var state = this[0];
- // Check if renaming states is allowed
- if (state.c.save) {
- var states = ctx._stateRestore.s.states;
- var ids = [];
- for (var _i = 0, states_2 = states; _i < states_2.length; _i++) {
- var intState = states_2[_i];
- ids.push(intState.s.identifier);
- }
- state.rename(newIdentifier, ids);
- }
- return this;
- });
- apiRegister('stateRestore.state().load()', function () {
- var ctx = this[0];
- ctx.load();
- return this;
- });
- apiRegister('stateRestore.state().remove()', function (skipModal) {
- var ctx = this[0];
- // Check if removal of states is allowed
- if (ctx.c.remove) {
- ctx.remove(skipModal);
- }
- return this;
- });
- apiRegister('stateRestore.states().remove()', function (skipModal) {
- var _this = this;
- var removeAllCallBack = function (skipModalIn) {
- var success = true;
- var that = _this.toArray();
- while (that.length > 0) {
- var set = that[0];
- if (set !== undefined && set.c.remove) {
- var tempSuccess = set.remove(skipModalIn);
- if (tempSuccess !== true) {
- success = tempSuccess;
- }
- else {
- that.splice(0, 1);
- }
- }
- else {
- break;
- }
- }
- return success;
- };
- if (this.context[0]._stateRestore && this.context[0]._stateRestore.c.remove) {
- if (skipModal) {
- removeAllCallBack(skipModal);
- }
- else {
- this.context[0]._stateRestore.removeAll(removeAllCallBack);
- }
- }
- return this;
- });
- apiRegister('stateRestore.activeStates()', function () {
- var ctx = this.context[0];
- this.length = 0;
- if (!ctx._stateRestore) {
- var api = DataTable.Api(ctx);
- var src = new DataTable.StateRestoreCollection(api, {});
- _stateRegen(api, src);
- }
- if (ctx._stateRestore) {
- this.push.apply(this, ctx._stateRestore.findActive());
- }
- return this;
- });
- DataTable.ext.buttons.stateRestore = {
- action: function (e, dt, node, config) {
- config._stateRestore.load();
- node.blur();
- },
- config: {
- split: ['updateState', 'renameState', 'removeState']
- },
- text: function (dt) {
- return dt.i18n('buttons.stateRestore', 'State %d', dt.stateRestore.states()[0].length + 1);
- }
- };
- DataTable.ext.buttons.updateState = {
- action: function (e, dt, node, config) {
- $('div.dt-button-background').click();
- config.parent._stateRestore.save();
- },
- text: function (dt) {
- return dt.i18n('buttons.updateState', 'Update');
- }
- };
- DataTable.ext.buttons.savedStates = {
- buttons: [],
- extend: 'collection',
- init: function (dt, node, config) {
- dt.on('stateRestore-change', function () {
- dt.button(node).text(dt.i18n('buttons.savedStates', 'Saved States', dt.stateRestore.states().length));
- });
- if (dt.settings()[0]._stateRestore === undefined) {
- _buttonInit(dt, config);
- }
- },
- name: 'SaveStateRestore',
- text: function (dt) {
- return dt.i18n('buttons.savedStates', 'Saved States', 0);
- }
- };
- DataTable.ext.buttons.savedStatesCreate = {
- buttons: [],
- extend: 'collection',
- init: function (dt, node, config) {
- dt.on('stateRestore-change', function () {
- dt.button(node).text(dt.i18n('buttons.savedStates', 'Saved States', dt.stateRestore.states().length));
- });
- if (dt.settings()[0]._stateRestore === undefined) {
- if (config.config === undefined) {
- config.config = {};
- }
- config.config._createInSaved = true;
- _buttonInit(dt, config);
- }
- },
- name: 'SaveStateRestore',
- text: function (dt) {
- return dt.i18n('buttons.savedStates', 'Saved States', 0);
- }
- };
- DataTable.ext.buttons.createState = {
- action: function (e, dt, node, config) {
- e.stopPropagation();
- var stateRestoreOpts = dt.settings()[0]._stateRestore.c;
- var language = dt.settings()[0].oLanguage;
- // If creation/saving is not allowed then return
- if (!stateRestoreOpts.create || !stateRestoreOpts.save) {
- return;
- }
- var prevStates = dt.stateRestore.states().toArray();
- // Create a replacement regex based on the i18n values
- var defaultString = language.buttons !== undefined && language.buttons.stateRestore !== undefined ?
- language.buttons.stateRestore :
- 'State ';
- var replaceRegex;
- if (defaultString.indexOf('%d') === defaultString.length - 3) {
- replaceRegex = new RegExp(defaultString.replace(/%d/g, ''));
- }
- else {
- var splitString = defaultString.split('%d');
- replaceRegex = [];
- for (var _i = 0, splitString_1 = splitString; _i < splitString_1.length; _i++) {
- var split = splitString_1[_i];
- replaceRegex.push(new RegExp(split));
- }
- }
- var getId = function (identifier) {
- var id;
- if (Array.isArray(replaceRegex)) {
- id = identifier;
- for (var _i = 0, replaceRegex_1 = replaceRegex; _i < replaceRegex_1.length; _i++) {
- var reg = replaceRegex_1[_i];
- id = id.replace(reg, '');
- }
- }
- else {
- id = identifier.replace(replaceRegex, '');
- }
- // If the id after replacement is not a number, or the length is the same as before,
- // it has been customised so return 0
- if (isNaN(+id) || id.length === identifier) {
- return 0;
- }
- // Otherwise return the number that has been assigned previously
- else {
- return +id;
- }
- };
- // Extract the numbers from the identifiers that use the standard naming convention
- var identifiers = prevStates
- .map(function (state) { return getId(state.s.identifier); })
- .sort(function (a, b) { return +a < +b ?
- 1 :
- +a > +b ?
- -1 :
- 0; });
- var lastNumber = identifiers[0];
- dt.stateRestore.state.add(dt.i18n('buttons.stateRestore', 'State %d', lastNumber !== undefined ? lastNumber + 1 : 1), config.config);
- var states = dt.stateRestore.states().sort(function (a, b) {
- var aId = +getId(a.s.identifier);
- var bId = +getId(b.s.identifier);
- return aId > bId ?
- 1 :
- aId < bId ?
- -1 :
- 0;
- });
- var button = dt.button('SaveStateRestore:name');
- var stateButtons = button[0] !== undefined && button[0].inst.c.buttons[0].buttons !== undefined ?
- button[0].inst.c.buttons[0].buttons :
- [];
- // remove any states from the previous rebuild - if they are still there they will be added later
- for (var i = 0; i < stateButtons.length; i++) {
- if (stateButtons[i].extend === 'stateRestore') {
- stateButtons.splice(i, 1);
- i--;
- }
- }
- if (stateRestoreOpts._createInSaved) {
- stateButtons.push('createState');
- stateButtons.push('');
- }
- for (var _a = 0, states_3 = states; _a < states_3.length; _a++) {
- var state = states_3[_a];
- var split = Object.assign([], stateRestoreOpts.splitSecondaries);
- if (split.includes('updateState') && !stateRestoreOpts.save) {
- split.splice(split.indexOf('updateState'), 1);
- }
- if (split.includes('renameState') &&
- (!stateRestoreOpts.save || !stateRestoreOpts.rename)) {
- split.splice(split.indexOf('renameState'), 1);
- }
- if (split.includes('removeState') && !stateRestoreOpts.remove) {
- split.splice(split.indexOf('removeState'), 1);
- }
- if (split.length > 0 &&
- !split.includes('' + state.s.identifier + ' ')) {
- split.unshift('' + state.s.identifier + ' ');
- }
- stateButtons.push({
- _stateRestore: state,
- attr: {
- title: state.s.identifier
- },
- config: {
- split: split
- },
- extend: 'stateRestore',
- text: state.s.identifier
- });
- }
- dt.button('SaveStateRestore:name').collectionRebuild(stateButtons);
- node.blur();
- // Need to disable the removeAllStates button if there are no states and it is present
- var buttons = dt.buttons();
- for (var _b = 0, buttons_1 = buttons; _b < buttons_1.length; _b++) {
- var butt = buttons_1[_b];
- if ($(butt.node).hasClass('dtsr-removeAllStates')) {
- if (states.length === 0) {
- dt.button(butt.node).disable();
- }
- else {
- dt.button(butt.node).enable();
- }
- }
- }
- },
- init: function (dt, node, config) {
- if (dt.settings()[0]._stateRestore === undefined && dt.button('SaveStateRestore:name').length > 1) {
- _buttonInit(dt, config);
- }
- },
- text: function (dt) {
- return dt.i18n('buttons.createState', 'Create State');
- }
- };
- DataTable.ext.buttons.removeState = {
- action: function (e, dt, node, config) {
- config.parent._stateRestore.remove();
- node.blur();
- },
- text: function (dt) {
- return dt.i18n('buttons.removeState', 'Remove');
- }
- };
- DataTable.ext.buttons.removeAllStates = {
- action: function (e, dt, node) {
- dt.stateRestore.states().remove(true);
- node.blur();
- },
- className: 'dt-button dtsr-removeAllStates',
- init: function (dt, node) {
- if (!dt.settings()[0]._stateRestore || dt.stateRestore.states().length === 0) {
- $(node).addClass('disabled');
- }
- },
- text: function (dt) {
- return dt.i18n('buttons.removeAllStates', 'Remove All States');
- }
- };
- DataTable.ext.buttons.renameState = {
- action: function (e, dt, node, config) {
- var states = dt.settings()[0]._stateRestore.s.states;
- var ids = [];
- for (var _i = 0, states_4 = states; _i < states_4.length; _i++) {
- var state = states_4[_i];
- ids.push(state.s.identifier);
- }
- config.parent._stateRestore.rename(undefined, ids);
- node.blur();
- },
- text: function (dt) {
- return dt.i18n('buttons.renameState', 'Rename');
- }
- };
- function _init(settings, options) {
- if (options === void 0) { options = null; }
- var api = new DataTable.Api(settings);
- var opts = options
- ? options
- : api.init().stateRestore || DataTable.defaults.stateRestore;
- var stateRestore = new StateRestoreCollection(api, opts);
- _stateRegen(api, stateRestore);
- return stateRestore;
- }
- /**
- * Initialisation function if initialising using a button
- *
- * @param dt The datatables instance
- * @param config the config for the button
- */
- function _buttonInit(dt, config) {
- var SRC = new DataTable.StateRestoreCollection(dt, config.config);
- _stateRegen(dt, SRC);
- }
- function _stateRegen(dt, src) {
- var states = dt.stateRestore.states();
- var button = dt.button('SaveStateRestore:name');
- var stateButtons = [];
- // Need to get the original configuration object, so we can rebuild it
- // It might be nested, so need to traverse down the tree
- if (button[0]) {
- var idxs = button.index().split('-');
- stateButtons = button[0].inst.c.buttons;
- for (var i = 0; i < idxs.length; i++) {
- if (stateButtons[idxs[i]].buttons) {
- stateButtons = stateButtons[idxs[i]].buttons;
- }
- else {
- stateButtons = [];
- break;
- }
- }
- }
- var stateRestoreOpts = dt.settings()[0]._stateRestore.c;
- // remove any states from the previous rebuild - if they are still there they will be added later
- for (var i = 0; i < stateButtons.length; i++) {
- if (stateButtons[i].extend === 'stateRestore') {
- stateButtons.splice(i, 1);
- i--;
- }
- }
- if (stateRestoreOpts._createInSaved) {
- stateButtons.push('createState');
- }
- if (states === undefined || states.length === 0) {
- stateButtons.push('' +
- dt.i18n('stateRestore.emptyStates', src.c.i18n.emptyStates) +
- ' ');
- }
- else {
- for (var _i = 0, states_5 = states; _i < states_5.length; _i++) {
- var state = states_5[_i];
- var split = Object.assign([], stateRestoreOpts.splitSecondaries);
- if (split.includes('updateState') && !stateRestoreOpts.save) {
- split.splice(split.indexOf('updateState'), 1);
- }
- if (split.includes('renameState') &&
- (!stateRestoreOpts.save || !stateRestoreOpts.rename)) {
- split.splice(split.indexOf('renameState'), 1);
- }
- if (split.includes('removeState') && !stateRestoreOpts.remove) {
- split.splice(split.indexOf('removeState'), 1);
- }
- if (split.length > 0 &&
- !split.includes('' + state.s.identifier + ' ')) {
- split.unshift('' + state.s.identifier + ' ');
- }
- stateButtons.push({
- _stateRestore: state,
- attr: {
- title: state.s.identifier
- },
- config: {
- split: split
- },
- extend: 'stateRestore',
- text: state.s.identifier
- });
- }
- }
- dt.button('SaveStateRestore:name').collectionRebuild(stateButtons);
- // Need to disable the removeAllStates button if there are no states and it is present
- var buttons = dt.buttons();
- for (var _a = 0, buttons_2 = buttons; _a < buttons_2.length; _a++) {
- var butt = buttons_2[_a];
- if ($(butt.node).hasClass('dtsr-removeAllStates')) {
- if (states.length === 0) {
- dt.button(butt.node).disable();
- }
- else {
- dt.button(butt.node).enable();
- }
- }
- }
- }
- // Attach a listener to the document which listens for DataTables initialisation
- // events so we can automatically initialise
- $(document).on('preInit.dt.dtsr', function (e, settings) {
- if (e.namespace !== 'dt') {
- return;
- }
- if (settings.oInit.stateRestore ||
- DataTable.defaults.stateRestore) {
- if (!settings._stateRestore) {
- _init(settings, null);
- }
- }
- });
-
-})();
-
-
-return DataTable;
-}));
diff --git a/public/assets/js/DataTables/StateRestore-1.2.2/js/dataTables.stateRestore.min.js b/public/assets/js/DataTables/StateRestore-1.2.2/js/dataTables.stateRestore.min.js
deleted file mode 100644
index 93ed4e6..0000000
--- a/public/assets/js/DataTables/StateRestore-1.2.2/js/dataTables.stateRestore.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! StateRestore 1.2.2
- * © SpryMedia Ltd - datatables.net/license
- */
-!function(s){var o,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return s(e,window,document)}):"object"==typeof exports?(o=require("jquery"),a=function(e,t){t.fn.dataTable||require("datatables.net")(e,t)},"undefined"!=typeof window?module.exports=function(e,t){return e=e||window,t=t||o(e),a(e,t),s(t,0,e.document)}:(a(window,o),module.exports=s(o,window,window.document))):s(jQuery,window,document)}(function(R,e,g,k){"use strict";var u,m,f,i,p,s,t,c=R.fn.dataTable;function n(e,t,s,o,a,i){if(void 0===o&&(o=k),void 0===a&&(a=!1),void 0===i&&(i=function(){return null}),!m||!m.versionCheck||!m.versionCheck("1.10.0"))throw new Error("StateRestore requires DataTables 1.10 or newer");if(!m.Buttons)throw new Error("StateRestore requires Buttons");e=new m.Api(e);this.classes=u.extend(!0,{},n.classes),this.c=u.extend(!0,{},n.defaults,t),this.s={dt:e,identifier:s,isPreDefined:a,savedState:null,tableId:o&&o.stateRestore?o.stateRestore.tableId:k},this.dom={background:u('
'),closeButton:u('x
'),confirmation:u('
'),confirmationButton:u(''),confirmationTitleRow:u('
'),dtContainer:u(this.s.dt.table().container()),duplicateError:u(''+this.s.dt.i18n("stateRestore.duplicateError",this.c.i18n.duplicateError)+" "),emptyError:u(''+this.s.dt.i18n("stateRestore.emptyError",this.c.i18n.emptyError)+" "),removeContents:u(''+this.s.dt.i18n("stateRestore.removeConfirm",this.c.i18n.removeConfirm).replace(/%s/g,this.s.identifier)+"
"),removeError:u(''+this.s.dt.i18n("stateRestore.removeError",this.c.i18n.removeError)+" "),removeTitle:u(''+this.s.dt.i18n("stateRestore.removeTitle",this.c.i18n.removeTitle)+" "),renameContents:u(''+this.s.dt.i18n("stateRestore.renameLabel",this.c.i18n.renameLabel).replace(/%s/g,this.s.identifier)+"
"),renameInput:u(' '),renameTitle:u(''+this.s.dt.i18n("stateRestore.renameTitle",this.c.i18n.renameTitle)+" ")},this.save(o,i)}function r(e,t){var o=this;if(!i||!i.versionCheck||!i.versionCheck("1.10.0"))throw new Error("StateRestore requires DataTables 1.10 or newer");if(!i.Buttons)throw new Error("StateRestore requires Buttons");var s,a,e=new i.Api(e);if(this.classes=f.extend(!0,{},r.classes),e.settings()[0]._stateRestore===k)return this.c=f.extend(!0,{},r.defaults,t),this.s={dt:e,hasColReorder:i.ColReorder!==k,hasScroller:i.Scroller!==k,hasSearchBuilder:i.SearchBuilder!==k,hasSearchPanes:i.SearchPanes!==k,hasSelect:i.select!==k,states:[]},this.s.dt.on("xhr",function(e,t,s){s&&s.stateRestore&&o._addPreDefined(s.stateRestore)}),this.dom={background:f('
'),closeButton:f('x
'),colReorderToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.colReorder",this.c.i18n.creationModal.colReorder)+"
"),columnsSearchToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.columns.search",this.c.i18n.creationModal.columns.search)+"
"),columnsVisibleToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.columns.visible",this.c.i18n.creationModal.columns.visible)+"
"),confirmation:f('
'),confirmationTitleRow:f('
'),createButtonRow:f(''+this.s.dt.i18n("stateRestore.creationModal.button",this.c.i18n.creationModal.button)+"
"),creation:f('
'),creationForm:f('
'),creationTitle:f('
'+this.s.dt.i18n("stateRestore.creationModal.title",this.c.i18n.creationModal.title)+" "),dtContainer:f(this.s.dt.table().container()),duplicateError:f(''+this.s.dt.i18n("stateRestore.duplicateError",this.c.i18n.duplicateError)+" "),emptyError:f(''+this.s.dt.i18n("stateRestore.emptyError",this.c.i18n.emptyError)+" "),lengthToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.length",this.c.i18n.creationModal.length)+"
"),nameInputRow:f(''+this.s.dt.i18n("stateRestore.creationModal.name",this.c.i18n.creationModal.name)+'
'),orderToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.order",this.c.i18n.creationModal.order)+"
"),pagingToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.paging",this.c.i18n.creationModal.paging)+"
"),removeContents:f('
'),removeTitle:f('
'+this.s.dt.i18n("stateRestore.removeTitle",this.c.i18n.removeTitle)+" "),scrollerToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.scroller",this.c.i18n.creationModal.scroller)+"
"),searchBuilderToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.searchBuilder",this.c.i18n.creationModal.searchBuilder)+"
"),searchPanesToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.searchPanes",this.c.i18n.creationModal.searchPanes)+"
"),searchToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.search",this.c.i18n.creationModal.search)+"
"),selectToggle:f(''+this.s.dt.i18n("stateRestore.creationModal.select",this.c.i18n.creationModal.select)+"
"),toggleLabel:f(''+this.s.dt.i18n("stateRestore.creationModal.toggleLabel",this.c.i18n.creationModal.toggleLabel)+" ")},(e.settings()[0]._stateRestore=this)._searchForStates(),this._addPreDefined(this.c.preDefined),a={action:"load"},"function"==typeof this.c.ajax?s=function(){"function"==typeof o.c.ajax&&o.c.ajax.call(o.s.dt,a,function(e){return o._addPreDefined(e)})}:"string"==typeof this.c.ajax&&(s=function(){f.ajax({data:a,success:function(e){o._addPreDefined(e)},type:"POST",url:o.c.ajax})}),"function"==typeof s&&(this.s.dt.settings()[0]._bInitComplete?s():this.s.dt.one("preInit.dtsr",function(){s()})),this.s.dt.on("destroy.dtsr",function(){o.destroy()}),this.s.dt.on("draw.dtsr buttons-action.dtsr",function(){return o.findActive()}),this}function o(e,t){l(e,new c.StateRestoreCollection(e,t.config))}function l(e,t){var s=e.stateRestore.states(),o=e.button("SaveStateRestore:name"),a=[];if(o[0])for(var i=o.index().split("-"),a=o[0].inst.c.buttons,n=0;n'+e.i18n("stateRestore.emptyStates",t.c.i18n.emptyStates)+"");else for(var c=0,l=s;c"+d.s.identifier+"")&&h.unshift(""+d.s.identifier+" "),a.push({_stateRestore:d,attr:{title:d.s.identifier},config:{split:h},extend:"stateRestore",text:d.s.identifier})}e.button("SaveStateRestore:name").collectionRebuild(a);for(var u=0,m=e.buttons();u'+a.s.dt.i18n("stateRestore.removeConfirm",a.c.i18n.removeConfirm).replace(/%s/g,a.s.identifier)+" "),a.dom.confirmation.trigger("dtsr-rename"),a.dom.background.click(),a.dom.confirmation.remove(),u(g).unbind("keyup",function(e){return a._keyupFunction(e)}),a.dom.confirmationButton.off("click")}e={action:"rename",stateRestore:((e={})[a.s.identifier]=s,e)};if(a.c.ajax)"string"==typeof a.c.ajax&&a.s.dt.settings()[0]._bInitComplete?u.ajax({data:e,success:t,type:"POST",url:a.c.ajax}):"function"==typeof a.c.ajax&&a.c.ajax.call(a.s.dt,e,t);else try{localStorage.removeItem("DataTables_stateRestore_"+a.s.identifier+"_"+location.pathname+(a.s.tableId?"_"+a.s.tableId:"")),t()}catch(e){return a.dom.confirmation.children("."+a.classes.modalError).remove(),a.dom.confirmation.append(a.dom.removeError),!1}return!0};if(null!==s){if(o.includes(s))throw new Error(this.s.dt.i18n("stateRestore.duplicateError",this.c.i18n.duplicateError));if(0===s.length)throw new Error(this.s.dt.i18n("stateRestore.emptyError",this.c.i18n.emptyError));this.dom.confirmation.appendTo(this.dom.dtContainer),u(this.s.dt.table().node()).trigger("dtsr-modal-inserted"),e(),this.dom.confirmation.remove()}else this.dom.renameInput.val(this.s.identifier),this.dom.renameContents.append(this.dom.renameInput),this._newModal(this.dom.renameTitle,this.s.dt.i18n("stateRestore.renameButton",this.c.i18n.renameButton),e,this.dom.renameContents)}},n.prototype.save=function(e,t,s){var o,a,i,n=this;if(void 0===s&&(s=!0),this.c.save){if(this.s.dt.state.save(),e===k)o=this.s.dt.state();else{if("object"!=typeof e)return;o=e}if(o.stateRestore?(o.stateRestore.isPreDefined=this.s.isPreDefined,o.stateRestore.state=this.s.identifier,o.stateRestore.tableId=this.s.tableId):o.stateRestore={isPreDefined:this.s.isPreDefined,state:this.s.identifier,tableId:this.s.tableId},this.s.savedState=o,this.c.saveState.order||(this.s.savedState.order=k),this.c.saveState.search||(this.s.savedState.search=k),this.c.saveState.columns&&this.s.savedState.columns)for(var r=0,c=this.s.savedState.columns.length;r