1var FacetQuery = ""; 2var FullTextQuery = ""; 3var SearchVersion = "CategorySearch"; 4var IsRefreshing = false; 5var ResultStyle = 'Grid'; 6var FacetHash = null; 7var viewallfamilies = false; 8var openJSNodes = null; 9var RangeEntries = { "items": [] }; 10 11// Faceted Search Initialization 12$(document).ready(function () { 13 initialPageLoad(); 14 InitiateNpsTimer(); 15}); 16 17/* Left Hand Navigation */ 18function LoadFacetNavigation() { 19 IsRefreshing = true; 20 var isFacetable = jsConfigurations.IsFacetable.toLowerCase(); 21 var isGrid = jsConfigurations.IsGrid.toLowerCase(); 22 if (isFacetable == 'true' || isGrid == 'true') { 23 LoadHierachyCategoryNavigation(); 24 if (FacetQuery == null || FacetQuery == undefined) { FacetQuery = ''; } 25 if (FullTextQuery == null || FullTextQuery == undefined) { FullTextQuery = ''; } 26 27 var url = '/Catalog/Category/_FacetedNavigation'; 28 $.ajax({ 29 url: url, 30 method: "GET", 31 async: false, 32 data: { categoryID: jsConfigurations.CategoryId, schemaId: jsConfigurations.SchemaId, isGrid: jsConfigurations.IsGrid.toLowerCase(), FacetedQuery: FacetQuery, FullTextQuery: FullTextQuery } 33 }).done(function (data) { 34 $('#LeftNavigationContents').html(data); 35 36 UpdateFacetsBasedOnHash(); 37 HideSpecificationTypesWithNoFacets(); 38 BuildRangeFacet(); 39 NavigationPlusMinusCollapse(); 40 IsRefreshing = false; 41 HideLoadingModal(); 42 43 if (jsConfigurations.IsGrid.toLowerCase() == 'true') { 44 AddFacetListeners(); 45 } 46 }); 47 } 48} 49 50function AddFacetListeners() { 51 $(".specification-type:not(.wrapped-facet):not(:has(.facet-range-form))").on("click", function (e) { 52 e.stopPropagation(); 53 54 var isOpen = $(this).hasClass("open"); 55 56 CloseFacetDropdowns(); 57 58 if (isOpen) 59 $(this).removeClass("open"); 60 else 61 $(this).addClass("open"); 62 }); 63 64 $(document).on('click', function (event) { 65 CloseFacetDropdowns(); 66 }); 67} 68 69function CloseFacetDropdowns() { 70 $(".specification-type.open").each(function () { 71 $(this).removeClass("open"); 72 $(this).children(".specification-data-values").css("display", "none"); 73 }); 74} 75 76function LoadHierachyCategoryNavigation() { 77 openJSNodes = $('.jstree-open'); 78 79 $.getJSON("/catalog/Category/_FacetedCategoryNavigationHierarchy?facetQuery=" + FacetQuery + "&fullTextQuery=" + FullTextQuery + "&categoryId=" + jsConfigurations.CategoryId + '&IsPreviewMode=' + jsConfigurations.IsPreviewMode, function (TreeData) { 80 81 if (TreeData.length === 0) 82 $('#CategoryFacet').hide(); 83 84 $('#CategoryTree').jstree({ 85 'core': { 86 'data': TreeData, 87 'sort': function (a, b) { 88 a1 = this.get_node(a); 89 b1 = this.get_node(b); 90 91 return (a1.li_attr['data-sortorder'] > b1.li_attr['data-sortorder']) ? 1 : -1; 92 }, 93 "checkbox": { 94 "keep_selected_style": false 95 }, 96 "plugins": [ 97 "checkbox" 98 ] 99 } 100 }); 101 102 $('#CategoryTree').on('ready.jstree', function (e, data) {
103 //$('li.jstree-node[data-parentid!=' + jsConfigurations.CategoryId + ']').hide(); 104 jstreeCustomLoadFormatter(); 105 }); 106 107 $('#CategoryTree').on("after_open.jstree", function (e, data) { 108 openJSNodes = $('.jstree-open'); 109 jstreeCustomLoadFormatter(); 110 }); 111 112 $('#CategoryTree').on("changed.jstree", function (e, data) { 113 ShowLoadingModal(); 114 $('#' + data.node.id + ' input').click(); 115 }); 116 }); 117} 118 119function jstreeCustomLoadFormatter() { 120 // add checkboxes to tree 121 $('.jstree-ocl').attr("style", "display:inline-block !important"); 122 123 $('.jstree-container-ul li').each(function (index, value) { 124 var container = $(value); 125 var categoryId = container.data('categoryid'); 126 var categoryName = container.text(); 127 var encodedName = container.attr('id'); 128 var categoryValue = "Categories:" + encodedName; 129 130 if ($(container).find("input").length === 0) { 131 $(container).find('.jstree-anchor:first').prepend('<input type="checkbox" id="chk' + encodedName + '" name="Categories" value="' + categoryValue + '" data-selected-value="' + categoryName + '" onclick="javascript:SelectFacet(\'Categories\',\'Categories:' + categoryId + '\',\'' + encodedName + '\',true,\'' + categoryId + '\');trackEvent(\'Faceted Search\', \'Category Selection\', \'' + categoryId + '\')">'); 132 } 133 }); 134 135 // retain open nodes on reload 136 $.each(openJSNodes, function (index, value) { 137 $("#CategoryTree").jstree("open_node", $(value).attr('id')); 138 }); 139 140 // update checked fields 141 UpdateFacetsBasedOnHash(); 142} 143 144function SetCategoryCheckboxValue(encodedName) { 145 var categoryValue = "Categories:" + encodedName; 146 var chk = $("#chk" + encodedName); 147 if (chk !== null && chk !== undefined) { 148 var isChecked = chk.is(":checked"); 149 $("#LeftNavigation [value='" + categoryValue + "']").prop('checked', isChecked); 150 } 151} 152 153function ReloadEverything() { 154 UpdateHashUrlBasedOnSelectedFacets(); 155 UpdateFacetQuery(); 156 UpdateSearchResults(); 157 LoadFacetNavigation(); 158 SetSliderEntries(); 159 RefreshSelectedFacets(); 160 HighlightSelectedFacetBackground(); 161 HideLoadingModal(); 162 163 ApplyBulletToggles("ProductCategoryArea"); 164 ApplyBulletToggles("FacetSearchResults"); 165 166 if (jsConfigurations.IsGrid.toLowerCase() == 'true') { 167 FilterProductGrid(); 168 } 169} 170 171function HideSpecificationTypesWithNoFacets() { 172 // Facets 173 $.each($('.specification-type'), function (index, value) { 174 if ($(value).find('input').length === 0) 175 $(value).hide(); 176 else 177 $(value).show(); 178 }); 179 180 // Facet Ranges 181 $.each($('.facet-slider'), function (index, value) { 182 if ($(value).data('minvalue') === $(value).data('maxvalue')) { 183 $(value).closest('.specification-type').hide(); 184 $(value).parent().parent().parent().hide(); 185 186 if (jsConfigurations.IsGrid.toLowerCase() == 'true') { 187 $(this).closest('.specification-type').attr('style', function (i, s) { 188 return (s || '') + 'display: none !important;'; 189 }); 190 } 191 } 192 }); 193} 194 195function RefreshSelectedFacets() { 196 // Specification 197 var selectedFacets = $('#LeftNavigation input').serializeArray(); 198 if (selectedFacets.length > 0) { 199 $('#SelectedFacetList').html(''); 200 for (var i = 0; i < selectedFacets.length; i++) { 201 var displayName = $("[value='" + selectedFacets[i].value + "']").data("selected-value").replace("undefined ",""); 202 203 if ($('[data-facet-value="' + selectedFacets[i].value + '"]').length === 0) { 204 $('#SelectedFacetList').append('<button class="SelectedFacet btn-cart-outline" style="padding: 1px 7px;background: white;" data-facet-value="' + selectedFacets[i].value + '" onclick="ClearSingleFacetBtn(this)"><i class="fa fa-times" style=" margin-right: 5px; "></i>
204' + displayName + '</button>'); 205 } 206 } 207 $('#SelectedFacets').show(); 208 } 209 else 210 $('#SelectedFacets').hide(); 211} 212 213function SelectFacet(facetName, facetValue, displayName, reloadEverything, id) { 214 if (reloadEverything === null) 215 reloadEverything = true; 216 217 var facetByName = $("#LeftNavigation input[name='" + facetName + "']"); 218 var facetByValue = $("#LeftNavigation input[value='" + facetValue + "']"); 219 220 var categoryCheckOverride = true; 221 if (facetName == 'Categories') 222 { 223 var chk = $('#chk' + id).prop('checked'); 224 225 if (chk != undefined && chk != null) 226 categoryCheckOverride = chk; 227 } 228 229 if (facetByName.length > 0 && facetByValue.length > 0) 230 { 231 var checkedValue = (facetName == 'Categories') ? categoryCheckOverride : true; 232 $(facetByValue).prop('checked', checkedValue); 233 } 234 else if (facetByName.length > 0 && facetValue.length > 0 && IsRangeFacet(facetValue)) 235 { 236 $(facetByName).val(facetValue); 237 $(facetByName).data('selected-value', displayName); 238 } 239 else if (facetByValue.length === 0) 240 { 241 container = $('#InvisibleFacets'); 242 $('<input />', { type: 'checkbox', name: facetName, value: facetValue, checked: true }).appendTo(container); 243 $("#LeftNavigation input[value='" + facetValue + "']").data('selected-value', displayName); 244 } 245 246 if (reloadEverything) 247 ReloadEverything(); 248} 249 250function HighlightSelectedFacetBackground() { 251 $('.facet-row-selected').removeClass('facet-row-selected'); 252 $.each($('#LeftNavigation input:checked'), function (key, value) { 253 $(value).parent().parent().addClass('facet-row-selected'); 254 }); 255} 256 257function NavigationPlusMinusCollapse() { 258 // Mobile Deactivation. 259 var isMobile = $(window).width() <= 767; 260 261 if (isMobile) 262 $('.circle i').removeClass('fa-minus-circle').addClass('fa-plus-circle'); 263 264 // On Click Binding 265 $('.left-nav-header').unbind("click").click(function () { 266 $(this).next('.specification-data-values').toggle(); 267 268 var Circle = $(this).children('.circle').find('.fa'); 269 if (Circle.hasClass('fa-minus-circle')) 270 Circle.removeClass('fa-minus-circle').addClass('fa-plus-circle'); 271 else 272 Circle.removeClass('fa-plus-circle').addClass('fa-minus-circle'); 273 }); 274} 275 276function ZeroSearchResults() { 277 // Hide Left-Hand Nav Bar 278 if ($('.partialFacetContents:visible').length === 0) { 279 $('#LeftNavigation').hide(); 280 $('#MainContentArea').removeClass('col-lg-9 omega col-xs-12 col-md-9'); 281 $('#MainContentArea').addClass('col-lg-12'); 282 $('#MainContentArea').attr('style', ''); 283 } 284 285 if ($('#ZeroResults:visible').length > 0) { 286 // Top Bar 287 $('#SearchTermBox').hide(); 288 $('#ZeroSearchTermBox').show(); 289 } 290 else { 291 // Top Bar 292 $('#SearchTermBox').show(); 293 $('#ZeroSearchTermBox').hide(); 294 } 295} 296 297/* Range Sliders */ 298function SetRangeSlider(facetName, minRangeSelected, maxRangeSelected, specificaitionTypeId, container, reloadEverything) { 299 if (reloadEverything === undefined || reloadEverything === null) 300 reloadEverything = true; 301 302 container.data('minrangeselected', minRangeSelected); 303 container.data('maxrangeselected', maxRangeSelected); 304 305 var displayName = $(container).closest('.specification-type').find('.facet-header').html() + ' ' + minRangeSelected + ' - ' + maxRangeSelected; 306 307 SelectFacet(specificaitionTypeId, facetName + ':' + '[' + minRangeSelected + ' TO ' + maxRangeSelected + ']', displayName, reloadEverything); 308} 309 310function ResetAllSliders() { 311 $(".facet-slider").each(function (index, facetSlider) { 312 var specificationTypeId = $(facetSlider).data('specificationtypeid'); 313 var handlesSlider = document.getElementById('slider-handles-' + specificationTypeId); 314 handlesSlider.noUiSlider.reset(); 315 }); 316} 317 318function ResetSingleSlider(specTypeId) { 319 $(".facet-slider").each(function (index, facetSlider) { 320 var specificationTypeId = $(facetSlider).data('specificationtypeid'); 321 if (specificationTypeId == specTypeId) { 322 var handlesSlider = document.getElementById('slider-handles-' + specificationTypeId); 323 handlesSlider.noUiSlider.reset(); 324 } 325 });
326} 327 328function BuildRangeFacet() { 329 $(".facet-slider").each(function (index, facetSlider) { 330 var specificationTypeId = $(facetSlider).data('specificationtypeid'); 331 var minValue = $(facetSlider).data('minvalue'); 332 var maxValue = $(facetSlider).data('maxvalue'); 333 var minSelected = minValue; 334 var maxSelected = maxValue; 335 var decimalplaces = $(facetSlider).closest('.partialFacetContents').data('decimalplaces'); 336 337 var selected = $('#InvisibleFacets input[name=' + specificationTypeId + ']'); 338 if (selected.length > 0) { 339 var selectedValue = selected.val(); 340 var regExp = RegExp("\\[.*?\\]", "g"); 341 var matches = regExp.exec(selectedValue); 342 var match = matches[0].replace('[', '').replace(']', '').split(' TO '); 343 minSelected = match[0]; 344 maxSelected = match[1]; 345 } 346 347 var handlesSlider = document.getElementById('slider-handles-' + specificationTypeId); 348 349 if (minValue === maxValue) 350 return; 351 352 var stepValue = "1"; 353 if (decimalplaces > 0) { 354 stepValue = "0."; 355 356 for (var i = 0; i < decimalplaces - 1; i++) { 357 stepValue += "0"; 358 } 359 360 stepValue += "1"; 361 } 362 363 try { 364 noUiSlider.create(handlesSlider, { 365 start: [minSelected, maxSelected], 366 step: parseFloat(stepValue), 367 range: { 368 'min': parseFloat(minValue), 369 'max': parseFloat(maxValue) 370 }, 371 connect: true 372 }); 373 } 374 catch (e) { 375 console.log(e); 376 } 377 378 // Update Slider On Text Area Change 379 $('.slider-snap-value-lower, .slider-snap-value-upper').change(function (e, x) { 380 var parent = $(this).closest('.partialFacetContents'); 381 var parentDecimalPlaces = parent.data('decimalplaces'); 382 383 var lower = parseFloat(parent.find('.slider-snap-value-lower').val()).toFixed(parentDecimalPlaces); 384 var upper = parseFloat(parent.find('.slider-snap-value-upper').val()).toFixed(parentDecimalPlaces); 385 var specificationId = $(parent).data('specificationtypeid'); 386 var slider = document.getElementById('slider-handles-' + specificationId); 387 388 ApplySliderModified(specificationId); 389 390 slider.noUiSlider.set([lower, upper]); 391 }); 392 393 // Update text values on slider change 394 handlesSlider.noUiSlider.on('update', function (values, handle) { 395 if (handle === 0) { 396 $(handlesSlider).parent().find('.slider-snap-value-lower').val(parseFloat(values[handle]).toFixed(decimalplaces)); 397 } 398 else { 399 $(handlesSlider).parent().find('.slider-snap-value-upper').val(parseFloat(values[handle]).toFixed(decimalplaces)); 400 } 401 }); 402 403 handlesSlider.noUiSlider.on('change', function (values, handle) { 404 ApplySliderModified(specificationTypeId); 405 trackEvent('Faceted Search', 'Facet Slider Change', specificationTypeId); 406 }); 407 }); 408 409 // Slider Apply button clicked: 410 $(".facet-range-form").submit(function (event) { 411 ShowLoadingModal(); 412 var container = $(this).closest('.partialFacetContents'); 413 414 var specificationTypeId = container.data('specificationtypeid'); 415 var minRangeSelected = container.find('.slider-snap-value-lower').val(); 416 var maxRangeSelected = container.find('.slider-snap-value-upper').val(); 417 var facetName = specificationTypeId + '_d'; 418 419 SetRangeSlider(facetName, minRangeSelected, maxRangeSelected, specificationTypeId, container); 420 421 trackEvent('Faceted Search', 'Facet Slider Submit', specificationTypeId); 422 423 event.preventDefault(); 424 }); 425 426 // Range Slider Apply button clicked: 427 $(".facet-range-slider-form").submit(function (event) { 428 ShowLoadingModal(); 429 var container = $(this).closest('.partialFacetContents'); 430 431 var specificationTypeId = container.data('specificationtypeid'); 432 var minRangeSelected = container.find('.slider-snap-value-lower').val(); 433 var maxRangeSelected = container.find('.slider-snap-value-upper').val(); 434 var facetName = specificationTypeId + '_s'; 435 436 SetRangeSlider(facetName, minRangeSelected, maxRangeSelected, specificationTypeId, container); 437 438 trackEvent('Faceted Search', 'Facet Range Slider Submit', specificationTypeId); 439 440 event.preventDefault(); 441 });
442} 443 444function InitializeRangeEntries() { 445 return { "items": [] }; 446} 447 448function RemoveRangeEntryNode(id) { 449 return RangeEntries.items.filter(function (e) { 450 return e.id !== id; 451 }); 452} 453 454function ApplySliderModified(specificationTypeId) { 455 var lowerValue = $('#slider-snap-value-lower-' + specificationTypeId).val(); 456 var upperValue = $('#slider-snap-value-upper-' + specificationTypeId).val(); 457 458 RangeEntries.items = RemoveRangeEntryNode(specificationTypeId); 459 RangeEntries.items.push({ "id": specificationTypeId, "lower": lowerValue, "upper": upperValue }); 460} 461 462function SetSliderEntries() { 463 $.each(RangeEntries.items, function (i, val) { 464 $("#slider-snap-value-lower-" + val.id).val(val.lower); 465 $("#slider-snap-value-upper-" + val.id).val(val.upper); 466 }); 467} 468 469function IsRangeFacet(facetValue) { 470 if (facetValue.indexOf('[') > -1 && facetValue.indexOf(']') > -1 && facetValue.indexOf(' TO ') > -1) 471 return true; 472 else 473 return false; 474} 475 476/* Facet Search Results */ 477function UpdateSearchResults(currentPage, searchRedirect) { 478 IsRefreshing = true; 479 if (currentPage === null) 480 currentPage = 1; 481 482 if (searchRedirect === null) 483 searchRedirect = false; 484 485 var selectedFacets = $('#LeftNavigation input:checked'); 486 if (selectedFacets.length === 0 && SearchVersion === "CategorySearch") { 487 $('#FacetSearchResults').hide(); 488 $('#ProductCategoryArea').show(); 489 HideLoadingModal(); 490 return; 491 } 492 else { 493 var sortBy = "best"; 494 if ($('#sortBy').length) { 495 sortBy = $('#sortBy').val(); 496 } 497 498 $('.search-feedback-form').hide(); 499 500 var url = '/catalog/Category/_FacetSearchResults/0/'; 501 $.ajax({
502 url: url, 503 method: "GET", 504 data: { facetQuery: FacetQuery, fullTextQuery: FullTextQuery, categoryId: jsConfigurations.CategoryId, schemaId: jsConfigurations.SchemaId, previewCode: getUrlParameter('previewCode'), IsPreviewMode: jsConfigurations.IsPreviewMode, currentPage: currentPage, resultStyle: ResultStyle, viewAllProductFamilies: viewallfamilies, childTextType: jsConfigurations.ChildTextType, isSearchRedirect: searchRedirect, sortBy: sortBy, isGrid: jsConfigurations.IsGrid.toLowerCase() }, 505 context: $('#FacetSearchResults') 506 }).done(function (data) { 507 $('#ProductCategoryArea').hide(); 508 $('#FacetSearchResults').show(); 509 $(this).html(data); 510 ApplyBulletToggles("FacetSearchResults"); 511 512 PartNumberGridAndRollupToggle(); 513 HideLoadingModal(); 514 $('.search-feedback-form').show(); 515 516 if (viewallfamilies === false) { 517 var mainContentArea = $('#MainContentArea').position(); 518 if(mainContentArea != null) 519 $('html, body').animate({ scrollTop: $('#MainContentArea').position().top - 10 }, 'slow'); 520 } 521 if (FullTextQuery !== "" && SearchVersion === "FullTextSearch") { 522 GoogleAnalyticsEventTracker("Products"); 523 } 524 IsRefreshing = false; 525 }); 526 } 527} 528 529 530function LoadPartNumberSpecifications(partNumberID, thisContext) { 531 thisContext = thisContext.parentElement; 532 533 var icon = $(thisContext).find('i'); 534 if ($(icon).hasClass('fa-chevron-right')) { 535 $(icon).removeClass('fa-chevron-right').addClass('fa-chevron-down'); 536 if ($(thisContext).data('specifications-loaded') === true) { 537 $(partNumber).slideDown(); 538 return; 539 } 540 541 } else { 542 $(icon).removeClass('fa-chevron-down').addClass('fa-chevron-right');
543 $(thisContext).next('.part-number-specification').slideUp(); 544 return; 545 } 546 547 $.ajax({ 548 url: '/catalog/partnumber/_GridDetails/?partNumberID=' + partNumberID + '&showHeading=false' 549 }).done(function (data) { 550 var partNumber = $(thisContext).next('.part-number-specification'); 551 552 $(partNumber).html(data); 553 $(partNumber).slideDown(); 554 $(partNumber).data('specifications-loaded', true); 555 LoadDownloadAllButton(partNumberID); 556 }); 557 trackEvent('Faceted Search', 'SpecificationDropDown', 'Click'); 558} 559 560function ViewAllProductFamilies() { 561 viewallfamilies = true; 562 563 UpdateSearchResults(); 564} 565 566/* Button Event Handlers */ 567function ClearAllFacetsBtn() { 568 $('#LeftNavigation input').prop('checked', false); 569 $('#InvisibleFacets').html(''); 570 $('.partialFacetContents').data('minrangeselected', '0'); 571 $('.partialFacetContents').data('maxrangeselected', Infinity); 572 573 RangeEntries = InitializeRangeEntries(); 574 575 ReloadEverything(); 576 577 if (jsConfigurations.IsGrid.toLowerCase() == 'true') 578 ResetAllSliders(); 579} 580 581function ClearSingleFacetBtn(selectedButton) { 582 facetValue = $(selectedButton).data('facet-value'); 583 $("#LeftNavigation [value='" + facetValue + "']").prop('checked', false); 584 $("#InvisibleFacets input[value='" + facetValue + "']").remove(); 585 $(selectedButton).remove(); 586 587 ReloadEverything(); 588 589 if (jsConfigurations.IsGrid.toLowerCase() == 'true') { 590 var v = facetValue.split(':'); 591 var keys = v[0].split('_'); 592 593 ResetSingleSlider(keys[0]); 594 } 595 596} 597 598function ViewAllModalPromptBtn(specificationTypeId, dataType, decimalPlaces, specificationTypeCodeName) { 599 var modal = $('#ViewAllWindow'); 600 $('.eo-modal-content div').html(''); 601 602 var url = '/catalog/Category/_ViewAll?categoryId=' + jsConfigurations.CategoryId + '&specificationTypeId=' + specificationTypeId + '&dataType=' + dataType + '&decimalPlaces=' + decimalPlaces + '&facetQuery=' + FacetQuery + '&fullTextQuery=' + FullTextQuery; 603 $.ajax({
604 url: url 605 }).done(function (data) { 606 $('.eo-modal-content div').html(data); 607 var hashArray = window.location.hash.replace('#', '').split('&'); 608 $.each(hashArray, function (index, value) { 609 if (value !== "") { 610 var subArray = value.split('='); 611 var facetName = subArray[0]; 612 var facetValue = decodeURIComponent(subArray[1]); 613 var displayName = null; 614 615 var facetByValue = $("#ViewAllWindow input[value='" + facetValue + "']"); 616 $(facetByValue).prop('checked', true); 617 } 618 }); 619 }); 620 621 $('#ViewAllWindow').show(); 622 623 $('.eo-modal-content .close').click(function () { 624 $('.eo-modal-window').hide(); 625 }); 626 627 trackEvent('Faceted Search', 'ViewAllModalButton', specificationTypeId); 628} 629 630function ViewAllApplyBtn() { 631 var modalData = $('#facet-modal-list input:checked'); 632 var specificationTypeId = $('#FacetViewAllSpecificationList').data('specificationtypeid'); 633 $('[name="' + specificationTypeId + '"]:input').prop('checked', false); 634 635 $.each(modalData, function (key, value) { 636 console.log(value); 637 var facetName = $(value).attr('name'); 638 var facetValue = $(value).val(); 639 var displayName = $(value).data('selected-value'); 640 SelectFacet(facetName, facetValue, displayName, false); 641 }); 642 643 $('#ViewAllWindow').hide(); 644 trackEvent('Faceted Search', 'ViewAllApplyButton', 'Click'); 645 ReloadEverything(); 646} 647 648function PartNumberGridAndRollupToggle() { 649 if (FacetQuery.indexOf('ProductFamilies_ii') > -1) { 650 $('[id = "ListGridViewContainer"]').hide(); 651 } 652 653 if (((document.querySelectorAll("#FacetSearchResults > div").length - 2) != 0) && ((document.querySelectorAll("#FacetSearchResults > div").length - 2) < 20)) { 654 $('[id = "ListGridViewContainer"]').hide(); 655 } 656 657 $(".btn-list-view").click(function () { 658 ResultStyle = 'List'; 659 trackEvent('Faceted Search', 'PartNumberToggle', ResultStyle); 660 UpdateSearchResults(); 661 }); 662 663 $(".btn-grid-view").click(function () { 664 ResultStyle = 'Grid'; 665 trackEvent('Faceted Search', 'PartNumberToggle', ResultStyle); 666 UpdateSearchResults(); 667 }); 668} 669 670/* Full Text Search */ 671function FullTextSearch() { 672 FullTextQuery = $('#ProductSearch').val(); 673 if (FullTextQuery !== "") { 674 ReloadEverything(); 675 } 676 else { 677 //$('.ajax-loader').hide() 678 } 679} 680 681/* Facet Utilities */ 682function UpdateFacetQuery() { 683 FacetQuery = ""; 684 var PreviousFacetName; 685 var CurrentFacetName; 686 var CurrentValue; 687 var selectedFacets = $('#LeftNavigation input').serializeArray(); 688 689 selectedFacets.sort(function (a, b) { 690 var a1 = a.name, b1 = b.name; 691 if (a1 === b1) return 0; 692 return a1 > b1 ? 1 : -1; 693 }); 694 695 for (var i = 0; i < selectedFacets.length; i++) { 696 CurrentFacetName = selectedFacets[i].name; 697 CurrentFacetValue = selectedFacets[i].value.split(":")[1]; 698 699 if (!IsRangeFacet(CurrentFacetValue)) { 700 // Non Range Format specificationId_d:"facet value" 701 CurrentValue = selectedFacets[i].value.split(":")[0] + ":" + "\"" + CurrentFacetValue + "\""; 702 } 703 else { 704 // Range Format specificationId_d:facet value. (No Double Quotes) 705 CurrentValue = selectedFacets[i].value.split(":")[0] + ":" + CurrentFacetValue; 706 } 707 708 PreviousFacetName = selectedFacets[i - 1] ? selectedFacets[i - 1].name : null; 709 710 if (PreviousFacetName === null) 711 FacetQuery += "(" + CurrentValue; 712 else if (CurrentFacetName === PreviousFacetName) 713 FacetQuery += " OR " + CurrentValue; 714 else if (CurrentFacetName !== PreviousFacetName) 715 FacetQuery += ") AND (" + CurrentValue; 716 } 717 718 if (selectedFacets.length > 0) 719 FacetQuery += ")"; 720 721 if (SearchVersion === "CategorySearch") 722 AddCurrentCategoryToFacet(); 723 724 console.log(FacetQuery); 725} 726 727function AddCurrentCategoryToFacet() { 728 var thisCategoryFacet = $('#CurrentCategoryFacet').data('currentcategoryfacet'); 729 730 if (FacetQuery.indexOf(thisCategoryFacet) === -1 && FacetQuery.length > 0) 731 FacetQuery = FacetQuery + ' AND ' + thisCategoryFacet; 732} 733 734function UpdateHashUrlBasedOnSelectedFacets() { 735 var selectedFacets = $('#LeftNavigation input').serializeArray(); 736 window.location.hash = jQuery.param(selectedFacets); 737 FacetHash = window.location.hash; 738} 739 740function UpdateFacetsBasedOnHash() { 741 // Uncheck all 742 $('input').prop('checked', false); 743 744 // Recheck all those that are in the hash 745 var hashArray = window.location.hash.replace('#', '').split('&'); 746 $.each(hashArray, function (index, value) { 747 if (value !== "") { 748 var subArray = value.split('='); 749 var facetName = subArray[0]; 750 var facetValue = decodeURIComponent(subArray[1]); 751 var displayName = null; 752 var encodedId = facetValue.split(':')[1]; 753 754 if (facetName === 'ProductFamilies_ii') { 755 $.ajax({
756 url: "/catalog/category/GetProductFamilyNameByEncodedId?encodedId=" + encodedId, 757 dataType: 'json', 758 async: false, 759 success: function (data) { 760 SelectFacet(facetName, facetValue, data, false); 761 } 762 }); 763 } 764 else if (facetName === 'Categories') { 765 $.ajax({ 766 url: "/catalog/category/GetCategoryNameByEncodedId?encodedId=" + encodedId, 767 dataType: 'json', 768 async: false, 769 success: function (data) { 770 SelectFacet(facetName, facetValue, data, false); 771 } 772 }); 773 } 774 else if ((facetValue.indexOf('_s') > -1 || facetValue.indexOf('_d') > -1) && IsRangeFacet(facetValue) === false) { 775 $.ajax({ 776 url: "/catalog/category/GetSpecificationByEncodedId?encodedId=" + encodedId, 777 dataType: 'json', 778 async: false, 779 success: function (data) { 780 781 var container = $('.partialFacetContents[data-specificationtypeid=' + specificationTypeId + ']'); 782 var specificationTypeName = $(container).find('.facet-header').html() || ''; 783 784 SelectFacet(facetName, facetValue, specificationTypeName + ' ' + data, false); 785 } 786 }); 787 } 788 else if (IsRangeFacet(facetValue) === true) { 789 var rangeArray = facetValue.split(':')[1].replace('[', '').replace(']', '').split(' TO '); 790 var min = rangeArray[0]; 791 var max = rangeArray[1]; 792 var specificationTypeId = facetName; 793 var container = $('.partialFacetContents[data-specificationtypeid=' + specificationTypeId + ']'); 794 795 var facetStyle = container.data('facetstyle'); 796 var facetSpecName = specificationTypeId + '_d'; 797 if (facetStyle != null) { 798 if (facetStyle.toLowerCase() === 'rangeslider' || facetStyle.toLowerCase() === 'rangechart') 799 facetSpecName = specificationTypeId + '_s'; 800 } else { 801 facetSpecName = specificationTypeId + '_s'; 802 } 803 SetRangeSlider(facetSpecName, min, max, specificationTypeId, container, false); 804 } 805 else { 806 SelectFacet(facetName, facetValue, facetValue, false); 807 } 808 } 809 }); 810} 811 812function ProcessCategoryTreeData(data, idField, foreignKey, rootLevel) { 813 var hash = {}; 814 815 for (var i = 0; i < data.length; i++) { 816 var item = data[i]; 817 var id = item[idField]; 818 var parentId = item[foreignKey]; 819 820 hash[id] = hash[id] || []; 821 hash[parentId] = hash[parentId] || []; 822 823 item.items = hash[id]; 824 hash[parentId].push(item); 825 } 826 827 return hash[rootLevel]; 828} 829 830function SelectProductFamilyByEncodedId(encodedId, facetName, facetValue) { 831 $.ajax({
832 url: "/catalog/category/GetProductFamilyNameByEncodedId?encodedId=" + encodedId, 833 dataType: 'json', 834 async: false, 835 success: function (data) { 836 SelectFacet(facetName, facetValue, data, false); 837 } 838 }); 839} 840 841function SelectCategoryNameByEncodedId(encodedId, facetName, facetValue) { 842 return $.ajax({ 843 url: "/catalog/category/GetCategoryNameByEncodedId?encodedId=" + encodedId, 844 dataType: 'json', 845 async: false, 846 success: function (data) { 847 SelectFacet(facetName, facetValue, data, false); 848 } 849 }); 850} 851 852/* Feedback Form */ 853function SearchForm() { 854 855 var $options = $("#countryId > option").clone(); 856 //remove currency from list 857 for (var i = 0; i < $options.length; i++) { 858 var countryName = $options[i].text; 859 if (countryName != "---------------") { $options[i].text = countryName.substr(0, countryName.indexOf('(')) } 860 } 861 862 $('#FeedbackCountryId').append($options); 863 864 865 $('#isItarDefense').val(''); 866 867 $("#SearchFeedBackForm").submit(function (e) { 868 var mtCaptchaResponse = mtcaptcha.getVerifiedToken(); 869 var recaptchaResponse = ""; 870 if (typeof grecaptcha !== 'undefined') { 871 recaptchaResponse = grecaptcha.getResponse(); 872 } 873 874 // Submit form 875 if ($("[name='isItarDefense']").val() !== "") { 876 $.post("/Catalog/Category/Feedback", { 877 fullName: $("[name='fullName']").val(), 878 phone: $("[name='phone']").val(), 879 emailAddress: $("[name='emailAddress']").val(), 880 description: $("#description").val(), 881 IPAddress: $("[name='IPAddress']").val(), 882 userAgent: $("[name='UserAgent']").val(), 883 countryId: $("[name='FeedbackCountryId']").val(), 884 isItarDefense: $("[name='isItarDefense']").val(), 885 captchaResponse: recaptchaResponse, 886 mtCaptchaResponse: mtCaptchaResponse, 887 url: window.location.href, 888 searchTerm: FullTextQuery, 889 facetQuery: FacetQuery 890 }).done(function (data) { 891 if (data.Message === "Success") { 892 $('.search-feedback-form-container .feedback-form').hide(); 893 $('.search-feedback-form-container .submitted-successfully').show(); 894 } else if (data.Message === "Invalid Recaptcha Response") { 895 $('#validateRecaptcha').show(); 896 } else { 897 alert('An error occured while submitting the form'); 898 } 899 }); 900 } 901 e.preventDefault(); 902 }); 903} 904 905/* General */ 906function initialPageLoad() { 907 SearchForm(); 908 //We had to add the additional search url checks to accomodate for cookieless searches which were submitted as post instead of get 909 var isSearchUrl = window.location.pathname.toLowerCase().substr(0, 7); 910 if (isSearchUrl !== "/search") { 911 SearchVersion = "CategorySearch"; 912 $(".partialContents").each(function (index, item) { 913 var url = $(item).data("url"); 914 if (url && url.length > 0) { 915 $.ajax({
916 url: url, 917 context: item, 918 async: false 919 }).done(function (data) { 920 $(this).html(data); 921 }); 922 } 923 }); 924 UpdateFacetsBasedOnHash(); 925 ReloadEverything(); 926 HideSpecificationTypesWithNoFacets(); 927 } 928 else { 929 RangeEntries = InitializeRangeEntries(); 930 FullTextQuery = $('#ProductSearch').val(); 931 SearchVersion = "FullTextSearch"; 932 933 UpdateFacetsBasedOnHash(); 934 UpdateHashUrlBasedOnSelectedFacets(); 935 UpdateFacetQuery(); 936 PartNumberGridAndRollupToggle(); 937 if (FacetQuery.indexOf('ProductFamilies_ii') > -1) { 938 $(".btn-list-view").click(); 939 } 940 941 LoadFacetNavigation(); 942 RefreshSelectedFacets(); 943 HighlightSelectedFacetBackground(); 944 NavigationPlusMinusCollapse(); 945 ZeroSearchResults(); 946 HideLoadingModal(); 947 } 948 949 CheckUrlForListViewFlag(); 950 CheckUrlForSearchRedirect(); 951 952 $(window).on('hashchange', function () { 953 if (window.location.hash !== FacetHash) { 954 UpdateFacetsBasedOnHash(); 955 UpdateFacetQuery(); 956 LoadFacetNavigation(); 957 RefreshSelectedFacets(); 958 UpdateSearchResults(); 959 $('html, body').animate({ scrollTop: $('#MainContentArea').position().top - 10 }, 'slow'); 960 HideLoadingModal(); 961 } 962 }); 963} 964 965function ShowLoadingModal() { 966 $('body').addClass("loading"); 967} 968 969function HideLoadingModal() { 970 $('#loader').hide(); 971 $('body').removeClass("loading"); 972} 973 974function LoadDownloadAllButton(partNumberID) { 975 $.getJSON("/catalog/partnumber/getPartNumberByStockNumber/?partNumberID=" + partNumberID, function (data) { 976 if (data.Result === true) { 977 $("#documentDownloads_" + data.Data.PartNumber.MaterialNumber).append('<a class="btn btn-downloads" id="downloadAllBtn_' + data.Data.PartNumber.MaterialNumber + '" style="margin-top: 15px; margin-bottom: 5px;" onclick="downloadAll(\'' + data.Data.PartNumber.MaterialNumber + '\');" download></a>'); 978 $("#downloadAllBtn_" + data.Data.PartNumber.MaterialNumber).text($("#downloadAllText_" + data.Data.PartNumber.MaterialNumber).val()); 979 } 980 }); 981} 982 983function downloadAll(stockNumber) { 984 trackEvent('Document Download', 'Download All', stockNumber); 985 window.open('/catalog/partnumber/DownloadAll/?stockNum=' + stockNumber, '_blank'); 986} 987 988function TrackCategoryClickthrough(categoryID, location) { 989 trackEvent('Faceted Search', 'Category Clickthrough-UI', location); 990 trackEvent('Faceted Search', 'Category Clickthrough', categoryID); 991} 992 993function TrackProductFamilyClickthrough(code, location) { 994 trackEvent('Faceted Search', 'Product Family Clickthrough-UI', location); 995 trackEvent('Faceted Search', 'Product Family Clickthrough', code); 996} 997 998function TrackPartNumberClickthrough(stockNum, location) { 999 trackEvent('Faceted Search', 'Part Number Clickthrough-UI', location); 1000 trackEvent('Faceted Search', 'Part Number Clickthrough', stockNum); 1001} 1002 1003function CheckUrlForListViewFlag() { 1004 if (window.location.href.toLowerCase().indexOf("productlistview") !== -1) { 1005 ResultStyle = 'List'; 1006 trackEvent('Faceted Search', 'List View URL Parameter', ResultStyle); 1007 UpdateSearchResults(); 1008 } 1009} 1010 1011function CheckUrlForSearchRedirect() { 1012 if (window.location.href.toLowerCase().indexOf("searchredirect") !== -1) { 1013 ResultStyle = 'Grid'; 1014 trackEvent('Faceted Search', 'Search Redirect URL Parameter', ResultStyle); 1015 UpdateSearchResults(1, true); 1016 } 1017} 1018 1019function toggleSelectionGuide() { 1020 toggleIsOn = (toggleIsOn ? false : true); 1021 $('#mainContentOuterContainer').toggle(); 1022 $('#SelectionGuide').toggle(); 1023} 1024 1025$(window).resize(function () { 1026 if (window.matchMedia("(min-width: 992px)").matches) { 1027 $("#btn-close").click(); 1028 } 1029}); 1030 1031$(document).ready(function () { 1032 window.addEventListener("resize", function () { 1033 1034 if (window.matchMedia("(min-width: 992px)").matches) { 1035 $("#newFacetsModal").show(); 1036 } 1037 }) 1038 1039}); 1040 1041// Category Grid 1042var table = null; 1043function GridFilters() { 1044 if (table != null) 1045 table.destroy(); 1046 1047 1048 table = $('#tableProducts').DataTable 1049 ({ 1050 paging: false, 1051 "dom": '<<t>> ', 1052 "order": [], 1053 "columnDefs": [ 1054 { targets: "no-search", searchable: false } 1055 ] 1056 }); 1057 1058 var sortFunction = function (a, b) { 1059 return a - b; 1060 }; 1061 1062 var GetSelect = function (column, isPrice) { 1063 var addlClass = (isPrice) ? " price-filter" : ""; 1064 var tmpSelect = $('<select id=filter_' + column[0] + ' class="multi-select' + addlClass + '" multiple="multiple"></select>') 1065 .appendTo($(column.footer()).empty()) 1066 .on('change', function () { 1067 //Escape the expression so we can perform a regex match: 1068 var regexString = $(this).find(':selected').map(function () { 1069 return $.fn.dataTable.util.escapeRegex($(this).val()); 1070 }).get().join('|'); 1071 1072 //Set filter indicator: 1073 if (regexString !== "") 1074 $("#circle_" + column[0]).show(); 1075 else 1076 $("#circle_" + column[0]).hide(); 1077 1078 //Add exact match to search string (if not empty): 1079 if (regexString !== "") 1080 regexString = '^' + regexString + '$'; 1081 1082 //console.log(regexString); 1083 1084 column.search(regexString, true, false, false).draw(); 1085 trackEvent('Product Grid', 'Filter', regexString); 1086 }); 1087 1088 return tmpSelect; 1089 }; 1090 1091 table.columns('.sort-text').every(function () { 1092 var column = this; 1093 var select = GetSelect(this, false); 1094 var distinctvalues = []; 1095 1096 //columns with text data types sort in alpha order 1097 column.data().unique().sort().each(function (d, j) { 1098 var cleanValue = ""; 1099 1100 if (d.indexOf('clean-value') > -1) 1101 cleanValue = $(d).eq(0).text(); 1102 else 1103 cleanValue = d.replace(/"/g, '"'); //double quote fix 1104 1105 if (cleanValue.length > 0 && $.inArray(cleanValue, distinctvalues) === -1 && cleanValue != '-') { 1106 select.append('<option value="' + cleanValue + '">' + cleanValue + '</option>'); 1107 distinctvalues.push(cleanValue); 1108 } 1109 }); 1110 });
1111 1112 table.columns('.sort-number').every(function () { 1113 var column = this; 1114 var select = GetSelect(this, false); 1115 var distinctvalues = []; 1116 1117 //columns with numeric data types sort in numeric order 1118 column.data().unique().sort(sortFunction).each(function (d, j) { 1119 var cleanValue = ""; 1120 1121 if (d.indexOf('clean-value') > -1) 1122 cleanValue = $(d).eq(0).text(); 1123 else 1124 cleanValue = d.replace(/"/g, '"'); //double quote fix 1125 1126 if (cleanValue.length > 0 && $.inArray(cleanValue, distinctvalues) === -1 && cleanValue != '-') { 1127 select.append('<option value="' + cleanValue + '">' + cleanValue + '</option>'); 1128 distinctvalues.push(cleanValue); 1129 } 1130 }); 1131 }); 1132 1133 table.columns('.sort-price').every(function () { 1134 var column = this; 1135 var select = GetSelect(this, true); 1136 var distinctvalues = []; 1137 1138 //price column value sort in numeric order 1139 column.data().unique().sort().each(function (d, j) { 1140 var cleanValue = ""; 1141 1142 var p = $(d).eq(0); 1143 if (p != null && p != undefined) { 1144 var price = p.find('.price-filter-value'); 1145 1146 if (price != null && price != undefined) 1147 cleanValue = price.text(); 1148 else 1149 cleanValue = d.replace(/"/g, '"'); //double quote fix 1150 1151 if (cleanValue.length > 0 && $.inArray(cleanValue, distinctvalues) === -1 && cleanValue != '-') { 1152 select.append('<option value="' + cleanValue + '">' + cleanValue + '</option>'); 1153 distinctvalues.push(cleanValue); 1154 } 1155 } 1156 }); 1157 }); 1158 1159 //get column count: 1160 var ct = 0; 1161 table.columns().every(function () { 1162 ct++; 1163 }); 1164 1165 for (var i = 1; i <= ct; i++) { 1166 //check if filter column exists before adding filter dropdown: 1167 if ($('#filter_' + i).length > 0) { 1168 $('#filter_' + i).multiselect({ 1169 filter: true, 1170 enableFiltering: true, 1171 includeSelectAllOption: false, 1172 includeResetOption: true, 1173 maxHeight: 450, 1174 selectAllValue: 'select-all-value', 1175 templates: { 1176 button: '<span class="multiselect dropdown-toggle" data-bs-toggle="dropdown"><center><i class="fa fa-filter"></i><i class="fa fa-circle" id="circle_' + i + '" style="color:#5be300; font-size: 8px; display:none;"></i></center></span>', 1177 resetButton: '<li class="multiselect-reset text-center"><div class="input-group"><button id="resetFilter_' + i + '" onclick="ResetFiltersButton(' + i + ')" class="btn btn-specifications" style="background-color:#0462be; color:white; font-weight:bold !important; height:22px; padding-top: 0px !important;">' + resetButtonText + ' <i class="fa fa-undo"></i></button></div></li>' 1178 } 1179 }); 1180 } 1181 } 1182 1183 $(".multiselect-container").mouseleave(function () { 1184 $(".multiselect-container").closest('.btn-group').removeClass('open'); 1185 }); 1186 1187 $('.hide-filter').empty(); 1188 $('.sorting-disabled').empty(); 1189} 1190 1191/* CATEGORY PRODUCT GRID */ 1192function ResetProductGrid() { 1193 var table = document.getElementById('tableProducts'); 1194 var rows = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr'); 1195 for (let i = 0; i < rows.length; i++) { 1196 rows[i].style.display = ''; 1197 } 1198} 1199 1200function GetUniqueKeyValues(arr, key) { 1201 // Extract all values for the specified key using map() 1202 var allValues = arr.map(item => item[key]); 1203 1204 // Create a Set to automatically remove duplicates 1205 var uniqueValues = new Set(allValues); 1206 1207 // Convert the Set back to an Array using the spread operator 1208 return [...uniqueValues]; 1209} 1210 1211function DecodeSpecificationValue(specValue) { 1212 //replace encoded values: 1213 specValue = specValue.replace(/\+/g, ' '); 1214 var decodedValue = decodeURIComponent(specValue); 1215 1216 return decodedValue; 1217} 1218 1219function FormatDecimalValues(facetValue) { 1220 var currentValue = parseFloat(facetValue); 1221 var returnValue = facetValue; 1222 if (!isNaN(currentValue)) { 1223 returnValue = currentValue.toFixed(2); 1224 } 1225 1226 return returnValue; 1227} 1228 1229function FormatSliderValues(facetValue) { 1230 return facetValue.replace('[', '').replace(']', '').replace(' TO ', '_to_'); 1231} 1232 1233function IsSliderFacetValue(facetValue) { 1234 var hasStartBracket = facetValue.startsWith("["); 1235 var hasEndBracket = facetValue.endsWith("]"); 1236 var hasTo = facetValue.indexOf("TO"); 1237 1238 if (hasStartBracket && hasEndBracket && hasTo > 0) 1239 return true; 1240 1241 return false; 1242} 1243 1244function IsSliderSpecValue(specValue) { 1245 if (specValue.indexOf('_to_') > -1) 1246 return true; 1247 else 1248 return false; 1249} 1250 1251function IsBetweenMinMax(minValue, maxValue, gridValue) { 1252 const min = parseFloat(minValue); 1253 const max = parseFloat(maxValue); 1254 const value = parseFloat(gridValue) 1255 1256 const isBetween = value >= min && value <= max; 1257 1258 return isBetween; 1259} 1260 1261function FilterProductGrid() { 1262 var gridFilters = []; 1263 var selectedFacets = $('#LeftNavigation input').serializeArray();
1264 var uniqueIds = GetUniqueKeyValues(selectedFacets, 'name'); 1265 1266 for (var x = 0; x < uniqueIds.length; x++) { 1267 var specTypeId = uniqueIds[x]; 1268 var filteredFacets = selectedFacets.filter(facet => facet.name === uniqueIds[x]); 1269 var specTypeValues = ""; 1270 1271 for (var i = 0; i < filteredFacets.length; i++) { 1272 var facetValue = filteredFacets[i].value.split(":")[1]; 1273 var facetType = filteredFacets[i].value.replace(specTypeId + '_', '').replace(':' + facetValue, ''); 1274 1275 var isSlider = IsSliderFacetValue(facetValue); 1276 if (isSlider) { 1277 facetType = "sl"; 1278 } 1279 1280 var decodedValue = DecodeSpecificationValue(facetValue); 1281 1282 switch (facetType) { 1283 case "d": //decimal 1284 decodedValue = FormatDecimalValues(decodedValue); 1285 break; 1286 case "sl": //slider 1287 decodedValue = FormatSliderValues(decodedValue); 1288 break; 1289 } 1290 1291 specTypeValues += (specTypeValues == "") ? decodedValue : "|" + decodedValue; 1292 } 1293 1294 gridFilters.push({ id: specTypeId, values: specTypeValues }); 1295 } 1296 1297 ResetProductGrid(); 1298 1299 var filterCount = gridFilters.length; 1300 var table = document.getElementById('tableProducts'); 1301 var rows = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr'); 1302 1303 for (let row = 0; row < rows.length; row++) { 1304 var cells = rows[row].getElementsByTagName('td'); 1305 var foundCount = 0; 1306 1307 for (let cell = 0; cell < cells.length; cell++) { 1308 var dataSpecId = cells[cell].getAttribute('data-spec-id'); 1309 var dataFacetGroup = cells[cell].getAttribute('data-facet-group'); 1310 var found = false; 1311 1312 if (dataSpecId != null && dataSpecId != undefined) { 1313 var filterValue = gridFilters.filter(x => x.id == dataSpecId); 1314 1315 if (filterValue.length > 0) { 1316 var cellValue = cells[cell].innerText; 1317 var findValue = (dataFacetGroup != null && dataFacetGroup != undefined && dataFacetGroup != '') ? dataFacetGroup : cellValue.trim(); 1318 var specValues = filterValue[0].values.split('|'); 1319 1320 for (let spec = 0; spec < specValues.length; spec++) { 1321 var isSlider = IsSliderSpecValue(specValues[spec]); 1322 1323 if (isSlider) { 1324 var sliderValues = specValues[spec].split('_to_'); 1325 1326 var isBetween = IsBetweenMinMax(sliderValues[0], sliderValues[1], findValue); 1327 if (isBetween) { 1328 found = true; 1329 break; 1330 } 1331 } 1332 else { 1333 if (findValue == specValues[spec]) { 1334 found = true; 1335 break; 1336 } 1337 } 1338 } 1339 } 1340 } 1341 if (found) 1342 foundCount++; 1343 } 1344 1345 rows[row].style.display = (foundCount == filterCount) ? '' : 'none'; 1346 } 1347}
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.