pluto3/assets/js/infinite-scroll.js
2017-09-19 16:23:41 +08:00

216 lines
10 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

( function( $ ) {
"use strict";
// Plugin definition.
$.fn.osetin_infinite_scroll = function( options ) {
// Extend our default options with those provided.
// Note that the first argument to extend is an empty
// object this is to keep from overriding our "defaults" object.
var opts = $.extend( {}, $.fn.osetin_infinite_scroll.defaults, options );
// Our plugin implementation code goes here.
};
// Plugin defaults added as a property on our plugin function.
$.fn.osetin_infinite_scroll.defaults = {
foreground: "red",
background: "yellow"
};
$.fn.osetin_infinite_scroll.init_infinite_scroll = function() {
// Infinite scroll init
if($('body').hasClass('with-infinite-scroll') && $('.isotope-next-params').length){
$('.pagination-w.hide-for-isotope').hide().after('<div class="infinite-scroll-trigger"></div>');
$(window).scroll($.debounce( 50, function(){ $.fn.osetin_infinite_scroll.loadNextPageIsotope(false); }));
$('.load-more-posts-button-w a').on('click', function(){ $.fn.osetin_infinite_scroll.loadNextPageIsotope(false); return false; });
}
// Infinite button init
if($('body').hasClass('with-infinite-button') && $('.isotope-next-params').length){
$('.pagination-w.hide-for-isotope').hide();
$('.load-more-posts-button-w a').on('click', function(){ $.fn.osetin_infinite_scroll.loadNextPageIsotope(false); return false; });
}
}
$.fn.osetin_infinite_scroll.is_display_type = function(display_type){
return ( ($('.display-type').css('content') == display_type) || ($('.display-type').css('content') == '"'+display_type+'"'));
}
$.fn.osetin_infinite_scroll.not_display_type = function(display_type){
return ( ($('.display-type').css('content') != display_type) && ($('.display-type').css('content') != '"'+display_type+'"'));
}
$.fn.osetin_infinite_scroll.loadNextPageIsotope = function(forse_load){
if(!$('body').hasClass('infinite-loading-pending')){
if($('.isotope-next-params').length){
if($.fn.osetin_infinite_scroll.isScrolledIntoView('.infinite-scroll-trigger') || forse_load){
// if loading animation is not already on a page - add it
if(!$('.isotope-loading').length){
var $loading_block = $('<div class="isotope-loading"></div>');
$loading_block.insertAfter('.index-isotope');
}
var os_layout_type = 'v3';
if($('.isotope-next-params').data("layout-type") == 'v1'){
os_layout_type = 'v1';
}
if($('.isotope-next-params').data("layout-type") == 'v2'){
os_layout_type = 'v2';
}
if($('.isotope-next-params').data("layout-type") == 'v3'){
os_layout_type = 'v3';
}
if($('.isotope-next-params').data("layout-type") == 'v3-simple'){
os_layout_type = 'v3-simple';
}
var os_template_type = $('.isotope-next-params').data("template-type");
$.ajax({
type: "POST",
url: ajaxurl,
dataType: 'json',
data: {
action: 'load_infinite_content',
next_params: $('.isotope-next-params').data("params"),
layout_type: os_layout_type,
template_type: os_template_type
},
beforeSend: function(){
$('body').addClass('infinite-loading-pending');
},
success: function(response){
if(response.success){
if(response.has_posts){
// posts found and returned
var $new_posts = $(response.new_posts);
if($('.index-isotope').length && ($.fn.osetin_infinite_scroll.not_display_type("tablet") || ($.fn.osetin_infinite_scroll.is_display_type("tablet") && $('body').hasClass('menu-position-top') && $('body').hasClass('no-sidebar'))) && $.fn.osetin_infinite_scroll.not_display_type("phone")){
$('.index-isotope').append($new_posts).isotope( 'appended', $new_posts ).imagesLoaded(function(){
$('.index-isotope').isotope('layout');
// setTimeout(function(){
// $('.index-isotope .pluto-post-box .post-media-body, .index-isotope .product-media-body').find('.figure-link-w, iframe').slideDown(300, function(){
// $('.index-isotope').isotope('layout');
// setTimeout(function(){
// $('.index-isotope .pluto-post-box .post-media-body, .index-isotope .product-media-body').find('.figure-link-w, iframe').addClass('os-faded-in');
// }, 50)
// });
// }, 500);
});
}else{
$('.index-isotope').append($new_posts);
}
if(response.next_params){
$('.isotope-next-params').data("params", response.next_params);
}else{
$('.isotope-next-params').remove();
$('.load-more-posts-button-w').remove();
$('.index-isotope').after('<div class="no-more-posts-message"><span>' + response.no_more_posts_message + '</span></div>');
$('.no-more-posts-message').hide().fadeIn("slow");
}
$('body').removeClass('infinite-loading-pending');
// INIT NEW FACEBOOK LIKE BUTTONS
if($('.item-isotope .meta-like .fb-like').length){
try{
FB.XFBML.parse();
}catch(ex){}
}
// INIT NEW PINTEREST PIN BUTTONS
if($('.item-isotope .meta-like a[data-pin-do="buttonPin"]').length){
try{
window.parsePinBtns();
}catch(ex){}
}
// IF LIGHTBOX POSTS PRESENT and next post is not set yet - RELOAD NEXT POST
if($('.lightbox-post-shadow').length && !$('.post-next-lightbox.make-visible').length){
var current_post_id = $('.lightbox-post-w').data('post-id');
var $next_tile = $('.item-isotope article#post-'+ current_post_id).closest('.item-isotope').nextAll('.item-isotope:not(.magic-item-w):first');
if($next_tile.length){
var next_tile_post_id = $next_tile.find('article').first().attr('id').replace('post-', '');
var next_tile_title = $next_tile.find('.entry-title a').text();
if(!next_tile_title){
next_tile_title = $next_tile.find('.archive-item-media-thumbnail').data('lightbox-caption');
}
if(!next_tile_title){
next_tile_title = $next_tile.find('.archive-item-content-text').text();
}
if($next_tile.find('figure.abs-image img').length){
var next_tile_featured_image_url = $next_tile.find('figure.abs-image img').attr('src');
}else if($next_tile.find('figure.abs-slider li:first img').length){
var next_tile_featured_image_url = $next_tile.find('figure.abs-slider li:first img').attr('src');
}else if($next_tile.find('.post-video-box').length){
var next_tile_featured_image_url = $next_tile.find('.post-video-box').data('featured-image-url');
}
$('body').append('<a href="#" data-post-id="' + next_tile_post_id + '" class="post-next-lightbox"><div class="post-next-prev-nav-arrow"><i class="os-icon os-icon-angle-right"></i></div><div class="post-next-prev-image" style="background-image: url('+ next_tile_featured_image_url +');"></div><h4>'+ next_tile_title +'</h4></a>');
$('.post-next-lightbox').fadeIn(300, function(){ $(this).addClass('make-visible')});
}
}
$('.os-lightbox-activator').magnificPopup({
type: 'image',
mainClass: 'mfp-with-zoom', // this class is for CSS animation below
zoom: {
enabled: true, // By default it's false, so don't forget to enable it
duration: 300, // duration of the effect, in milliseconds
easing: 'ease-in-out', // CSS transition easing function
// The "opener" function should return the element from which popup will be zoomed in
// and to which popup will be scaled down
// By defailt it looks for an image tag:
opener: function(openerElement) {
// openerElement is the element on which popup was initialized, in this case its <a> tag
// you don't need to add "opener" option if this code matches your needs, it's defailt one.
return openerElement.is('img') ? openerElement : openerElement.find('img');
}
}
});
$('.flexslider').flexslider({
animation : "slide"
});
}else{
// no more posts
$('.isotope-next-params').remove();
$('body').removeClass('infinite-loading-pending');
$('.index-isotope').append(response.no_more_posts_message);
}
}else{
// error handling
}
$('.isotope-loading').remove();
}
});
}
}
}
}
$.fn.osetin_infinite_scroll.isScrolledIntoView = function(elem)
{
if($('body').hasClass('with-infinite-button')){
// if button was clicked - no need to check if user scrolled into view or not just return true
return true;
}else{
if(elem.length){
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}else{
return false;
}
}
}
} )( jQuery );