1var grid = document.querySelector('.grid'); 2if (grid) { 3 4 var filterCount = document.querySelector('.filter-count'); 5 var quicksearch = document.querySelector('.quicksearch'); 6 var sorting = document.querySelectorAll('.sorting'); 7 var qsRegex; 8 9 document.addEventListener('change', function (e) { 10 if (!e.target.closest('.sorting')) return; 11 var val = e.target.value; 12 console.log('el: ', e.target.value); 13 14 var ww = val === "orig" ? 'original-order' : 'price'; 15 var qq = val === "1" ? true : false; 16 iso.arrange({ 17 sortBy : ww, 18 sortAscending: qq 19 }) 20 }); 21 sorting.onchange = function (el) { 22 console.log('el: ', this.value); 23 24 var qq = this.value === "1" ? true : false; 25 var ww = this.value === "orig" ? 'original-order' : 'price'; 26 iso.arrange({ 27 sortBy : ww, 28 sortAscending: qq 29 }) 30 }; 31 32 quicksearch.onkeyup = debounce(function () { 33 qsRegex = new RegExp(quicksearch.value, 'gi'); 34 iso.arrange(); 35 // updateFilterCount(); 36 }, 200); 37 38 function debounce(fn, threshold) { 39 var timeout; 40 return function debounced() { 41 if (timeout) { 42 clearTimeout(timeout); 43 } 44 45 function delayed() { 46 fn(); 47 timeout = null; 48 } 49 50 timeout = setTimeout(delayed, threshold || 100); 51 } 52 } 53 54 function updateFilterCount() { 55 filterCount.innerText = 'Ðайдено кваÑÑиÑ: ' + iso.filteredItems.length; 56 } 57 58 var iso = new Isotope('.grid', { 59 hiddenStyle : { 60 opacity : 0, 61 transform: 'scale(.1)' 62 }, 63 visibleStyle : { 64 opacity : 1, 65 transform: 'scale(1)' 66 }, 67 stagger : 0, 68 transitionDuration: 300, 69 itemSelector : '.element-item', 70 layoutMode1 : 'masonry', 71 layoutMode : 'fitRows', 72 filter : function (el) { 73 74 var qq = el.querySelector('.card-header-title').innerText; 75 return qsRegex ? qq.match(qsRegex) : true; 76 }, 77 getSortData : { 78 // price: '.filter-price parseInt' 79 price: function (itemElem) { // function 80 var price = itemElem.querySelector('.filter-price').value; 81 return parseInt(price); 82 } 83 } 84 }); 85 86 iso.on('arrangeComplete', updateFilterCount); 87 88 var filters = []; 89 90 // filter functions 91 var filterFns = { 92 // show if number is greater than 50 93 numberGreaterThan50: function (itemElem) { 94 var number = itemElem.querySelector('.number').textContent; 95 return parseInt(number, 10) > 50; 96 }, 97 // show if name ends with -ium 98 ium : function (itemElem) { 99 var name = itemElem.querySelector('.name').textContent; 100 return name.match(/ium$/); 101 } 102 }; 103 104 // bind filter button click 105 var filtersElem = document.querySelector('.filters'); 106 107 filtersElem.addEventListener('change', function (event) { 108 // only work with buttons 109 // console.log(event.target); 110 var inputsCheckbox = Array.prototype.slice.call(document.querySelectorAll('.filters' + 111 ' input[type=checkbox]:checked')); 112 var inputsCheckboxValues = inputsCheckbox.map(function (el) { 113 return el.value; 114 }).join(''); 115 inputsCheckboxValues = inputsCheckboxValues == '' ? '' : '' + inputsCheckboxValues; 116 console.log('inputsCheckboxValues: ', inputsCheckboxValues); 117 118 119 var inputsRadio = Array.prototype.slice.call(document.querySelectorAll('.filters' + 120 ' input[type=radio]:checked')); 121 var inputsRadioValues = inputsRadio.map(function (el) { 122 return el.value; 123 }).join(''); 124 console.log('inputsRadioValues: ', inputsRadioValues); 125 // console.log('inputsRadioValues+inputsCheckboxValues: ', inputsRadioValues + inputsCheckboxValues); 126 127 128 iso.arrange({filter: inputsRadioValues + inputsCheckboxValues}); 129 // updateFilterCount(); 130 // iso.arrange({filter: inputsCheckboxValues.join(',')}); 131 132 133 if (!matchesSelector(event.target, 'a.button')) { 134 return; 135 } 136 var filterValue = event.target.getAttribute('data-filter'); 137 // use matching filter function 138 filterValue = filterFns[filterValue] || filterValue; 139 //iso.arrange({filter: filterValue}); 140 }); 141 142 // change is-checked class on buttons 143 var buttonGroups = document.querySelectorAll('.checkbox-group'); 144 for (var i = 0, len = buttonGroups.length; i < len; i++) { 145 var buttonGroup = buttonGroups[i]; 146 checkboxGroup(buttonGroup); 147 } 148 149 function radioButtonGroup(buttonGroup) { 150 buttonGroup.addEventListener('click', function (event) {
151 // only work with buttons 152 // console.log(event.target); 153 154 if (!matchesSelector(event.target, 'a.button')) { 155 return; 156 } 157 event.target.classList.toggle('is-primary'); 158 // event.target.classList.add('is-primary'); 159 }); 160 } 161 162 function checkboxGroup(buttonGroup) { 163 buttonGroup.addEventListener('click', function (event) { 164 // only work with buttons 165 // console.log(event.target); 166 167 if (!matchesSelector(event.target, 'a.button')) { 168 169 } 170 // event.target.classList.toggle('is-primary'); 171 // event.target.classList.add('is-primary'); 172 }); 173 } 174 175 176}
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.