PageSourceSearch

https://irhys.ch/components/com_tabulizer/assets/js/datatables/column.filter.js

js irhys.ch collected 2026-09-30 14:35:31 UTC 7,891 bytes, 226 lines download raw bytes

1(function($) {
2    /*
3     * Function: fnGetColumnData
4     * Purpose:  Return an array of table values from a particular column.
5     * Returns:  array string: 1d data array
6     * Inputs:   object:oSettings - dataTable settings object. This is always the last argument past to the function
7     *           int:iColumn - the id of the column to extract the data from
8     *           bool:bUnique - optional - if set to false duplicated values are not filtered out
9     *           bool:bFiltered - optional - if set to false all the table data is used (not only the filtered)
10     *           bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array
11     * Author:   Benedikt Forchhammer <b.forchhammer /AT\ mind2.de>
12     */
13    $.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty, bRemoveTags ) {
14        // check that we have a column id
15        if ( typeof iColumn == "undefined" ) return new Array();
16
17        // by default we only want unique data
18        if ( typeof bUnique == "undefined" ) bUnique = true;
19
20        // by default we do want to only look at filtered data
21        if ( typeof bFiltered == "undefined" ) bFiltered = true;
22
23        // by default we do not want to include empty values
24        if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true;
25
26        // remove HTML tags
27        if ( typeof bRemoveTags == "undefined" ) bRemoveTags = true;
28
29        // list of rows which we're going to loop through
30        var aiRows;
31
32        // use only filtered rows
33        if (bFiltered == true) aiRows = oSettings.aiDisplay;
34        // use all rows
35        else aiRows = oSettings.aiDisplayMaster; // all row numbers
36
37        // set up data array
38        var asResultData = new Array();
39
40        for (var i=0,c=aiRows.length; i<c; i++) {
41            iRow = aiRows[i];
42            var aData = this.fnGetData(iRow);
43            var sValue = aData[iColumn];
44
45            // strip HTML tags
46            if (bRemoveTags == true && sValue.length > 0) {
47                sValue = jtQuery('<span>'+sValue+'<span>').text();
48            }
49
50            // ignore empty values?
51            if (bIgnoreEmpty == true && sValue.length == 0) continue;
52
53            // ignore unique values?
54            else if (bUnique == true && jtQuery.inArray(sValue, asResultData) > -1) continue;
55
56            // else push the value onto the result data array
57            else asResultData.push(sValue);
58        }
59
60        return asResultData;
61    }}(jtQuery));
62
63function sortNumerically(a,b) {
64    a = parseInt(a);
65    b = parseInt(b);
66    return a - b;
67}
68
69function fnCreateSelect( aData, tabulizer_datatable_id, column_id, prompt_label )
70{
71    if ( typeof prompt_label == "undefined" ) prompt_label = "";
72
73    var split_arr, si, split_delimiter = false, replace_pattern;
74    if (split_delimiter) {
75        replace_pattern = new RegExp("["+split_delimiter+"]","g");
76    }
77
78    if (aData) {
79        var i,sValue,sData = [];
80        for (i=0;i<aData.length;i++) {
81            sValue = jtQuery('<span>'+aData[i]+'<span>').text();
82            sValue = sValue.trim();
83            if ((sValue != '')&&(split_delimiter)) {
84                split_arr = sValue.split(split_delimiter);
85                for (si = 0;si<split_arr.length;si++) {
86                    sValue = split_arr[si].trim();
87                    sValue = sValue.replace(replace_pattern, '');
88                    if (sValue != '') {
89                        if (sData.indexOf(sValue)<0) {
90                            sData[sData.length] = sValue;
91                        }
92                    }
93                }
94            } else {
95                if (sData.indexOf(sValue)<0) {
96                    sData[sData.length] = sValue;
97                }
98            }
99        }
100
101        // sort numerically, when possible
102        var columnIsSorted = false;
103        var isNumericData = true;
104
105        for (i=0;i<sData.length;i++) {
106            if (isNaN(sData[i])) {
107                isNumericData = false;
108                break;
109            }
110        }
111
112        if (isNumericData) {
113            sData.sort(sortNumerically);
114            columnIsSorted = true;
115        }
116
117        if (!columnIsSorted) {
118            sData.sort();
119        }
120
121        aData = sData;
122    }
123
124    var r='<select name="tab_search_col_'+tabulizer_datatable_id+'_'+column_id+'"><option value="">'+prompt_label+'</option>', i, iLen=aData.length;
125    for ( i=0 ; i<iLen ; i++ )
126    {
127        r += '<option value="'+aData[i]+'">'+aData[i]+'</option>';
128    }
129    return r+'</select>';
130}
131
132function fnCreateSelectRange( aData, tabulizer_datatable_id, column_id, prompt_label )
133{
134    if ( typeof prompt_label == "undefined" ) prompt_label = "";
135    var range_separator = '&';
136
137    if (aData) {
138        aData.sort(function(x, y){
139            var xl = x.rkey.indexOf('&lt;');
140            var yl = y.rkey.indexOf('&lt;');
141            var xm = x.rkey.indexOf('&gt;');
142            var ym = y.rkey.indexOf('&gt;');
143            if (xl>=0) return -1; else if (xm>=0) return 1;
144            else if (yl>=0) return 1; else if (ym>=0) return -1;
145            else {
146                var rkeyx, rkeyy;
147                xl = x.rkey.indexOf(range_separator);
148                if (xl>=0) rkeyx = x.rkey.substring(0, xl-1); else rkeyx = x.rkey;
149                yl = y.rkey.indexOf(range_separator);
150                if (yl>=0) rkeyy = y.rkey.substring(0, yl-1); else rkeyy = y.rkey;
151                rkeyx = parseInt(rkeyx);
152                rkeyy = parseInt(rkeyy);
153                return (rkeyx > rkeyy);
154            }
155        });
156    }
157
158    var r='<select name="tab_search_col_'+tabulizer_datatable_id+'_'+column_id+'"><option value="">'+prompt_label+'</option>', i, iLen=aData.length;
159    for ( i=0 ; i<iLen ; i++ )
160    {
161        r += '<option value="'+aData[i]['rkey']+'">'+aData[i]['rlabel']+'</option>';
162    }
163    return r+'</select>';
164}
165
166function clearColumnFilters (datatable_id, column_id) {
167
168    if (typeof datatable_id == 'undefined') datatable_id = -1;
169    if (typeof column_id == 'undefined') column_id = -1;
170
171    var input, match, dt_id, col_id, clear_filter;
172    var datatable_ids = [];
173
174    jtQuery('div.reset_filter_wrapper table thead select').each(
175        function(index){
176            input = jtQuery(this);
177            match = /tab_search_col_(\d+)_(\d+)/i.exec(input.attr('name'));
178            dt_id = parseInt(match[1]);
179            col_id = parseInt(match[2]);
180
181            clear_filter = true;
182            if (datatable_id>=0) {
183                if (dt_id != datatable_id) {
184                    clear_filter = false;
185                }
186            }
187            if (column_id>=0) {
188                if (col_id != column_id) {
189                    clear_filter = false;
190                }
191            }
192
193            if (clear_filter) {
194                input.val( '' );
195                input.trigger('change');
196            }
197        }
198    );
199
200    jtQuery('div.reset_filter_wrapper table thead input').each(
201        function(index){
202            input = jtQuery(this);
203            match = /tab_search_col_(\d+)_(\d+)/i.exec(input.attr('name'));
204            dt_id = parseInt(match[1]);
205            col_id = parseInt(match[2]);
206
207            clear_filter = true;
208            if (datatable_id>=0) {
209                if (dt_id != datatable_id) {
210                    clear_filter = false;
211                }
212            }
213            if (column_id>=0) {
214                if (col_id != column_id) {
215                    clear_filter = false;
216                }
217            }
218
219            if (clear_filter) {
220                input.val( '' );
221            }
222        }
223    );
224
225}
226

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.