PageSourceSearch

https://vistage.co.uk/research-centre/wp-content/themes/vistage/assets/js/utils/search-solr.js

js vistage.co.uk collected 2026-09-26 02:17:44 UTC 16,858 bytes, 441 lines download raw bytes

1(function($) {
2
3    function getSortQS() {
4
5        var sort = $('.dropdown-sort-option.active').data('sort');
6        return "&wpsolr_sort="+sort;
7    }
8
9    function getFacetsQS() {
10        var qsvars = "";
11        var searchCategories = [];
12        $("#res_facets select").each(function(i, e){
13            var val = $(e).val();
14            if (val != "all") {
15
16                var qsvar = $(e).data("qsvar");
17                var facet_id = $(e).find('option:selected').data("facet_id");
18
19                qsvars += "&"+(facet_id || qsvar)+val;
20                searchCategories.push(val);
21            }
22        });
23        $("#res_facets .checkboxes input:checked").each(function(i, e){
24            var val = $(e).val();
25            var qsvar = $(e).data("qsvar");
26            qsvars += "&"+qsvar+val;
27            searchCategories.push(val);
28        });
29        // if (searchCategories.length) {
30        //     return "&sc="+searchCategories.join("|")+qsvars;
31        // }
32        return qsvars;
33    }
34
35    function getFacetsQS2() {
36        var qsvars = "";
37
38        $(".search-list").each(function(i, e){
39            var qsvar = $(this).data("qsvar");
40            var selected = $(this).find('.search-list-input');
41
42
43
44            if(selected.val()) {
45                var value =
46                    //console.log(qsvar);
47                //console.log(selected.val());
48                qsvars += "&"+(qsvar)+selected.val();
49            }
50
51        });
52
53        if(qsvars == "") {
54            $(".search-button-clear-option-qsvar").each(function(i, e){
55                var qsvar = $(this).data("qsvar");
56                qsvars += "&"+(qsvar);
57            });
58        }
59
60        return qsvars;
61
62    }
63
64    function applyFilters() {
65        var baseURL = $('form.searchform').attr('action');
66        var search = $('#vrc-search-input').val() ? $('#vrc-search-input').val() : $('#vrc-search-input-header').val();
67        var view = ($('.vrc-component.content-list').hasClass('grid')) ? 'grid' : 'list';
68
69        var urlParams = new URLSearchParams(window.location.href);
70		var context = urlParams.get('c');
71		var area = urlParams.get('area') || '';
72
73
74        var url = baseURL+"?s="+search+"&query="+search+"&area="+area+"&view="+view+getFacetsQS2()+getSortQS();
75
76        if(null !== context) {
77            url = url+"&c="+context;
78        }
79
80        window.location = url;
81    }
82
83    $("#res_facets select#categories:first").off("change.categories").on("change.categories", function(e){
84        $("#res_facets select#categories:not(:first)").val("all");
85    });
86    $("#res_facets select:not(#categories,.subcategory), #res_facets .checkboxes input, #sortby select").off("change.any").on("change.any", function(e){
87        if($('input#has_events').prop("checked")) {
88            $('input#has_events').trigger("change");
89            return;
90        }
91        applyFilters();
92    });
93
94    var originalCat = $("#res_facets select#categories option:selected").val();
95    var originalSubcat =  $('.subcategories-wrap select.subcategory:not([disabled])').val();
96
97    if($("#res_facets select#categories option:selected").data('has_subcats')) {
98        $('.vrc-advanced-filters .filter-select-wrap.categories').addClass('has-subcategories');
99    }
100
101    $("#res_facets select#categories").off("change.categories").on("change.categories", function(e) {
102
103        var selectedOption = $(this).find('option:selected');
104
105        $('.subcategories-wrap select').prop('disabled', true);
106        $('.subcategories-wrap select.subcategory').val('all');
107
108        if( selectedOption.data('has_subcats') ) {
109
110            var selectedValue = selectedOption.val();
111            var subcats = $('.subcategories-wrap select[id="'+selectedValue+'"]');
112
113            if(subcats.length) {
114                $('.vrc-advanced-filters .filter-select-wrap.categories').css("transition", "none");
115                $('.vrc-advanced-filters .filter-select-wrap.categories').addClass('has-subcategories');
116                $('.subcategories-wrap button.category-button').prop('disabled', false);
117                subcats.prop('disabled', false);
118            }
119
120            return;
121        } else {
122
123            $('.vrc-advanced-filters .filter-select-wrap.categories').css("transition", "none");
124            $('.vrc-advanced-filters .filter-select-wrap.categories').removeClass('has-subcategories');
125            $('.subcategories-wrap button.category-button').prop('disabled', true);
126            if( $("#res_facets select#categories option:selected").val() != originalCat ) {
127                applyFilters();
128            }
129
130        }
131    })
132
133    $('.vrc-advanced-filters button[data-filter="categories"]').off("
133click.transitionfix").on("click.transitionfix", function(e) {
134        $('.vrc-advanced-filters .filter-select-wrap.categories').css("transition", "");
135    });
136
137
138
139    $("#res_facets select.subcategory").off("change.subcategory").on("change.subcategory", function(e) {
140        if( $(this).val() != originalSubcat ) {
141            $('.subcategories-wrap button.category-button').prop('disabled', true);
142            applyFilters();
143        }
144    })
145
146    $('.vrc-advanced-filters .filter-select-wrap button#category-apply').off('click').on('click', function( e ) {
147        applyFilters();
148    })
149
150    $('.vrc-advanced-filters .filter-select-wrap button#category-cancel').off('click').on('click', function( e ) {
151        $("#res_facets select#categories").val(originalCat);
152        $("#res_facets select#categories").trigger('change');
153        $('.subcategories-wrap button.category-button').prop('disabled', true);
154        $('.subcategories-wrap select.subcategory:not([disabled])').val(originalSubcat);
155        $('.adv-filter-selection button[data-filter="categories"]').trigger('click');
156    })
157
158    $('.vrc-search-advanced, #filter-close').on('click', function( e ) {
159        e.preventDefault();
160        $('#vrc-search-wrapper').find('.vrc-advanced-filters').toggleClass('open');
161    });
162
163    $('[data-filter]').on('click', function( e ) {
164        e.preventDefault();
165        const self = $(e.target);
166        const parent = self.parent();
167        const filter = self.attr('data-filter');
168
169        if ( filter === 'clear' ) {
170            const inputVal = document.getElementById('vrc-search-input').value;
171            self.parent().find('[data-filter]').removeClass('active');
172            self.parent().find('.visible')
173                .removeClass('visible')
174                .children('select')
175                .prop('selectedIndex', 0);
176            // Don't allow blank re-submission
177            if ( inputVal !== '' ) {
178                document.querySelector('.searchform').submit();
179            }
180        } else {
181            self.toggleClass('active');
182            self.siblings('.filter-select-wrap').toggleClass('visible');
183            parent.siblings('.adv-filter-selection, [data-filter="clear"]').toggleClass('hidden');
184        }
185    });
186
187    // if(typeof wp_localize_script_autocomplete !== "undefined")
188    // {
189    //     if(wp_localize_script_autocomplete && wp_localize_script_autocomplete.data && wp_localize_script_autocomplete.data.wpsolr_autocomplete_selector) {
190    //         var inputSelector  = wp_localize_script_autocomplete.data.wpsolr_autocomplete_selector;
191    //         $(inputSelector).parents('form').submit(function(e) {
192    //             var search = $(inputSelector).val();
193    //
194    //
195    //             if( $("#vrc-search-input").length && '' == search) {
196    //                 search = ($("#vrc-search-input").val() == '') ? '' : $("#vrc-search-input").val();
197    //                 $("#vrc-search-input-header").val($("#vrc-search-input").val());
198    //             }
199    //
200    //             if( '' == search ) {
201    //                 e.preventDefault();
202    //             }
203    //         });
204    //
205    //
206    //         $(inputSelector).parents('form').on('keypress', function(e) {
207    //             var search = $(inputSelector).val();
208    //
209    //             if(13 == e.keyCode && '' == search &&  $("#vrc-search-input").length) {
210    //                 search = ($("#vrc-search-input").val() == '') ? '' : $("#vrc-search-input").val();
211    //                 $("#vrc-search-input-header").val($("#vrc-search-input").val());
212    //             }
213    //
214    //             if( 13 == e.keyCode && '' == search ) {
215    //                 alert('Search box is empty.')
216    //                 e.preventDefault();
217    //             }
218    //         });
219    //     }
220    // }
221
222
223    // $('input#current-page').on('keypress', function(e) {
224    //     if( 13 == e.keyCode ) {
225    //         var currentPage = $(this).data('current_page'),
226    //             totalPages = $(this).data('total_pages'),
227    //             newPage = parseInt( $(this).val() );
228    //         if( newPage !== currentPage && newPage >= 1 && newPage <= totalPages && search !== '' ) {
229    //             var baseURL = $('form.searchform').attr('action');
230    //             var search = $('#vrc-search-input').val();
231    //             var url = baseURL+"page/"+newPage+"/?s="+search+getFacetsQS2()+getSortQS();
232    //             window.location = url;
233    //         } else {
234    //             $(this).val(currentPage);
235    //         }
236    //
237    //     }
238    // });
239
240
241
242    $(document).ready(function() {
243
244
245
246        validate_filter_buttons_visibility();
247
248        if($('#filters').hasClass('no-results')) {
249            $('.search-list').parent().hide();
250            $("#solr-search-clear-button").attr("disabled",false);
251        }
252
253        $("#solr-search-apply-button").click(function() {
254            applyFilters();
255            // getFacetsQS2();
256        });
257
258        $("#solr-search-clear-button").click(function() {
259            $(".search-button-option-active").removeClass("search-button-option-active");
260            $(".search-list-input").val("");
261            applyFilters();
262        });
263
264        $('#filter_results').click( function(e) {
265            $('#filter_results').toggleClass('active');
266
267            var $window = $(window);
268            var windowsize = $window.width();
269
270                if($('#filter_results').hasClass('active')) {
271                    $(".solr-header-facets").addClass('active');
272                    $(".solr-active-facets").removeClass("active");
273                } else {
274                    $(".solr-header-facets").removeClass('active');
275                    $(".solr-active-facets").addClass("active");
276                }
277
278            if (windowsize <= 768) {
279                $(".solr-active-facets").addClass("active");
280            }
281
282        });
283
284        $(".search-button-option").click(function () {
285            var facet = $(this).data('facet');
286            if($(this).hasClass('search-button-option-active')) {
287                $("."+facet+"-search-button-option").removeClass("search-button-option-active");
288                $("#"+facet+"-search-value").val("");
289            } else {
290                $("."+facet+"-search-button-option").removeClass("search-button-option-active");
291                $(this).addClass('search-button-option-active');
292                $("#"+facet+"-search-value").val($(this).val());
293            }
294
295            validate_filter_buttons_visibility();
296        });
297
298
299        $('.dropdown-sort-option').click(function(e) {
300            e.preventDefault();
301            $('.dropdown-sort-option').removeClass('active');
302            $(this).addClass('active');
303            applyFilters();
304        });
305
306        if( $('.search-button-option-active').length) {
307            $(".solr-active-facets").append('<label class="search-active-label">Filtering by: </label>');
308            $('.search-button-option-active').each(function(i, e){
309                var btn = "<button id='clear-option-"+i+"' class='search-button-clear-option'  data-facet='"+$(this).data("facet")+"'>"+$(this).text()+"<span>x</span></button>";
310                $(".solr-active-facets").append(btn);
311                $(".solr-active-facets").addClass("active");
312            });
313        } else {
314            var url_string = window.location.href;
315
316            var is_ie11 = check_ie11();
317            if(is_ie11){
318                var wpsolr_fq_1 = getQueryString("wpsolr_fq[1]");
319                var wpsolr_fq_2 = getQueryString("wpsolr_fq[2]");
320            }else{
321                var url = new URL(url_string);
322                var wpsolr_fq_1 = url.searchParams.get("wpsolr_fq[1]");
323                var wpsolr_fq_2 = url.searchParams.get("wpsolr_fq[2]");
324            }
325
326            if(wpsolr_fq_1 || wpsolr_fq_2) {
327                $(".solr-active-facets").append('<label class="search-active-label">Filtering by: </label>');
328                if(wpsolr_fq_1) {
329                    var fq1 = wpsolr_fq_1.split(':');
330                    var btn = "<button class='search-button-clear-option' data-qsvar='wpsolr_fq[1]="+fq1[0]+":"+fq1[1]+"' data-facet='"+fq1[0]+"'>"+fq1[1]+"<span>x</span></button>";
331                    $(".solr-active-facets").append(btn);
332
333                }
334                if(wpsolr_fq_2) {
335                    var fq2 = wpsolr_fq_2.split(':');
336                    var btn = "<button class='search-button-clear-option' data-qsvar='wpsolr_fq[2]="+fq2[0]+":"+fq2[1]+"' data-facet='"+fq2[0]+"'>"+fq2[1]+"<span>x</span></button>";
337                    $(".solr-active-facets").append(btn);
338
339                }
340                $(".solr-active-facets").addClass("active");
341            }
342        }
343
344
345        $(".search-button-clear-option").click(function () {
346            var facet = $(this).data('facet');
347            $("."+facet+"-search-button-option").removeClass("search-button-option-active");
348            $("#"+facet+"-search-value").val($(this).val());
349            $(".search-button-clear-option").addClass('search-button-clear-option-qsvar');
350            $(this).removeClass('search-button-clear-option-qsvar');
351
352
353            applyFilters();
354        });
355
356        $('.toggle-facet-button').click(function() {
357            //console.log($(this).data('target'));
358            $("#"+$(this).data('target')).slideToggle(200);
359        });
360    });
361
362    function validate_filter_buttons_visibility() {
363        if($(".search-button-option-active").length) {
364            $("#solr-search-apply-button, #solr-search-clear-button").attr("disabled",fal
364se);
365        } else {
366            $("#solr-search-apply-button, #solr-search-clear-button").attr("disabled",true);
367        }
368    }
369
370    $('.data-display-grid').click(function() {
371        //console.log('data-display-grid');
372        $('.vrc-component.content-list').addClass('grid');
373        $('.vrc-component.content-list').removeClass('list');
374
375    });
376
377    $('.data-display-list').click(function() {
378        //console.log('data-display-list');
379        $('.vrc-component.content-list').addClass('list');
380        $('.vrc-component.content-list').removeClass('grid');
381    });
382
383    $(document).ready(function() {
384        // Optimalisation: Store the references outside the event handler:
385        var $window = $(window);
386        var $pane = $('#pane1');
387
388        function checkWidth() {
389            var windowsize = $window.width();
390            if (windowsize <= 685) {
391               if($('.solr-search-sort').length) {
392                   $('.vrc-component.category-suggestions').hide();
393               }
394            } else {
395                $('.vrc-component.category-suggestions').show();
396            }
397
398            if (windowsize <= 768) {
399                $(".solr-active-facets").addClass("active");
400            }
401        }
402        // Execute on load
403        checkWidth();
404        // Bind event listener
405        $(window).resize(checkWidth);
406    });
407
408    function check_ie11(){
409        var r = false;
410        if (navigator.appName == 'Microsoft Internet Explorer' ||
411            !!(navigator.userAgent.match(/Trident/)
412            || navigator.userAgent.match(/rv:11/))
413            || (typeof $.browser !== "undefined" && $.browser.msie == 1)){
414            r = true;
415        }
416        return r;
417    }
418
419    function getQueryString() {
420        var key = false, res = {}, itm = null;
421        // get the query string without the ?
422        var qs = location.search.substring(1);
423        // check for the key as an argument
424        if (arguments.length > 0 && arguments[0].length > 1)
425            key = arguments[0];
426        // make a regex pattern to grab key/value
427        var pattern = /([^&=]+)=([^&]*)/g;
428        // loop the items in the query string, either
429        // find a match to the argument, or build an object
430        // with key/value pairs
431        while (itm = pattern.exec(qs)) {
432            if (key !== false && decodeURIComponent(itm[1]) === key)
433                return decodeURIComponent(itm[2]);
434            else if (key === false)
435                res[decodeURIComponent(itm[1])] = decodeURIComponent(itm[2]);
436        }
437
438        return key === false ? res : null;
439    }
440
441})(jQuery);

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.