View | Details | Raw Unified | Return to bug 26553
Collapse All | Expand All

(-)a/koha-tmpl/opac-tmpl/bootstrap/en/includes/columns_settings.inc (-158 lines)
Lines 1-157 Link Here
1
[% USE TablesSettings %]
2
3
<script>
4
5
function _dt_visibility(table_settings, table_dt){
6
    let hidden_ids = [];
7
    if ( table_settings ) {
8
        var columns_settings = table_settings.columns;
9
        let i = 0;
10
        let use_names = $(table_dt.table().node()).data('bKohaColumnsUseNames');
11
        if ( use_names ) {
12
            let hidden_columns = table_settings.columns.filter(c => c.is_hidden);
13
            if (!hidden_columns.length) return [];
14
            table_dt.columns(hidden_columns.map(c => "[data-colname='%s']".format(c.columnname)).join(',')).every(function(){
15
                hidden_ids.push(this.index());
16
            });
17
        } else {
18
            $(columns_settings).each( function(i, c) {
19
                if ( c.is_hidden == '1' ) {
20
                    hidden_ids.push(i);
21
                }
22
            });
23
        }
24
    }
25
    return hidden_ids;
26
}
27
28
function KohaTable(selector, dt_parameters, table_settings) {
29
30
    // By default we include all visible columns in exports and print unless they have the "noExport" class
31
    var exportColumns = ":visible:not(.noExport)";
32
    if( dt_parameters.hasOwnProperty("exportColumns") ){
33
        // A custom buttons configuration has been passed from the page
34
        exportColumns = dt_parameters["exportColumns"];
35
    }
36
    // Data which has the "noExport" class should not appear in print or export
37
    var export_format = {
38
        body: function ( data, row, column, node ) {
39
            var newnode = $(node);
40
41
            if ( newnode.find(".noExport").length > 0 ) {
42
                newnode = newnode.clone();
43
                newnode.find(".noExport").remove();
44
            }
45
46
            return newnode.text().replace( /\n/g, ' ' ).trim();
47
        }
48
    }
49
50
    // Add a "Clear filter" button to table filter form field
51
    dt_parameters[ "buttons" ] = [
52
        {
53
            fade: 100,
54
            className: "dt_button_clear_filter",
55
            titleAttr: _("Clear filter"),
56
            enabled: false,
57
            text: '<i class="fa fa-lg fa-times" aria-hidden="true"></i> <span class="dt-button-text">' + _("Clear filter") + '</span>',
58
            action: function ( e, dt, node, config ) {
59
                dt.search( "" ).draw("page");
60
                node.addClass("disabled");
61
            }
62
        },
63
        {
64
            extend: 'csvHtml5',
65
            text: _("CSV"),
66
            exportOptions: {
67
                columns: exportColumns,
68
                format: export_format
69
            },
70
        },
71
        {
72
            extend: 'copyHtml5',
73
            text: _("Copy"),
74
            exportOptions: {
75
                columns: exportColumns,
76
                format: export_format
77
            },
78
        },
79
        {
80
            extend: 'print',
81
            text: _("Print"),
82
            exportOptions: {
83
                columns: exportColumns,
84
                format: export_format
85
            },
86
        }
87
    ];
88
89
    // Retrieving bKohaColumnsUseNames from the options passed to the constructor, not DT settings
90
    // But ideally should be retrieved using table.data()
91
    let use_names = dt_parameters.bKohaColumnsUseNames;
92
    let included_columns = [];
93
    if (table_settings) {
94
        if (use_names) {
95
            // bKohaColumnsUseNames is set, identify columns by their data-colname
96
            included_columns = table_settings.columns
97
                .filter(c => !c.cannot_be_toggled)
98
                .map(c => "[data-colname='%s']".format(c.columnname))
99
                .join(",");
100
        } else {
101
            // Not set, columns are ordered the same than in the columns settings
102
            included_columns = table_settings.columns
103
                .map((c, i) => (!c.cannot_be_toggled ? i : null))
104
                .filter(i => i !== null);
105
        }
106
    }
107
108
    if( included_columns.length > 0 ){
109
        dt_parameters[ "buttons" ].push(
110
            {
111
                extend: 'colvis',
112
                fade: 100,
113
                columns: included_columns,
114
                className: "columns_controls",
115
                titleAttr: _("Columns settings"),
116
                text: '<i class="fa fa-lg fa-gear" aria-hidden="true"></i> <span class="dt-button-text">' + _("Columns") + '</span>',
117
                exportOptions: {
118
                    columns: exportColumns
119
                }
120
            }
121
        );
122
    }
123
124
    var table = $(selector);
125
126
    var new_parameters = {}
127
    $.extend(true, new_parameters, dataTablesDefaults, dt_parameters);
128
    var default_column_defs = [
129
        { "aTargets": ["string-sort"], "sType": "string" },
130
        { "aTargets": ["anti-the"], "sType": "anti-the" },
131
        { "aTargets": ["NoSort"], "bSortable": false, "bSearchable": false }
132
    ];
133
    if (new_parameters["aoColumnDefs"] === undefined) {
134
        new_parameters["aoColumnDefs"] = default_column_defs;
135
    } else {
136
        $.extend(true, new_parameters, default_column_defs);
137
    }
138
139
    $(table).data('bKohaColumnsUseNames', dt_parameters.bKohaColumnsUseNames);
140
141
    table.dataTable(new_parameters);
142
    var table_dt = table.DataTable();
143
144
    let hidden_ids = _dt_visibility(table_settings, table_dt);
145
    table_dt.on("column-visibility.dt", function () {
146
        if (typeof columnsInit == 'function') {
147
            // This function can be created separately and used to trigger
148
            // an event after the DataTable has loaded AND column visibility
149
            // has been updated according to the table's configuration
150
            columnsInit();
151
        }
152
    }).columns(hidden_ids).visible(false);
153
154
    return table;
155
}
156
157
</script>
158
- 

Return to bug 26553