1/** 2 * @name params.js 3 * 4 * 5 * 6 * @copyright Bohemiasoft s.r.o. - 10.10.2014 7 * @author Michal Schwarz <[email protected]> 8 * 9 */ 10 11/** 12 * Jako parametr prijme html fragment e-products a pokud neni undefined, 13 * nahradi s tim aktualni stranku. 14 * Inicializuje potrebny ovladaci javascript. 15 * 16 * @param {string} $new_html html fragment e-products 17 * @returns {undefined} 18 */ 19function products_refresh($new_html) 20{ 21 if(BS.Fce.loading_run <= 1) 22 { 23 if(typeof($new_html) !== 'undefined') 24 { 25 clear_products_page(); 26 $('#products_place').after($new_html); 27 $(document).triggerHandler("page:productsLoaded"); 28 } 29 init_slider(); 30 init_tabs(); 31 // vyjizdece v akci, nejprodavanejsi, atd nad. produktem 32 if(typeof(init_products_hovers) === 'function') 33 { 34 init_products_hovers(); 35 } 36 $( ".centerpage_params_filters li" ).removeClass( "ui-corner-top" ).addClass( "ui-corner-left" ); 37 //$( ".params_filter_areas input.price" ).number( true, 0, ',', ' '); 38 } 39 BS.Fce.hide_top_bar_loading(); 40} 41 42/** 43 * Smaze z produktove stranky veskera data pro refresh - produkty, strankovani, parametry, razeni... 44 * 45 * @returns {undefined} 46 */ 47function clear_products_page() 48{ 49 $('#masterpage div#centerpage_params_filter_area, #masterpage div#products_sorting_box, #masterpage .productList').remove(); 50 //na Å¡ablonÄ krypton jsou vÅ¡echny produktu v divu 51 $("#incenterpage").find("div.products_wrap").remove(); 52 $('#masterpage div.product').each(function (){ 53 if(! $(this).parent('.contentdiv').length) 54 { 55 $(this).remove(); 56 } 57 }); 58 $('#masterpage div.pagination').each(function (){ 59 if(! $(this).parent('.contentslider').length) 60 { 61 $(this).remove(); 62 } 63 }); 64} 65 66/** 67 * Inicializuje tab s vyberem parametru 68 * 69 * @returns {undefined} 70 */ 71function init_tabs() 72{ 73 var $selected_param = $('#centerpage_filtering_form input[name="selected_centerpage_param_filter"]').val(); 74 var $selected_param_index = parseInt($selected_param) ? $('#centerpage_params_filter a[href="#param_tabs_'+$selected_param+'"]').parent().index() : 0; 75 $( ".centerpage_params_filters" ).tabs({ 76 active: $selected_param_index, 77 activate: function(event, ui) { 78 $('#centerpage_filtering_form input[name="selected_centerpage_param_filter"]').val($(ui.newTab).find('a').attr('href').split('#param_tabs_')[1]); 79 } 80 }).addClass( "ui-tabs-vertical ui-helper-clearfix" ); 81} 82 83/** 84 * Inicializuje slider cenove listy 85 * 86 * @returns {undefined} 87 */ 88function init_slider() 89{ 90 var $price_tags = ["#centerpage_filtering_form input.min_price", "#centerpage_filtering_form input.max_price"]; 91 var $allowed_price_tags = ["#centerpage_filtering_form input[name='allowed_min_price']", "#centerpage_filtering_form input[name='allowed_max_price']"]; 92 var $prices = [parseInt($($price_tags[0]).val()), parseInt( $($price_tags[1]).val())]; 93 var $allowed_prices = [parseInt($($allowed_price_tags[0]).val()), parseInt( $($allowed_price_tags[1]).val())]; 94 $( ".centerpage_price_slider_boxes" ).slider({ 95 range: true, 96 min: $allowed_prices[0], 97 max: $allowed_prices[1], 98 animate: true, 99 values: [ $prices[0], $prices[1] ], 100 slide: function( event, ui ) { 101 $($price_tags[0]).val(ui.values[0]); 102 $($price_tags[1]).val(ui.values[1]); 103 }, 104 stop: function( event, ui ) { 105 $handle_key = ui.values[0] === ui.value ? 0 : 1; 106 update_price_filter(); 107 } 108 }); 109} 110 111/** 112 * Aktualizuje cenovy filtr z nastavenych limitu 113 * 114 * @returns {undefined} 115 */ 116function update_price_filter() 117{ 118 var $new_min_price = $('#centerpage_filtering_form input[name="allowed_min_price"]').val(); 119 var $new_max_price = $('#centerpage_filtering_form input[name="allowed_max_price"]').val(); 120 if(is_price_in_ranges()) 121 { 122 $new_min_price = $('.filtering_form input[name="min_price"]').val(); 123 $new_max_price = $('.filtering_form input[name="max_price"]').val(); 124 } 125 else 126 { 127 $('.filtering_form input[name="min_price"]').val($new_min_price); 128 $('.filtering_form input[name="max_price"]').val($new_max_price); 129 } 130 131 $('.filtering_form input[name="min_price_filter"]').val($new_min_price); 132 $('.filtering_form input[name="max_price_filter"]').val($new_max_price); 133 update_filter(); 134} 135 136/** 137 * Zjisti, zda cenove rozpeti pro filtr je v mezich 138 * 139 * @returns {Boolean} 140 */ 141function is_price_in_ranges() 142{ 143 var $min = parseInt($('.filtering_form input[name="min_price"]').val()); 144 var $allowed_min = parseInt($('#centerpage_filtering_form input[name="allowed_min_price"]').val()); 145 var $max = parseInt($('.filtering_form input[name="max_price"]').val()); 146 var $allowed_max = parseInt($('#centerpage_filtering_form input[name="allowed_max_price"]').val()); 147 148 if($min <= $max && $min >= $allowed_min && $max <= $allowed_max) 149 { 150 return true; 151 } 152 else 153 { 154 return false;
155 } 156} 157 158/** 159 * @author Yarin http://stackoverflow.com/a/4198132/1750366 160 * @returns {getHashParams.hashParams} 161 */ 162function get_hash_params() 163{ 164 var hashParams = {}; 165 var e, 166 a = /\+/g, // Regex for replacing addition symbol with a space 167 r = /([^&;=]+)=?([^&;]*)/g, 168 d = function (s) { return decodeURIComponent(s.replace(a, " ")); }, 169 q = window.location.hash.substring(1); 170 171 while (e = r.exec(q)) { 172 hashParams[escapeHtml(d(e[1]))] = escapeHtml(d(e[2])); 173 } 174 175 return hashParams; 176} 177 178/** 179 * Vynuti aktualizaci produktu podle aktualniho url hashe a zajisti refresh parametru 180 * 181 * @param {boolean} $if_hash_empty pokud je true dojde k nacteni novych produktu jen pokud neni prazdny hash 182 * @returns {undefined} 183 */ 184function update_products($if_hash_empty) 185{ 186 $if_hash_empty = (typeof($if_hash_empty) !== 'undefined' && $if_hash_empty) ? true : false; 187 BS.Fce.show_top_bar_loading(); 188 $hash_params = get_hash_params(); 189 if(!$if_hash_empty || !$.isEmptyObject($hash_params)) 190 { 191 $( "#products_params_form #hash_params_place" ).html(''); 192 for(var $key in $hash_params) 193 { 194 $( "#products_params_form #hash_params_place" ).append( '<input type="hidden" name="'+$key+'" value="'+$hash_params[$key]+'">' ); 195 } 196 left_filter_select($hash_params['variant-selected']); 197 send_update_request(); 198 } 199 else 200 { 201 products_refresh(); 202 } 203 204 BS.h1_paging.append_html(); 205} 206 207/** 208 * Odesle request na nove produkty dle parametru v form#products_params_form 209 * S vysledkem $data vola products_refresh($data) 210 * 211 * @returns {undefined} 212 */ 213function send_update_request() 214{ 215 var $request = BS.extend(BS.Request.$default, { 216 data: $('form#products_params_form').serialize(), 217 dataType: 'html', 218 type: "GET", 219 success: function($data) { 220 products_refresh($data); 221 } 222 }); 223 $.ajax($request); 224} 225 226/** 227 * Zajisti aktualizaci stranky po zmene filtru 228 * 229 * @returns {undefined} 230 */ 231function update_filter() 232{ 233 var $new_url_activated = $('#products_params_form input[name="new_url_activated"]').val() === '1'; 234 var selector = $(".icon-filter__box-selected"); 235 var serialized_data = $('form.filtering_form input:not(.price)'); 236 var variant_input = document.createElement('input') 237 variant_input.setAttribute('name', 'variant-selected'); 238 var selected_icons = []; 239 $.each(selector, function(key, element) { 240 var icon_group = $(element).data('group-id') + "-" + $(element).data('id'); 241 selected_icons.push(icon_group); 242 }); 243 variant_input.setAttribute('value', selected_icons); 244 var screen_width = document.createElement('input') 245 screen_width.setAttribute('name', 'screen_width'); 246 screen_width.setAttribute('value', window.innerWidth); 247 serialized_data.push(variant_input); 248 serialized_data.push(screen_width); 249 $('form.filtering_form').data('serialized', serialized_data.serialize()); 250 var $new_hash = $('form.filtering_form').data('serialized'); 251 if(!$new_url_activated) 252 { 253 $new_hash += '&' + get_old_url_page_param(0); 254 } 255 var $sorting_link = $('#products_sorting_box .sorting_item.active'); 256 if($sorting_link.length === 1) 257 { 258 $new_hash += '&' + 'sort='+$sorting_link.data('sorting'); 259 } 260 window.location.hash = $new_hash; 261} 262 263function left_filter_select(selected_icons) 264{ 265 if(selected_icons !== undefined) 266 { 267 var values = selected_icons.split(','); 268 $.each(values, function (index, value) { 269 $("#left-filtration__value-" + value).addClass('icon-filter__box-selected') 270 $("#left-filtration__value-" + value).addClass('icon-filter__box-selected-visual') 271 }); 272 } 273} 274 275/** 276 * Vrati strankovaci url dane stranky $page pro stare url 277 * 278 * @param {number} $page 279 * @returns {String} 280 */ 281function get_old_url_page_param($page) 282{ 283 return 'man=9&page=' + parseInt($page); 284} 285 286/** 287 * pokud neni na obrazovce, najede k prvku $element 288 * 289 * @param {String} $element selector 290 * @returns {undefined} 291 */ 292function scroll_to_element($element) 293{ 294 if($($element).length) 295 { 296 var $visible_area_top = $(window).scrollTop(); 297 var $visible_area_bottom = $visible_area_top + window.innerHeight; 298 var $element_pos = $($element).offset().top; 299 var scroll_offset = (BS.Design.template.is_selected(BS.Design.templates.TEMPLATE_KRYPTON) 300 || BS.Design.template.is_selected(BS.Design.templates.TEMPLATE_KRYPTONIT)) 301 ? 180 : 0; 302 303 if($element_pos < $visible_area_top || $element_pos > $visible_area_bottom) 304 { 305 $('html, body').animate({ 306 scrollTop: $element_pos - scroll_offset 307 }, 200); 308 } 309 } 310} 311 312function rolldown_click_event() 313{ 314 var $box = $(".p-rolldown-outer"), 315 $input = $("#centerpage_filtering_form").find("input[name='rolled_down']"), 316 $button = $("#products_sorting_box").find(".p-rolldown-toggle").find("button"); 317 318 $button.toggleClass("active"); 319 if(!$box.hasClass("p-rolled-down")) 320 { 321 $input.val(1); 322 } 323 else 324 { 325 $input.val(0); 326 } 327 $box.toggleClass("p-rolled-down"); 328} 329 330$( window ).resize(function() { 331 if(window.innerWidth <= 767) { 332 $("#centerpage_variant_filters").after($("#left-filtration-container")); 333 $("#centerpage_variant_filters").after($("#centerpage-left-filter")); 334 } 335 else 336 { 337 $("#left-filtration-box").after($("#left-filtration-container")); 338 $("#left-filtration-box").after($("#centerpage-left-filter")); 339 } 340}); 341 342$(document).ready(function () 343{ 344 if(window.innerWidth <= 767) { 345 $("#centerpage_variant_filters").after($("#left-filtration-container")); 346 } 347 $("#aroundpage").on('click', '.extract_details_btns', function () 348 { 349 if($('.centerpage_params_filter_areas').hasClass('params_part_hidden')) 350 { 351 $('.centerpage_params_filter_areas').removeClass('params_part_hidden'); 352 $('#centerpage_filtering_form input[name="show_centerpage_params_filter"]').val('1'); 353 } 354 else 355 { 356 $('.centerpage_params_filter_areas').addClass('params_part_hidden'); 357 $('#centerpage_filtering_form input[name="show_centerpage_params_filter"]').val('0'); 358 } 359 }); 360 361 $("#aroundpage").on('change', '.params_filter_areas input.price', function (){ 362 update_price_filter(); 363 }); 364 365 $("#aroundpage").on('click', 'div.pagination:not(#paginate-categorySlider) a, div.sorting a.sorting_item', function (){ 366 var $new_url_activated = $('#products_params_form input[name="new_url_activated"]').val() === '1'; 367 var $link = $(this).attr('href'); 368 $new_hash = ($link.indexOf('?') >= 0) ? $link.split('?')[1] : ''; 369 if(!$(this).hasClass('sorting_item') && ($new_hash === '' || !$new_url_activated)) 370 { 371 $new_hash += '&' + get_old_url_page_param($(this).data('page')); 372 } 373 374 scroll_to_element("div.product:first"); 375 window.location.hash = $new_hash; 376 return false;
377 }); 378 379 $("#aroundpage").on('click', '.params_filter_areas .cancel_filter_button', function (){ 380 $type = $(this).attr('id').split('storno_filter_')[1]; 381 switch ($type) 382 { 383 case 'price': 384 case 'all': 385 $('.filtering_form input[name="min_price_filter"]').val(0); 386 $('.filtering_form input[name="max_price_filter"]').val(0); 387 if($type === 'all') 388 { 389 $('input.filter_values').removeAttr('checked'); 390 } 391 update_filter(); 392 break; 393 default: 394 $id_value = $type.split('value_')[1]; 395 $('#filter_values_'+$id_value).removeAttr('checked').change(); 396 break; 397 } 398 }); 399 400 $(window).on('hashchange', function() { 401 update_products(); 402 }); 403 404 $(window).on('click', '#main-menu a[href="#"], #left-box a[href="#"]', function (){ 405 return false; 406 }); 407 408 $("#aroundpage").on('change', '.params_filter_areas input:not(.price)', function (){ 409 update_filter(); 410 }); 411 412 $("#aroundpage").on('click', '.icon-filter__box', function (){ 413 if($(this).hasClass('icon-filter__box-selected')) 414 { 415 $(this).removeClass('icon-filter__box-selected'); 416 $(this).removeClass('icon-filter__box-selected-visual'); 417 } 418 else 419 { 420 //$(this).parents('.icon-filter__content').find('.icon-filter__box-selected').removeClass('icon-filter__box-selected'); 421 $(this).addClass('icon-filter__box-selected'); 422 $(this).addClass('icon-filter__box-selected-visual'); 423 } 424 update_filter(); 425 }); 426 427 $("#aroundpage").on('click', '.param-filter__box', function(){ 428 var id = $(this).data('id'); 429 if($(this).hasClass('icon-filter__box-selected-visual')) 430 { 431 $(this).removeClass('icon-filter__box-selected-visual'); 432 } 433 else 434 { 435 $(this).addClass('icon-filter__box-selected-visual'); 436 } 437 $("#filter_values_" + id).click(); 438 }); 439 440 $("body") 441 .delegate(".p-rolldown-toggle button", "click", function(e) { 442 e.preventDefault(); 443 rolldown_click_event(); 444 }) 445 .delegate(".p-close", "click", function(e) { 446 e.preventDefault(); 447 rolldown_click_event(); 448 }); 449 450 451 (function(selector) { 452 453 var banner = $(selector); 454 var delay = 125; 455 var t; 456 var wWidth; 457 var boxes; 458 459 function insertCatBanner() { 460 var i = 0, itemsPerRow, offsTop; 461 if(banner.length) { 462 boxes = $("div.product"); 463 464 if(boxes.length) { 465 banner = banner.detach(); 466 i = 0; 467 offsTop = boxes.get(i).offsetTop; 468 itemsPerRow = 1; 469 while(++i < boxes.length 470 && boxes.get(i).offsetTop === offsTop) { 471 itemsPerRow++; 472 } 473 474 banner.addClass("banner-hidden"); 475 boxes.eq(itemsPerRow - 1).after(banner); 476 477 if(banner.hasClass("banner-hidden")) 478 { 479 requestAnimationFrame(function() { 480 banner.removeClass("banner-hidden"); 481 }); 482 } 483 } 484 } 485 } 486 487 if(banner.length) { 488 $(window).on("resize", function() { 489 clearTimeout(t); 490 t = setTimeout(function() { 491 var cWidth = window.innerWidth; 492 if(cWidth !== wWidth) { 493 wWidth = cWidth; 494 insertCatBanner(); 495 } 496 }, delay); 497 }); 498 499 $(document).on("page:productsLoaded", function() { 500 //zobrazenà banneru 501 insertCatBanner(); 502 }); 503 insertCatBanner(); 504 wWidth = window.innerWidth; 505 } 506 })(".in_cat_banner"); 507 508});
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.