allerta-vvf/server/resources/src/table_engine_datatables.js

75 lines
2.8 KiB
JavaScript

import jsZip from "jszip";
import pdfMake from "pdfmake/build/pdfmake";
import pdfFonts from "pdfmake/build/vfs_fonts";
import "datatables.net-bs4/js/dataTables.bootstrap4.min.js";
import "datatables.net-bs4/css/dataTables.bootstrap4.min.css";
import "datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js";
import "datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css";
import "datatables.net-buttons";
import "datatables.net-buttons-bs4/js/buttons.bootstrap4.js";
import "datatables.net-buttons-bs4/css/buttons.bootstrap4.css";
import "datatables.net-buttons/js/buttons.html5.js";
import "datatables.net-buttons/js/buttons.print.js";
window.JSZip = jsZip;
pdfMake.vfs = pdfFonts.pdfMake.vfs;
export default async function fillTable ({ data, replaceLatLngWithMap = false, callback = false }) {
$("#table_body").empty();
$.each(data, function (rowNum, item) {
const row = document.createElement("tr");
row.id = "row-" + rowNum;
$.each(item, function (cell_num, i) {
if (i !== null) {
if (replaceLatLngWithMap && i.match(/[+-]?\d+([.]\d+)?[;][+-]?\d+([.]\d+)?/gm)) { /* credits to @visoom https://github.com/visoom */
const lat = i.split(";")[0];
const lng = i.split(";")[1];
const mapDiv = document.createElement("div");
mapDiv.className = "map";
mapDiv.id = "map-" + rowNum;
const mapScript = document.createElement("script");
mapScript.appendChild(document.createTextNode("loadMap(" + lat + ", " + lng + ", \"map-" + rowNum + "\", false)"));
mapDiv.appendChild(mapScript);
const cell = document.createElement("td");
cell.appendChild(mapDiv);
row.appendChild(cell);
} else {
const cell = document.createElement("td");
cell.innerHTML = i;
row.appendChild(cell);
}
}
});
document.getElementById("table_body").appendChild(row);
});
let loadedLanguage = {};
try {
let language = navigator.language || navigator.userLanguage;
language = language.toLowerCase().replace("_", "-");
language = "it_it";
loadedLanguage = await import(`datatables.net-plugins/i18n/${language}.json`)
.then(({ default: _ }) => {
return _;
});
} catch (error) {
console.error("Error loading DataTables translation:");
console.log(error);
loadedLanguage = {};
}
if (!$.fn.DataTable.isDataTable("#table")) {
var setableDt = $("#table").DataTable({
responsive: true,
language: loadedLanguage,
buttons: ["excel", "pdf", "csv"]
});
setableDt.buttons().container()
.appendTo("#table_wrapper :nth-child(1):eq(0)");
if (callback !== false) {
callback(setableDt);
}
} else {
setableDt.rows().invalidate();
}
window.setableDt = setableDt;
}