PageSourceSearch

https://kvartira-str.ru/dist/js/filter-iso.js?v=1513629031

js kvartira-str.ru collected 2026-10-05 00:09:44 UTC 4,885 bytes, 176 lines download raw bytes

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.