{"version":3,"file":"ads-index.js","sources":["ads-index.js"],"sourcesContent":["$(function () {\r\n // Filters\r\n\r\n $(document).on('click', '.js-toggle-filters', function (e) {\r\n e.preventDefault();\r\n\r\n if ($(\".js-popup-filter-container\").children().length == 0) {\r\n $.ajax({\r\n url: 'Ads/FilterPopup',\r\n success: function (html) {\r\n $(\".js-popup-filter-container\").html(html);\r\n $('.js-filters-container').addClass('c-filter-popup--visible');\r\n $('body').addClass('u-no-scroll');\r\n desktopFilterMenu()\r\n }\r\n });\r\n } else {\r\n $('.js-filters-container').toggleClass('c-filter-popup--visible');\r\n $('body').toggleClass('u-no-scroll');\r\n }\r\n });\r\n\r\n $(document).on('click', '.js-filter-link', function (e) {\r\n $('.js-filter-link').removeClass('c-filter-popup__menu-item--active');\r\n $(this).addClass('c-filter-popup__menu-item--active');\r\n $('.js-filter-more').removeClass('c-filter-popup__menu-more--visible');\r\n });\r\n\r\n if ($('.js-filter-item').length >= 10) {\r\n $('.js-filters-show-all').addClass('c-list-filters__show-all--visible');\r\n }\r\n\r\n $(document).on('click', '.js-filters-show-all', function (e) {\r\n e.preventDefault();\r\n $('.js-filters-show-all').removeClass('c-list-filters__show-all--visible');\r\n $('.js-filter-item').addClass('visible');\r\n });\r\n\r\n $(document).on('click', '.js-filter-more-toggle', function (e) {\r\n e.preventDefault();\r\n $('.js-filter-more').toggleClass('c-filter-popup__menu-more--visible');\r\n });\r\n\r\n $(document).on('click', '.js-filter-more-link', function (e) {\r\n e.preventDefault();\r\n $(this).hide();\r\n $(this).siblings('.js-filter-input-wrapper').addClass('c-filter-popup__input-wrapper--show-all');\r\n });\r\n\r\n var desktopFilterMenuIterator = 0;\r\n\r\n function desktopFilterMenu() {\r\n var mq = window.matchMedia(\"(min-width: 1024px)\");\r\n\r\n if (mq.matches) {\r\n var totalWidth = 0;\r\n\r\n $('.js-filter-menu .js-filter-link').each(function () {\r\n var itemWidth = $(this).width() + 32;\r\n totalWidth += itemWidth;\r\n });\r\n\r\n totalWidth += 43;\r\n desktopFilterMenuIterator++;\r\n\r\n if (totalWidth > $('.js-filter-width').width() && desktopFilterMenuIterator != 100) {\r\n $('.js-filter-menu .js-filter-link:last-of-type').prependTo('.js-filter-more');\r\n desktopFilterMenu();\r\n if (!$('.js-filter-more-container').hasClass('c-filter-popup__menu-more-container--visible')) {\r\n $('.js-filter-more-container').addClass('c-filter-popup__menu-more-container--visible');\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n };\r\n\r\n $(document).on('click', '.js-filter-more-close', function () {\r\n $('.js-filter-more').removeClass('c-filter-popup__menu-more--visible');\r\n });\r\n\r\n desktopFilterMenu();\r\n\r\n $('.js-slider-target').each(function () {\r\n initSlider($(this).attr('id'));\r\n });\r\n\r\n function initSlider(sliderID) {\r\n var slider = document.getElementById(sliderID);\r\n\r\n if (!slider) return;;\r\n\r\n var slider_min = parseFloat($('#' + sliderID + '_min').val());\r\n var slider_max = parseFloat($('#' + sliderID + '_max').val());\r\n\r\n\r\n var slider_min_range = parseFloat($('#' + sliderID + '_min').attr('data-slider-value'));\r\n var slider_max_range = parseFloat($('#' + sliderID + '_max').attr('data-slider-value'));\r\n noUiSlider.create(slider, {\r\n start: [slider_min, slider_max],\r\n connect: true,\r\n step: 1,\r\n range: {\r\n 'min': slider_min_range,\r\n 'max': slider_max_range\r\n }\r\n });\r\n\r\n slider.noUiSlider.on('update', function () {\r\n $('#' + sliderID + '_min').val(parseFloat(slider.noUiSlider.get()[0]));\r\n $('#' + sliderID + '_max').val(parseFloat(slider.noUiSlider.get()[1]));\r\n });\r\n\r\n slider.noUiSlider.on('start', function () {\r\n slider_min = $('#' + sliderID + '_min').val();\r\n slider_max = $('#' + sliderID + '_max').val();\r\n });\r\n\r\n slider.noUiSlider.on('set', function () {\r\n if ($('#' + sliderID + '_min').val() != slider_min) {\r\n filterChange($('#' + sliderID + '_min'));\r\n }\r\n if ($('#' + sliderID + '_max').val() != slider_max) {\r\n filterChange($('#' + sliderID + '_max'));\r\n }\r\n });\r\n\r\n $('#' + sliderID + '_min').on('change', function () {\r\n slider.noUiSlider.set([$(this).val(), null]);\r\n });\r\n\r\n $('#' + sliderID + '_max').on('change', function () {\r\n slider.noUiSlider.set([null, $(this).val()]);\r\n });\r\n }\r\n $('.js-value-slider-target').each(function () {\r\n initSingleValueSlider($(this).attr('id'));\r\n });\r\n\r\n function initSingleValueSlider(sliderID) {\r\n var slider = document.getElementById(sliderID);\r\n\r\n if (!slider) return;;\r\n\r\n var input = $('#' + sliderID + '_max');\r\n\r\n var slider_value = parseFloat(input.val());\r\n\r\n var slider_min_range = parseFloat(input.attr('min'));\r\n var slider_max_range = parseFloat(input.attr('max'));\r\n\r\n if (isNaN(slider_value)) {\r\n slider_value = slider_max_range;\r\n }\r\n\r\n noUiSlider.create(slider, {\r\n start: slider_value,\r\n connect: 'lower',\r\n step: 1,\r\n range: {\r\n 'min': slider_min_range,\r\n 'max': slider_max_range\r\n }\r\n });\r\n\r\n slider.noUiSlider.on('update', function () {\r\n $('#' + sliderID + '_max').val(parseFloat(slider.noUiSlider.get()));\r\n });\r\n\r\n slider.noUiSlider.on('start', function () {\r\n slider_value = $('#' + sliderID + '_max').val();\r\n });\r\n\r\n slider.noUiSlider.on('set', function () {\r\n if ($('#' + sliderID + '_max').val() != slider_value) {\r\n input.change();\r\n\r\n filterChange($('#' + sliderID + '_max'));\r\n }\r\n });\r\n\r\n $('#' + sliderID + '_max').on('change', function () {\r\n slider_value = parseFloat($(this).val());\r\n slider.noUiSlider.set($(this).val());\r\n });\r\n }\r\n\r\n function filterChange() {\r\n // TODO: ???\r\n }\r\n\r\n $(document).on('change', '.js-filter-by-location', function (e) {\r\n if (this.checked) {\r\n DisableSubmit();\r\n storeLocation($(this), EnableSubmit);\r\n }\r\n else {\r\n removeLocation();\r\n }\r\n });\r\n\r\n $(document).on('change', '.js-filter-by-area', function () {\r\n const filterByLocationCheckbox = $(this).closest('form').find('.js-filter-by-location');\r\n\r\n if (!filterByLocationCheckbox.is(':checked')) {\r\n filterByLocationCheckbox.prop(\"checked\", true);\r\n filterByLocationCheckbox.change();\r\n }\r\n });\r\n\r\n if ($('.js-filter-by-location').is(':checked')) {\r\n DisableRegions();\r\n\r\n // Set a location from the browser while the page loads\r\n DisableSubmit();\r\n storeLocation($('.js-filter-by-location'), EnableSubmit);\r\n }\r\n\r\n // Small filters\r\n\r\n // Things to hide on click\r\n\r\n function closeSmallFilters() {\r\n if ($('.c-small-filter--visible').length > 0) {\r\n $('.js-open-small-filter').removeClass('c-list-filters__footer-list-link--active');\r\n $('.js-small-filter-container').removeClass('c-small-filter--visible');\r\n }\r\n }\r\n\r\n $('.js-small-filter-container').click(function (e) {\r\n if ($(e.target).hasClass('js-close-small-filter')) {\r\n e.preventDefault();\r\n } else {\r\n e.stopPropagation();\r\n }\r\n });\r\n\r\n $(document).on('click', '.js-open-small-filter', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n $('.js-open-small-filter').not(this).removeClass('c-list-filters__footer-list-link--active');\r\n $('.js-small-filter-container').not($(this).siblings('.js-small-filter-container')).removeClass('c-small-filter--visible');\r\n $(this).toggleClass('c-list-filters__footer-list-link--active');\r\n $(this).siblings('.js-small-filter-container').toggleClass('c-small-filter--visible');\r\n });\r\n\r\n $(document).on('click', 'body', function () {\r\n closeSmallFilters();\r\n });\r\n\r\n $('body').keydown(function (e) {\r\n if (e.keyCode == 13 && $('.c-small-filter--visible').length > 0) {\r\n e.preventDefault();\r\n $('.c-small-filter--visible').find('.js-small-filter-confirm').trigger('click');\r\n }\r\n });\r\n\r\n // Handle clicks on sorting.\r\n function sortAds(sort) {\r\n // add to url sort parameter\r\n let newUrl = new URL(window.location.href);\r\n let params = new URLSearchParams(newUrl.search);\r\n let geoLocation = $(this).data('geoLocation');\r\n\r\n params.set('sortBy', sort);\r\n\r\n if (sort === '4') {\r\n params.set('GeoLocation', geoLocation);\r\n\r\n // Add position to all filtering forms.\r\n $('input[name=GeoLocation][type=hidden]').each(function () {\r\n $(this).val(geoLocation);\r\n });\r\n }\r\n\r\n newUrl.search = params;\r\n newUrl = newUrl.toString();\r\n\r\n history.pushState({}, null, newUrl);\r\n\r\n // Update all filtering forms to new order value\r\n $('input[name=SortBy][type=hidden]').each(function () {\r\n $(this).val(sort);\r\n });\r\n\r\n $('.js-ads-container').empty();\r\n\r\n loadMoreAds();\r\n\r\n $('.js-page').each(function () {\r\n var page = $(this);\r\n var pageUrl = page.attr('href');\r\n\r\n if (pageUrl) {\r\n // Replace query param sortBy in href\r\n var index = pageUrl.indexOf('?');\r\n var pageSearch = index <= 0 ? \"\" : pageUrl.substring(index + 1);\r\n let newPageParams = new URLSearchParams(pageSearch);\r\n newPageParams.set('sortBy', sort);\r\n\r\n if (sort === '4') {\r\n newPageParams.set('GeoLocation', geoLocation);\r\n }\r\n\r\n var newPageUrl = pageUrl.substring(0, index) + '?' + newPageParams.toString()\r\n page.attr('href', newPageUrl);\r\n }\r\n });\r\n }\r\n\r\n function sortWithGeolocation(sort) {\r\n let revert = function () {\r\n let newUrl = new URL(window.location.href);\r\n let params = new URLSearchParams(newUrl.search);\r\n\r\n let originValue = params.get('sortBy') ?? 0;\r\n $('.js-ad-sort-select').val(originValue);\r\n }\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n const locationParam = position.coords.latitude + ',' + position.coords.longitude;\r\n $(this).data('geoLocation', locationParam);\r\n\r\n sortAds(sort);\r\n },\r\n function (error) {\r\n if (error.code === GeolocationPositionError.PERMISSION_DENIED) {\r\n revert();\r\n showFlashMessage('Přístup k poloze je pro tento web blokován vaším prohlížečem.', true);\r\n }\r\n else if (error.code === GeolocationPositionError.POSITION_UNAVAILABLE) {\r\n revert();\r\n showFlashMessage('Poloha je aktuálně nedostupná.', true);\r\n }\r\n else {\r\n sortWithGeolocation(sort);\r\n }\r\n }\r\n );\r\n }\r\n\r\n $(document).on('change', '.js-ad-sort-select', function (e) {\r\n e.preventDefault();\r\n\r\n var sort = $(this).val();\r\n if (sort === '4') {\r\n sortWithGeolocation(sort)\r\n } else {\r\n sortAds(sort);\r\n }\r\n });\r\n\r\n function getSearchData() {\r\n var adsContainer = $('.js-ads-container');\r\n let sortBy = $('#ad-list-sort option:selected').val();\r\n let category = adsContainer.data('category');\r\n let collection = adsContainer.data('collection');\r\n\r\n let data = {\r\n sortBy: sortBy,\r\n category: category,\r\n collection: collection\r\n };\r\n\r\n return data;\r\n }\r\n\r\n function addPageToHistory(data) {\r\n\r\n const url = window.location.href.split('?', 2);\r\n const loc = url[0];\r\n const params = new URLSearchParams(url.length > 1 ? url[1] : \"\");\r\n history.pushState(data, document.title, `${loc}?${params.toString()}`);\r\n }\r\n\r\n function removeSearchDataFromQuery(paramName, search) {\r\n var regex = new RegExp(\"([?;&])\" + paramName + \"[^&;]*[;&]?\");\r\n let query = search.replace(regex, \"$1\").replace(/&$/, '');\r\n\r\n return query === \"?\" ? '' : query;\r\n }\r\n\r\n function loadMoreAds() {\r\n var loadTrigger = $('.js-load-more');\r\n let data = getSearchData();\r\n let searchQuery = location.search;\r\n\r\n $.each(data, function (key) {\r\n searchQuery = removeSearchDataFromQuery(key, searchQuery);\r\n });\r\n\r\n loadTrigger.show();\r\n\r\n $.ajax({\r\n type: 'GET',\r\n url: `/inzeraty/Search${searchQuery}`,\r\n contentType: 'application/json; charset=utf-8',\r\n data: data,\r\n success: function (result) {\r\n if (result.length > 0) {\r\n $('.js-ads-container').append(result);\r\n }\r\n\r\n loadTrigger.hide();\r\n addPageToHistory(data);\r\n },\r\n error: function () {\r\n alert('Nepodařilo se načíst další produkty');\r\n setTimeout(function () {\r\n loadTrigger.hide();\r\n }, 200);\r\n }\r\n });\r\n }\r\n\r\n $(document).on('click', '.js-load-more', function (e) {\r\n e.preventDefault();\r\n loadMoreAds();\r\n });\r\n\r\n function refreshDepndentFilters() {\r\n var $changedInput = $(this);\r\n var changedMetadataId = $changedInput.closest('.js-relational-filter').attr('data-id');\r\n\r\n $('.js-relational-filter').each(function () {\r\n var $filterGroup = $(this);\r\n var dependsOn = $filterGroup.attr('data-depends-on').split(';').filter(function (d) { return d; });\r\n var dependentId = $filterGroup.attr('data-id');\r\n var categoryId = $filterGroup.attr('data-category-id');\r\n var htmlName = $filterGroup.attr('data-html-name');\r\n var htmlId = $filterGroup.attr('data-html-id');\r\n var requireVerificationToken = $(this).closest('form').find('input[name=__RequestVerificationToken]').val();\r\n\r\n if (dependsOn.indexOf(changedMetadataId) < 0) {\r\n return;\r\n }\r\n\r\n var data = {\r\n categoryId: categoryId,\r\n metadataItemId: dependentId,\r\n requirements: [],\r\n __RequestVerificationToken: requireVerificationToken\r\n };\r\n\r\n for (var i = 0; i < dependsOn.length; i++) {\r\n var dependedId = dependsOn[i];\r\n $('[data-id=' + dependedId + '] .o-checkbox__input:checked').prev().each(function () {\r\n data.requirements.push({ metadataItemId: dependedId, value: $(this).val() });\r\n });\r\n }\r\n\r\n if (data.requirements.length == 0) {\r\n $filterGroup.hide();\r\n } else {\r\n $.ajax({\r\n method: 'POST',\r\n url: '/inzeraty/FindMetadataValue',\r\n data: data,\r\n success: function (items) {\r\n var wrapper = $filterGroup.find('.js-filter-input-wrapper');\r\n wrapper.find('.c-filter-popup__input-container').remove();\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n var item = items[i];\r\n var template = `\r\n