1//Header search with AJAX script 2(function($) { 3 //Global variables 4 var minCharactersPredictiveSearch = 4; //Minimum number of characters in header search to activate lazy search 5 6 //Document ready - search setup 7 $(function() { 8 prepareHeaderSearch(); 9 }); 10 11 //Search toggle condition on button click 12 $(".header-search-toggle").on("click", function(e) { 13 toggleHeaderSearch(); 14 }); 15 16 //Open and close header search panel 17 function toggleHeaderSearch() { 18 $("#header-search").toggleClass("active"); 19 $('#header-search-results').removeActive(); 20 21 if ($("body").hasClass("search-open") == false) { 22 //OPEN top search 23 $("#header-search-input").focus(); //Force focus to the search 24 $("body").addClass("search-open"); 25 26 //Ensure keyboard focus on search features 27 $('#header-search input, #header-search button').attr('tabindex','0'); 28 } 29 else { 30 //CLOSE top search 31 $("body").removeClass("search-open"); 32 33 //Do not want a closed header search to be keyboard focusable 34 $('#header-search input, #header-search button').attr('tabindex','-1'); 35 } 36 } 37 38 //Attach event listener for input on header search so AJAX can fire 39 function prepareHeaderSearch() { 40 $('#header-search-input').one('input', headerSearchTrigger); 41 } 42 43 //Triggers an AJAX search request or prepares listener again 44 var headerSearchTrigger = function() { 45 //If at least x characters entered in search bar, launch AJAX search; if not, reattach event listener 46 if ($('#header-search-input').val().length >= minCharactersPredictiveSearch) 47 { 48 requestSearchResponse(); 49 } 50 else 51 { 52 prepareHeaderSearch(); 53 $('#header-search-results').removeActive(); 54 } 55 } 56 57 //Fires AJAX request that is handled in PHP, result returned via JSON 58 function requestSearchResponse() { 59 jQuery.ajax({ 60 type: 'get', 61 url: $('#header-search-input').attr('data-ajax-action'), //Points to file handling AJAX request 62 data: { 63 action: 'header_search_change', //PHP hears this action and responds 64 keyword: $('#header-search-input').val() //Value sent with GET so PHP can use it 65 }, 66 success: function(response) { 67 $('#header-search-results').html(response); 68 $('#header-search-results').addActive(); 69 70 //If the term searched no longer matches what's in the search input, re-run search 71 if ($('#header-search .search-results-container').attr('data-keyword-searched') != $('#header-search-input').val()) 72 { 73 requestSearchResponse(); 74 } 75 else 76 { 77 //Allow header search to happen again 78 prepareHeaderSearch(); 79 } 80 } 81 }); 82 } 83})(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.