// ------------------------------------------------------------------------------------------- // masonry // ------------------------------------------------------------------------------------------- (function($) { "use strict"; $.fn.avia_masonry = function(options) { //return if we didnt find anything if(!this.length) return this; var the_body = $('body'), the_win = $(window), ismobile = $.avia_utilities.ismobile, loading = false, methods = { masonry_filter: function() { var current = $(this), linktext = current.html(), selector = current.data('filter'), masonry = current.parents('.av-masonry:eq(0)'), container = masonry.find('.av-masonry-container:eq(0)'), links = masonry.find('.av-masonry-sort a'), activecat = masonry.find('.av-current-sort-title'); links.removeclass('active_sort'); current.addclass('active_sort'); container.attr('id', 'masonry_id_'+selector); if(activecat.length) activecat.html(linktext); methods.applymasonry(container, selector, function() { container.css({overflow:'visible'}); }); settimeout(function() { the_win.trigger('debouncedresize'); }, 500); return false; }, applymasonry: function(container, selector, callback) { var filters = selector ? {filter: '.'+selector} : {}; filters['layoutmode'] = 'packery'; filters['packery'] = {gutter:0}; filters['percentposition'] = true; filters['itemselector'] = "a.isotope-item, div.isotope-item"; filters['originleft'] = $('body').hasclass('rtl') ? false : true; container.isotope(filters, function() { the_win.trigger('av-height-change'); }); if(typeof callback === 'function') { settimeout(callback, 0); } }, show_bricks: function(bricks, callback) { bricks.each(function(i) { var currentlink = $(this), browserprefix = $.avia_utilities.supports('transition'), multiplier = ismobile ? 0 : 100; settimeout(function() { if(browserprefix === false) { currentlink.css({visibility:"visible", opacity:0}).animate({opacity:1},1500); } else { currentlink.addclass('av-masonry-item-loaded'); } if(i == bricks.length - 1 && typeof callback == 'function') { callback.call(); the_win.trigger('av-height-change'); } }, (multiplier * i)); }); }, loadmore: function(e) { e.preventdefault(); if(loading) return false; loading = true; var current = $(this), data = current.data(), masonry = current.parents('.av-masonry:eq(0)'), container = masonry.find('.av-masonry-container'), items = masonry.find('.av-masonry-entry'), loader = $.avia_utilities.loading(), finished = function(){ loading = false; loader.hide(); the_body.trigger('av_resize_finished'); }; //calculate a new offset if(!data.offset){ data.offset = 0; } data.offset += data.items; data.action = 'avia_ajax_masonry_more'; data.loaded = []; //prevents duplicate entries from beeing loaded when randomized is active items.each(function(){ var item_id = $(this).data('av-masonry-item'); if(item_id) data.loaded.push( item_id ); }); $.ajax({ url: avia_framework_globals.ajaxurl, type: "post", data:data, beforesend: function() { loader.show(); }, success: function(response) { if(response.indexof("{av-masonry-loaded}") !== -1) { //fetch the response. if any php warnings were displayed before rendering of the items the are removed by the string split var response = response.split('{av-masonry-loaded}'), new_items = $(response.pop()).filter('.isotope-item'); //check if we got more items than we need. if not we have reached the end of items if(new_items.length > data.items) { new_items = new_items.not(':last'); } else { current.addclass('av-masonry-no-more-items'); } var load_container = $('
').append(new_items); $.avia_utilities.preload({container: load_container, single_callback: function() { var links = masonry.find('.av-masonry-sort a'), filter_container = masonry.find('.av-sort-by-term'), allowed_filters = filter_container.data("av-allowed-sort"); filter_container.hide(); loader.hide(); container.isotope( 'insert', new_items); $.avia_utilities.avia_ajax_call(masonry); settimeout( function(){ methods.show_bricks( new_items , finished); },150); settimeout(function(){ the_win.trigger('av-height-change'); }, 550); if(links) { $(links).each(function(filterlinkindex) { var filterlink = $(this), sort = filterlink.data('filter'); if(new_items) { $(new_items).each(function(itemindex){ var item = $(this); if(item.hasclass(sort) && allowed_filters.indexof(sort) !== -1) { var term_count = filterlink.find('.avia-term-count').text(); filterlink.find('.avia-term-count').text(' ' + (parseint(term_count) + 1) + ' '); if(filterlink.hasclass('avia_hide_sort')) { filterlink.removeclass('avia_hide_sort').addclass('avia_show_sort'); masonry.find('.av-masonry-sort .'+sort+'_sep').removeclass('avia_hide_sort').addclass('avia_show_sort'); masonry.find('.av-masonry-sort .av-sort-by-term').removeclass('hidden'); } } }); } }); } filter_container.fadein(); } }); } else { finished(); } }, error: finished, complete: function() { settimeout(function() { the_win.trigger('debouncedresize'); }, 500); } }); } }; return this.each(function() { var masonry = $(this), container = masonry.find('.av-masonry-container'), bricks = masonry.find('.isotope-item'), filter = masonry.find('.av-masonry-sort').css({visibility:"visible", opacity:0}).on('click', 'a', methods.masonry_filter), load_more = masonry.find('.av-masonry-load-more').css({visibility:"visible", opacity:0}); $.avia_utilities.preload({container: container, single_callback: function() { var start_animation = function() { filter.animate({opacity:1}, 400); //fix for non aligned elements because of scrollbar if(container.outerheight() + container.offset().top + $('#footer').outerheight() > $(window).height()) { $('html').css({'overflow-y':'scroll'}); } methods.applymasonry(container, false, function() { masonry.addclass('avia_sortable_active'); container.removeclass('av-js-disabled '); }); methods.show_bricks(bricks, function() { load_more.css({opacity:1}).on('click', methods.loadmore); }); //container.isotope( 'relayout' ); }; if(ismobile) { start_animation(); } else { masonry.waypoint(start_animation , { offset: '80%'} ); } // update columnwidth on window resize $(window).on( 'debouncedresize', function() { methods.applymasonry(container, false, function() { masonry.addclass('avia_sortable_active'); }); }); } }); }); }; }(jquery));