function renderTempl(templ, data) { return (templ || '').replace(/%([^%]+)%/g, function(found, key) { return data[key] == undefined ? '' : data[key] }); } // FILTERS FancyRanges('.range', { afterInit: function(element, data) { // VYTVORIME VLASTNI "LOCAL" OBJECT V DATA OBJECTU data.local || (data.local = {}); // NALEZENI ELEMENTU PO INICIALIZACI data.local.$level || (data.local.$level = element.querySelector('.range-level')); // NALEZENI ELEMENTU PO INICIALIZACI data.local.$minRange || (data.local.$minRange = element.querySelector('.range-slider_primary')); data.local.$maxRange || (data.local.$maxRange = element.querySelector('.range-slider_secondary')); // NALEZENI ELEMENTU PO INICIALIZACI & PRESUNEME JE NA KONEC data.local.$minInput || (data.local.$minInput = element.querySelector('.range-min')); data.local.$maxInput || (data.local.$maxInput = element.querySelector('.range-max')); // NASTAVIME DO INPUTU ZAKLADNI HODNOTY, MUZEME TAK UDELAT PRES PHP data.local.$minInput.value = data.values[0]; data.local.$maxInput.value = data.values[1]; if (data.values[0] == data.min) { data.local.$minInput.value = '' } if (data.values[1] == data.max) { data.local.$maxInput.value = '' } // JQUERY HAXZ $(element) .data('ID', element.id) .data('$level', data.local.$level) .data('levelStyle', data.local.$level ? data.local.$level.style.cssText : '') .data('$rangeMin', data.local.$minRange) .data('rangeMinStyle', data.local.$minRange ? data.local.$minRange.style.cssText : '') .data('$rangeMax', data.local.$maxRange) .data('rangeMaxStyle', data.local.$maxRange ? data.local.$maxRange.style.cssText : ''); }, onChange: function(element, data) { // PO POSUNU POKUD SE NECO ZMENILO var input, defaultValue; var event = document.createEvent('Event'); event.initEvent('change', true, true); // JQUERY HAXZ $(element).closest('.range') .data('levelStyle', data.local.$level ? data.local.$level.style.cssText : '') .data('rangeMinStyle', data.local.$minRange ? data.local.$minRange.style.cssText : '') .data('rangeMaxStyle', data.local.$maxRange ? data.local.$maxRange.style.cssText : ''); switch (element) { case data.local.$minRange: input = data.local.$minInput; defaultValue = data.min; break; case data.local.$maxRange: input = data.local.$maxInput; defaultValue = data.max; break; default: console.log('dafuq?'); } if (!input) return; input.value = data.value; input.dispatchEvent(event); } }); var fancyRadios = FancyInputs('[fancy="radio"] > input'); var fancyCheckboxes = FancyInputs('[fancy="checkbox"] > input'); (function() { if (!document.getElementById('product-filter-form')) return; var $form = $(document.getElementById('product-filter-form')); var $filters = $form.find('input'); var $body = $(document.body); var canPushState = true; var stateData; function onLoad() { stateData = createStateData(); ajaxOptions.data = stateData.params; HistoryManager.initWith(stateData, document.title, location.href); } function getRangesPositions() { var data = {}; for (var i = 0, id, $root; $filters[i]; i++) { $root = $($filters[i]).closest('.range'); if (!(id = $root.data('ID'))) continue; data[id] = { rangeMinStyle: $root.data('rangeMinStyle'), rangeMaxStyle: $root.data('rangeMaxStyle'), levelStyle: $root.data('levelStyle') }; } return data; } function setRangesPositions(data) { for (var i = 0, id, $root, element, style; $filters[i]; i++) { $root = $($filters[i]).closest('.range'); if (!(id = $root.data('ID'))) continue; if (!data[id]) continue; $root .data('levelStyle', data[id].levelStyle) .data('rangeMinStyle', data[id].rangeMinStyle) .data('rangeMaxStyle', data[id].rangeMaxStyle); if (element = $root.data('$level')) { if (!!(style = data[id].levelStyle)) { element.style.cssText = style; } } if (element = $root.data('$rangeMin')) { if (!!(style = data[id].rangeMinStyle)) { element.style.cssText = style; } } if (element = $root.data('$rangeMax')) { if (!!(style = data[id].rangeMaxStyle)) { element.style.cssText = style; } } } } function createStateData() { return { params: $.param($form.serializeArray()), ranges: getRangesPositions() } } var ajaxOptions = { type: 'POST', cache: false, data: null, url: location.pathname + '?form=ajax', success: function(data) { if (data.html) { (document.getElementById('category_content') || {}).innerHTML = data.html; (document.getElementById('filters-reset') || {}).innerHTML = (document.getElementById('txt_button') || {}).innerHTML || ''; } if (canPushState) { stateData = createStateData(); ajaxOptions.data = stateData.params; HistoryManager.changeTo(stateData, document.title, '?' + stateData.params); } var i, name, filters, count, number; for (name in (data.filters || {})) { filters = document.getElementsByName(name); for (i = 0; filters[i]; i++) { number = +data.filters[name][filters[i].value || '#'] || 0; if (!!number) filters[i].parentNode.removeAttribute('disabled'); else filters[i].parentNode.setAttribute('disabled', 'disabled'); if (count = filters[i].nextElementSibling) { count.innerHTML = '(' + number + ')'; } } } $body.removeClass('loading'); }, error: function(jqXHR, textStatus) { console.log(textStatus); } }; $filters.change(function() { ajaxOptions.data = $form.serializeArray(); canPushState = true; $body.addClass('loading'); $.ajax(ajaxOptions); }); HistoryManager.setListener('filters', function(data, title, link, namespace) { $filters.each(function() { switch (this.type) { case 'checkbox': case 'radio': this.checked = false; break; default: this.value = ''; } }); deserialize(data.params); setRangesPositions(data.ranges); ajaxOptions.data = data.params; canPushState = false; fancyRadios.reload(); fancyCheckboxes.reload(); $body.addClass('loading'); $.ajax(ajaxOptions); }); onLoad(); })(); // FIXES (function() { $('.page--content') .find('.master-wrap.page--content.text-left') .removeClass('page--content') .addClass('contacts') .find('[class*="kontakt"]') .attr('class', 'contacts-item'); $('.contacts-item') .find('h3') .filter(function() { return ( (this.innerText || this.textContent || '') .replace(/[\s\b\t\n\r\f]/g, '') || '') .length < 1 }) .addClass('empty'); var $landingPage = $('.landing-page'); var $col2 = $landingPage.children('.col-2.bg'); var $clear = $col2.next('.clear'); var $cols = $('
').append( $col2.removeClass('col-2 bg') ); $clear.replaceWith($cols); var $types = $('
'); $landingPage .children('.galerie') .after($types) .nextAll(':not(".testimonials")') .removeClass('col-3 b-r') .appendTo($types) .remove('.clear'); })(); // FILTERS ANIMATION (function() { if (!document.getElementById('filters')) return; $('#filters-toggle').click(function(event) { event.preventDefault(); $(this).toggleClass('active'); }); var i, $titles = document.querySelectorAll('.filter-title'); function clickListener(content, size) { if (classes.has(this.parentNode, 'running')) return; content = this.parentNode.children[1]; size = content.scrollHeight; if (classes.has(this.parentNode, 'open')) content.style.height = '0'; else content.style.height = size + 'px'; classes.add(this.parentNode, 'running'); classes.toggle(this.parentNode, 'open'); setTimeout(function() { classes.remove(content.parentNode, 'running'); }, 350); } for(i = 0; $titles[i]; i++) { $titles[i].removeEventListener('click', clickListener); $titles[i].addEventListener('click', clickListener); classes.toggle($titles[i].parentNode, 'open'); clickListener.call($titles[i]); } })(); // NAV (function() { $('#nav-toggle').click(function(event) { event.preventDefault(); $(this).toggleClass('active'); }); var $lastItem = $(); $('.nav-item_link').click(function() { if(!$(this).siblings('.nav-submenu').length) return; if($lastItem[0] !== this.parentNode) { $lastItem.removeClass('open'); } $lastItem = $(this.parentNode).toggleClass('open'); }); $(document).click(function(event) { if(!$(event.target).closest('.nav-items').length) { $lastItem.removeClass('open'); } }); })(); // BASKET (function() { var $basket = $('#header-basket'); $(document.body).click(function(event) { if($(event.target).closest('#header-basket').length) { $basket.toggleClass('open'); } else { $basket.removeClass('open'); } }); })(); // BUY (function() { if(!document.querySelector('.master-pricebox_buy')) return; var $buyButton = document.querySelector('.master-pricebox_buy'); var $amount = document.querySelector('.master-pricebox_amount > input'); var $results = document.getElementById('header-basket_items'); var $price = document.getElementById('header-basket_price'); var itemTempl = document.getElementById('basket_item').innerHTML; var successTempl = document.getElementById('basket_success_alert').innerHTML; var errorTempl = document.getElementById('basket_error_alert').innerHTML; var options = { url: '/nakupny-kosik', data: { add_product_id: -1, add_product_amount: 1 }, method: 'POST', success: function(response) { $buyButton.removeAttribute('disabled'); $price.innerHTML = response.summary || 0; $price.setAttribute('count', response.count || 0); if(!response.products) response.products = []; createItems(response.products); Popup.fill(renderTempl(successTempl, {})).show(true); }, error: function() { Popup.fill(renderTempl(errorTempl, {})).show(true); } }; function createItems(array) { var items = ''; for(var i = 0, l = array.length; i < l; i++) { items += renderTempl(itemTempl, array[i]); } $results.innerHTML = items; } function clickListener(event) { event.preventDefault(); //if (!this.hash) return; if(this.hasAttribute('disabled')) return; //options.data.add_product_id = this.hash.slice(1); //options.data.add_product_amount = +((($amount || {}).value || '').match(/\d/g) || 1); options.data.add_product_id = document.getElementById('add_product').value; options.data.add_product_amount = +((document.getElementById('quantity').value || '').match(/\d+/g) || 1); $buyButton.setAttribute('disabled', 'disabled'); $.ajax(options); } $buyButton.removeEventListener('click', clickListener); $buyButton.addEventListener('click', clickListener); })(); // SEARCH (function() { var templ = { product: ((document.getElementById('search_product') || {}).innerHTML || '') }; var $searchForm = document.getElementById('search'); var $searchInput = document.getElementById('search-input'); var $searchProducts = document.getElementById('search-results_products'); var $searchMore = document.getElementById('search-results_more'); var lastValue, timeout; var options = { url: '/vyhladavanie', data: {text: null}, method: 'GET', success: function(response) { parseData(response); }, error: function() { classes.add($searchForm, 'empty'); } }; function makeBold(text) { return '' + text + '' } function parseData(data) { var empty = true, i, l, html, single; if(data.products.length) { empty = false; html = ''; for(i = 0, l = data.products.length; i < l; i++) { single = data.products[i]; single.title = single.title.replace( new RegExp(data.text || '', 'gi'), makeBold ); html += renderTempl(templ.product, single); } $searchProducts.innerHTML = html; } $searchMore.innerHTML = data.more.title; if(!!data.more.url) { classes.remove($searchMore, 'disabled'); $searchMore.href = data.more.url; } else { classes.add($searchMore, 'disabled'); $searchMore.href = '#'; } if(empty) classes.add($searchForm, 'empty'); else classes.remove($searchForm, 'empty'); } function submit() { if(($searchInput.value || '').length < 1) return; if(lastValue === $searchInput.value) return; lastValue = $searchInput.value; options.data.text = lastValue; $.ajax(options); } $searchInput.addEventListener('keyup', function() { clearTimeout(timeout); timeout = setTimeout(submit, 300); }); /* $searchMore.addEventListener('click', function(event) { event.preventDefault(); }); $searchForm.addEventListener('submit', function(event) { event.preventDefault(); }); */ var $search = $('#search'); $(document.body).click(function(event) { if($(event.target).closest('#search').length) { $search.toggleClass('open'); } else { $search.removeClass('open'); } }); })(); // GALLERY (function() { function clickListener(event) { event.preventDefault(); if((this.href || '').match(/javascript/ig)) return; if($(this).hasClass('active')) return; event.data.$largeImage.attr('src', this.getAttribute('href')); $(this).addClass('active').siblings().removeClass('active'); } $('.master-gallery').each(function($items) { $items = $(this).find('.master-gallery_item'); $items.click({$largeImage: $items.first().children('img')}, clickListener); }); })(); /*$('.tabs-link').tabs('.tabs-content');*/ $('[data-responsive]').tableColsArranger();