PageSourceSearch

https://bullion.fkjewellers.com/wp-content/plugins/woo-smart-compa…/table-head-fixer.js?ver=6.5.8

js fkjewellers.com collected 2026-09-24 11:32:47 UTC 13,268 bytes, 353 lines download raw bytes

1(
2    function ($) {
3
4        $.fn.tableHeadFixer = function (param) {
5
6            return this.each(function () {
7                table.call(this);
8            });
9
10            function table() {
11
12                {
13                    var defaults = {
14                        head: true,
15                        foot: false,
16                        left: 0,
17                        right: 0,
18                        'z-index': 0,
19                    };
20
21                    var settings = $.extend({}, defaults, param);
22
23                    settings.table = this;
24                    settings.parent = $(settings.table).parent();
25                    setParent();
26
27                    if (settings.head == true) {
28                        fixHead();
29                    }
30
31                    if (settings.foot == true) {
32                        fixFoot();
33                    }
34
35                    if (settings.left > 0) {
36                        fixLeft();
37                    }
38
39                    if (settings.right > 0) {
40                        fixRight();
41                    }
42
43                    setCorner();
44
45                    $(settings.parent).trigger('scroll');
46
47                    $(window).resize(function () {
48                        $(settings.parent).trigger('scroll');
49                    });
50
51                    /*
52                     This function solver z-index problem in corner cell where fix row and column at the same time,
53                     set corner cells z-index 1 more then other fixed cells
54                     */
55                    function setCorner() {
56                        var table = $(settings.table);
57
58                        if (settings.head) {
59                            if (settings.left > 0) {
60                                var tr = table.find('thead tr');
61
62                                tr.each(function (k, row) {
63                                    solverLeftColspan(row, function (cell) {
64                                        $(cell).css('z-index', settings['z-index'] + 1);
65                                    });
66                                });
67                            }
68
69                            if (settings.right > 0) {
70                                var tr = table.find('thead tr');
71
72                                tr.each(function (k, row) {
73                                    solveRightColspan(row, function (cell) {
74                                        $(cell).css('z-index', settings['z-index'] + 1);
75                                    });
76                                });
77                            }
78                        }
79
80                        if (settings.foot) {
81                            if (settings.left > 0) {
82                                var tr = table.find('tfoot tr');
83
84                                tr.each(function (k, row) {
85                                    solverLeftColspan(row, function (cell) {
86                                        $(cell).css('z-index', settings['z-index']);
87                                    });
88                                });
89                            }
90
91                            if (settings.right > 0) {
92                                var tr = table.find('tfoot tr');
93
94                                tr.each(function (k, row) {
95                                    solveRightColspan(row, function (cell) {
96                                        $(cell).css('z-index', settings['z-index']);
97                                    });
98                                });
99                            }
100                        }
101                    }
102
103                    // Set style of table parent
104                    function setParent() {
105                        var parent = $(settings.parent);
106                        var table = $(settings.table);
107
108                        parent.append(table);
109                        parent.css({
110                            'overflow-x': 'auto',
111                            'overflow-y': 'auto',
112                        });
113
114                        parent.scroll(function () {
115                            var scrollWidth = parent[0].scrollWidth;
116                            var clientWidth = parent[0].clientWidth;
117                            var scrollHeight = parent[0].scrollHeight;
118                            var clientHeight = parent[0].clientHeight;
119                            var top = parent.scrollTop();
120                            var left = parent.scrollLeft();
121
122                            if (settings.head) {
123                                this.find('thead tr > *').css('top', top);
124                            }
125
126                            if (settings.foot) {
127                                this.find('tfoot tr > *').css('bottom', scrollHeight - clientHeight - top);
128                            }
129
130                            if (settings.left > 0) {
131                                settings.leftColumns.css('left', left);
132                            }
133
134                            if (settings.right > 0) {
135                                settings.rightColumns.css('right',
136                                    scrollWidth - clientWidth - left);
137                            }
138                        }.bind(table));
139                    }
140
141                    // Set table head fixed
142                    function fixHead() {
143                        var thead = $(settings.table).find('thead');
144                        var tr = thead.find('tr');
145                        var cells = thead.find('tr > *');
146
147                        setBackground(cells);
148                        cells.css({
149                            'position': 'relative',
150                        });
151                    }
152
153                    // Set table foot fixed
154                    function fixFoot() {
155                        var tfoot = $(settings.table).find('tfoot');
156                        var tr = tfoot.find('tr');
157                        var cells = tfoot.find('tr > *');
158
159                        setBackground(cells);
160                        cells.css({
161                            'position': 'relative',
162                        });
163                    }
164
165                    // Set table left column fixed
166                    function fixLeft() {
167                        var table = $(settings.table);
168
169                        // var fixColumn = settings.left;
170
171                        settings.leftColumns = $();
172
173                        var tr = table.find('tr');
174                        tr.each(function (k, row) {
175
176                            solverLeftColspan(row, function (cell) {
177                                settings.leftColumns = settings.leftColumns.add(cell);
178                            });
179                            // var inc = 1;
180
181                            // for(var i = 1; i <= fixColumn; i = i + inc) {
182                            // 	var nth = inc > 1 ? i - 1 : i;
183
184                            // 	var cell = $(row).find("*:nth-child(" + nth + ")");
185                            // 	var colspan = cell.prop("colspan");
186
187                            // 	settings.leftColumns = settings.leftColumns.add(cell);
188
189                            // 	inc = colspan;
190                            // }
191                        });
192
193                        var column = settings.leftColumns;
194
195                        column.each(function (k, cell) {
196                            var cell = $(cell);
197
198                            setBackground(cell);
199                            cell.css({
200                                'position': 'relative',
201                            });
202                        });
203                    }
204
205                    // Set table right column fixed
206                    function fixRight() {
207                        var table = $(settings.table);
208
209                        var fixColumn = settings.right;
210
211                        settings.rightColumns = $();
212
213                        var tr = table.find('tr');
214                        tr.each(function (k, row) {
215                            solveRightColspan(row, function (cell) {
216                                settings.rightColumns = settings.rightColumns.add(cell);
217                            });
218                        });
219
220                        var column = settings.rightColumns;
221
222                        column.each(function (k, cell) {
223                            var cell = $(cell);
224
225                            setBackground(cell);
226                            cell.css({
227                                'position': 'relative',
228                            });
229                        });
230
231                    }
232
233                    // Set fixed cells backgrounds
234                    function setBackground(elements) {
235                        return false;
236
237                        elements.each(function (k, element) {
238                            var element = $(element);
239                            var parent = $(element).parent();
240
241                            var elementBackground = element.css('background-color');
242                            elementBackground = (
243                                elementBackground == 'transparent' || elementBackground ==
244                                'rgba(0, 0, 0, 0)'
245                            ) ? null : elementBackground;
246
247                            var parentBackground = parent.css('background-color');
248                            parentBackground = (
249                                parentBackground == 'transparent' || parentBackground ==
250                                'rgba(0, 0, 0, 0)'
251                            ) ? null : parentBackground;
252
253                            var background = parentBackground ? parentBackground : 'white';
254                            background = elementBackground ? elementBackground : background;
255
256                            element.css('background-color', background);
257                        });
258                    }
259
260                    function solverLeftColspan(row, action) {
261                        var fixColumn = settings.left;
262                        var inc = 1;
263
264                        for (var i = 1; i <= fixColumn; i = i + inc) {
265                            var nth = inc > 1 ? i - 1 : i;
266
267                            var cell = $(row).find('> *:nth-child(' + nth + ')');
268                            var colspan = cell.prop('colspan');
269
270                            if (cell.cellPos().left < fixColumn) {
271                                action(cell);
272                            }
273
274                            inc = colspan;
275                        }
276                    }
277
278                    function solveRightColspan(row, action) {
279                        var fixColumn = settings.right;
280                        var inc = 1;
281
282                        for (var i = 1; i <= fixColumn; i = i + inc) {
283                            var nth = inc > 1 ? i - 1 : i;
284
285                            var cell = $(row).find('> *:nth-last-child(' + nth + ')');
286                            var colspan = cell.prop('colspan');
287
288                            action(cell);
289
290                            inc = colspan;
291                        }
292                    }
293                }
294
295            }
296
297        };
298
299    }
300)(jQuery);
301
302/*  cellPos jQuery plugin
303 ---------------------
304 Get visual position of cell in HTML table (or its block like thead).
305 Return value is object with "top" and "left" properties set to row and column index of top-left cell corner.
306 Example of use:
307 $("#myTable tbody td").each(function(){
308 $(this).text( $(this).cellPos().top +", "+ $(this).cellPos().left );
309 });
310 */
311(
312    function ($) {
313        /* scan individual table and set "cellPos" data in the form { left: x-coord, top: y-coord } */
314        function scanTable($table) {
315            var m = [];
316            $table.children('tr').each(function (y, row) {
317                $(row).children('td, th').each(function (x, cell) {
318                    var $cell = $(cell),
319                        cspan = $cell.attr('colspan') | 0,
320                        rspan = $cell.attr('rowspan') | 0,
321                        tx, ty;
322                    cspan = cspan ? cspan : 1;
323                    rspan = rspan ? rspan : 1;
324                    for (; m[y] && m[y][x]; ++x) {
325
326                    }  //skip already occupied cells in current row
327                    for (tx = x; tx < x + cspan; ++tx) {  //mark matrix elements occupied by current cell with true
328                        for (ty = y; ty < y + rspan; ++ty) {
329                            if (!m[ty]) {  //fill missing rows
330                                m[ty] = [];
331                            }
332                            m[ty][tx] = true;
333                        }
334                    }
335                    var pos = {top: y, left: x};
336                    $cell.data('cellPos', pos);
337                });
338            });
339        }
340
341        /* plugin */
342        $.fn.cellPos = function (rescan) {
343            var $cell = this.first(),
344                pos = $cell.data('cellPos');
345            if (!pos || rescan) {
346                var $table = $cell.closest('table, thead, tbody, tfoot');
347                scanTable($table);
348            }
349            pos = $cell.data('cellPos');
350            return pos;
351        };
352    }
353)(jQuery);

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.