1var filterGET = '/engine/mods/filter/ajax.php', 2 filterForm = '#xform', // ID ÑоÑÐ¼Ñ 3 filterCont = '#content', // ID блока конÑенÑа 4 filterStat = '#filterStat', // ID блока ÑÑаÑиÑÑика 5 filterSbar = '#speedbar', // ID блока ÑпидбаÑа 6 filterNavi = '#navigation', // ID блока навигаÑиии 7 filterNext = 'next'; // Class кнопки Next 8 9$(document).on('submit', '#q_search', function(){ 10 var q = $(this).find('#story').val(); 11 location.href = '/search/query=' + q + '/'; 12 return false; 13}) 14$(document).on('click', '.extsearch', function(){ 15 $('#hidefields').slideToggle('visible'); 16 return false; 17}) 18$(function(){ 19 if(location.pathname.indexOf('/search/')+1) { 20 setFilterParam(filterForm); 21 } 22 $(document).on('click', filterNavi + ' a', function(e){ 23 if(location.pathname.indexOf('/search/')+1){ 24 var url = $(this).attr('href'), p, n; 25 if(url.indexOf('/page/')+1) p = url.match(/\/page\/(\d+)/)[1]; 26 if($(filterNavi).hasClass(filterNext)) n = true; 27 e.preventDefault(); 28 getFilter(p, n); 29 } 30 }).on('click', filterForm + ' .go', function(e){ 31 getFilter(); 32 e.preventDefault(); 33 }).on('click', filterForm + ' .reset', function(e){ 34 $(filterForm) 35 .add('[type=text], [type=number], select, textarea').val('') 36 .add('[type=checkbox], [type=radio]').prop('checked', false); 37 getFilter(); 38 e.preventDefault(); 39 }).on('click', filterForm + ' .clear', function(e){ 40 $(this).siblings('[type=text], [type=number], select, textarea').val(''); 41 getFilter(); 42 e.preventDefault(); 43 }).on('keyup', function(e){ 44 if(e.key=='Enter') getFilter(); 45 }) 46 $(filterForm).change(function(){ 47 getFilter(); 48 }) 49 $(filterForm).submit(function(e){ 50 e.preventDefault(); 51 getFilter(); 52 }) 53 function getFilter(page, n){ 54 let d = decodeURIComponent($(filterForm).serialize());//, q = $(filterForm).find('[name=query]').val(); 55 if(page) d = d +'&cstart='+page; 56 var g = d.split('&').some(function(pair){ 57 return pair.split('=')[1].length > 0; 58 }) 59 ShowLoading(''); 60 $.ajax({ 61 url:filterGET, data:d, success:function(data){ 62 try { 63 data = $.parseJSON(data); 64 document.title = data.title; 65 window.history.replaceState(0, 0, data.url); 66 if(page && n){ 67 $(filterCont).find(filterNavi).remove(); 68 if($(data.sep).text().length){ 69 $(filterCont).append(data.sep + data.stat + data.content); 70 if($(filterSbar).length) $(filterSbar).replaceWith(data.speedbar); 71 else $(data.speedbar).insertBefore(filterCont); 72 } else $(filterCont).append(data.sep + data.speedbar + data.stat + data.content); 73 $('html, body').animate({scrollTop: $(data.anc).offset().top-25}, 600); 74 } else { 75 if($(filterSbar).length) $(filterSbar).replaceWith(data.speedbar); 76 else $(data.speedbar).insertBefore(filterCont); 77 $(filterCont).html(data.stat + data.content); 78 } 79 } catch (error) { 80 $(filterCont).html(data); 81 } 82 HideLoading(); 83 /*if(q) $(filterCont).html(function(_, html){ 84 return html.replace(new RegExp('(' + q + ')', 'g'), '<span style="background-color:yellow;">$1</span>'); 85 })*/ 86 } 87 }) 88 } 89}) 90function setFilterParam(f){ 91 let filterParam = decodeURIComponent(location.href).split('/search/'); 92 if(!filterParam[1]) return; 93 if(filterParam[1].slice(-1) === '/') filterParam[1] = filterParam[1].slice(0, -1); 94 filterParam = filterParam[1].split('/'); 95 let arrayParam = []; 96 for (let i = 0; i < filterParam.length; i++){ 97 arrayParam[i] = filterParam[i].split('='); 98 if(arrayParam[i][1]){ 99 arrayParam[i][0] = arrayParam[i][0].replace(/\+/g, ' '); 100 arrayParam[i][1] = arrayParam[i][1].replace(/\+/g, ' '); 101 } 102 } 103 $(f).add('[type=text], [type=number], [type=range], textarea').each(function(){ 104 let nameElem = $(this).attr('name'); 105 if(nameElem !== undefined && nameElem.length > 0){ 106 for (let i = 0; i < arrayParam.length; i++){ 107 if(nameElem === arrayParam[i][0]) $(this).val(arrayParam[i][1]); 108 } 109 } 110 }) 111 $(f).add('select').each(function(index){ 112 let nameElem = $(this).attr('name').replace('\[\]', ''); 113 if(nameElem !== undefined && nameElem.length > 0){ 114 for (let i = 0; i < arrayParam.length; i++){ 115 if(nameElem === arrayParam[i][0]){ 116 let selectData = arrayParam[i][1].split(','); 117 $(this).find('option').each(function(s, n){ 118 if($.inArray(n.value, selectData) >= 0) $(this).attr('selected', true); 119 }) 120 } 121 } 122 } 123 }) 124 $(f).add('[type=radio], [type=checkbox]').each(function(){ 125 let nameElem = $(this).attr('name').replace('\[\]', ''); 126 if(nameElem !== undefined && nameElem.length > 0){ 127 for (let i = 0; i < arrayParam.length; i++){ 128 if(nameElem === arrayParam[i][0]){ 129 let selectData = arrayParam[i][1].split(', '); 130 $(this).each(function(s, n){ 131 if($.inArray(n.value, selectData) >= 0) $(this).attr('checked', 'checked'); 132 }) 133 } 134 } 135 } 136 }) 137}
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.