1(function (global) { 2 function Filter() { 3 var _ = this; 4 var originalPager = $($(".pager")[0]).html(); 5 var originalProducts = $($(".maincontainer .ProductList_Custom_UL")[0]).html(); 6 var originalItemsFound = $($(".listtoolsleft .itemsfound")[0]).html(); 7 var _hasLoadedOriginalProducts = false; 8 9 // private: 10 var _query = {}; 11 let _hash = {}; 12 var _loaded = false; 13 var _baseApiUrl = "https://api2.mytrendyphone.dk/api-new"; 14 var _baseApiUrl2 = "https://"+document.location.hostname+"/_do/filters2.asp"; 15 16 let categoryName = $('#categoryName').text().trim(); 17 18 var _shopId = LanguageID; 19 var _categoryType = ""; 20 var _category = ""; 21 var _excludedFilters = ""; 22 var _shortfilters = ""; 23 let _pageNumber = 1; 24 let _totalProducts = 0; 25 let _productsPerPage = 0; 26 let _sortScore = ""; 27 let _queryParameter = ""; 28 let _querySeparator = "#"; 29 let _forceFilter = false; 30 let _hasRefresh = false; 31 32 var _postEvent; 33 var _skipScroll = false; 34 35 //var _currency = "DKK"; 36 var _currency = currency; 37 38 39 let minfilterprice = 0; 40 let maxfilterprice = 0; 41 let minstartprice = 0; 42 let maxstartprice = 0; 43 44 let filteredpricemin; 45 let filteredpricemax; 46 47 let _ignorePage = false; 48 let _hasPriceUrl = false; 49 let _runRedrectToFirstPage = false; 50 51 52 var _filterValues = {}; 53 var _products = []; 54 55 let _selectedFilterValues = []; 56 57 let isProductList = $('body.webshop-productlist').length; 58 59 let productsfound = $('.btnfilter .found').eq(0).text(); 60 //var filterbuttonresettext = 'Se ' + productsfound + ' resultater'; 61 var filterbuttonresettext = language('filter.viewresults').replace('###',productsfound); 62 var originalFilterbuttonresettext = filterbuttonresettext; 63 64 var filterButtonReset = $('<div class="button filterbuttonreset">'+language('filter.reset')+'</div>'); 65 filterButtonReset.on("click", function () { 66 console.log("filterButtonReset"); 67 if(runRewriteFilters()){ 68 console.log("sve regulare"); 69 } 70 else{ 71 console.log("filterButtonReset"); 72 redirectToFirstPage(); 73 } 74 _pageNumber = 1; 75 _filterValueUrl = ""; 76 77 let url = location.pathname; 78 79 //window.history.pushState('data', 'Title', url); 80 window.history.pushState({path: url}, '', url); 81 //console.error("push state: " + url); 82console.log('loadFilterValues c'); 83 loadFilterValues(false); 84 85 86 }); 87 var filterButtonShow = $('<div class="button filterbuttonshow">' + filterbuttonresettext + '</div>'); 88 filterButtonShow.on("click", function () { 89 closeAside(); 90 }); 91 92 var filterButtons = $('<div class="filterbuttons"></div>').append(filterButtonReset, filterButtonShow); 93 94 95 var _productFilterContent = $('<div class="productfiltercontent"></div>'); 96 var _productFilter = $(".productfilter").append('<div class="headline">'+language('filter.headline')+'</div>', _productFilterContent, filterButtons); 97 98 var _filterGenerateType = { 99 "PRICE RANGE CUSTOM": "price", 100 "REVIEW CUSTOM": "reviews" 101 }; 102 103 var _filterValueUrl = ""; 104 var _hasFiltered = false; 105 var _loadOriginalValues = false; 106 107 if(isProductList) { 108 _querySeparator = "?filters=true"; 109 } 110 111 112 function getCookie(name) { 113 let nameEQ = name + "="; 114 let ca = document.cookie.split(';'); 115 116 for(let i=0;i < ca.length;i++) { 117 let c = ca[i]; 118 while (c.charAt(0)==' ') { 119 c = c.substring(1,c.length); 120 } 121 if (c.indexOf(nameEQ) == 0) { 122 return c.substring(nameEQ.length,c.length); 123 } 124 } 125 126 return null; 127 } 128 129 function setLoadedProducts(products, totalProducts) { 130 $('.itemsloaded').text(products); 131 $('.itemstotal').text(totalProducts); 132 } 133 134 function extractInternalId(url) {
135 const regex = /-(\d+)[sc]/; 136 const match = url.match(regex); 137 return match ? match[1] : null; 138} 139 140function countNonSortElements(queryString) { 141 var elements = queryString.split('&').filter(function(element) { 142 return element !== ''; 143 }); 144 var nonSortElementsCount = elements.filter(function(element) { 145 return !element.startsWith('sort'); 146 }).length; 147 return nonSortElementsCount; 148} 149 150 function runRewriteFilters(){ 151 /* 152 let internalId = extractInternalId(CurrencyReturnUrl); 153 154 internalId = parseFloat(internalId); 155 156 if(LanguageID == "1" || LanguageID == "3"){ 157 158 const idArray = [303614,303609,303604,303589,303579,303574,303450,303430, 303435,303425,303505,303510,303332,303388,302865,302853, 303184,303119,303164,303154,303159,303107,303095,302501, 302516,302531,302546,294730,294735, 293027,298711,301958,293074,300646,300678,295016,298696, 294754,295726,293313,288840,283622,289872,288798,298726,290652,297296,300838,293647,296685,290908,301018,297107,295471,302756,293565,300662,298988, 300694,274139,297119,295559,294828,274140,301970,300862,285665,295415,266121,302318,295987,300874,296398,225451,296817,293015,297162, 275001,302781,295483,285623,297083,302686,295775,301258,263332,290194,256478,294629,293779,292219,295421,295511,199029,299003,293727,300337, 159 302576, 295496, 296793, 245120, 292799, 293079, 295762, 296570, 295459, 296528, 297626, 292403, 302776, 296276, 289990, 295750, 295374, 297071, 292843, 302731, 289481, 270335, 285644, 293480, 297380, 296691, 252713, 296522, 295577, 288913, 303388, 278249, 300886,226503, 292838, 295553, 303119, 295016, 280855, 293722, 295195, 272651, 160 297537, 291730, 295592, 296373, 292428, 279108, 290872, 268497, 297645, 299025, 300325, 245338, 287498, 295781, 294742, 302054, 296618, 297634, 295866, 303589, 290074, 300958, 293337, 265303, 297458, 288154, 272160, 303530, 302751,296367, 271576, 295665, 294783, 293264, 300313, 295028, 296965, 295719, 279109]; 161const exists = idArray.includes(internalId); 162 163// Ispis rezultata 164if (exists) { 165 return false; 166} 167return false; 168 169 } 170*/ 171 172 173 174 175 return false; 176 } 177 178 function getCurrentPage() { 179 var match = CurrencyReturnUrl.match(/(s|c)(\d+)\.html$/); 180 return match ? match[2] : null; 181} 182 183 function redirectToFirstPage(){ 184 185 var currentPage = getCurrentPage(); 186 if(currentPage > 1){ 187 console.log("redirectToFirstPage 2"); 188 window.location.href = CurrencyReturnUrl.replace(/(s|c)\d+\.html$/, '$11.html'); 189 190 } 191 else { 192 $(".pager").each(function () { 193 $(this).html(originalPager); 194 }); 195 196 197 $(".itemsfound").each(function () { 198 $(this).html(originalItemsFound); 199 }); 200 201 console.log("set original"); 202 $(".maincontainer .ProductList_Custom_UL").each(function () { 203 $(this).html(originalProducts); 204 }); 205 206 } 207 } 208 209 function buildBrowserUrl(shouldPushState) { 210 console.log('buildurl'); 211 if (!_filterValueUrl || !_filterValueUrl.length) { 212 if (_pageNumber > 1 || (_hasRefresh && ((_sortScore && _sortScore.length) || (_productsPerPage && _productsPerPage > 0)))) { 213 var separator_ = isProductList ? _querySeparator : '#'; 214 let url = location.pathname + separator_ + "&start=" + _pageNumber; 215 //let url = location.pathname + "?start=" + _pageNumber; 216 217 if (_excludedFilters && _excludedFilters.length) { 218 url += "&excludedFilters=" + _excludedFilters; 219 } 220 221 if (_sortScore && _sortScore.length) { 222 url += _sortScore; 223 } 224 225 if (_productsPerPage && _productsPerPage > 0) { 226 url += "&perpage=" + _productsPerPage; 227 } 228 229 //window.history.pushState('data', 'Title', url); 230 console.log('buildBrowserUrl pushState', url); 231 if(runRewriteFilters()){ 232 console.log("sve regulare3", CurrencyReturnUrl); 233 window.history.pushState({path: url}, '', url); 234 } 235 else { 236 237 console.log("specific"); 238 } 239 240 //console.log('go'); 241 //setCanocical(); 242 //console.error("push state: " + url); 243 } 244 return; 245 } 246 247 let filterUrlBrowser = "" + _filterValueUrl; 248 249 if (filterUrlBrowser[0] !== '&') { 250 filterUrlBrowser = '&' + filterUrlBrowser; 251 } 252 253 filterUrlBrowser = filterUrlBrowser || ""; 254 255 for (let n = 0; n < 1000; n++) { 256 filterUrlBrowser = filterUrlBrowser.replace("&start=" + n, "").replace("start=" + n, ""); 257 } 258 259 filterUrlBrowser = filterUrlBrowser 260 .replace("&perpage=24", "") 261 .replace("&perpage=48", "") 262 .replace("&perpage=60", "") 263 .replace("&perpage=72", "") 264 .replace("&perpage=96", "") 265 .replace("&perpage=200", "") 266 .replace("&perpage=24", "") 267 .replace("&sort=score", "") 268 .replace("&sort=price_asc", "") 269 .replace("&sort=date", "") 270 .replace("&sort=popular", ""); 271 272 273 //console.log(_querySeparator); 274 275 let url = location.pathname 276 + _querySeparator 277 + filterUrlBrowser 278 + (_pageNumber && _pageNumber > 1 ? ("&start=" + _pageNumber) : "") 279 + ((_sortScore && _sortScore.length && _category !== "search") ? (_sortScore) : "") 280 + ((_productsPerPage && _productsPerPage > 0) ? ("&perpage=" + _productsPerPage) : ""); 281 282 //window.history.pushState('data', 'Title', url); 283 284 url = url.replace('&q=', 'q='); 285 286 window.history.pushState({path: url}, '', url); 287 } 288 289 function buildUrl() { 290 291 console.log('buildurl2'); 292 293 294 let url = _baseApiUrl + "?&"; 295 296 let queries = []; 297 298 if (_hasFiltered && (!_filterValueUrl || !_filterValueUrl.length) && _pageNumber <= 1) { 299 _hasFiltered = false; 300 _loadOriginalValues = true; 301 } 302 303 304 if (_filterValueUrl && _filterValueUrl.length) { 305 _hasFiltered = true; 306 _loadOriginalValues = false; 307 308 if (_filterValueUrl[0] === "&") { 309 _filterValueUrl = _filterValueUrl.substring(1); 310 } 311 312 if (_excludedFilters && _excludedFilters.length) { 313 if (_filterValueUrl.indexOf('excludedFilters') === -1) {
314 _filterValueUrl += "&excludedFilters=" + _excludedFilters; 315 } 316 } 317 318 queries.push(_filterValueUrl); 319 } else { 320 if (_excludedFilters && _excludedFilters.length) { 321 queries.push("excludedFilters=" + _excludedFilters); 322 } 323 } 324 325 // get DD page number 326 const pageUrlRegex = /s(\d+)\.html/; 327 328 const pageUrlMatch = window.location.href.match(pageUrlRegex); 329 if (pageUrlMatch && location.href.indexOf('filters=true') === -1) { 330 const number = parseInt(pageUrlMatch[1]); 331 if(number > 1) { 332 _pageNumber = number; 333 } 334 } 335 336 if (_pageNumber > 1 && !_ignorePage) { 337 queries.push("start=" + _pageNumber); 338 } 339 340 if (filteredpricemin && filteredpricemax) { 341 queries.push("price_from=" + filteredpricemin);
342 queries.push("price_to=" + filteredpricemax); 343 } 344 345 //queries.push("callback=jQuery351084276979419926_1645180031763"); 346 queries.push("shop=" + _shopId); 347 queries.push("categoryType=" + _categoryType); 348 queries.push("category=" + _category); 349 350 if (_shortfilters && _shortfilters.length) { 351 queries.push("shortfilters=" + _shortfilters); 352 } 353 354 let perPageCookie = +getCookie("itemsperpage"); 355 356 if (!isNaN(perPageCookie) && perPageCookie > 0) { 357 let newItemsPerPage = perPageCookie; 358 359 if (newItemsPerPage !== _productsPerPage) { 360 _productsPerPage = perPageCookie; 361 buildBrowserUrl(); 362 } else { 363 _productsPerPage = perPageCookie; 364 } 365 } 366 367 if (_productsPerPage > 0) { 368 queries.push("perpage=" + _productsPerPage); 369 } 370 371 let sortValue = $('.Productlist_Sort_Select').val() || ""; 372 373 if (sortValue && sortValue.length ) { 374 let sortScore = ""; 375 switch (sortValue) { 376 case "Default": sortScore = "sort=score"; break; 377 case "price_asc": sortScore = "sort=price_asc"; break; 378 case "addeddate_desc": sortScore = "sort=date"; break; 379 case "sold_desc": sortScore = "sort=popular"; break; 380 } 381 queries.push(sortScore); 382 let newSortScore = "&"+sortScore; 383 384 if (newSortScore !== _sortScore) { 385 _sortScore = newSortScore; 386 buildBrowserUrl(); 387 } else { 388 _sortScore = newSortScore; 389 } 390 } 391 392 if (_queryParameter && _queryParameter.length) { 393 queries.push("q=" + _queryParameter); 394 } 395 //queries.push("_=1645180031764"); 396 397 url += queries.join("&"); 398 399 return url; 400 } 401 402 function loadQuery() { 403 let qs = global.location.search.replace("?", "").split("&").map(function (e) { 404 return e.split("="); 405 }); 406 407 _query = {}; 408 409 if (qs.length > 0) { 410 $.each(qs, function (i, keyValue) { 411 var key = keyValue[0]; 412 var value = keyValue[1]; 413 414 _query[key] = value; 415 }); 416 } 417 } 418 419 420 function loadHashMap(hash) { 421 let qs = hash.replace(_querySeparator, "").split("&").map(function (e) { 422 return e.split("="); 423 }); 424 425 let hashMap = {}; 426 427 if (qs.length > 0) { 428 $.each(qs, function (i, keyValue) { 429 var key = keyValue[0]; 430 var value = keyValue[1]; 431 432 hashMap[key] = value; 433 }); 434 } 435 436 return hashMap; 437 } 438 439 function loadHash() { 440 let qs = isProductList ? global.location.search.replace(_querySeparator, "").split("&").map(function (e) { 441 return e.split("="); 442 }) : global.location.hash.replace("#", "").split("&").map(function (e) { 443 return e.split("="); 444 }); 445 446 if (window.location.href.indexOf('search.asp') !== -1) { 447 _querySeparator = "?"; 448 qs = global.location.search.replace("?", "").split("&").map(function (e) { 449 450 return e.split("="); 451 }); 452 453 _filterTest = ''; 454 $.each(qs, function(key, value) { 455 456 _filterTest = _filterTest + '&' + value[0] + '=' + value[1]; 457 458 }); 459 460 if (qs.length > 0) { 461 _filterValueUrl = _filterTest; 462 } 463 } 464 465 _hash = {}; 466 467 if (qs.length > 0) { 468 $.each(qs, function (i, keyValue) { 469 var key = keyValue[0]; 470 var value = keyValue[1]; 471 472 _hash[key] = value; 473 }); 474 } 475 476 } 477 478 function loadInitialData() { 479 var dataElement = $("#filters"); 480 481 if (dataElement.length === 0) { 482 return; 483 } 484 485 if(runRewriteFilters()){ 486 487 } 488 else { 489 490 491 $('select.Productlist_Sort_Select').on('change',function() { 492 let sortBy = $(this).val(); 493 console.log("createCookie", createCookie); 494 createCookie('sortBy',sortBy);
495 try{SilentAjaxGetRequest("/shop/AjaxWrapper.asp?FC=changesortorder&SortField="+sortBy).then(function(){return document.location.reload()})}catch(t){} 496 497 }); 498 499 } 500 501 _categoryType = dataElement.attr("data-category-type"); 502 _category = dataElement.attr("class"); 503 _excludedFilters = dataElement.attr("data-excluded-filters"); 504 _shortfilters = dataElement.attr("data-shortfilters"); 505 // _forceFilter = (""+dataElement.attr("data-force-filters")) === "1"; 506 _loadOriginalValues = _forceFilter === true; 507 } 508 509 function get(url, callback) { 510 $.ajax({ 511 url: url, 512 type: "GET", 513 cache: false, 514 jsonp: "callback", 515 dataType: "jsonp", 516 517 success: function (response) { 518 if (!response) { 519 return; 520 } 521 522 if (callback) { 523 callback.call(_, response); 524 } 525 }, 526 error: function (error) { 527 console.error(error); 528 } 529 }); 530 } 531 532 function loadFilterValues(isInitial, loadCallback) { 533 console.log('loadFilterValues1'); 534 console.log(isInitial); 535 console.log(loadCallback); 536 var url = buildUrl(); 537 _ignorePage = false; 538 539 540 setCanocical(); 541 542 get(url, function (response) { 543 console.log('get a'); 544 545 if (response.prices && response.prices.priceMinimum >= 0) { 546 minfilterprice = response.prices.priceMinimum; 547 } 548 if (response.prices && response.prices.priceMaximum >= 0) { 549 maxfilterprice = response.prices.priceMaximum; 550 } 551 552 minstartprice = response.prices.priceMinimum; 553 maxstartprice = response.prices.priceMaximum; 554 555 if (!response || !response.filters) { 556 return; 557 } 558 console.log('get b'); 559 560 _filterValues = response.filters; 561 let productsPerPage = +response.per_page; 562 563 if (!isNaN(productsPerPage) && productsPerPage > 0) { 564 let newProductsPerPage = productsPerPage; 565 566 if (_productsPerPage !== newProductsPerPage) { 567 _productsPerPage = productsPerPage; 568 console.log("loadFilterValues"); 569 buildBrowserUrl(); 570 } else { 571 _productsPerPage = productsPerPage; 572 } 573 } 574 575 _totalProducts = response.totalProducts; 576 let totalProductsWithoutFilters = response.totalProductsWithoutFilters; 577 let customPriceFilterActive = response.custom_price_filter_active; 578 579 console.log('get c'); 580 581 //console.log(_totalProducts); 582 583 let selected = renderFilter(isInitial); 584 585 renderActiveFilters(); 586 587 if (!isInitial || _forceFilter) { 588 if (_loadOriginalValues && !_forceFilter) { 589 console.log('start 222'); 590 filteredpricemin = 0; 591 filteredpricemax = 0; 592 console.log('return'); 593 $(".maincontainer .ProductList_Custom_UL").each(function () { 594 $(this).html(originalProducts); 595 }); 596 597 // $(".pager").each(function () { 598 // $(this).html(originalPager); 599 // }); 600 601 $('.transformed').removeClass('transformed'); 602 //console.log('start'); 603 console.log("transformProductlist run"); 604 transformProductlist(); 605 606 _loadOriginalValues = false; 607 $(".button.filterbuttonshow").text(originalFilterbuttonresettext); 608 $('.btnfilter .count').text(""); 609 renderPager(); 610 _.isfiltered = true; 611 612 console.log('start 1'); 613 console.log("_runRedrectToFirstPage", _runRedrectToFirstPage); 614 if(_runRedrectToFirstPage){ 615 console.log("run reddirect2!"); 616 _runRedrectToFirstPage = false; 617 redirectToFirstPage(); 618 } 619 else{
620 setLoadedProducts(_totalProducts, totalProductsWithoutFilters); 621 } 622 623 624 625 626 627 628 } else if (_loadOriginalValues && _forceFilter) { 629 console.log('start 22'); 630 _loadOriginalValues = false; 631 $(".button.filterbuttonshow").text(originalFilterbuttonresettext); 632 $('.btnfilter .count').text(""); 633console.log('loadFilterValues d'); 634 loadFilterValues(false,loadCallback); 635 return; 636 } 637 else { 638 _products = response.products || []; 639 640 $('.btnfilter .found').text("" + (_totalProducts || 0)); 641 $('.btnfilter .count').text(selected > 0 ? ("" + selected) : ""); 642 643 productsfound = $('.btnfilter .found').eq(0).text(); 644 filterbuttonresettext = language('filter.viewresults').replace('###',productsfound); 645 646 $(".button.filterbuttonshow").text(filterbuttonresettext); 647 648 loadProductList(isInitial); 649 650 renderPager(); 651 652 653 _.isfiltered = true; 654 655 console.log('start 2'); 656 if(runRewriteFilters()){ 657 setLoadedProducts(_totalProducts, totalProductsWithoutFilters); 658 } 659 else{ 660 console.log("specific 44"); 661 console.log(_selectedFilterValues); 662 console.log(_selectedFilterValues.length); 663 if (!_selectedFilterValues.length && customPriceFilterActive == "0") { 664 console.log("specific 4"); 665 redirectToFirstPage(); 666} 667 else{ 668 setLoadedProducts(_totalProducts, totalProductsWithoutFilters); 669 } 670 671 672 } 673 674 675 } 676 } 677 else { 678 _products = response.products || []; 679 680 $('.btnfilter .found').text("" + (_totalProducts || 0)); 681 $('.btnfilter .count').text(selected > 0 ? ("" + selected) : ""); 682 683 productsfound = $('.btnfilter .found').eq(0).text(); 684 filterbuttonresettext = language('filter.viewresults').replace('###',productsfound); 685 686 $(".button.filterbuttonshow").text(filterbuttonresettext); 687 688 689 690 691 if(runRewriteFilters()){ 692 loadProductList(isInitial); 693 694 renderPager(); 695 696 697 _.isfiltered = true; 698 699 setLoadedProducts(_totalProducts, totalProductsWithoutFilters); 700 701 if (!_hasLoadedOriginalProducts) { 702 _hasLoadedOriginalProducts = true; 703 originalProducts = $($(".maincontainer .ProductList_Custom_UL")[0]).html(); 704 } 705 706 console.log("sve regulare"); 707 } 708 else{ 709 console.log("specific"); 710 } 711 712 713 714 715 716 } 717 718 //let productsresultcount = $('.maincontainer .ProductList_Custom_UL > li').length; 719 //if (productsresultcount <= 40) { 720 if (_totalProducts <= 40) { 721 $('.listtoolsbottom').addClass('hide'); 722 } 723 else { 724 $('.listtoolsbottom').removeClass('hide'); 725 } 726 727 if (_postEvent) { 728 _skipScroll = true; 729 } else { 730 _skipScroll = false; 731 } 732 733 if (loadCallback) { 734 loadCallback(function() { 735 if (_postEvent) { 736 _postEvent(); 737 _postEvent = null; 738 } 739 }); 740 } else if (_postEvent) { 741 _postEvent(); 742 _postEvent = null; 743 } 744 }); 745 } 746 747 function renderPager() { 748 $('.pager,.row.productListHeaderTop').each(function () { 749 renderSpecificPager($(this)); 750 }); 751 } 752 753 function changePage(pageNumber) { 754 console.log("changing to page: " + pageNumber); 755 _pageNumber = pageNumber; 756 757 buildBrowserUrl(); 758 759 _hasFiltered = true; 760console.log('loadFilterValues v'); 761 loadFilterValues(false); 762 } 763 764 function createPagingUrl(linkPageNumber) { 765 if (!_filterValueUrl || !_filterValueUrl.length) { 766 if (linkPageNumber > 1 || (_hasRefresh && ((_sortScore && _sortScore.length) || (_productsPerPage && _productsPerPage > 0)))) { 767 var separator_ = isProductList ? _querySeparator : '#'; 768 let url = location.pathname + separator_ + "&start=" + linkPageNumber; 769 //let url = location.pathname + "?start=" + _pageNumber; 770 771 if (_excludedFilters && _excludedFilters.length) { 772 url += "&excludedFilters=" + _excludedFilters; 773 } 774 775 if (_sortScore && _sortScore.length) { 776 url += _sortScore; 777 } 778 779 if (_productsPerPage && _productsPerPage > 0) { 780 url += "&perpage=" + _productsPerPage; 781 } 782 783 //window.history.pushState('data', 'Title', url); 784 return url; 785 //console.error("push state: " + url); 786 } 787 return; 788 } 789 790 let filterUrlBrowser = "" + _filterValueUrl; 791 792 if (filterUrlBrowser[0] !== '&') { 793 filterUrlBrowser = '&' + filterUrlBrowser; 794 } 795 796 filterUrlBrowser = filterUrlBrowser || ""; 797 798 for (let n = 0; n < 1000; n++) { 799 filterUrlBrowser = filterUrlBrowser.replace("&start=" + n, "").replace("start=" + n, ""); 800 } 801 802 filterUrlBrowser = filterUrlBrowser 803 .replace("&perpage=24", "") 804 .replace("&perpage=48", "") 805 .replace("&perpage=60", "") 806 .replace("&perpage=72", "") 807 .replace("&perpage=96", "") 808 .replace("&perpage=200", "") 809 .replace("&perpage=24", "") 810 .replace("&sort=score", "") 811 .replace("&sort=price_asc", "") 812 .replace("&sort=date", "") 813 .replace("&sort=popular", ""); 814 815 let url = location.pathname 816 + _querySeparator 817 + filterUrlBrowser 818 + (linkPageNumber && linkPageNumber > 1 ? ("&start=" + linkPageNumber) : "") 819 + ((_sortScore && _sortScore.length && _category !== "search") ? (_sortScore) : "") 820 + ((_productsPerPage && _productsPerPage > 0) ? ("&perpage=" + _productsPerPage) : ""); 821 822 //window.history.pushState('data', 'Title', url); 823 824 url = url.replace('&q=', 'q='); 825 return url; 826 } 827
828 function renderSpecificPager(pager) { 829 pager.empty(); 830 831 let pageCount = Math.ceil(_totalProducts / _productsPerPage); 832 833 if (pageCount < 2) { 834 //console.log("pageCount less"); 835 return; 836 } 837 838 if (_pageNumber > 1) { 839 //var prev = $('<a href="javascript:void(0);">Forrige</a>'); 840 let prev = $('<a href="#" rel="prev">'+language('filter.prev')+'</a>'); 841 prev.attr('href', createPagingUrl(_pageNumber - 1)); 842 prev.on("click", function (e) { 843 e.preventDefault(); 844 changePage(_pageNumber - 1); 845 return false; 846 }); 847 pager.append(prev); 848 } 849 850 let pages = $('<div class="pages"></div>'); 851 pager.append(pages); 852 //let hasAnyActive = false; 853 854 for (let i = 0; i < pageCount; i++) { 855 let isHidden = (i < (_pageNumber - 2) || i > _pageNumber) && i < (pageCount - 1) && i > 0; 856 if (isHidden) { 857 continue; 858 } 859 860 let isActive = (i + 1) === _pageNumber; 861 862 let separateFirst = pageCount > 3 && _pageNumber >= 2 && i === 0; 863 let separateLast = pageCount > 3 && i >= 3 && i === (pageCount - 1); 864 865 if (separateLast) { 866 let separate = $('<span class="HiddenPagesIndicator_ProductList">...</span>'); 867 pages.append(separate); 868 } 869 870 //let page = $('<a href="javascript:void(0);">' + (i + 1) + '</a>'); 871 var navText = isActive ? '' : (_pageNumber > (i + 1) ? 'rel="prev"': 'rel="next"'); 872 let page = $(`<a href="#" ${navText}>` + (i + 1) + '</a>'); 873 let pageNumber = (i + 1); 874 page.attr('href', createPagingUrl(pageNumber)); 875 page.on("click", function (e) { 876 e.preventDefault(); 877 changePage(pageNumber); 878 return false; 879 }); 880 881 if (isActive) { 882 page.addClass("ActivePageNumber_ProductList"); 883 } else { 884 page.addClass("InactivePageNumber_ProductList"); 885 } 886 pages.append(page); 887 888 if (separateFirst) { 889 let separate = $('<span class="HiddenPagesIndicator_ProductList">...</span>'); 890 pages.append(separate); 891 } 892 } 893 894 if ((_totalProducts / _pageNumber) > _productsPerPage) { 895 //var next = $('<a href="javascript:void(0);">Næste</a>'); 896 let next = $('<a href="#" rel="next">'+language('filter.next')+'</a>'); 897 next.attr('href', createPagingUrl(_pageNumber + 1)); 898 next.on("click", function (e) { 899 e.preventDefault(); 900 changePage(_pageNumber + 1); 901 return false; 902 }); 903 pager.append(next); 904 } 905 } 906 907 function loadProductList(isInitial) { 908 console.log("loadProductList",isInitial); 909 let productList = $(".maincontainer .ProductList_Custom_UL"); 910 911 productList.removeClass('loading'); 912 productList.empty(); 913 914 if (!_products || !_products.length) { 915 return; 916 } 917 918 919 920 $.each(_products, function (i, p) { 921 let productElement = renderProduct(p, i); 922 923 productList.append(productElement); 924 }); 925 926 console.log("transformProductlist run 2"); 927 transformProductlist(); 928 //if (!_skipScroll && !isInitial) scrollToElement("productlist"); 929 } 930 931 function crossParseFloat(s) { 932 if (s.indexOf(',') !== -1 && s.indexOf('.') !== -1) { 933 if (s.indexOf(',') < s.indexOf('.')) { 934 s = s.replace(",", ""); 935 } else { 936 s = s.replace(".", "").replace(",", "."); 937 } 938 } 939 940 if (s.indexOf(',') !== -1) { 941 return parseFloat(s.replace(",", ".")); 942 } 943 944 return parseFloat(s); 945 } 946 947 function createInputField(name, value, type, id) { 948 let inputFIeld = $('<input' + (id && id.length ? ' id="' + id + '"' : '') + ' type="' + type + '"' + (name && name.length ? ' name="' + name + '"' : '') + ' value="' + (value || "") + '" />'); 949 950 return inputFIeld; 951 } 952 953 function escapeRegExp(string) { 954 return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string 955 } 956 957 function replaceAll(str, find, replace) { 958 return str.replace(new RegExp(escapeRegExp(find), 'g'), replace); 959 } 960 961 function renderProduct(product, index) { 962 963 console.log(product); 964 product.number = product.primary_id; 965 product.name = product.product_name[0];
966 967 let price = crossParseFloat(product.price).toFixed(2); 968 969 let retailPrice; 970 if (product.retailPrice && product.retailPrice.length) { 971 retailPrice = crossParseFloat(product.retailPrice); 972 } else { 973 retailPrice = 0; 974 } 975 976 //let productListItem = $('<li class="BackgroundColor1_Productlist"></li>'); 977 let productListItem = $('<li></li>'); 978 979 let productListForm = $('<form method="POST" action="/shop/basket.asp" name="myform' + index + '" id="productlistBuyForm' + index + '"></form>'); 980 productListItem.append(productListForm); 981 982 productListForm.append(createInputField("VerticalScrollPos", 1, "hidden")); 983 productListForm.append(createInputField("BuyReturnUrl", location.pathname, "hidden")); 984 productListForm.append(createInputField("Add", 1, "hidden")); 985 productListForm.append(createInputField("ProductID", product.number, "hidden")); 986 987 let productDiv = $('<div class="product" data-id="' + product.number + '" data-master="' + product.number + '"></div>');
988 productListForm.append(productDiv); 989 990 let gtagString = 'gtag("event","select_content",{content_type:"product",items:[{id:"' + product.number + '",name:"' + product.name + '",price:"' + price + '",brand:"",list_position:1,list_name:"categorylist",category: "' + categoryName + '"}]});'; 991 gtagString = replaceAll(gtagString, '"', '\''); 992 //console.log(gtagString); 993 994 let nameDiv = $('<div class="name"></div>'); 995 productDiv.append(nameDiv); 996 let nameLink = $('<a onclick="' + gtagString + '" title="' + product.name + '" href="' + product.product_url + '">' + product.name + '</a>'); 997 nameDiv.append(nameLink); 998 999 let imageDiv = $('<div class="image" data-savings=""></div>'); 1000 productDiv.append(imageDiv); 1001 let imageLink = $('<a onclick="' + gtagString + '" title="' + product.name + '" href="' + product.product_url + '"></a>'); 1002 imageDiv.append(imageLink); 1003 let imageTag = $('<img alt="' + product.name + '" height="120" loading="lazy" src="' + product.image_url + '" width="120" />'); 1004 imageLink.append(imageTag); 1005 1006 let buyDiv = $('<div class="buy"></div>'); 1007 productDiv.append(buyDiv); 1008 buyDiv.append('<a href="' + product.product_url + '" title="' + product.name + '">
1008'+language('misc.addtobasket')+'</a>'); 1009 1010 productDiv.append('<div class="advancedvariants"></div>'); 1011 1012 let priceDiv = $('<div class="price"></div>'); 1013 productDiv.append(priceDiv); 1014 1015 let priceUL = $('<ul class="Prices_Custom_UL"></ul>'); 1016 priceDiv.append(priceUL); 1017 let priceLI = $('<li></li>'); 1018 priceUL.append(priceLI); 1019 let priceStrike; 1020 if (retailPrice >= 1) { 1021 priceStrike = $('<strike>' + retailPrice.toFixed(2) + '</strike>'); 1022 } else { 1023 priceStrike = $('<strike class="invisible"> </strike>'); 1024 } 1025 priceLI.append(priceStrike); 1026 let priceActual = $('<div class="actual"></div>'); 1027 priceLI.append(priceActual); 1028 let priceSpan = $('<span content="' + price + '" itemprop="price">' + product.price + '</span><span class="currency">' + product.currency + '</span>'); 1029 priceActual.append(priceSpan); 1030 1031 1032 1033 if (LanguageID == 37 || LanguageID == 3 || LanguageID == 41 || LanguageID == 30 || LanguageID == 1) { 1034 console.log("promena console fi2"); 1035 console.log(product) 1036 1037 const newStockStatus = getProductStatus(product.primary_id,product.stock,product.dt ); 1038 1039 console.log(newStockStatus); 1040 1041 // product.find('.stock ').html(newStockStatus.icon + newStockStatus.stockStatus.first); 1042 // product.find('.productnumber').html(newStockStatus.stockStatus.second) 1043 // 1044 // const newColor = newStockStatus.color; // ili 'red', 'green' 1045 // const el = product.find('.stock'); 1046 // const classList = el.attr('class').split(/\s+/); 1047 // 1048 // const currentColorClass = classList.find(c => c.startsWith('color-')); 1049 // if (currentColorClass) { 1050 // el.removeClass(currentColorClass); 1051 // } 1052 // el.addClass(`color-${newColor}`); 1053 1054 1055 //render 1056 let productStatusDiv = $('<div class="product-status"></div>'); 1057 productDiv.append(productStatusDiv); 1058 let productStockDiv = $('<div class="stock color-'+ newStockStatus.color + '"></div>'); 1059 productStatusDiv.append(productStockDiv); 1060 let productStockImage; 1061 //console.log(product.stock_status_text.toLowerCase()); 1062 1063 1064 1065 productStockImage = $(newStockStatus.icon + newStockStatus.stockStatus.first); 1066 console.log("image:" + productStockImage); 1067 1068 productStockDiv.append(productStockImage); 1069 //console.log(product.stock_status_text); 1070 let productNumberDiv = $('<div><span class="productnumber">' + newStockStatus.stockStatus.second + '</span></div>'); 1071 productStatusDiv.append(productNumberDiv); 1072 1073 } 1074 else{ 1075 1076 let productStatusDiv = $('<div class="product-status"></div>'); 1077 productDiv.append(productStatusDiv); 1078 let productStockDiv = $('<div class="stock" style="font-weight: bold; display: flex; align-items: center; gap: 0.4em;"></div>'); 1079 productStatusDiv.append(productStockDiv); 1080 let productStockImage; 1081 //console.log(product.stock_status_text.toLowerCase()); 1082 1083 1084 if (product.stock_status_text.toLowerCase().indexOf('på lager') !== -1 || product.stock_status_text.toLowerCase().indexOf('på fjernlager') !== -1 || product.stock_status_text.toLowerCase().indexOf('arastossa') !== -1) { 1085 productStockImage = $('<img alt="'+language('misc.instock')+'" height="8" loading="lazy" src="/images/skins/Bewise/images/icon-instock.svg" width="8" />'); 1086 } else { 1087 productStockImage = $('<img alt="'+language('misc.notinstock')+'" height="8" loading="lazy" src="/images/skins/Bewise/images/icon-notinstock.svg" width="8" />'); 1088 } 1089 productStockDiv.append(productStockImage);
1090 //console.log(product.stock_status_text); 1091 let productNumberDiv = $('<div>'+language('misc.productnumber')+': <span class="productnumber">' + product.number + '</span></div>'); 1092 productStatusDiv.append(productNumberDiv); 1093 console.log("slide5"); 1094 } 1095 1096 console.log("add product"); 1097 1098 return productListItem; 1099 } 1100 1101 function renderFilter(isInitial) { 1102 let filterValueId = 1; 1103 let selected = 0; 1104 _selectedFilterValues = []; 1105 1106 _productFilterContent.empty(); 1107 1108 for (let groupKey in _filterValues) { 1109 let filterGroup = _filterValues[groupKey]; 1110 1111 let valuesObject = filterGroup.filters; 1112 1113 let values = []; 1114 1115 for (let valueKey in valuesObject) { 1116 let filterValue = valuesObject[valueKey]; 1117 1118 if (filterValue.count <= 0) { 1119 continue; 1120 } 1121 1122 values.push({ 1123 key: valueKey, 1124 value: filterValue 1125 }); 1126 } 1127 1128 if (!values || !values.length) { 1129 continue; 1130 } 1131 1132 let originalFilterGroupname = filterGroup.name; 1133 filterGroup.name = filterGroup.name.toUpperCase(); 1134 1135 1136 /* 1137 let overrideName = global.filtertext && global.filtertext[filterGroup.name]; 1138 1139 if (overrideName && overrideName.length) { 1140 filterGroup.name = overrideName; 1141 } 1142 */ 1143 1144 1145 let filterGroupElement = $("<div></div>", { 1146 class: "filter-group filter-group-" + filterGroup.name.replace(" ", "_") 1147 }); 1148 1149 1150 1151 let nospacename = originalFilterGroupname.replaceAll(' ','').toLowerCase(); 1152 //console.log(originalFilterGroupname,nospacename); 1153 let translatedgroupname = language('filter.'+nospacename); 1154 if (translatedgroupname !== '') { 1155 filterGroup.name = translatedgroupname; 1156 } 1157 1158 1159 let filterGroupTitle = $("<div></div>"); 1160 if(groupKey == "model_name" && values.length > 5){ 1161 filterGroupTitle = $("<div></div><input type=\"text\" id=\"modelSearch\" placeholder=\"" + language('filter.search_model') + "\" style=\"margin-bottom: 10px;width: 100%;text-align: center;text-transform: uppercase;\">"); 1162 } 1163 1164 filterGroupTitle.text(filterGroup.name); 1165 filterGroupElement.append(filterGroupTitle); 1166 1167 let generateType = _filterGenerateType[originalFilterGroupname]; 1168 1169 // if (generateType === "price") { 1170 // 1171 // } 1172 let hasSelectedPrice = false; 1173 if (generateType === "price") { 1174 //values = values.reverse(); 1175 //console.log(filterGroup) 1176 1177 let newValues = []; 1178 1179 for (let i = 0; i < values.length; i++) { 1180 let kv = values[i]; 1181 let valueKey = kv.key; 1182 let valueText = valueKey; 1183 1184 valueText = valueText.replace("price_range", ""); 1185 1186 let ranges = valueText.split("-"); 1187 1188 let rangeX = +ranges[0]; 1189 1190 if (ranges[0] == "0") { 1191 valueText = language('filter.below')+ " " + ranges[1] + " " + _currency; 1192 } else if (ranges[1] == "x") { 1193 valueText = ranges[0] + " " + _currency + " " + language('filter.above'); 1194 } else { 1195 valueText = ranges[0] + " " + _currency + " - " + ranges[1] + " " + _currency; 1196 } 1197 1198 newValues.push({ 1199 rangeX: rangeX, 1200 kv: kv 1201 }); 1202 } 1203 1204 values = newValues.sort(function(a,b) { return a.rangeX - b.rangeX; }).map(function(a) { return a.kv; }); 1205 1206 if (values.length >= 1 && values.length <= 3 && (!isInitial || _hasPriceUrl)) { 1207 hasSelectedPrice = true; 1208 } 1209 } 1210 1211 let isOverflow = values.length > 5; 1212 1213 if (isOverflow) { 1214 filterGroupElement.addClass("filtergroupoverflow"); 1215 } 1216 1217 let hasGeneratedAllPrices = false; 1218 1219 let coverInput; 1220 1221 for (let i = 0; i < values.length; i++) { 1222 let kv = values[i]; 1223 let valueKey = kv.key; 1224 let filterValue = kv.value; 1225 filterValueId++; 1226 1227 if (filterValue.count <= 0) { 1228 continue; 1229 } 1230 1231 let filterValueElement = $("<label></label>", { 1232 for: filterValueId, 1233 class: "filter-value filter-value-" + valueKey.replace(" ", "_") 1234 }); 1235 1236 let filterInput = $("<input />", { 1237 class: "filterinput" 1238 }); 1239 if (isInitial && filterGroup.name === "COVER TYPE" && values.length === 1) { 1240 coverInput = filterInput; 1241 } 1242 filterInput.attr("type", "checkbox"); 1243 filterInput.attr("id", "" + filterValueId); 1244 1245 filterInput.attr("data-url", filterValue.url); 1246 1247 let isSelected = filterValue.checked > 0; 1248 1249 if (isSelected) { 1250 selected++; 1251 filterInput.prop("checked", true); 1252 } 1253 1254 filterInput.on("change", function () { 1255 filterInput.prop("checked", true); 1256 _filterValueUrl = filterInput.attr("data-url"); 1257 _pageNumber = 1; 1258 1259 buildBrowserUrl(); 1260console.log('loadFilterValues q'); 1261 loadFilterValues(false); 1262 }); 1263 1264 filterValueElement.append(filterInput); 1265 1266 let filterValueTitle = $('<span class="filtertext"></span>'); 1267 1268 let valueText = valueKey; 1269 1270 if (generateType === "price") { 1271 1272 valueText = valueText.replace("price_range", ""); 1273 1274 1275 let ranges = valueText.split("-"); 1276 1277 /* 1278 if (i+1 == values.length) { 1279 console.log(ranges); 1280 } 1281 */ 1282 1283 //maxfilterprice = ranges[ranges.length][0]; 1284 1285 if (ranges[0] == "0") { 1286 valueText = language('filter.below')+" " + ranges[1] + " " + _currency; 1287 } else if (ranges[1] == "x") { 1288 valueText = ranges[0] + " " + _currency + " "+language('filter.above'); 1289 } else { 1290 valueText = ranges[0] + " " + _currency + " - " + ranges[1] + " " + _currency; 1291 } 1292 } else if (valueText == "1") { 1293 valueText = "Ja"; 1294 } else if (generateType == 'reviews') { 1295 filterValueElement.addClass('reviewfilter'); 1296 let reviewstars = parseFloat(valueText.replace('r', '')); 1297 let minstars = 5; 1298 1299 let starshtml = '<span class="reviewstars">'; 1300 for (let s = 0; s < reviewstars; s++) { 1301 starshtml += '<img alt="Rating" height="18" loading="lazy" src="/images/skins/Bewise/images/icon-rating-star.svg" width="18">'; 1302 minstars -= 1; 1303 } 1304 1305 for (let ms = 0; ms < minstars; ms++) { 1306 starshtml += '<img alt="Rating" height="18" loading="lazy" src="/images/skins/Bewise/images/icon-rating-star-grey.svg" width="18">'; 1307 } 1308 1309 starshtml += '</span>'; 1310 1311 valueText = starshtml; 1312 } 1313 1314 if (isSelected) { 1315 _selectedFilterValues.push({ 1316 text: valueText, 1317 url: filterValue.url 1318 }); 1319 } 1320 1321 if (generateType === "price" && hasSelectedPrice) { 1322 if (!hasGeneratedAllPrices) { 1323 hasGeneratedAllPrices = true; 1324 //let allPricesBlock = $('<div></div>'); 1325 let allPricesBlock = $('<label class="filter-value">'+language('filter.allprices')+'</label>'); 1326 allPricesBlock.on("click", function() { 1327 hasSelectedPrice = false; 1328 _hasPriceUrl = false; 1329 filterInput.prop("checked", true); 1330 _filterValueUrl = filterInput.attr("data-url"); 1331 console.log("filterInput", _filterValueUrl); 1332 1333 let hashMap = loadHashMap(_filterValueUrl || ""); 1334 console.log("filterInput", hashMap); 1335 1336 let newFilterValues = []; 1337 1338 for (let hashKey in hashMap) { 1339 if (hashKey.indexOf('price_') === 0) { 1340 _hasPriceUrl = true; 1341 continue; 1342 } 1343 1344 let hashValue = hashMap[hashKey]; 1345 1346 newFilterValues.push(hashKey + '=' + hashValue); 1347 } 1348 1349 newFilterValues.push('resetPriceFilter=1'); 1350 1351 console.log("newFilterValues", newFilterValues); 1352 1353 _filterValueUrl = newFilterValues.join("&"); 1354 1355 _pageNumber = 1; 1356 1357 buildBrowserUrl(); 1358console.log('loadFilterValues w'); 1359 loadFilterValues(false); 1360 }); 1361 //let allPricesSpan = $('<span></span>');
1362 //allPricesSpan.text("< Alle priser"); 1363 //allPricesBlock.append(allPricesSpan); 1364 filterGroupElement.append(allPricesBlock); 1365 } 1366 continue; 1367 } 1368 1369 filterValueTitle.html(valueText + "<i>" + filterValue.count + "</i>"); 1370 1371 filterValueElement.append(filterValueTitle); 1372 1373 filterGroupElement.append(filterValueElement); 1374 } 1375 1376 // if (isInitial && coverInput && filterGroup.name === "COVER TYPE" && values.length === 1) { 1377 // _postEvent = function() { 1378 // coverInput.trigger("change"); 1379 // }; 1380 // } 1381 1382 1383 1384 1385 1386 if (isOverflow) { 1387 //let showmorefilterstext = 'Vis alle ' + values.length + ' filtre'; 1388 let showmorefilterstext = language('filter.showall'); 1389 let showAllButton = $('<div class="filter-show-all button">' + showmorefilterstext + '</div>'); 1390 showAllButton.on("click", function () { 1391 filterGroupElement.toggleClass("filtergroupoverflow"); 1392 //showAllButton.remove(); 1393 showAllButton.toggleClass('expanded'); 1394 if (showAllButton.hasClass('expanded')) { 1395 showAllButton.html(language('filter.showfewer')); 1396 } else { 1397 showAllButton.html(showmorefilterstext); 1398 } 1399 1400 }); 1401 filterGroupElement.append(showAllButton); 1402 } 1403 1404 _productFilterContent.append(filterGroupElement); 1405 1406 if (generateType === "price") { 1407 1408 let priceInput = $('<div class="priceinput"></div>'); 1409 filterGroupElement.children('div').eq(0).after(priceInput); 1410 if (filteredpricemin) { 1411 minfilterprice = filteredpricemin; 1412 } 1413 if (filteredpricemax) { 1414 maxfilterprice = filteredpricemax; 1415 } 1416 let inputMin = $('<input type="number" id="minfilterprice" name="minfilterprice" value="'+minfilterprice+'">'); 1417 priceInput.append(inputMin); 1418 let dashSpan = $('<span>-</span>'); 1419 priceInput.append(dashSpan); 1420 let inputMax = $('<input type="number" id="maxfilterprice" name="maxfilterprice" value="'+maxfilterprice+'">'); 1421 priceInput.append(inputMax); 1422 priceInput.append('<span>'+_currency+'</span>'); 1423 1424 1425 1426 //let goButton = $('<div class="filter-price-go button">GÃ¥</div>'); 1427 1428 1429 /*$('.priceinput input[type="number"]').keyup(delayInput(function () { 1430 filteredpricemin = +inputMin.val(); 1431 filteredpricemax = +inputMax.val(); 1432 _pageNumber = 1; 1433console.log('loadFilterValues r'); 1434 loadFilterValues(false); 1435 }, 100));*/ 1436 1437 $('.priceinput input[type="number"]').on('input', delayInput(function () { 1438 filteredpricemin = +inputMin.val(); 1439 filteredpricemax = +inputMax.val(); 1440 _pageNumber = 1; 1441 buildBrowserUrl(); 1442 console.log('loadFilterValues r'); 1443 loadFilterValues(false); 1444}, 500)); 1445 1446 /* 1447 goButton.on("click", function() { 1448 filteredpricemin = +inputMin.val(); 1449 filteredpricemax = +inputMax.val(); 1450 _pageNumber = 1; 1451 1452 loadFilterValues(false); 1453 }) 1454 priceInput.append(goButton); 1455 */ 1456 1457 /* 1458 let priceslider = $('<div class="priceslider"></div>'); 1459 let pricesliderinfo = $('<div class="pricesliderinfo"><span>Min '+minfilterprice+'</span><span>Max '+maxfilterprice+'</span></div>'); 1460 filterGroupElement.children('div').first().after(priceslider,pricesliderinfo); 1461 1462 console.log('pris'); 1463 console.log(minfilterprice); 1464 console.log(maxfilterprice); 1465 1466
1467 //filterGroupElement.prepend('<div class="priceslider"></div>'); 1468 1469 //let minstartprice = response.prices.priceMinimum; 1470 //let maxstartprice = response.prices.priceMaximum; 1471 1472 1473 noUiSlider.create(priceslider[0], { 1474 start: [minstartprice, maxstartprice], 1475 connect: true, 1476 range: { 1477 'min': minfilterprice, 1478 'max': maxfilterprice 1479 }, 1480 tooltips: [wNumb({decimals: 0}), wNumb({decimals: 0})] 1481 });*/ 1482 1483 1484 } 1485 1486 } 1487 1488 if (filterValueId > 1) { 1489 $('.productfilter').addClass('active'); 1490 } 1491 1492 return selected; 1493 } 1494 1495 function renderActiveFilters() { 1496 1497 1498 1499 let activeFiltersWrapper = $('.activefilters'); 1500 let exists = activeFiltersWrapper.length > 0 1501 1502 let activeFiltersLabel; 1503 let activeFiltersContent; 1504 if (!exists) { 1505 activeFiltersWrapper = $('<div class="activefilters"></div>'); 1506 activeFiltersLabel = $('<div class="activefilterslabel"></div>'); 1507 activeFiltersWrapper.append(activeFiltersLabel); 1508 activeFiltersContent = $('<div class="activefiltervalues"></div>'); 1509 activeFiltersWrapper.append(activeFiltersContent); 1510 } else { 1511 activeFiltersContent = activeFiltersWrapper.find('.activefiltervalues'); 1512 activeFiltersLabel = activeFiltersWrapper.find('.activefilterslabel'); 1513 } 1514 1515 if (!_selectedFilterValues || !_selectedFilterValues.length) { 1516 activeFiltersWrapper.remove(); 1517 return; 1518 } 1519 1520 activeFiltersLabel.text(language('filter.activeFilterLabel') +":"); 1521 1522 activeFiltersContent.empty(); 1523 1524 $.each(_selectedFilterValues.slice(), function (i, value) { 1525 let activeFilterValue = $('<div class="activefiltervalue"></div>'); 1526 activeFilterValue.html(value.text); 1527 activeFilterValue.attr("data-url", value.url); 1528 1529 activeFilterValue.on("click", function () { 1530 console.log("klik za brisanje"); 1531 1532 _selectedFilterValues = _selectedFilterValues.filter(function(s) { 1533 return s.text !== value.text; 1534 }); 1535 1536 if (!_selectedFilterValues || !_selectedFilterValues.length) { 1537 _pageNumber = 1; 1538 _filterValueUrl = ""; 1539 filteredpricemin = 0; 1540 filteredpricemax = 0; 1541 1542 let url = location.pathname; 1543 1544 //window.history.pushState('data', 'Title', url); 1545 window.history.pushState({path: url}, '', url); 1546 //console.error("push state: " + url); 1547console.log('loadFilterValues y'); 1548 loadFilterValues(false); 1549 } else { 1550 _filterValueUrl = activeFilterValue.attr("data-url"); 1551 1552 buildBrowserUrl(); 1553console.log('loadFilterValues u'); 1554 loadFilterValues(false); 1555 } 1556 1557 console.log('totall', _selectedFilterValues.length); 1558 1559 1560 1561 if(runRewriteFilters()){ 1562 console.log("sve regulare"); 1563 } 1564 else{ 1565 console.log("specific 2"); 1566 if(!_selectedFilterValues.length){ 1567 console.log("specific 3"); 1568 1569 _runRedrectToFirstPage = true; 1570 1571 1572 } 1573 } 1574 1575 // var totalActiveFilters = countNonSortElements(_selectedFilterValues); 1576 1577 console.log("done klik"); 1578 1579 }); 1580 1581 activeFiltersContent.append(activeFilterValue); 1582 }); 1583 1584 1585 1586 1587 1588 1589 if (!exists) { 1590 var activeFiltersResetButton = $('<div class="button filterbuttonreset">'+language('filter.reset')+'</div>'); 1591 activeFiltersResetButton.on("click", function () { 1592 console.log("filterButtonReset 2"); 1593 1594 if(runRewriteFilters()){ 1595 console.log("sve regulare"); 1596 } 1597 else{ 1598 1599 redirectToFirstPage(); 1600 } 1601 1602 1603 _pageNumber = 1; 1604 _filterValueUrl = ""; 1605 filteredpricemin = 0; 1606 filteredpricemax = 0; 1607 1608 let url = location.pathname; 1609 1610 //window.history.pushState('data', 'Title', url); 1611 window.history.pushState({path: url}, '', url); 1612 //console.error("push state: " + url); 1613console.log('loadFilterValues i'); 1614 //loadFilterValues(false); 1615 loadFilterValues(true); 1616 }); 1617 activeFiltersWrapper.append(activeFiltersResetButton); 1618 1619 $('div[name="productlist"]').after(activeFiltersWrapper); 1620 } 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 } 1632 1633 // public: 1634 _.hasQuery = function (key) { 1635 return _query[key] !== undefined; 1636 }; 1637 1638 _.getQuery = function (key, defaultValue) { 1639 let value = _query[key]; 1640 1641 if (value === undefined) { 1642 return defaultValue; 1643 } 1644 1645 return value; 1646 }; 1647 1648 _.hasHash = function (key) { 1649 return _hash[key] !== undefined; 1650 }; 1651 1652 _.getHash = function (key, defaultValue) { 1653 let value = _hash[key]; 1654 1655 if (value === undefined) { 1656 return defaultValue; 1657 } 1658 1659 return value; 1660 }; 1661 1662 _.refresh = function() { 1663 _hasRefresh = true; 1664console.log('loadFilterValues o'); 1665 loadFilterValues(false); 1666 }; 1667 1668 let _freshLoad = true; 1669 1670 _.searchById = function(id) { 1671 _baseApiUrl = _baseApiUrl2; 1672 1673 _category = id+""; 1674 _categoryType = "Cases"; 1675 1676 if (_freshLoad) { 1677 _freshLoad = false; 1678 console.log('loadFilterValues p'); 1679 loadFilterValues(true, function() { 1680 loadFilterValues(false); 1681 }); 1682 } else { 1683 console.log('loadFilterValues l'); 1684 loadFilterValues(false); 1685 } 1686 }; 1687 1688 _.load = function () { 1689 if (_loaded) { 1690 return; 1691 } 1692 1693 _loaded = true; 1694 1695 if (window.location.href.indexOf('search.asp') !== -1) { 1696 _querySeparator = "?"; 1697 _category = "search"; 1698 _categoryType = "search"; 1699 _queryParameter = _.getQuery("q"); 1700 } 1701 1702 if (!_category || !_category.length || !_categoryType || !_categoryType.length) { 1703 return; 1704 } 1705 1706 let queryIndex_ = location.href.indexOf('?') 1707 let url = isProductList ? (queryIndex_ > -1 ? location.href.substr(queryIndex_) : "") : (location.hash || ""); 1708 1709 function loadSortSelector() { 1710 let options = ""; 1711 1712 $('.Productlist_Sort_Select').each(function() { 1713 let existingSelector = $(this); 1714 1715 options = existingSelector.html(); 1716 }); 1717 1718 $('.Productlist_Sort_Select').each(function() { 1719 let existingSelector = $(this); 1720 1721 let selector = $('<select></select>'); 1722 //selector.attr("align", "right"); 1723 selector.addClass("Productlist_Sort_Select"); 1724 selector.attr("name", "SortField"); 1725 selector.html(options); 1726 selector.attr('aria-label','Sortering'); 1727 selector.insertBefore(existingSelector); 1728 1729 existingSelector.remove(); 1730 1731 selector.on("change", function(e) { 1732 e.stopPropagation(); 1733 e.preventDefault(); 1734 1735 _hasRefresh = true; 1736 console.log('loadFilterValues k'); 1737 loadFilterValues(false); 1738 return false; 1739 }); 1740 }); 1741 } 1742 1743 function postLoad(cb) { 1744 1745 if(runRewriteFilters()){ 1746 console.log("runRewriteFilters 4"); 1747 loadSortSelector(); 1748 } 1749 else { 1750 1751 console.log("specific load selector non"); 1752 } 1753 1754 1755 window.onhashchange = function() { 1756console.log('hash change 1'); 1757 url = location.hash || ""; 1758 1759 loadHash(); 1760 1761 //let urlSeparator_ = $('body.webshop-productlist').length ? _querySeparator : '#'; 1762 if (url && url.length && url.indexOf('#') === 0) { 1763 console.log('hash change 2'); 1764 _filterValueUrl = url.substring(1); 1765 _ignorePage = true; 1766 1767 _pageNumber = +_.getHash("start", "1"); 1768console.log('loadFilterValues h'); 1769 loadFilterValues(false); 1770 } else { 1771 console.log('hash change 3'); 1772 _pageNumber = 1; 1773 _filterValueUrl = ""; 1774console.log('loadFilterValues g'); 1775 loadFilterValues(false); 1776 } 1777 }; 1778 1779 if (cb) { 1780 cb(); 1781 } 1782 } 1783 1784 let urlSeparator_ = isProductList ? _querySeparator : '#'; 1785 1786 if (url && url.length && url.indexOf(urlSeparator_) === 0) { 1787 _filterValueUrl = url.substring(1).replaceAll('filters=true&', ''); 1788 //url.substring(1); 1789 _ignorePage = true; 1790 1791 _pageNumber = +_.getHash("start", "1"); 1792 1793 _hasPriceUrl = _filterValueUrl.indexOf('price_range_custom') !== -1; 1794 1795 console.log('loadFilterValues a'); 1796 loadFilterValues(false, postLoad); 1797 } else { 1798 _freshLoad = false; 1799 console.log('loadFilterValues b'); 1800 loadFilterValues(true, postLoad); 1801 } 1802 }; 1803 1804 // constructor: 1805 (function initialize() { 1806 loadQuery(); 1807 loadHash(); 1808 loadInitialData(); 1809 })(); 1810 } 1811 1812 global.BewiseFilter = new Filter(); 1813 1814})(window); 1815 1816BewiseFilter.load();
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.