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