You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.2 KiB
JavaScript
97 lines
3.2 KiB
JavaScript
/*!***************************************************
|
|
* datatables.mark.js v1.0.1
|
|
* https://github.com/julmot/datatables.mark.js
|
|
* Copyright (c) 2016, Julian Motz
|
|
* Released under the MIT license https://git.io/voRZ7
|
|
*****************************************************/
|
|
|
|
"use strict";
|
|
|
|
((factory, window, document) => {
|
|
if (typeof define === "function" && define.amd) {
|
|
define(["jquery", "datatables", "markjs"], jQuery => {
|
|
return factory(window, document, jQuery);
|
|
});
|
|
} else if (typeof exports === "object") {
|
|
require("datatables");
|
|
require("markjs");
|
|
factory(window, document, require("jquery"));
|
|
} else {
|
|
factory(window, document, jQuery);
|
|
}
|
|
})((window, document, $) => {
|
|
class Mark_DataTables {
|
|
constructor(dtInstance, options) {
|
|
if (typeof $.fn.mark !== "function" || typeof $.fn.unmark !== "function") {
|
|
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 Mark_DataTables(dtInstance, options);
|
|
});
|
|
}, window, document);
|