var portfolioCardModule = function() {
var classes = {
popup: 'popup-portfolio',
controlPrev: 'js-portfolio-prev',
controlNext: 'js-portfolio-next',
wrapperWontent: 'wrapper-content',
fixBottom : 'fix-bottom',
content: 'portfolio-large__content',
preview: 'js-portfolio-preview'
};
var _setPortfolioId = function() {
_portfolioIds = {
all: null,
current: null,
prev: null,
next: null
}; // сбрасываем старые значения
var $content = jQuery('.' + classes.popup).find('.popup_content');
var dataPortfolioAllIds = $content.data('portfolioAllIds');
var dataCurrentId = $content.data('portfolioId');
if (dataPortfolioAllIds) {
dataPortfolioAllIds += '';
_portfolioIds['all'] = dataPortfolioAllIds.split(',');
}
if (dataCurrentId) {
_portfolioIds['current'] = dataCurrentId;
}
if (_portfolioIds['all']) {
var portfolioCurrentKey = null;
var portfolioCnt = 0;
jQuery.each(_portfolioIds['all'], function(index, value) {
if (value == _portfolioIds['current']) {
portfolioCurrentKey = index;
}
portfolioCnt++;
});
if ((portfolioCurrentKey + 1) <= (portfolioCnt - 1)) {
_portfolioIds['next'] = _portfolioIds['all'][portfolioCurrentKey + 1];
} else {
_portfolioIds['next'] = _portfolioIds['all'][0];
}
if ((portfolioCurrentKey - 1) >= 0) {
_portfolioIds['prev'] = _portfolioIds['all'][portfolioCurrentKey - 1];
} else {
_portfolioIds['prev'] = _portfolioIds['all'][portfolioCnt - 1];
}
}
};
var _get = function(method, id) {
if (!method || !id) {
return false;
}
_openPopup();
$.ajax({
type: 'POST',
url: method + id,
dataType: 'html',
success: function(data) {
_openPopup(data);
}
});
};
var _getPortfolio = function(portfolioId) {
if (portfolioId == null || portfolioId == undefined || portfolioId == '') {
return false;
}
_get('/api?method=getPortfolio&pid=', portfolioId);
};
var _getFirstPortfolio = function(prdId) {
if (prdId == null || prdId == undefined || prdId == '') {
return false;
}
_get('/api?method=getPortfolio&mid=', prdId);
_openPopup();
};
/**
* Отрисовывает модальное окно с портфолио
* @param {string} content Содержимое модального окна (если не передать, то отобразится лоадер)
*/
var _openPopup = function(content) {
if (content == null || content == undefined || content == '') {
content = '<div class="portfolio-loader"><img src="themes/itbirja/images/ajax-loader.gif"></div>';
}
if ( jQuery('.' + classes.popup).length ) {
jQuery('.' + classes.popup).find('.wrapper-content').html(content);
} else {
jQuery('body').append(
'<div class="popup-portfolio portfolio_large" style="display: none">'
+ '<div class="wrapper-content">'
+ content
+ '</div>'
+ '</div>'
);
// Блокируем скролл всего документа
$('body').addClass('compensate-for-scrollbar');
// Показываем попап
$('.' + classes.popup).fadeIn(200);
}
_eventOpen();
}
/**
* Закрытие модального окна
*/
var _closePopup = function() {
// Отменяем блокировку скролла всего документа
jQuery('body').removeClass('compensate-for-scrollbar');
jQuery('.' + classes.popup).fadeOut(300);
var delay = setInterval(function() {
jQuery('.' + classes.popup).remove();
clearInterval(delay);
jQuery('.' + classes.preview).slick('unslick');
}, 350);
}
/**
* Режим отображения
* Вешаем нужный нам класс на родителя
*/
var _mode = function() {
var $popup = jQuery('.' + classes.popup);
var popupMode = $popup.find('.popup_content').data('mode');
if (popupMode) {
$popup.addClass(popupMode);
}
};
/**
* Cобытия после открытие окна
*/
var _eventOpen = function() {
jQuery('.' + classes.popup).scrollTop(0);
// Режим отображения
_mode();
// Устанавливаем список всех работ
_setPortfolioId();
// Отображаем элементы навигации
if (_portfolioIds.prev) {
jQuery('.' + classes.controlPrev).show();
}
if (_portfolioIds.next) {
jQuery('.' + classes.controlNext).show();
}
// Инициализируем стилизованный селлектор
jQuery('.chosenselect').chosen({
width: '108px',
disable_search: true
});
// min element for init slick
var minPreviewItem = 6;
var $previewItem = jQuery('.js-portfolio-preview .preview-wrapper');
var indexActiveItem = 0;
$previewItem.each(function(index) {
if (jQuery(this).hasClass('active')) {
indexActiveItem = index;
}
});
if ($previewItem.length > minPreviewItem) {
jQuery('.' + classes.preview).slick({
lazyLoad: 'ondemand',
speed: 150,
infinite: true,
dots: false,
prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-angle-left"></i></button>',
nextArrow: '<button type="button" class="slick-next"><i class="fa fa-angle-right"></i></button>',
rows: 2,
slidesPerRow: 3,
initialSlide: indexActiveItem > 0 ? (Math.ceil((indexActiveItem + 1) / 6) - 1) : 0
});
} else {
$previewItem.each(function() {
var $el = jQuery(this).find('img');
var src = $el.data('lazy');
$el.attr('src', src);
});
}
};
/**
* Событие на клавишу ESC
*/
var _onEscHandler = function(e) {
e = e || window.e;
var keyCode = e.which || e.keyCode;
if (keyCode === 27) {
_closePopup();
}
};
/**
* События на стрелки влево/вправо
*/
var _onArrowHandler = function(e) {
e = e || window.e;
var keyCode = e.which || e.keyCode;
var $popup = jQuery('.' + classes.popup);
var popupIsset = $popup.length;
if (!popupIsset) {
return;
}
// go to the right
if (keyCode == 39 && _portfolioIds['next']) {
_getPortfolio(_portfolioIds['next']);
}
// go to the left
if (keyCode == 37 && _portfolioIds['prev']) {
_getPortfolio(_portfolioIds['prev']);
}
}
var _init = function() {
var $body = jQuery('body');
// Закрытие по оверлею
var closeSelects = '.' + classes.popup
+ ', .' + classes.wrapperWontent
+ ', .' + classes.fixBottom;
$body
.off('click touchend', closeSelects)
.on('click touchend', closeSelects, function(e) {
if (e.target !== this) {
return;
}
_closePopup();
});
// Закрытие по нажатию на ESC
$body
.off('keyup', _onEscHandler)
.on('keyup', _onEscHandler);
// Переключение между работ по стрелочкам с клавиатуры
$body
.off('keyup', _onArrowHandler)
.on('keyup', _onArrowHandler);
$body
.on('click', '.portfolio-popup .js_package_card_vert__toggleInfo', function () {
var parent = $(this).closest('.package_card_vert');
parent.find('.package_card_vert_options').show();
});
}();
return {
getPortfolio: function(portfolioId) {
_getPortfolio(portfolioId);
},
getFirstPortfolio: function(prdId) {
_getFirstPortfolio(prdId);
},
close: function() {
_closePopup();
},
next: function() {
if (_portfolioIds['next']) {
_getPortfolio(_portfolioIds['next']);
}
},
prev: function() {
if (_portfolioIds['prev']) {
_getPortfolio(_portfolioIds['prev']);
}
}
};
};
var portfolioCard = new portfolioCardModule();