1$(document).ready(function () { 2 3 $.nette.ext({ 4 init: function () { 5 header(); 6 hamburgerMenu(); 7 initFilters(true); 8 9 initCountPrice(); 10 initChooseConfirm(); 11 initSignsControls(); 12 countPrice(); 13 initToggles(); 14 15 initTotalPriceBar(); 16 17 initISICOverlay(); 18 initModalPanel(); 19 initPagination(); 20 initImageSource(); 21 initIFramesRatio(); 22 }, 23 complete: function (payload) { 24 header(); 25 hamburgerMenu(); 26 initFilters(false); 27 28 initCountPrice(); 29 initChooseConfirm(); 30 initSignsControls(); 31 countPrice(); 32 initToggles(); 33 34 initSlideTo(payload); 35 initTotalPriceBar(); 36 37 initISICOverlay(); 38 initModalPanel(); 39 initPagination(); 40 initImageSource(); 41 initIFramesRatio(); 42 } 43 }); 44 45 var giftsHidden = null; 46 var magazinesPage = 0; 47 48 function initToggles() 49 { 50 var $magazinesTable = $('.products-table.magazines'); 51 var $nextMagazines = $('.next-magazines'); 52 var $giftsTable = $('.products-table.gifts'); 53 var $nextGifts = $('.next-gifts'); 54 55 function firstStep() { 56 var magazinesCount = $magazinesTable.find('.product').length; 57 var $magazinesFirstPage = $magazinesTable.find('.first-page'); 58 $magazinesFirstPage.removeClass('hidden'); 59 $nextMagazines.find('.counter').text(magazinesCount - $magazinesFirstPage.length); 60 } 61 function secondStep() { 62 $magazinesTable.find('.product').removeClass('hidden'); 63 $nextMagazines.remove(); 64 } 65 66 /* po nacteni */ 67 68 if (giftsHidden !== null) { 69 $giftsTable.toggleClass('hidden', giftsHidden); 70 71 if (!giftsHidden) { 72 $nextGifts.remove(); 73 } 74 } 75 76 if (magazinesPage !== 0) { 77 $magazinesTable.removeClass('hidden'); 78 if (magazinesPage === 1) { firstStep(); } 79 if (magazinesPage === 2) { secondStep(); } 80 } 81 82 /* po kliknuti */ 83 84 $nextMagazines.unbind('click.next-magazines').bind('click.next-magazines', function (e) { 85 e.preventDefault(); 86 $magazinesTable.removeClass('hidden'); 87 if (magazinesPage === 0) { firstStep(); } 88 if (magazinesPage === 1) { secondStep(); } 89 magazinesPage++; 90 }); 91 92 $nextGifts.unbind('click.next-gifts').bind('click.next-gifts', function (e) { 93 e.preventDefault(); 94 $giftsTable.removeClass('hidden'); 95 giftsHidden = false; 96 $(this).remove(); 97 }); 98 } 99 100 101 function initChooseConfirm() 102 { 103 $('.first-step').on('click', function () { 104 $('.choose-confirm').prop('checked', true); 105 }) 106 } 107 108 function initSignsControls() 109 { 110 $('.plus, .minus').unbind('click.plus-minus').bind('click.plus-minus', function (e) { 111 e.preventDefault(); 112 var $btn = $(this); 113 var $input = $btn.closest('.amount-wrapper').find('input'); 114 var curValue = $input.val(); 115 var newValue; 116 var minValue = Number($input.attr('min')); 117 var maxValue = Number($input.attr('max')); 118 119 if ($btn.hasClass('plus')) { 120 newValue = curValue < maxValue ? parseFloat(curValue) + 1 : maxValue; 121 } 122 if ($btn.hasClass('minus')) { 123 newValue = curValue > minValue ? parseFloat(curValue) - 1 : minValue; 124 } 125 126 $input.val(newValue).blur().trigger('input'); 127 }); 128 } 129 130 function initCountPrice() 131 { 132 $('.has-price').unbind('input.initCountPrice').bind('input.initCountPrice', function() { 133 countPrice(); 134 }); 135 } 136 137 // TODO dopilovat 138 function countPrice() 139 { 140 var sum = 0; 141 var hasPhysicalOrders = Nette.validators.AppFrontModuleComponentsCustomOrderValidator_hasPhysicalOrders(); 142 143 $('.row-anchor').not('.summary-table-header').remove(); 144 145 $('.has-price').each(function () { 146 var $input = $(this); 147 var inputType = $input.attr('type'); 148 var price = $input.data('price'); 149 var label = $input.data('short-label'); 150 var amount = 0; 151 152 if (hasPhysicalOrders && $input.hasClass('electronic-only') || !hasPhysicalOrders && $input.hasClass('physical-only')) { 153 return true; 154 } 155 if (inputType === "radio" && $input.is(':checked')) { 156 amount = 1; 157 sum += price; 158 } 159 if (inputType === "number") { 160 var value = Math.max(Number($input.val()), 0); 161 amount = value; 162 sum += value*price; 163 setSelected($input); 164 } 165 166 if (amount * price) { 167 $('.row-anchor').last().after( 168 '<tr class="row-anchor"><td><span class="amount">' + amount + 'x</span> ' + label + '</td><td>' + amount + '</td><td>' + amount*price + ' KÄ</td></tr>' 169 ) 170 } 171 }); 172 173 $('.total-price').find('.sum').text(sum); 174 $('.summary-table-total').find('.sum').text(sum); 175 togglePrintInputs(hasPhysicalOrders); 176 } 177 178 function setSelected($input) 179 { 180 var $product = $input.closest('.product');
181 var $inputs = $product.find('input'); 182 var filled = 0; 183 184 $inputs.each(function() { 185 var value = Number($(this).val()); 186 filled += value; 187 $(this).closest('.counter-wrapper').toggleClass('filled', !!value); 188 }); 189 190 $product.toggleClass('selected', !!filled); 191 } 192 193 function togglePrintInputs(hasPhysicalOrders) 194 { 195 $("#postage-wrapper").toggle(!!hasPhysicalOrders); 196 $("#contact-next-button1").toggle(!!hasPhysicalOrders); 197 $("#contact-next-button2").toggle(!hasPhysicalOrders); 198 $("#payment-methods1").toggle(!!hasPhysicalOrders); 199 $("#payment-methods2").toggle(!hasPhysicalOrders); 200 } 201 202 function initTotalPriceBar() 203 { 204 var $stepWrapper = $('.step-wrapper.step5'); 205 if ($stepWrapper.length !== 0 && !$stepWrapper.hasClass('hidden')) { 206 var $totalPriceBar = $('.total-price'); 207 208 $(window).on('load scroll resize orientationchange ajaxComplete', function() { 209 var wrapperTop = $('.step-wrapper.step5')[0].offsetTop; 210 var barBottom = $(this).scrollTop() + $(this).height(); 211 $totalPriceBar.toggleClass('hide', wrapperTop < barBottom); 212 }); 213 } 214 } 215 216 function initSlideTo(payload) 217 { 218 if (typeof payload.step !== "undefined" && payload.step) { 219 let headerOffset = $('.header')[0].getBoundingClientRect().bottom; 220 221 $('html, body').animate({ 222 scrollTop: $('.step' + payload.step).offset().top - headerOffset 223 }, 700); 224 } 225 } 226 227 function initModalPanel() 228 { 229 $(".more-info-modal").unbind("click.mim").bind("click.mim", function(e) { 230 e.stopPropagation(); 231 }); 232 } 233 234 function initISICOverlay() 235 { 236 var input1 = $('#frm-subscriptionForm-form-payment-isicNumber').get(0); 237 var input2 = $('#frm-subscriptionForm-form-payment-isicHolderName').get(0); 238 239 $(".isic-check").unbind('click.isic-check').bind("click.isic-check", function() { 240 var $this = $(this); 241 var $btnWrapper = $this.parent(); 242 var $ajaxOverlay = getAjaxOverlay(""); 243 244 if (isInputValid(input1) && isInputValid(input2)) { 245 $ajaxOverlay 246 .appendTo($btnWrapper) 247 .addClass("btn-spinner") 248 .addClass("active"); 249 } 250 }); 251 } 252 253 function isInputValid(input) 254 { 255 return Nette.validateControl(input, null, true); 256 } 257 258 /** 259 * @return {boolean} 260 */ 261 Nette.validators.AppFrontModuleComponentsCustomOrderValidator_hasOrders = function(elem, args, val) { 262 var sum = 0; 263 var $inputs = $('.products-table').find('input'); 264 265 $inputs.each(function() { 266 sum += Number($(this).val()); 267 }); 268 269 return sum !== 0; 270 }; 271 272 /** 273 * @return {boolean} 274 */ 275 Nette.validators.AppFrontModuleComponentsCustomOrderValidator_hasPhysicalOrders = function(elem, args, val) { 276 var count = 0; 277 var $inputs = $('.product-type-print').add('.product-type-gift'); 278 279 $inputs.each(function() { 280 if ($(this).val() > 0) { 281 count++; 282 } 283 }); 284 285 return count !== 0; 286 }; 287 288 289 function hamburgerMenu() 290 { 291 const $header = $('.header'); 292 const $navigation = $("#navigation"); 293 294 $(".hamburger-menu").off().on("click", function(event) { 295 event.preventDefault(); 296 297 $header.toggleClass("hamburger-active"); 298 $navigation.toggleClass("active"); 299 $(this).toggleClass("active"); 300 $('body').toggleClass("scroll-disabled"); 301 }); 302 } 303 304 // zmena menu panelu pri scrollovani 305 function header() 306 { 307 const $header = $('.header'); 308 309 if ($header.length !== 0) { 310 const $headerContainer = $header.find('.header__container'); 311 const paddingTop = parseInt($headerContainer.css('padding-top') ); 312 const headerTop = $headerContainer[0].getBoundingClientRect().top + paddingTop + window.scrollY; 313 314 initHeader(); 315 $(window).on('scroll resize orientationchange ajaxComplete', initHeader); 316 317 function initHeader(){ 318 $header.toggleClass('active', $(window).scrollTop() > headerTop); 319 } 320 } 321 } 322 323 324 $('.slide-to').off().on('click', function(e) { 325 e.preventDefault(); 326 let hash = this.hash; 327 let $ele = $(hash); 328 329 slideTo($ele); 330 window.location.hash = hash; 331 });
332 333 $.easing.jswing = $.easing.swing; 334 $.extend($.easing, { 335 def: 'easeOutQuad', 336 swing: function (x, t, b, c, d) { 337 //alert($.easing.default); 338 return $.easing[$.easing.def](x, t, b, c, d); 339 }, 340 easeOutQuad: function (x, t, b, c, d) { 341 return -c *(t/=d)*(t-2) + b; 342 }, 343 easeInOutCubic: function (x, t, b, c, d) { 344 if ((t/=d/2) < 1) return c/2*t*t*t + b; 345 return c/2*((t-=2)*t*t + 2) + b; 346 } 347 }); 348 349 function slideTo($ele) 350 { 351 let $header = $('.header'); 352 let headerOffset = $header[0].getBoundingClientRect().bottom; 353 let scrollTop = $ele.offset().top - headerOffset; 354 355 // rychlost animace zavisla na vzdalenosti mezi aktualni pozici okna a cilovym elementem 356 let height = Math.abs($(window).scrollTop() - scrollTop), 357 msPerHeight = 1, //How much ms per height 358 minRange = 700, //Minimal animation time 359 maxRange = 1500, //Maximal animation time 360 time = height * msPerHeight; 361 362 time = Math.min(time, maxRange); 363 time = Math.max(time, minRange); 364 365 if (height > 1) { 366 $('html, body').animate({ 367 scrollTop: scrollTop 368 }, time, 'easeInOutCubic'); 369 } 370 } 371 372 $('.shop-switcher').find('input').on('click', function() { 373 var val = $(this).val(); 374 375 if(val == 1) { 376 $('.magazines-wrapper').show(); 377 $('.gifts-wrapper').show(); 378 } 379 if(val == 2) { 380 $('.magazines-wrapper').show(); 381 $('.gifts-wrapper').hide(); 382 } 383 if(val == 3) { 384 $('.magazines-wrapper').hide(); 385 $('.gifts-wrapper').show(); 386 } 387 }); 388 389 390 function initFilters(isInit) 391 { 392 var $wrappers = $('.options-outer-wrapper'); 393 394 if ($wrappers.length === 0) { 395 return; 396 } 397 398 $('body').unbind('click.filter-body').bind('click.filter-body', function(){ 399 $('.options-outer-wrapper').removeClass('active'); 400 }); 401 402 $wrappers.each(function() { 403 var $wrapper = $(this); 404 var $form = $wrapper.closest('.filter-form'); 405 var $submit = $form.find('.submit-btn'); 406 var $checkedOptions = $('.checked-options.' + $(this).data('binded')); 407 var $label = $wrapper.find('.label'); 408 var $inputs = $wrapper.find('input'); 409 410 $wrapper.unbind('click.filter-wrapper').bind('click.filter-wrapper', function(e){ 411 e.stopPropagation(); 412 }); 413 414 $label.unbind('click.filter-label').bind('click.filter-label', function(e) { 415 e.preventDefault(); 416 $wrapper.toggleClass('active') 417 }); 418 419 $inputs.each(function () { 420 var $input = $(this); 421 422 if (isInit) { 423 initCheckedOptions($input, $checkedOptions); 424 } 425 426 $input.unbind('click.filter-input').bind('click.filter-input', function() { 427 inputsClick($input, $checkedOptions); 428 $submit.click(); 429 initOverlay($form.data('filter-id')); 430 }); 431 }); 432 }); 433 } 434 435 function initCheckedOptions($input, $checkedOptions) 436 { 437 var isChecked = $input.is(':checked'); 438 var $id = $input.attr('id'); 439 var label = $input.data('label'); 440 441 if (isChecked) { 442 var $newEle = $("<a href='#' class='filtered-value " + $id + "'>" + label + "</a>"); 443 $checkedOptions.append($newEle); 444 $newEle.on('click', function(e) { 445 e.preventDefault(); 446 $input.click(); 447 }); 448 } 449 } 450 451 function inputsClick($input, $checkedOptions) 452 { 453 var $id = $input.attr('id'); 454 var label = $input.data('label'); 455 var isChecked = $input.is(':checked'); 456 var $ele = $('.' + $id); 457 458 if (isChecked && $ele.length === 0) { 459 var $newEle = $("<a href='#' class='filtered-value " + $id + "'>" + label + "</a>"); 460 $checkedOptions.append($newEle); 461 $newEle.on('click', function(e) { 462 e.preventDefault(); 463 $input.click(); 464 }); 465 } else { 466 $ele.remove(); 467 } 468 } 469 470 function initOverlay($filterId) 471 { 472 var $wrapper = $('#filtered-content-' + $filterId); 473 var extName = 'removeAjaxOverlay' + $filterId; 474 var $ajaxOverlay = $wrapper.find('.ajax-overlay'); 475 $ajaxOverlay = $ajaxOverlay.length !== 0 ? $ajaxOverlay : getAjaxOverlay("ProbÃhá filtrovánÃ"); 476 477 $ajaxOverlay.appendTo($wrapper).addClass("active"); 478 479 // https://github.com/vojtech-dobes/nette.ajax.js/ 480 $.nette.ext(extName, { 481 complete: function () { 482 $ajaxOverlay.removeClass("active"); 483 $.nette.ext(extName, false); 484 } 485 }); 486 } 487 488 function getAjaxOverlay(text) 489 { 490 var $ajaxOverlay; 491 492 $ajaxOverlay = 493 $("<div/>") 494 .addClass("ajax-overlay") 495 .append( 496 $("<div/>") 497 .addClass("center") 498 .append( 499 $("<div/>") 500 .addClass("lds-rolling") 501 .append($("<div/>")) 502 .append(text ? $("<p/>").html(text) : "") 503 ) 504 ); 505 506 return $ajaxOverlay; 507 } 508 509 var $banner = $('#banner'); 510 511 if (window.localStorage.getItem('bannerClosed-18-01-21') === null) { 512 $banner.removeClass('hidden'); 513 $banner.find('.cross').on('click', function(e) { 514 e.preventDefault(); 515 $banner.fadeOut(300);
516 window.localStorage.setItem('bannerClosed-18-01-21', true); 517 }); 518 } 519 520 521 initOpener(); 522 function initOpener() 523 { 524 const $categories = $('.categories'); 525 526 $('.categories__opener').unbind('click.coc').bind('click.coc', function (e) { 527 e.preventDefault(); 528 $categories.toggleClass('opened'); 529 }); 530 531 $(document).unbind('click.cClose').bind('click.cClose', function(e) { 532 let $target = $(e.target); 533 534 if (!$target.closest('.categories').length && $categories.hasClass('opened')) { 535 $categories.removeClass('opened'); 536 } 537 }); 538 } 539 540 541 function initPagination() 542 { 543 $('.pagination__action').unbind('click.pa').bind('click.pa', function (e) { 544 slideTo($('.main-wrapper').children(":first")); 545 }); 546 } 547 548 549 function initImageSource() 550 { 551 $('.image-wrapper').each(function () { 552 const $img = $(this).find('img'); 553 const $imgInfo = $(this).find('.img-info'); 554 const alt = $img.attr('alt'); 555 556 if (alt && !$imgInfo.length) { 557 const $imgInfo = $('<div></div>').addClass('img-info'); 558 const $imgInfoIco = $('<div>i</div>').addClass('img-info__ico'); 559 const $imgInfoText = $('<div></div>').addClass('img-info__text').text('Foto: ' + alt); 560 $imgInfo.append($imgInfoIco); 561 $imgInfo.append($imgInfoText); 562 $(this).append($imgInfo); 563 } 564 }); 565 } 566 567 568 function initIFramesRatio() 569 { 570 $('.iframe-wrapper').each(function () { 571 let $wrapper = $(this); 572 let $iframe = $wrapper.find('iframe'); 573 574 if (/youtube\.com/i.test($iframe.attr('src'))) { 575 $wrapper 576 .css({ 577 'padding-top': ($iframe.attr('height')/$iframe.attr('width') * 100) + '%' 578 }) 579 .addClass('youtube'); 580 } 581 if (/facebook\.com/i.test($iframe.attr('src'))) { 582 $iframe.addClass('facebook'); 583 } 584 }); 585 } 586});
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.