jQuery(window).on('load', function (){
if(jQuery(".elpt-portfolio-content").length){
var $grid=jQuery('.elpt-portfolio-content-isotope:not(.elpt-portfolio-content-isotope-pro)').isotope({
layoutMode: 'masonry',
itemSelector: '.portfolio-item-wrapper'
});
$grid.imagesLoaded().progress(function(){
$grid.isotope('layout');
});
var $packery=jQuery('.elpt-portfolio-content-packery:not(.elpt-portfolio-content-isotope-pro)').isotope({
layoutMode: 'packery',
itemSelector: '.portfolio-item-wrapper'
});
$packery.imagesLoaded().progress(function(){
$packery.isotope('layout');
});
var $fitrows=jQuery('.elpt-portfolio-content-fitrows:not(.elpt-portfolio-content-isotope-pro)').isotope({
layoutMode: 'fitRows',
itemSelector: '.portfolio-item-wrapper'
});
$fitrows.imagesLoaded().progress(function(){
$fitrows.isotope('layout');
});
var itemSelector=".portfolio-item-wrapper";
var $container=jQuery('.elpt-portfolio-content-isotope-pro').isotope({
layoutMode: 'masonry',
itemSelector: itemSelector
});
if($container.hasClass('elpt-portfolio-content-fitrows')){
$container.isotope('option', { layoutMode: 'fitRows' });
}else if($container.hasClass('elpt-portfolio-content-packery')){
$container.isotope('option', { layoutMode: 'packery' });
}
$container.imagesLoaded().progress(function(){
$container.isotope('layout');
});
var itemsPerPageDefault=10;
var containerPerPage=parseInt($container.attr('data-items-per-page'), 10);
if(!isNaN(containerPerPage)&&containerPerPage > 0){
itemsPerPageDefault=containerPerPage;
}else if(typeof gridSettings!=='undefined'&&gridSettings.itemsPerPageDefault!==undefined){
itemsPerPageDefault=gridSettings.itemsPerPageDefault;
}
var itemsPerPage=defineItemsPerPage();
var currentNumberPages=1;
var currentPage=1;
var currentFilter='*';
var filterAtribute='data-filter';
var pageAtribute='data-page';
var pagerClass='isotope-pager';
var fixedLayoutEventId=0;
var fixedLayoutOriginalOrder=[];
var fixedLayoutInitialized=false;
var fixedLayoutCompletedEventId=0;
var FIXED_LAYOUT_DEBUG=false;
function fixedLayoutLog(message, data){
if(FIXED_LAYOUT_DEBUG){
if(data!==undefined){
console.log('[FixedLayout]', message, data);
}else{
console.log('[FixedLayout]', message);
}}
}
function initFixedLayoutCache($containerElement){
if(fixedLayoutInitialized){
return;
}
var $allItems=$containerElement.children('.portfolio-item-wrapper');
fixedLayoutOriginalOrder=[];
$allItems.each(function(index){
fixedLayoutOriginalOrder.push({
element: this,
originalIndex: index
});
});
fixedLayoutInitialized=true;
fixedLayoutLog('Cache initialized with ' + fixedLayoutOriginalOrder.length + ' items');
}
function resetFixedLayoutPositions($containerElement){
var $allItems=$containerElement.children('.portfolio-item-wrapper');
$allItems.removeClass(function(index, className){
return (className.match(/\belpt-grid-pos-\d+\b/g)||[]).join(' ');
});
fixedLayoutLog('All position classes removed');
}
function scrollToGridTop($containerElement){
if(!$containerElement||$containerElement.length===0){
return;
}
var gridTop=$containerElement.offset().top;
var margin=100;
var targetScroll=Math.max(0, gridTop - margin);
var currentScroll=jQuery(window).scrollTop();
var scrollData={
target: targetScroll,
gridTop: gridTop,
margin: margin,
container: $containerElement
};
jQuery(document).trigger('powerfolio:scroll_target', [scrollData]);
targetScroll=scrollData.target;
if(currentScroll > targetScroll){
window.scrollTo(0, targetScroll);
fixedLayoutLog('Scrolled to: ' + targetScroll + 'px');
}}
var resizeTimeout;
jQuery(window).resize(function(){
clearTimeout(resizeTimeout);
resizeTimeout=setTimeout(function(){
var $gridBuilder=jQuery('.elpt-portfolio-content-packery.elpt-portfolio-grid-builder');
var isFixedLayout=$gridBuilder.length > 0&&$gridBuilder.hasClass('elpt-fixed-layout-mode');
if($container.length > 0){
if(isFixedLayout){
fixedLayoutLog('Resize detected - triggering fresh layout');
}
goToPage(currentPage);
}else{
if(isFixedLayout){
applyFixedLayoutPositionsFromIsotope($packery);
$packery.isotope('layout');
}else{
$grid.isotope('layout');
$packery.isotope('layout');
$fitrows.isotope('layout');
}}
}, 150);
});
function changeFilter(selector){
$container.isotope({ filter: selector }
); }
function getFilterSelector(){
var selector=itemSelector;
if(currentFilter!='*'){
selector +=currentFilter;
}
return selector;
}
function goToPage(n){
var $gridBuilder=jQuery('.elpt-portfolio-content-packery.elpt-portfolio-grid-builder');
var isFixedLayout=$gridBuilder.length > 0&&$gridBuilder.hasClass('elpt-fixed-layout-mode');
currentPage=n;
var selector=getFilterSelector();
selector +='[' + pageAtribute + '="' + currentPage + '"]';
if(isFixedLayout){
fixedLayoutEventId++;
var currentEventId=fixedLayoutEventId;
fixedLayoutLog('goToPage(' + n + ') START - eventId: ' + currentEventId + ' (previous operations cancelled)');
initFixedLayoutCache($container);
resetFixedLayoutPositions($container);
applyFixedLayoutPositionsForCurrentFilter($container, selector);
changeFilter(selector);
$container.isotope('layout');
fixedLayoutLog('goToPage(' + n + ') - layout triggered, eventId: ' + currentEventId);
$container.isotope('once', 'arrangeComplete', function(){
if(currentEventId!==fixedLayoutEventId){
fixedLayoutLog('arrangeComplete SKIPPED - outdated eventId: ' + currentEventId + ', current: ' + fixedLayoutEventId);
return;
}
if(currentEventId <=fixedLayoutCompletedEventId){
fixedLayoutLog('arrangeComplete SKIPPED - eventId ' + currentEventId + ' already completed');
return;
}
fixedLayoutLog('goToPage(' + n + ') arrangeComplete - eventId: ' + currentEventId);
applyFixedLayoutPositionsFromIsotope($container);
fixedLayoutCompletedEventId=currentEventId;
setTimeout(function(){
if(currentEventId!==fixedLayoutEventId){
fixedLayoutLog('setTimeout SKIPPED - outdated eventId: ' + currentEventId);
return;
}
fixedLayoutLog('goToPage(' + n + ') FINAL layout - eventId: ' + currentEventId);
$container.isotope('layout');
fixedLayoutLog('goToPage(' + n + ') COMPLETE - eventId: ' + currentEventId);
jQuery(document).trigger('powerfolio:layout_complete', [$container, currentPage, currentFilter]);
}, 0);
});
}else{
changeFilter(selector);
setTimeout(function(){
jQuery(document).trigger('powerfolio:layout_complete', [$container, currentPage, currentFilter]);
}, 100);
}}
function applyFixedLayoutPositionsForCurrentFilter($containerElement, filterSelector){
var $allItems=$containerElement.children('.portfolio-item-wrapper');
$allItems.removeClass(function(index, className){
return (className.match(/\belpt-grid-pos-\d+\b/g)||[]).join(' ');
});
var $matchingItems=$allItems.filter(filterSelector);
$matchingItems.each(function(index){
jQuery(this).addClass('elpt-grid-pos-' + (index + 1));
});
}
function defineItemsPerPage(){
var pages=itemsPerPageDefault;
return pages;
}
function setPagination(){
var SettingsPagesOnItems=function(){
var item=1;
var page=1;
var selector=getFilterSelector();
$container.children(selector).each(function(){
if(item > itemsPerPage){
page++;
item=1;
}
jQuery(this).attr(pageAtribute, page);
item++;
});
currentNumberPages=page;
}();
var CreatePagers=function(){
var $isotopePager=(jQuery('.'+pagerClass).length==0) ? jQuery('<div class="'+pagerClass+'"></div>'):jQuery('.'+pagerClass);
$isotopePager.html('');
for(var i=0; i < currentNumberPages; i++){
var $pager=jQuery('<a href="javascript:void(0);" class="pager" '+pageAtribute+'="'+(i+1)+'"></a>');
$pager.html(i+1);
$pager.click(function(){
jQuery('.isotope-pager .active').removeClass('active');
jQuery(this).addClass('active');
var page=jQuery(this).eq(0).attr(pageAtribute);
var $gridBuilder=jQuery('.elpt-portfolio-content-packery.elpt-portfolio-grid-builder');
if($gridBuilder.length > 0&&$gridBuilder.hasClass('elpt-fixed-layout-mode')){
scrollToGridTop($container);
}
goToPage(page);
});
$pager.appendTo($isotopePager);
}
$container.after($isotopePager);
}();
}
setPagination();
goToPage(1);
function applyFixedLayoutPositionsFromIsotope($isotopeContainer){
var isotope=$isotopeContainer.data('isotope');
if(!isotope){
return;
}
var $allItems=$isotopeContainer.children('.portfolio-item-wrapper');
$allItems.removeClass(function(index, className){
return (className.match(/\belpt-grid-pos-\d+\b/g)||[]).join(' ');
});
var filteredItems=isotope.filteredItems;
if(!filteredItems||filteredItems.length===0){
return;
}
filteredItems.forEach(function(item, index){
jQuery(item.element).addClass('elpt-grid-pos-' + (index + 1));
});
}
function applyFixedLayoutFilter($containerElement, filterValue){
var $allItems=$containerElement.children('.portfolio-item-wrapper');
var $matchingItems;
if(filterValue==='*'){
$matchingItems=$allItems;
}else{
$matchingItems=$allItems.filter(filterValue);
}
$allItems.removeClass(function(index, className){
return (className.match(/\belpt-grid-pos-\d+\b/g)||[]).join(' ');
});
$matchingItems.each(function(visualIndex){
jQuery(this).addClass('elpt-grid-pos-' + (visualIndex + 1));
});
}
jQuery('.elpt-portfolio-filter').on('click', 'button', function (){
jQuery('.elpt-portfolio-filter button').removeClass('item-active');
jQuery(this).addClass('item-active');
var filterValue=jQuery(this).attr(filterAtribute);
var filter=filterValue;
currentFilter=filter;
var $gridBuilder=jQuery('.elpt-portfolio-content-packery.elpt-portfolio-grid-builder');
var isFixedLayout=$gridBuilder.hasClass('elpt-fixed-layout-mode');
if(isFixedLayout){
fixedLayoutLog('Filter clicked: ' + filterValue);
if($container.length===0){
fixedLayoutEventId++;
var currentEventId=fixedLayoutEventId;
fixedLayoutLog('Filter START (no pagination) - eventId: ' + currentEventId);
resetFixedLayoutPositions($packery);
applyFixedLayoutFilter($gridBuilder, filterValue);
$packery.isotope({ filter: filterValue });
$packery.isotope('layout');
$packery.isotope('once', 'arrangeComplete', function(){
if(currentEventId!==fixedLayoutEventId){
fixedLayoutLog('Filter arrangeComplete SKIPPED - outdated eventId: ' + currentEventId);
return;
}
if(currentEventId <=fixedLayoutCompletedEventId){
fixedLayoutLog('Filter arrangeComplete SKIPPED - eventId ' + currentEventId + ' already completed');
return;
}
fixedLayoutLog('Filter arrangeComplete (no pagination) - eventId: ' + currentEventId);
applyFixedLayoutPositionsFromIsotope($packery);
fixedLayoutCompletedEventId=currentEventId;
setTimeout(function(){
if(currentEventId!==fixedLayoutEventId){
return;
}
fixedLayoutLog('Filter FINAL layout (no pagination) - eventId: ' + currentEventId);
$packery.isotope('layout');
fixedLayoutLog('Filter COMPLETE (no pagination) - eventId: ' + currentEventId);
jQuery(document).trigger('powerfolio:layout_complete', [$packery, 1, filterValue]);
}, 0);
});
}}else{
$grid.isotope({
filter: filterValue
});
$packery.isotope({
filter: filterValue
});
$fitrows.isotope({
filter: filterValue
});
if($container.length===0){
setTimeout(function(){
var $activeGrid=$packery.length > 0 ? $packery:($grid.length > 0 ? $grid:$fitrows);
jQuery(document).trigger('powerfolio:layout_complete', [$activeGrid, 1, filterValue]);
}, 100);
}}
if($container.length > 0){
if(isFixedLayout){
scrollToGridTop($container);
fixedLayoutLog('Filter with pagination - calling setPagination + goToPage(1)');
}
setPagination();
goToPage(1);
}});
jQuery(document).trigger('powerfolio:grid_initialized', [{
grid: $grid,
packery: $packery,
fitrows: $fitrows,
container: $container
}]);
}});