1 2function SuggestController() 3{ 4 5 this.init = function () { 6// console.log("init suggest"); 7 document.addEventListener("DOMContentLoaded", function (event) { 8 let selectFilters = document.querySelectorAll('select.js--facet-filter'); 9 selectFilters.forEach(function (select) { 10 select.addEventListener("change", function (event) { 11 this.form.submit(); 12 }); 13 }); 14 }); 15 let dataSuggest = document.querySelectorAll('form[data-suggest]'); 16 dataSuggest.forEach(function () { 17 // console.log("ici"); 18 // console.log(this); 19 let $form = this, $searchBox = document.querySelector('.tx-solr-suggest'), $formAutoComplete; 20 if (document.querySelector('.tx-solr-autocomplete') !== undefined) { 21 $formAutoComplete = document.querySelector('.tx-solr-autocomplete'); 22 } else { 23 $formAutoComplete = document.querySelector('body'); 24 } 25 // console.log($form); 26 // console.log($formAutoComplete); 27 // console.log('la'); 28 29 30 if (document.querySelector('.tx-solr-suggest-focus')) { 31 document.querySelector('.tx-solr-suggest-focus').focus(); 32 } 33 // when no specific container found, use the form as container 34 if ($searchBox) { 35 $searchBox = $form; 36 $searchBox.style.position = 'relative'; 37 } 38 39 // Prevent submit of empty search form 40 $form.addEventListener('submit', (e) => { 41 if ($searchBox.value === '') { 42 e.preventDefault(); 43 $searchBox.focus(); 44 } 45 }); 46 47 if (document.getElementById('tx-solr-search-form-pi-results')) { 48 const endpoint = document.getElementById('tx-solr-search-form-pi-results').dataset.suggest; 49 const suggestion = []; 50 // fetch grabs endpoint - at this point a promise and generates readablestream 51 fetch(endpoint) 52 .then(blob => blob.json()) 53 .then(data => cities.push(...data)); 54 55 $searchBox.devbridgeAutocomplete({ 56 serviceUrl: document.getElementById('tx-solr-search-form-pi-results').dataset.suggest, 57 dataType: 'jsonp', 58 ajaxSettings: { 59 jsonp: "tx_solr[callback]" 60 }, 61 paramName: 'tx_solr[queryString]', 62 groupBy: 'category', 63 maxHeight: 1000, 64 appendTo: $formAutoComplete, 65 autoSelectFirst: false, 66 triggerSelectOnValidInput: false, 67 width: $searchBox.offsetWidth * 0.66, 68 onSelect: function (suggestion) { 69 // go to link when selecting found result 70 if (suggestion.data.link) { 71 // Open youtube in overlay 72 if (suggestion.data.link.indexOf('https://www.youtube.com') === 0) { 73 openVideoOverlay(suggestion.data.link); 74 } else { 75 location.href = suggestion.data.link; 76 } 77 // else trigger form submit (do search) 78 } else { 79 $form.trigger('submit'); 80 } 81 }, 82 transformResult: function (response) { 83 if (!response.suggestions) { 84 return []; 85 } 86 var firstSuggestion, result = { 87 suggestions: $.map(response.suggestions, function (count, suggestion) { 88 if (!firstSuggestion) { 89 firstSuggestion = suggestion; 90 } 91 return {value: suggestion, data: {category: 'suggestion', count: count}}; 92 }) 93 }; 94 95 $.each(response.documents, function (key, value) { 96 var dataObject = value; 97 98 var defaultGroup = $form.data('suggest-header') ? $form.data('suggest-header') : 'Top results'; 99 dataObject.category = defaultGroup; 100 101 // if a group is set we try to get a label 102 if (dataObject.group) { 103 dataObject.category = $form.data('suggest-header-' + dataObject.group) ? $form.data('suggest-header-' + dataObject.group) : dataObject.group; 104 } 105 106 result.suggestions.push( 107 { 108 value: firstSuggestion, 109 data: dataObject 110 } 111 ); 112 }); 113 114 return result; 115 }, 116 beforeRender: function (container) { 117 // remove first group header 118 container.find('.autocomplete-group:first').remove(); 119 container.addClass('tx-solr-autosuggest'); 120 121 // add active class to container 122 $searchBox.parent().addClass('autocomplete-active').fadeIn(); 123 }, 124 formatResult: function (suggestion, currentValue) {
125 // Do not replace anything if there current value is empty 126 if (!currentValue) { 127 return suggestion.value; 128 } 129 var pattern = '(' + $.Autocomplete.utils.escapeRegExChars(currentValue.trim()) + ')'; 130 // normal suggestion 131 if (suggestion.data.category === 'suggestion') { 132 return suggestion.value 133 .replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>') 134 .replace(/&/g, '&') 135 .replace(/</g, '<') 136 .replace(/>/g, '>') 137 .replace(/"/g, '"') 138 .replace(/<(\/?strong)>/g, '<$1>'); 139 140 // results 141 } else { 142 var title = suggestion.data.title 143 .replace(new RegExp(pattern, 'gi'), '<em>$1<\/em>') 144 .replace(/&/g, '&') 145 .replace(/</g, '<') 146 .replace(/>/g, '>') 147 .replace(/"/g, '"') 148 .replace(/<(\/?em)>/g, '<$1>'); 149 150 return '<div class="' + suggestion.data.type + '">' + 151 (!!suggestion.data.previewImage ? '<figure ' + (!!suggestion.data.hasVideo ? 'class="hasVideo"' : '') + '>
151<img src="' + suggestion.data.previewImage + '" /></figure>' : '') + 152 '<a href="' + suggestion.data.link + '" class="internal-link">' + title + '</a>' + 153 '</div>'; 154 } 155 156 } 157 }).on('blur', function () { 158 $searchBox.parent().removeClass('autocomplete-active'); 159 var $box = $(this); 160 setTimeout(function () { 161 $box.devbridgeAutocomplete('hide'); 162 }, 200); 163 }); 164 } 165 }); 166 }; 167} 168 169document.addEventListener("DOMContentLoaded", function (event) { 170 let solrSuggestController = new SuggestController(); 171 solrSuggestController.init(); 172 // document.querySelectorAll('select.js--facet-filter'); 173 // selectFilters.forEach(function (select) { 174 // select.addEventListener("change", function (event) { 175 // this.form.submit(); 176 // }); 177 // }); 178}); 179// jQuery(document).ready(function() { 180// /** solr search autocomplete **/ 181// var solrSuggestController = new SuggestController(); 182// solrSuggestController.init(); 183// 184// jQuery("body").on("tx_solr_updated", function() { 185// solrSuggestController.init(); 186// }); 187// }); 188 189// 190// function SuggestController() { 191// 192// this.init = function () { 193// 194// jQuery('form[data-suggest]').each(function () { 195// let $form = this, $searchBox = $form.find('.tx-solr-suggest'), $formAutoComplete; 196// 197// if ($form.find('.tx-solr-autocomplete').length > 0){ 198// $formAutoComplete = $form.find('.tx-solr-autocomplete'); 199// } else { 200// $formAutoComplete = $('body'); 201// } 202// 203// $form.find('.tx-solr-suggest-focus').focus(); 204// 205// 206// if ($searchBox.length === 0) { 207// $searchBox = $form; 208// } 209// $searchBox.css('position', 'relative'); 210// 211// 212// $form.addEventListener('submit', (e) => { 213// if ($form.find('.tx-solr-suggest').value === '') { 214// e.preventDefault(); 215// $form.find('.tx-solr-suggest').focus(); 216// } 217// }); 218// 219// $form.find('.tx-solr-suggest').devbridgeAutocomplete({ 220// serviceUrl: $form.data('suggest'), 221// dataType: 'jsonp', 222// ajaxSettings: { 223// jsonp: "tx_solr[callback]" 224// }, 225// paramName: 'tx_solr[queryString]', 226// groupBy: 'category', 227// maxHeight: 1000, 228// appendTo: $formAutoComplete, 229// autoSelectFirst: false, 230// triggerSelectOnValidInput: false, 231// width: $searchBox.outerWidth() * 0.66, 232// onSelect: function (suggestion) { 233// 234// if (suggestion.data.link) { 235// 236// if (suggestion.data.link.indexOf('www.youtube.com') === 0) { 237// openVideoOverlay(suggestion.data.link); 238// } else { 239// location.href = suggestion.data.link; 240// } 241// 242// } else { 243// $form.trigger('submit'); 244// } 245// }, 246// transformResult: function (response) { 247// if (!response.suggestions) return {suggestions: []}; 248// let firstSuggestion, result = { 249// suggestions: $.map(response.suggestions, function (count, suggestion) { 250// if (!firstSuggestion) firstSuggestion = suggestion; 251// return {value: suggestion, data: {category: 'suggestion', count: count}}; 252// }) 253// }; 254// 255// $.each(response.documents, function (key, value) { 256// let dataObject = value; 257// 258// let defaultGroup = $form.data('suggest-header') ? $form.data('suggest-header') : 'Top results'; 259// dataObject.category = defaultGroup; 260// 261// 262// if(dataObject.group) { 263// dataObject.category = $form.data('suggest-header-' + dataObject.group) ? $form.data('suggest-header-' + dataObject.group) : dataObject.group; 264// } 265// 266// result.suggestions.push( 267// { 268// value: firstSuggestion, 269// data: dataObject 270// } 271// ); 272// }); 273// 274// return result; 275// }, 276// beforeRender: function (container) { 277// 278// container.find('.autocomplete-group:first').remove(); 279// container.classList.add("tx-solr-autosuggest"); 280// 281// 282// $searchBox.parent().classList.add("autocomplete-active").fadeIn(); 283// }, 284// formatResult: function (suggestion, currentValue) { 285// 286// if (!currentValue) { 287// return suggestion.value; 288// } 289// let pattern = '(' + $.Autocomplete.utils.escapeRegExChars(currentValue.trim()) + ')'; 290// 291// if (suggestion.data.category === 'suggestion') { 292// return suggestion.value 293// .replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>') 294// .replace(/&/g, '&') 295// .replace(/</g, '<') 296// .replace(/>/g, '>') 297// .replace(/"/g, '"') 298// .replace(/<(\/?strong)>/g, '<$1>'); 299// 300// 301// } else { 302// let title = suggestion.data.title 303// .replace(new RegExp(pattern, 'gi'), '<em>$1<\/em>') 304// .replace(/&/g, '&') 305// .replace(/</g, '<') 306// .replace(/>/g, '>') 307// .replace(/"/g, '"') 308// .replace(/<(\/?em)>/g, '<$1>'); 309// 310// return '<div class="' + suggestion.data.type + '">' + 311// (!!suggestion.data.previewImage ? '<figure ' + (!!suggestion.data.hasVideo ? 'class="hasVideo"' : '') + '>
311<img src="' + suggestion.data.previewImage + '" /></figure>' : '') + 312// '<a href="' + suggestion.data.link + '" class="internal-link">' + title + '</a>' + 313// '</div>'; 314// } 315// 316// } 317// }).addEventListener('blur', (e) => { 318// $searchBox.parent().classList.remove("autocomplete-active"); 319// let $box = this; 320// setTimeout(function () { 321// $box.devbridgeAutocomplete('hide'); 322// }, 200); 323// }); 324// }); 325// }; 326// } 327// 328// jQuery(document).ready(function() { 329// 330// let solrSuggestController = new SuggestController(); 331// solrSuggestController.init(); 332// 333// jQuery("body").on("tx_solr_updated", function() { 334// solrSuggestController.init(); 335// }); 336// });
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.