PageSourceSearch

https://www.bildhau.de/themes/child_at_oreo/modules/tablecombz/views/js/tablecombz-1.7.js?v=efb2fff1

js bildhau.de collected 2026-10-02 21:34:50 UTC 20,807 bytes, 511 lines download raw bytes

1/**
2 * TableCombz: module for PrestaShop 1.5-1.7
3 *
4 * @author    zapalm <[email protected]>
5 * @copyright 2010-2018 zapalm
6 * @license   http://addons.prestashop.com/en/content/12-terms-and-conditions-of-use Terms and conditions of use (EULA)
7 * @link      http://prestashop.modulez.ru/en/ Modules for PrestaShop CMS
8 */
9
10$(document).ready(function() {
11    setTimeout(function() {
12        if (jQuery('body').is('#product')) {
13            var div = document.getElementById('productsAddedToCart');
14            if (div) {
15                div.parentNode.removeChild(div);
16            }
17        }
18    }, 5000);
19});
20
21/* CSSMaster refactoring of code to prevent errors - 18.10.24 - Ticket: BO1-T18 */
22var currency;
23
24(function($) {
25    
26    function init() {
27        var $table;
28        var $imageModals;
29        var tooltipLeftPos;
30        var tooltipTopPos;
31        var isIE;
32        var tooltip;
33
34        // Initialisierung des Tooltip
35        tooltip = document.createElement('div');
36        tooltip.style.position = 'absolute';
37        tooltip.style.display = 'none'; // Tooltip wird erst angezeigt, wenn nötig
38        tooltip.style.zIndex = '1000';  // Sicherstellen, dass Tooltip immer im Vordergrund ist
39        document.body.appendChild(tooltip);
40
41        document.onmousemove = function getMouseXY(e) {
42            if (tooltip) { // Sicherstellen, dass tooltip definiert ist
43                if (isIE) {
44                    tooltipLeftPos = event.clientX + document.body.scrollLeft;
45                    tooltipTopPos = event.clientY + document.body.scrollTop;
46                } else {
47                    tooltipLeftPos = e.pageX;
48                    tooltipTopPos = e.pageY;
49                }
50
51                tooltip.style.left = tooltipLeftPos + 'px';
52                tooltip.style.top = tooltipTopPos + 'px';
53            }
54        };
55
56        function showTooltip(tooltipMessage) {
57            if (tooltip) {
58                tooltip.id = 'ns_tt';
59                tooltip.innerHTML = tooltipMessage;
60                tooltip.style.display = 'block'; // Tooltip anzeigen
61            }
62        }
63
64        function hideTooltip() {
65            if (tooltip) {
66                tooltip.style.display = 'none'; // Tooltip verstecken
67            }
68        }
69
70        function formatPrice(price) {
71            return price.replace('.', ',');
72        }
73
74        function formatedNumberToFloat(price, currencyFormat, currencySign) {
75            price = price.replace(currencySign, '');
76            if (currencyFormat === 1)
77                return parseFloat(price.replace(',', '').replace(' ', ''));
78            else if (currencyFormat === 2)
79                return parseFloat(price.replace(' ', '').replace(',', '.'));
80            else if (currencyFormat === 3)
81                return parseFloat(price.replace('.', '').replace(' ', '').replace(',', '.'));
82            else if (currencyFormat === 4)
83                return parseFloat(price.replace(',', '').replace(' ', ''));
84            return price;
85        }
86
87        function parsePrice(price) {
88            var currencySign = '';
89            var currencySignAtEnd = false;
90            var currencyFormat = 1;
91            var decimalSeparator = '.';
92            var firstSeparator = '';
93            var numSeparators = 0;
94
95            $.each(price.split(''), function (index, value) {
96                if (!$.isNumeric(value)) {
97                    if ('.' !== value && ',' !== value && ' ' !== value) {
98                        currencySign = value;
99                        currencySignAtEnd = true;
100                    } else {
101                        numSeparators++;
102                        if (numSeparators === 1) {
103                            firstSeparator = value;
104                        }
105                        decimalSeparator = value;
106                    }
107                } else {
108                    currencySignAtEnd = false;
109                }
110            });
111
112            if (numSeparators === 1 && '.' === decimalSeparator)
113                currencyFormat = 1;
114            else if (numSeparators === 1 && ',' === decimalSeparator)
115                currencyFormat = 2;
116            else if (numSeparators > 1 && ',' === decimalSeparator && '.' === firstSeparator)
117                currencyFormat = 3;
118            else if (numSeparators > 1 && '.' === decimalSeparator && ',' === firstSeparator)
119                currencyFormat = 4;
120            else if (numSeparators > 1 && ',' === decimalSeparator && ',' === firstSeparator)
121                currencyFormat = 1;
122            else if (numSeparators > 1 && '.' === decimalSeparator && '.' === firstSeparator)
123                currencyFormat = 2;
124            else if (numSeparators > 1 && ',' === decimalSeparator && ',' === firstSeparator)
125                currencyFormat = 4;
126
127            return formatedNumberToFloat(price, currencyFormat, currencySign);
128        }
129
130        function formatCurrencyCldr(price, callback) {
131            cldrForCurrencyFormatterWrapper(function (formatter) {
132                callback(formatter(price));
133            });
134        }
135
136        $(document).ready(function () {
137            $table = $('#tablecombz-table');
138            isIE = document.all ? true : false;
139            $imageModals = $('.tablecombz-image-modal');
140            $emailMeBtns = $('.btn-email-me');
141            $emailMeOKBtn = $('#email-me-dialog-ok');
142
143            if (0 === $table.length) {
144                return;
145            }
146
147            if ('#tablecombz' === window.location.hash) {
148                $('html, body').animate({
149                    scrollTop: $('#tablecombz-wrapper').offset().top
150                }, 1000);
151            }
152
153            var $tab = $('#tablecombz-tab');
154
155            if (0 !== $tab.length) {
156                var tabId = $tab.closest('.tab-pane').attr('id');
157                var $link = $('a.nav-link[href="#' + tabId + '"]');
158
159                $link.click(function (event) {
160                    event.preventDefault();
161                    $('html, body').animate({
162                        scrollTop: $link.offset().top
163                    }, 1000);
164                });
165
166                if ($tab.selector === window.location.hash && 0 !== $link.length) {
167                    $link.click();
168                }
169            }
170
171            $table.on('mouseover', '.qty', function (event) {
172                $(this).find('.quantity-input-buttons').css('visibility', 'visible');
173            });
174
175            $table.on('mouseout', '.qty', function (event) {
176                if (!$(this).find('.input-quantity-wanted').is(':focus')) {
177                    $(this).find('.quantity-input-buttons').css('visibility', 'hidden');
178                }
179            });
180
181            $table.on('focusout', '.qty', function (event) {
182                if (!$(this).is(':hover'))
183                    $(this).find('.quantity-input-buttons').css('visibility', 'hidden');
184            });
185
186            $table.on('mouseover', '.tablecombz-avail-tooltip', function (event) {
187                if (1 === $(event.target).data('active')) {
188                    showTooltip($(event.target).data('tooltip'));
189                }
190            });
191
192            $table.on('mouseout', '.tablecombz-avail-tooltip', function (event) {
193                if (1 === $(event.target).data('active')) {
194                    hideTooltip();
195                }
196            });
197
198            $table.on('click', '[data-button-action="add-to-cart"]', function (event) {
199                var $form  = $(event.target).closest('form');
200                var $input = $form.find('.input-quantity-wanted');
201                var qty    = parseInt($input.val()) || 0;
202                var maxQty = parseInt($input.attr('max'));
203                var minQty = parseInt($input.attr('min'));
204
205                if (qty <= 0 || qty < minQty) {
206                    qty = minQty;
207                } else if (qty > maxQty) {
208                    qty = maxQty;
209                }
210                $input.val(qty);
211            });
212
213            $table.on('change', '.input-quantity-wanted', function (event) {
214                var $input = $(this);
215                var $price = $('div[name="price_' + $input.attr('name') +'"]');
216/*
217                var $sum   = $('span[name="' + $input.attr('name') +'"]');
218*/
219                var qty    = parseInt($input.val()) || 0;
220                var maxQty = parseInt($input.attr('max'));
221                var minQty = parseInt($input.attr('min'));
222                var getPriceUrl = $input.data('get-price-url');
223 
224                if (qty < 0) {
225                    qty = minQty;
226                } else if (qty > maxQty) {
227                    qty = maxQty;
228                }
229                $input.val(qty);
230
231                $.ajax({
232                    url      : getPriceUrl,
233                    cache    : false,
234                    dataType : 'json',
235                    data     : ('qty=' + qty),
236                    success: function (jsonData) {
237                        $price.html(jsonData.priceFormatted);
238                        
239/*
240                        formatCurrencyCldr(parsePrice(jsonData.amount  || '0.0'), function(totalPrice) {
241                          $('span', $sum).html(totalPrice);
242                        });
243
244                        if (qty > 1) {
245                            $sum.css('visibility', 'visible');
246                        } else {
247                            $sum.css('visibility', 'hidden');
248                        }
249
250                        var total = 0.0;
251                        
252                        $.each($('.sum-label span > span', $table), function (index, value) {
253                            total += parsePrice($(value).html() || '0.0');
254                        });
255
256                        formatCurrencyCldr(total, function(totalPrice) {
257                          $('td.total span', $table).html(totalPrice);
258                        });
259*/                        
260                    }
261                });
262                
263            });
264
265            $table.on('click', '.qty .qty-up, .qty .qty-down', function (event) {
266                var $btn   = $(event.target);
267                var $td    = $btn.closest('.tablecombz-quantity-wanted');
268                var $input = $td.find('.input-quantity-wanted');
269                var qty    = parseInt($input.val()) || 0;
270                var maxQty = parseInt($input.attr('max'));
271                var minQty = parseInt($input.attr('min'));
272                var up     = $btn.hasClass('qty-up') || $btn.parent().hasClass('qty-up');
273
274                if (up) {
275                    if (qty < 0) {
276                        qty = minQty;
277                    } else if (qty > maxQty) {
278                        qty = maxQty;
279                    } else if (qty < maxQty) {
280                        qty++;
281                    }
282                } else {
283                    if (qty < 0) {
284                        qty = minQty;
285                    } else if (qty > maxQty) {
286                        qty = maxQty;
287                    } else if (qty > 0) {
288                        qty--;
289                    }
290                }
291                $input.val(qty);
292                $input.change();
293            });
294
295            $table.on('click', '.tablecombz-attr-color a', function (event) {
296                var $picker     = $(event.target);
297                var attributeId = $picker.data('attribute-id');
298                var groupId     = $picker.data('group-id');
299                var $control    = $('.product-variants [data-product-attribute="'+ groupId +'"]:input[value="' + attributeId + '"]');
300
301                $control.attr('checked', true);
302                $control.change();
303            });
304            
305            $('.tablecombz-table thead tr th').each(function (e) {
306                if ($(this).text() === '-')
307                    $(this).text('');
308            });
309          
310            $imageModals.on('click', '.tablecombz-modal-thumb', function (event) {
311                var $currentThumb = $(event.target);
312                var $modal        = $($currentThumb.data('modal'));
313                var $thumbs       = $modal.find('.tablecombz-modal-thumb');
314                var $cover        = $modal.find('.js-modal-product-cover');
315
316                if ($thumbs.hasClass('selected')) {
317                    $thumbs.removeClass('selected');
318                }
319                $currentThumb.addClass('selected');
320
321                $cover.attr('src', $(event.target).data('image-large-src'));
322            });
323
324            $emailMeBtns.on('click', function (event) {
325                event.preventDefault();
326                $('#email-me-email-address').val(prestashop.customer.email);
327                $('#email-me-dialog-ok').data('url', $(event.target).data('url'));
328                $('#email-me-ajax-error').hide();
329                $('#email-me-dialog').modal('show');
330            });
331
332            $emailMeOKBtn.on('click', function (event) {
333                url = $(event.target).data('url');
334                customer_email = $('#email-me-email-address').val();
335
336                $.ajax({
337                    type     : 'POST',
338                    url      : url,
339                    cache    : false,
340                    dataType : 'json',
341                    data     : ('customer_email=' + customer_email),
342                    success: function (jsonData) {
343                        if (jsonData.error) {
344                            $('#email-me-ajax-error').html(jsonData.message);
345                            $('#email-me-ajax-error').show();
346                        }
347                        else {
348                            $('#email-me-dialog').modal('hide');
349                        }
350                    },
351                    error: function (error) {
352                        $('#email-me-ajax-error').html(error.statusText);
353                        $('#email-me-ajax-error').show();
354                    }
355                });
356            });
357/*
358            formatCurrencyCldr(0.0, function(priceFormatted) {
359              $('td.total span', $table).html(priceFormatted);
360            });        
361*/
362
363
364            // update nikolay
365            function getInputsForm(elem_form) {
366                var inputs = elem_form.find(':input').serializeArray();
367                elem_form.find('textarea').each(function(){
368                    var name = $(this).attr('name');
369                    var value = $(this).val();
370                    if (name !== undefined) {
371                        inputs[inputs.length] = {'name': name, 'value': value};
372                    }
373                });
374                elem_form.find('select').each(function() {
375                    var name = $(this).attr('name');
376                    var value = [];
377                    if (name != undefined) {
378                        if (name.charAt(name.length - 1) == ']' && name.charAt(name.length - 2) == '[') {
379                            name = name.slice(0, -2);
380                            value = $.map($(this).find('option') ,function(option) {
381                                return option.value;
382                            });
383                            value = JSON.stringify(value);
384                        } else {
385                            value = $(this).val();
386                        }
387                        inputs[inputs.length] = {'name': name, 'value': value};
388                    }
389                });
390                elem_form.find('input[type="file"]').each(function(){
391                    var name = $(this).attr('name');
392                    if (name != undefined) {
393                        inputs[inputs.length] = {'name': name, 'value': $(this)[0].files[0]};
394                    }
395                });
396                return inputs;
397            }
398            window.prestashop.on('updatedCart', function () {
399                if ($('#tablecombz-wrapper .batch_buy .add-to-cart').length > 0) {
400                    $('#tablecombz-wrapper .batch_buy .add-to-cart').removeClass('df-loader');
401                }
402            });
403            $('body').on('click', '#tablecombz-wrapper .batch_buy .add-to-cart', function(e) {
404                e.preventDefault();
405                var self_elem = this;
406                var url = $('.input-quantity-wanted').data('get-price-url');
407                var inputs = getInputsForm($('#tablecombz-wrapper form'));
408                var formData = new FormData();
409                var total_quantity = 0;
410                inputs.forEach(function(input) {
411                    if (input.name.indexOf('qty[') != -1){
412                        total_quantity = total_quantity + parseInt(input.value);
413                    }
414                    formData.append(input.name, input.value);
415                });
416                if (total_quantity > 0) {
417                    formData.append('ajax_add_to_cart', 1);
418                    formData.append('productsAdded', 1);
419                    $(self_elem).addClass('df-loader');
420                    $.ajax({
421                        url: url,
422                        data: formData,
423                        type: 'POST',
424                        dataType: 'json',
425                        cache: false,
426                        processData: false,
427                        contentType: false,
428                        success: function(resp) {
429                            window.prestashop.emit('updateCart', {eventType:'updateCart',resp:resp, reason: {linkAction: ''}});
430                            // The successful response already contains the confirmed cart modal.
431                            // Do not reload the product page just to wait for an AJAX completion.
432                            if (resp && resp.modal) {
433                                $('body').append(resp.modal);
434                                $('#blockcart-modal').on('hidden.bs.modal', function() {
435                                    $('#blockcart-modal').remove();
436                                    if (window._adaptability_hidden_content != undefined) {
437                                        window._adaptability_hidden_content.run(_adaptability_hidden_content.ACTION_CLOSE);
438                                    }
439                                });
440                                if (window._adaptability_hidden_content != undefined) {
441                                    window._adaptability_hidden_content.run(_adaptability_hidden_content.ACTION_OPEN);
442                                }
443                                $('#blockcart-modal').modal('show');
444                            }
445                            $(self_elem).removeClass('df-loader');
446                        },
447                        error: function () {
448                            if ($('#tablecombz-wrapper .batch_buy .add-to-cart').length > 0) {
449                                $('#tablecombz-wrapper .batch_buy .add-to-cart').removeClass('df-loader');
450                            }
451                        }
452                    });
453                } else {
454                    if ($('#tablecombz-wrapper .batch_buy .add-to-cart').length > 0) {
455                        $('#tablecombz-wrapper .batch_buy .add-to-cart').removeClass('df-loader');
456                    }
457                }
458            });
459
460
461        });
462        
463/*
464        currency = prestashop.currency;
465        full_cldr_language_code = prestashop.language.locale;
466*/
467    }
468
469    function limitTableCombzHeight() {
470        var $tableCombzWrapper = $('#tablecombz-wrapper');
471        var $readMoreTag;
472
473        if ($tableCombzWrapper) {
474            var height = 0;
475
476            $('#tablecombz-table').find('th, tr').each(function () {
477                if ($readMoreTag) return;
478
479                height += $(this).height();
480
481                if (height > 420) {
482                    $readMoreTag = $('#tablecombz-table-read-more');
483
484                    if ($tableCombzWrapper.height() > height + $readMoreTag.height()) {
485                        $tableCombzWrapper.data('orgHeight', $tableCombzWrapper.height());
486                        $tableCombzWrapper.height(height);
487                        $tableCombzWrapper.css('overflow', 'hidden');
488
489                        $readMoreTag.removeClass('hidden');
490                        $readMoreTag.css('top', -$tableCombzWrapper.height());
491
492                        $readMoreTag.on('click', function () {
493                            $tableCombzWrapper.animate({ height: $tableCombzWrapper.data('orgHeight') }, 400);
494                            $(this).remove();
495                        });
496
497                        $(window).resize(function () {
498                            $readMoreTag.css('top', -$tableCombzWrapper.height());
499                        });
500                    }
501                    return;
502                }
503            });
504        }
505    }
506
507    limitTableCombzHeight();
508
509    init();
510})(jQuery);
511/* CSSMaster add end */

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.