aboutsummaryrefslogtreecommitdiff
path: root/uploader/static/js/datatables.js
blob: a72245c613f710542942dabd2bd7689f490f8784 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/** Handlers for events in datatables **/

var addTableLength = (menuList, lengthToAdd, dataLength) => {
    if(dataLength >= lengthToAdd) {
        newList = structuredClone(menuList);//menuList.slice(0, menuList.length); // shallow copy
        newList.push(lengthToAdd);
        return newList;
    }
    return menuList;
};

var defaultLengthMenu = (data) => {
    menuList = []
    var lengths = [10, 25, 50, 100, 1000, data.length];
    lengths.forEach((len) => {
        menuList = addTableLength(menuList, len, data.length);
    });
    return menuList;
};

var buildDataTable = (tableId, data = [], columns = [], userSettings = {}) => {
    var defaultSettings = {
        responsive: true,
        layout: {
            topStart: null,
            topEnd: null,
            bottomStart: null,
            bottomEnd: null,
        },
        select: true,
        /* == Scroller settings == */
        scroller: true,
        paging: true, // MUST be true for scroller to work
        scrollY: "750px",
        deferRender: true,
        /* == END: Scroller settings == */
        lengthMenu: defaultLengthMenu(data),
        language: {
            processing: "Processing… Please wait.",
            loadingRecords: "Loading table data… Please wait.",
            lengthMenu: "",
            info: ""
        },
        data: data,
        columns: columns,
        drawCallback: (settings) => {
            $(this[0]).find("tbody tr").each((idx, row) => {
                var arow = $(row);
                var checkboxOrRadio = arow.find(".chk-row-select");
                if (checkboxOrRadio) {
                    if (arow.hasClass("selected")) {
                        checkboxOrRadio.prop("checked", true);
                    } else {
                        checkboxOrRadio.prop("checked", false);
                    }
                }
            });
        }
    }
    var theDataTable = $(tableId).DataTable({
        ...defaultSettings,
        ...userSettings
    });
    theDataTable.on("select", (event, datatable, type, cell, originalEvent) => {
        datatable.rows({selected: true}).nodes().each((node, index) => {
            $(node).find(".chk-row-select").prop("checked", true)
        });
    });
    theDataTable.on("deselect", (event, datatable, type, cell, originalEvent) => {
        datatable.rows({selected: false}).nodes().each((node, index) => {
            $(node).find(".chk-row-select").prop("checked", false)
        });
    });
    return theDataTable;
};