https://www.bildhau.de/themes/child_at_oreo/modules/tablecombz/views/js/tablecombz-1.7.js?v=efb2fff1
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.