|
|
|
|
/*!***************************************************
|
|
|
|
|
* datatables.mark.js v3.0.0
|
|
|
|
|
* https://github.com/julmot/datatables.mark.js
|
|
|
|
|
* Copyright (c) 2016–2020, Julian Kühnel, SpryMedia Ltd
|
|
|
|
|
* Released under the MIT license https://git.io/voRZ7
|
|
|
|
|
*****************************************************/
|
|
|
|
|
|
|
|
|
|
(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 ) {
|
|
|
|
|
'use strict';
|
|
|
|
|
var DataTable = $.fn.dataTable;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MarkDataTables {
|
|
|
|
|
instance;
|
|
|
|
|
options;
|
|
|
|
|
intervalThreshold;
|
|
|
|
|
intervalMs;
|
|
|
|
|
constructor(dtInstance, options) {
|
|
|
|
|
if (!$.fn.mark || !$.fn.unmark) {
|
|
|
|
|
throw new Error('jquery.mark.js is necessary for datatables.mark.js');
|
|
|
|
|
}
|
|
|
|
|
this.instance = dtInstance;
|
|
|
|
|
this.options = typeof options === 'object' ? options : {};
|
|
|
|
|
this.intervalThreshold = 49;
|
|
|
|
|
this.intervalMs = 300;
|
|
|
|
|
this.initMarkListener();
|
|
|
|
|
}
|
|
|
|
|
initMarkListener() {
|
|
|
|
|
let ev = 'draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth';
|
|
|
|
|
ev += ' responsive-display.dt.dth';
|
|
|
|
|
let intvl = null;
|
|
|
|
|
this.instance.on(ev, () => {
|
|
|
|
|
const rows = this.instance
|
|
|
|
|
.rows({
|
|
|
|
|
filter: 'applied',
|
|
|
|
|
page: 'current',
|
|
|
|
|
})
|
|
|
|
|
.nodes().length;
|
|
|
|
|
if (rows > this.intervalThreshold) {
|
|
|
|
|
clearTimeout(intvl);
|
|
|
|
|
intvl = setTimeout(() => {
|
|
|
|
|
this.mark();
|
|
|
|
|
}, this.intervalMs);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
this.mark();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.instance.on('destroy', () => {
|
|
|
|
|
this.instance.off(ev);
|
|
|
|
|
});
|
|
|
|
|
this.mark();
|
|
|
|
|
}
|
|
|
|
|
mark() {
|
|
|
|
|
const globalSearch = this.instance.search();
|
|
|
|
|
const $tableBody = $(this.instance.table().body());
|
|
|
|
|
$tableBody.unmark(this.options);
|
|
|
|
|
if (this.instance.table().rows({ search: 'applied' }).data().length) {
|
|
|
|
|
$tableBody.mark(globalSearch, this.options);
|
|
|
|
|
}
|
|
|
|
|
this.instance
|
|
|
|
|
.columns({
|
|
|
|
|
search: 'applied',
|
|
|
|
|
page: 'current',
|
|
|
|
|
})
|
|
|
|
|
.nodes()
|
|
|
|
|
.each((nodes, colIndex) => {
|
|
|
|
|
const columnSearch = this.instance.column(colIndex).search(), searchVal = columnSearch || globalSearch;
|
|
|
|
|
if (searchVal) {
|
|
|
|
|
nodes.forEach(node => {
|
|
|
|
|
$(node).unmark(this.options).mark(searchVal, this.options);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$(document).on('init.dt.dth', (event, settings) => {
|
|
|
|
|
if (event.namespace !== 'dt') {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const dtInstance = new DataTable.Api(settings);
|
|
|
|
|
let options = false;
|
|
|
|
|
if (dtInstance.init().mark) {
|
|
|
|
|
options = dtInstance.init().mark;
|
|
|
|
|
}
|
|
|
|
|
else if (DataTable.defaults.mark) {
|
|
|
|
|
options = DataTable.defaults.mark;
|
|
|
|
|
}
|
|
|
|
|
if (!options) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
new MarkDataTables(dtInstance, options);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return DataTable;
|
|
|
|
|
}));
|