1(function($) { 2 window.FWP = window.FWP || {}; 3 window.FWP.flyout = { 4 open: function() { 5 FWP.flyout.swapFacets('open'); 6 FWP.flyout.hideEmptyFacets(); 7 }, 8 close: function() { 9 FWP.flyout.swapFacets('close'); 10 }, 11 getOrderedFacets: function() { 12 var facets = []; 13 14 $('.facetwp-facet').each(function() { 15 var name = $(this).attr('data-name'); 16 var type = $(this).attr('data-type'); 17 var blacklist = ['map', 'pager']; 18 19 if (! blacklist.includes(type)) { 20 facets.push(name); 21 } 22 }); 23 24 return FWP.hooks.applyFilters('facetwp/flyout/facets', facets); 25 }, 26 init: function() { 27 var content = ''; 28 var facet_html = ` 29 <div class="flyout-row name-{name}"> 30 <h3>{label}</h3> 31 <div class="flyout-item"></div> 32 </div> 33 `; 34 35 $.each(FWP.flyout.getOrderedFacets(), function(facet_name) { 36 37 // Support for custom HTML 38 var temp = FWP.hooks.applyFilters('facetwp/flyout/facet_html', facet_html, { 39 facet_name: facet_name 40 }); 41 temp = temp.split('{label}').join(FWP.settings.labels[facet_name]); 42 temp = temp.split('{name}').join(facet_name); 43 content += temp; 44 }); 45 46 // Custom flyout content 47 $tpl = $('.facetwp-flyout-tpl'); 48 var layout = $tpl.len() ? $tpl.html() : '{content}'; 49 50 var flyout = ` 51 <div class="facetwp-flyout"> 52 <div class="facetwp-flyout-close">x</div> 53 <div class="facetwp-flyout-wrap"> 54 <div class="facetwp-flyout-content">${layout}</div> 55 </div> 56 </div> 57 <div class="facetwp-flyout-fog"></div> 58 `; 59 60 // Hook to modify flyout HTML 61 flyout = FWP.hooks.applyFilters('facetwp/flyout/flyout_html', flyout); 62 flyout = flyout.replace('{content}', content); 63 64 if (0 < $('.facetwp-flyout').len()) { 65 $('.facetwp-flyout').nodes[0].remove(); 66 $('.facetwp-flyout-fog').nodes[0].remove(); 67 } 68 69 $('body').append(flyout); 70 }, 71 swapFacets: function(action) { 72 var action = ('undefined' !== typeof action) ? action : 'open'; 73 var is_open = $('.facetwp-flyout.active').len() > 0; 74 75 if ((is_open && 'open' == action) || (!is_open && 'close' == action)) { 76 return; 77 } 78 79 // Loop through each facet 80 $.each(FWP.flyout.getOrderedFacets(), function(facet_name) { 81 82 if ('open' == action) { 83 var $this = $('.facetwp-facet-' + facet_name).nodes[0]; 84 var $dest = $('.flyout-row.name-' + facet_name + ' .flyout-item:not(.ready)').nodes[0]; 85 $this.insertAdjacentHTML('afterend', '<div class="placeholder-' + facet_name + '"></div>'); 86 $dest.appendChild($this); 87 $dest.classList.add('ready'); 88 } 89 else { 90 var $this = $('.flyout-item.ready .facetwp-facet-' + facet_name).nodes[0]; 91 $this.parentNode.classList.remove('ready'); 92 var $dest = $('.placeholder-' + facet_name).nodes[0]; 93 $dest.parentNode.insertBefore($this, $dest.nextSibling); 94 $dest.remove(); 95 } 96 }); 97 98 // Add the open or close CSS class 99 var which = ('open' == action) ? 'addClass' : 'removeClass'; 100 $('.facetwp-flyout, .facetwp-flyout-fog')[which]('active'); 101 102 // Custom action 103 FWP.hooks.doAction('facetwp/flyout/' + action); 104 }, 105 hideEmptyFacets: function() { 106 $('.flyout-row').each(function() { 107 var el = this; 108 var $facet = $(el).find('.facetwp-facet'); 109 var facet_name = $facet.attr('data-name'); 110 var facet_type = $facet.attr('data-type'); 111 112 if ( 'pager' == facet_type ) { 113 var which = FWP.settings.pager.total_pages < 2 ? 'addClass' : 'removeClass'; 114 $(el)[which]('facetwp-hidden'); 115 } else { 116 var which = 'undefined' !== FWP.settings.num_choices[facet_name] && FWP.settings.num_choices[facet_name] < 1 ? 'addClass' : 'removeClass'; 117 $(el)[which]('facetwp-hidden'); 118 } 119 }); 120 121 // Hide/show headers for hidden Reset facet, also when using facetwp_preload_url_vars 122 $('.facetwp-hide-empty').each(function() {
123 let $this = $(this); 124 let facet_name = $this.closest('.facetwp-facet').attr('data-name'); 125 var $el = $('.flyout-row.name-' + facet_name); 126 let facets = $this.nodes[0]._facets; 127 let all_facets = ! FWP.loaded && ! FWP.is_bfcache && $.isset(FWP_HTTP.url_vars) ? Object.assign(FWP.facets, FWP_HTTP.url_vars): FWP.facets; 128 var which = facets.every(val => all_facets[val].length < 1) ? 'addClass' : 'removeClass'; 129 $el[which]('facetwp-hidden'); 130 }); 131 } 132 }; 133 134 $().on('facetwp-loaded', function() { 135 if (! FWP.loaded && ! FWP.is_bfcache) { 136 FWP.flyout.init(); 137 } 138 FWP.flyout.hideEmptyFacets(); 139 }); 140 141 $().on('click', '.facetwp-flyout-open', function(e) { 142 e.preventDefault(); 143 FWP.flyout.open(); 144 }); 145 146 $().on('click', '.facetwp-flyout-close, .facetwp-flyout-fog', function() { 147 FWP.flyout.close(); 148 }); 149})(fUtil);
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.