/*!*************************************************** * datatables.mark.js v2.0.2 * https://github.com/julmot/datatables.mark.js * Copyright (c) 2016–2020, Julian Kühnel * Released under the MIT license https://git.io/voRZ7 *****************************************************/ 'use strict'; ((factory, window, document) => { if (typeof exports === 'object') { const jquery = require('jquery'); require('datatables.net'); require('mark.js/dist/jquery.mark.js'); module.exports = factory(window, document, jquery); } else if (typeof define === 'function' && define.amd) { define(['jquery', 'datatables.net', 'markjs'], jQuery => { return factory(window, document, jQuery); }); } else { factory(window, document, jQuery); } })((window, document, $) => { class MarkDataTables { 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() { const ev = 'draw.dt.dth column-visibility.dt.dth column-reorder.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(); $(this.instance.table().body()).unmark(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).mark(searchVal, this.options); }); } }); } } $(document).on('init.dt.dth', (event, settings) => { if (event.namespace !== 'dt') { return; } const dtInstance = $.fn.dataTable.Api(settings); let options = null; if (dtInstance.init().mark) { options = dtInstance.init().mark; } else if ($.fn.dataTable.defaults.mark) { options = $.fn.dataTable.defaults.mark; } if (options === null) { return; } new MarkDataTables(dtInstance, options); }); }, window, document);