1/** 2 * Module CsPerfectSearch - This module provides form for avance seacrh 3 * 4 * @author Crystals Services SARL <[email protected]> 5 * @copyright 2015-2016 Crystals Services SARL 6 * @license from ccrystals services SARL 7 */ 8 9; 10 11function perfectSearchBindGrid() 12{ 13 var view = $.totalStorage('perfectsearch-display'); 14 15 if (!view && (typeof displayList != 'undefined') && displayList) 16 view = 'list'; 17 18 if (view && view != 'grid') 19 perfectSearchDisplay(view); 20 else 21 $('.perfectsearch-display').find('li#display-grid').addClass('selected'); 22 23 $(document).on('click', '#display-grid', function (e) { 24 e.preventDefault(); 25 perfectSearchDisplay('grid'); 26 }); 27 28 $(document).on('click', '#display-list', function (e) { 29 filter_price_from 30 e.preventDefault(); 31 perfectSearchDisplay('list'); 32 }); 33} 34 35function perfectSearchDisplay(view) 36{ 37 if (view == 'list') 38 { 39 $('.grid-elt').addClass('hidden'); 40 $('.list-elt').removeClass('hidden'); 41 $('#display-list').addClass('selected'); 42 $('#display-grid').removeClass('selected'); 43 $.totalStorage('perfectsearch-display', 'list'); 44 } 45 else 46 { 47 $('.list-elt').addClass('hidden'); 48 $('.grid-elt').removeClass('hidden'); 49 $('#display-grid').addClass('selected'); 50 $('#display-list').removeClass('selected'); 51 $.totalStorage('perfectsearch-display', 'grid'); 52 } 53} 54 55function initRangeSlider(selector, min, max) { 56 57 if (isNaN(min) || isNaN(max)) 58 return; 59 $(selector).noUiSlider({ 60 start: [min, max], 61 connect: true, 62 range: { 63 'min': min, 64 'max': max 65 } 66 }); 67 $(selector).on({ 68 slide: function () { 69 value = $(selector).val(); 70 $('#priceSlider-values .priceMin').text(value[0]); 71 $('#priceSlider-values .priceMax').text(value[1]); 72 $('#filter_price_from').val(value[0]); 73 $('#filter_price_to').val(value[1]); 74 }, 75 set: function () { 76 updatePerfectSearchFilters(); 77 }, 78 change: function () { 79 sendPerfectSearchFilters('price'); 80 } 81 }); 82} 83 84function rebuildSlider(selector, min, max) { 85 updateSlider = $(selector); 86 updateSlider.empty().attr('class', 'priceSlider').attr('id', 'test'); 87 88 //initRangeSlider(selector, min, max); 89} 90 91function updatePerfectSearchFilters() { 92 filterPrice = $('#priceSlider-values').html(); 93 filterCateg = $('ul.filterblock-item-list li.filterblock-item-listitem[data-filter-type = categ].selected').find('.filterblock-item-listname').html(); 94 filterManuf = $('ul.filterblock-item-list li.filterblock-item-listitem[data-filter-type = manuf].selected').find('.filterblock-item-listname').html(); 95 filterSuppl = $('ul.filterblock-item-list li.filterblock-item-listitem[data-filter-type = suppl].selected').find('.filterblock-item-listname').html(); 96 filterCatid = $('ul.filterblock-item-list li.filterblock-item-listitem[data-filter-type = categ].selected').attr('data-catid'); 97 98 $('#filter_categ').val(filterCatid); 99 $('#filter_manuf').val(filterManuf); 100 $('#filter_suppl').val(filterSuppl); 101 102 filterManuf = (filterManuf == '' || filterManuf == undefined) ? noFilterSelectedText : filterManuf; 103 filterSuppl = (filterSuppl == '' || filterSuppl == undefined) ? noFilterSelectedText : filterSuppl; 104 filterCateg = (filterCateg == '' || filterCateg == undefined) ? noFilterSelectedText : filterCateg; 105 filterCatid = (filterCatid == '' || filterCatid == undefined) ? '' : filterCatid; 106 107 $('#activedFilters-values .filter-by-price').find('.filter-value').html(filterPrice); 108 $('#activedFilters-values .filter-by-manuf').find('.filter-value').html(filterManuf); 109 $('#activedFilters-values .filter-by-suppl').find('.filter-value').html(filterSuppl); 110 $('#activedFilters-values .filter-by-categ').find('.filter-value').html(filterCateg); 111 112 initFilterBlockAction(false); 113} 114 115var isInitiated = false; 116function initFilterBlockAction(testInit) { 117 if (testInit) { 118 return; 119 } 120 121 $('ul.filterblock-item-list').on('click', 'li.filterblock-item-listitem', function () { 122 if ($(this).hasClass('selected')) 123 return; 124 filterVal = $(this).attr('data-filter-value'); 125 filterTyp = $(this).attr('data-filter-type'); 126 $('ul.filterblock-item-list li.filterblock-item-listitem[data-filter-type = ' + filterTyp + ']').hide(); 127 $(this).append('<i class="filterblock-item-listremove pull-right icon icon-remove"></i>'); 128 $(this).show().addClass('selected'); 129 updatePerfectSearchFilters(); 130 sendPerfectSearchFilters(); 131 }) 132 133 $('ul.filterblock-item-list li.filterblock-item-listitem').on('click', '.filterblock-item-listremove', function (e) { 134 if (!$(this).parent().hasClass('selected')) 135 return; 136 filterVal = $(this).parent().attr('data-filter-value'); 137 filterTyp = $(this).parent().attr('data-filter-type'); 138 $(this).parent().hide().removeClass('selected'); 139 $('ul.filterblock-item-list li.filterblock-item-listitem[data-filter-type = ' + filterTyp + ']').show(); 140 $(this).remove(); 141 e.stopPropagation(); 142 updatePerfectSearchFilters('removeFilter'); 143 sendPerfectSearchFilters(); 144 }) 145 146} 147 148function sendPerfectSearchFilters(filterType) { 149 filterCatid = $('#filter_categ').val(); 150 filterManuf = encodeURIComponent($('#filter_manuf').val()); 151 filterSuppl = encodeURIComponent($('#filter_suppl').val()); 152 filterPriceF = $('#filter_price_from').val(); 153 filterPriceT = $('#filter_price_to').val(); 154 155 if (filterType == 'removeFilter') { 156 filterPriceF = 0; 157 filterPriceT = parseFloat(999999999999999999); 158 } 159 160 if (filterType == 'refreshFilter') { 161 filterPriceF = 0; 162 filterPriceT = parseFloat(999999999999999999); 163 filterCatid = ''; 164 filterManuf = ''; 165 filterSuppl = ''; 166 } 167 168 // Vérifier si tous les filtres sont vides/non sélectionnés 169 var hasNoFilters = (!filterCatid || filterCatid == '' || filterCatid == 'undefined' || filterCatid <= 0) && 170 (!filterManuf || filterManuf == '' || filterManuf == 'undefined') && 171 (!filterSuppl || filterSuppl == '' || filterSuppl == 'undefined'); 172 173 // Si aucun filtre n'est sélectionné, réinitialiser les prix aussi 174 if (hasNoFilters && filterType != 'price') { 175 filterPriceF = parseFloat($('#first_filter_price_from').val()); 176 filterPriceT = parseFloat($('#first_filter_price_to').val()); 177 } 178 179 $('#searchresult-filter').append('<div class="perfectSearch-loader"></div>'); 180 181 splitUrl = perfectsearchUrl.split('?'); 182 splitUrl[0] += '?' + $('#csperfectsearch_quicksearchbox').seri
182alize(); 183 184 // N'ajouter les paramètres que s'ils ont une valeur 185 if (filterCatid != undefined && filterCatid != 'undefined' && filterCatid != '' && filterCatid > 0) 186 splitUrl[0] += '&filter_catid=' + filterCatid; 187 if (filterManuf != undefined && filterManuf != 'undefined' && filterManuf != '' && filterManuf != 'null') 188 splitUrl[0] += '&filter_manuf=' + filterManuf; 189 if (filterSuppl != undefined && filterSuppl != 'undefined' && filterSuppl != '' && filterSuppl != 'null') 190 splitUrl[0] += '&filter_suppl=' + filterSuppl; 191 192 splitUrl[0] += '&filter_price_from=' + filterPriceF + '&filter_price_to=' + filterPriceT; 193 194 $('#searchresult-filter').find('.perfectSearch-loader').html('<div class="perfectSearch-loadertext">' + itemsBlockUpdateMsg + '</div>'); 195 196 $('#searchresult-list').load(splitUrl.join('&') + ' #searchresult-listcontent', function () { 197 perfectSearchBindGrid(); 198 199 $('#searchresult-filter').find('.perfectSearch-loader').html('<div class="perfectSearch-loadertext">' + filterBlockUpdateMsg + '</div>'); 200 201 $.ajax({ 202 url: splitUrl.join('&'), 203 data: {ajaxFilter: 1}, 204 dataType: 'JSON', 205 success: function (rep) { 206 if (rep.filters.price.min != undefined && rep.filters.price.max != undefined) 207 { 208 $('#csperfectsearch-priceSlider').noUiSlider({ 209 start: [rep.filters.price.min, rep.filters.price.max], 210 connect: true, 211 range: { 212 'min': parseFloat(rep.filters.price.min), 213 'max': parseFloat(rep.filters.price.max) 214 } 215 }, true); 216 217 value = $('#csperfectsearch-priceSlider').val(); 218 219 if (value[0] != undefined) { 220 $('#priceSlider-values .priceMin').text(value[0]); 221 $('#filter_price_from').val(value[0]); 222 } 223 if (value[1] != undefined) { 224 $('#priceSlider-values .priceMax').text(value[1]); 225 $('#filter_price_to').val(value[1]); 226 } 227 } 228 229 if (rep.filtered.catid <= 0 && rep.filters.catid !== undefined) { 230 $('#filterblock-by-categ').empty(); 231 $.each(rep.filters.categ, function (name, count) { 232 html = '<li class="filterblock-item-listitem clearfix" data-filter-type="categ" data-filter-value="' + name + '" data-filter-selected="false" data-catid="'; 233 if (rep.filters.catid[name]) 234 html += rep.filters.catid[name]; 235 html += '" >\ 236 <span class="pull-left filterblock-item-listname">' + name + '</span>\ 237 <span class="pull-right filterblock-item-listcount">' + count + '</span>\ 238 </li>'; 239 $('#filterblock-by-categ').append(html); 240 }); 241 } 242 243 if (rep.filtered.manuf == '' && rep.filters.manuf !== undefined) { 244 $('#filterblock-by-manuf').empty(); 245 $.each(rep.filters.manuf, function (name, count) { 246 html = '<li class="filterblock-item-listitem clearfix" data-filter-type="manuf" data-filter-value="' + name + '" data-filter-selected="false" >\ 247 <span class="pull-left filterblock-item-listname">' + name + '</span>\ 248 <span class="pull-right filterblock-item-listcount">' + count + '</span>\ 249 </li>'; 250 $('#filterblock-by-manuf').append(html); 251 }); 252 } 253 254 if (rep.filtered.suppl == '' && rep.filters.suppl !== undefined) { 255 $('#filterblock-by-suppl').empty(); 256 $.each(rep.filters.suppl, function (name, count) { 257 html = '<li class="filterblock-item-listitem clearfix" data-filter-type="suppl" data-filter-value="' + name + '" data-filter-selected="false" >\ 258 <span class="pull-left filterblock-item-listname">' + name + '</span>\ 259 <span class="pull-right filterblock-item-listcount">' + count + '</span>\ 260 </li>'; 261 $('#filterblock-by-suppl').append(html); 262 }); 263 } 264 updatePerfectSearchFilters(); 265 } 266 }).done(function () { 267 loadInfiteScroll(); 268 updatePerfectSearchFilters(); 269 $('#searchresult-filter').find('.perfectSearch-loader').remove(); 270 }) 271 272 }); 273} 274 275var isScrollLoading = false;
276function loadPerfectSearchByScroll(page) { 277 278 279 totalNumber = parseInt($('#csperfectsearch_nbTotal').text()); 280 numberFrom = parseInt($('#csperfectsearch_nbFrom').text()); 281 numberTo = parseInt($('#csperfectsearch_nbTo').text()); 282 hasNextElt = numberTo < totalNumber; 283 284 285 if (hasNextElt && !isScrollLoading) 286 { 287 isScrollLoading = true; 288 filterCatid = $('#filter_categ').val(); 289 filterManuf = encodeURIComponent($('#filter_manuf').val()); 290 filterSuppl = encodeURIComponent($('#filter_suppl').val()); 291 filterPriceF = $('#filter_price_from').val(); 292 filterPriceT = $('#filter_price_to').val(); 293 294 $('#searchresult-listcontent #perfectsearch-product_list').append('<div class="perfectSearch-scrollloader"></div>'); 295 296 splitUrl = perfectsearchUrl.split('?'); 297 298 splitUrl[0] += '?' + $('#csperfectsearch_quicksearchbox').serialize(); 299 splitUrl[0] += '&filter_price_from=' + filterPriceF + '&filter_price_to=' + filterPriceT; 300 if (filterCatid != undefined && filterCatid != 'undefined' && filterCatid > 0) 301 splitUrl[0] += '&filter_catid=' + filterCatid; 302 if (filterManuf != undefined && filterManuf != 'undefined' && filterManuf != '') 303 splitUrl[0] += '&filter_manuf=' + filterManuf; 304 if (filterSuppl != undefined && filterSuppl != 'undefined' && filterSuppl != '') 305 splitUrl[0] += '&filter_suppl=' + filterSuppl; 306 307 url = splitUrl.join('&') + '&page=' + page; 308 309 $('#perfectSearchScroll-tmp').load(url + ' #searchresult-listcontent', function () { 310 html = $('#perfectSearchScroll-tmp #perfectsearch-product_list').html(); 311 $('#searchresult-listcontent #perfectsearch-product_list').find('.perfectSearch-scrollloader').remove(); 312 $('#searchresult-listcontent #perfectsearch-product_list').append(html); 313 $('#perfectSearchScroll-tmp').empty(); 314 perfectSearchBindGrid(); 315 $('#csperfectsearch_nbFrom').text(numberFrom + nbItemPerPage); 316 $('#csperfectsearch_nbTo').text((numberTo + nbItemPerPage) > totalNumber ? totalNumber : numberTo + nbItemPerPage); 317 isScrollLoading = false; 318 }); 319 } 320} 321 322function loadInfiteScroll() { 323 currentPage = 1; 324 $('ul#perfectsearch-product_list.perfectsearch-product_list').scroll(function (data) { 325 // We check if we're at the bottom of the scroll container 326 if ($(this)[0].scrollHeight - $(this).scrollTop() <= $(this).outerHeight() + 25) { 327 // If we're at the bottom, show the overlay and retrieve the next page 328 329 currentPage++; 330 loadPerfectSearchByScroll(currentPage); 331 } 332 }); 333} 334 335; 336 337$(function () { 338 339 var xhr = null; 340 var quicksearch_onload = false; 341 perfectSearchBindGrid(); 342 updatePerfectSearchFilters(); 343 344 $('#csperfectsearch_quicksearch #quicksearch_query') 345 .on('input', function () { 346 347 var searchText = $(this).val().trim(); 348 349 if (searchText.length > 2) { 350 351 var splitUrl = perfectsearchUrl.split('?'); 352 splitUrl[0] += '?' + $('#csperfectsearch_quicksearchbox').serialize(); 353 url = splitUrl.join('&'); 354 355 $("#csperfectsearch_quicksearchresult").show(); 356 $('#csperfectsearch_quicksearchresult') 357 .html('<div class="perfectSearch-loader"></div>'); 358 359 if (xhr) { 360 xhr.abort(); 361 } 362 363 xhr = $.ajax({ 364 url: url, 365 success: function (data) { 366 367 $("#csperfectsearch_quicksearchresult") 368 .html($(data).find("#csperfectsearch_searchresult_block")); 369 370 $('#searchresult-filter .filterblock').filterblock(); 371 perfectSearchBindGrid(); 372 updatePerfectSearchFilters(); 373 loadInfiteScroll(); 374 375 var priceSliderMin = parseFloat($('#priceSlider-values .priceMin').text()); 376 var priceSliderMax = parseFloat($('#priceSlider-values .priceMax').text()); 377 378 initRangeSlider('#csperfectsearch-priceSlider', priceSliderMin, priceSliderMax); 379 380 initFilterBlockAction(isInitiated); 381 isInitiated = true; 382 }, 383 error: function (xhr, status) { 384 if (status !== 'abort') { 385 $('#csperfectsearch_quicksearchresult .perfectSearch-loader').remove(); 386 } 387 } 388 }); 389 } 390 }) 391 392 $('#searchresult-filter .filterblock').filterblock(); 393 394 loadInfiteScroll(); 395}) 396 397$(function () { 398 $("#csperfectsearch_quicksearchresult").on('click', '#csperfectsearch_searchresult_close', function () { 399 $("#csperfectsearch_quicksearchresult").hide(); 400 $("#quicksearch_query").val(''); 401 }); 402 403 $("#csperfectsearch_quicksearchresult").on('click', '#csperfectsearch_searchresult_refresh', function () { 404 $('#csperfectsearch_quicksearch #quicksearch_query').keyup(); 405 sendPerfectSearchFilters('refreshFilter'); 406 }); 407}) 408 409$(document).ready(function() { 410 $(document).on('click', '#reset-price-slider', function(e) { 411 e.preventDefault(); 412 413 // Récupérer les valeurs initiales 414 var initialMin = parseFloat($('#first_filter_price_from').val()); 415 var initialMax = parseFloat($('#first_filter_price_to').val()); 416 417 $('#filter_price_from').val(initialMin); 418 $('#filter_price_to').val(initialMax); 419 420 sendPerfectSearchFilters('price'); 421 }); 422 423 $(document).on('click', '#btn_quicksearch_query', function(e) { 424 e.preventDefault(); 425 }); 426 427 $(document).on('submit', '#csperfectsearch_quicksearchbox', function (e) { 428 e.preventDefault(); 429 }); 430});
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.