PageSourceSearch

https://www.afssupplies.co.uk/wp-content/plugins/premmerce-search/assets/frontend/js/autocomplete.js?ver=7.0.3

js afssupplies.co.uk collected 2026-10-05 19:05:49 UTC 3,884 bytes, 120 lines download raw bytes

1jQuery(document).ready(function ($) {
2
3    // Config object is required
4    if (typeof premmerceSearch === 'undefined') {
5        return;
6    }
7
8    var searchSelector = '[id^="woocommerce-product-search-field-"]';
9
10    if (typeof premmerceSearch.searchField !== 'undefined' && premmerceSearch.searchField) {
11        searchSelector += ',' + premmerceSearch.searchField;
12    }
13
14    var search = $(searchSelector);
15
16    var autocompleteItemTemplate = $('[data-autocomplete-template="item"]').clone();
17    var autocompleteAllResultTemplate = $('[data-autocomplete-template="allResult"]').clone();
18
19
20    if (premmerceSearch.forceProductSearch) {
21
22        search.each(function () {
23            var searchForm = $(this).parent('form');
24
25            $(document).on('submit', searchForm, function () {
26                var el = $('<input/>',
27                    {'type': 'hidden', 'name': 'post_type', 'value': 'product'});
28
29                searchForm.append(el);
30            });
31        });
32    }
33
34
35    search.each(function () {
36        var search = $(this);
37
38        search.autocomplete({
39            source: function (name, response) {
40                showSpinner(search);
41
42                $.ajax( {
43                    url: premmerceSearch.url,
44                    headers: {"X-WP-Nonce": premmerceSearch.nonce},
45                    dataType: 'json',
46                    data: name,
47                    success: function (data) {
48                        hideSpinner();
49                        response(data);
50                    }
51                });
52            },
53            messages: {
54                noResults: '',
55                results: function () {}
56            },
57            delay: 500,
58            minLength: parseInt(premmerceSearch.minLength),
59            open: function () {
60                let form = $(this).closest('form');
61
62                // Show all result handler
63                $(autocompleteAllResultTemplate, '[data-autocomplete-show-all-result]').on('click', function (event) {
64                    event.preventDefault();
65                    form.submit();
66                });
67
68                $('.ui-autocomplete').css('width', search.css('width'));
69                $('.ui-autocomplete').append(autocompleteAllResultTemplate);
70
71            }
72        });
73
74        search.autocomplete('instance')._renderItem = function (ul, item) {
75
76            ul.addClass('autocomplete autocomplete__frame');
77
78            let li = autocompleteItemTemplate.clone();
79
80            li.find('[data-autocomplete-product-name]').html(item.label);
81            li.find('[data-autocomplete-product-price]').html(item.price);
82            li.find('[data-autocomplete-product-link]').attr('href', item.link);
83            li.find('[data-autocomplete-product-add-to-cart]').attr('href', `?add-to-cart=${item.id}`);
84
85            if( ! item.isPurchasable ) {
86                li.find('[data-autocomplete-product-add-to-cart]').css({'display':'none'});
87            }
88
89            if (item.image) {
90                li.find('[data-autocomplete-product-img]').attr({'src': item.image, 'alt': item.label});
91                li.find('[data-autocomplete-product-photo]').show();
92            }
93
94            return li.appendTo(ul);
95        };
96    });
97
98    function showSpinner(field) {
99
100        var fieldPosition = field.offset();
101        var verticalPadding = (field.innerHeight() - field.height()) / 2;
102        var size = field.height();
103
104        var wrapper = $('<div>', {
105            class: 'premmerce-search-spinner',
106            css: {
107                top: fieldPosition.top + verticalPadding,
108                left: fieldPosition.left + field.outerWidth() - size - verticalPadding,
109                width: size,
110                height: size
111            }
112        });
113
114        $('body').prepend(wrapper);
115    }
116
117    function hideSpinner() {
118        $('.premmerce-search-spinner').remove();
119    }
120});

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.