PluginProbe
Sight – Professional Image Gallery and Portfolio / 1.1.7
Sight – Professional Image Gallery and Portfolio v1.1.7
trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
sight / render / js / _initLoadMore.js

_initLoadMore.js in Sight – Professional Image Gallery and Portfolio 1.1.7, at render/js/_initLoadMore.js

273 lines 6.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * AJAX Load More.
3 *
4 * Contains functions for AJAX Load More.
5 */
6
7 import {
8 $,
9 $window,
10 $doc,
11 $body,
12 sight
13 } from './utility';
14
15 /**
16 * Insert Load More
17 */
18 function sight_portfolio_load_more_insert( container, settings ) {
19 if ( 'none' === settings.pagination_type ) {
20 return;
21 }
22
23 if ( $( container ).find( '.sight-portfolio-area__pagination' ).length ) {
24 return;
25 }
26
27 $( container ).append( '<div class="sight-portfolio-area__pagination"><button class="sight-portfolio-load-more">' + settings.translation.load_more + '</button></div>' );
28 }
29
30 /**
31 * Get next posts
32 */
33 function sight_portfolio_ajax_get_posts( container, reload ) {
34 var pagination = $( container ).find( '.sight-portfolio-area__pagination' );
35 var loadMore = $( container ).find( '.sight-portfolio-load-more' );
36 var settings = $( container ).data( 'settings' );
37 var page = $( container ).data( 'page' );
38
39 // Filter terms.
40 var terms = [];
41
42 $( container ).find( '.sight-portfolio-area-filter__list li' ).each( function( index, elem ) {
43 if ( $( this ).is( '.sight-filter-active:not(.sight-filter-all)' ) ) {
44 terms.push( $( this ).find( 'a' ).data( 'filter' ) );
45 }
46 } );
47
48 // Set area loading.
49 $( container ).find( '.sight-portfolio-area__main' ).addClass( 'sight-portfolio-loading' );
50
51 // Set ajax settings.
52 if ( reload ) {
53 page = 1;
54 }
55
56 var data = {
57 action: 'sight_portfolio_ajax_load_more',
58 terms: terms,
59 page: page,
60 posts_per_page: settings.posts_per_page,
61 query_data: settings.query_data,
62 attributes: settings.attributes,
63 options: settings.options,
64 _ajax_nonce: settings.nonce,
65 };
66
67 // Set the loading state.
68 $( container ).data( 'loading', true );
69
70 // Set button text to Load More.
71 $( loadMore ).text( settings.translation.loading );
72
73 // Request Url.
74 var sight_pagination_url;
75
76 if ( 'ajax_restapi' === settings.type ) {
77 sight_pagination_url = settings.rest_url;
78 } else {
79 sight_pagination_url = settings.url;
80 }
81
82 // Send Request.
83 $.post( sight_pagination_url, data, function( res ) {
84 if ( res.success ) {
85
86 // Get the posts.
87 var data = $( res.data.content );
88
89 data.imagesLoaded( function() {
90
91 // Append new posts to list, standard and grid archives.
92 if ( reload ) {
93 $( container ).find( '.sight-portfolio-area__main' ).html( data );
94 } else {
95 $( container ).find( '.sight-portfolio-area__main' ).append( data );
96 }
97
98 // Entry animations.
99 $( container ).find( '.sight-portfolio-entry-request' ).each( function() {
100 if ( !$( this ).is( 'sight-portfolio-entry-animation' ) ) {
101 $( this ).addClass( 'sight-portfolio-entry-animation' ).animate( {opacity: 1, top: 0}, 600);
102 }
103 } );
104
105 // WP Post Load trigger.
106 $( window ).trigger( 'post-load' );
107
108 // Reinit Facebook widgets.
109 if ( $( '#fb-root' ).length && 'object' === typeof FB ) {
110 FB.XFBML.parse();
111 }
112
113 // Set button text to Load More.
114 $( loadMore ).text( settings.translation.load_more );
115
116 // Increment a page.
117 page = page + 1;
118
119 $( container ).data( 'page', page );
120
121 // Set the loading state.
122 $( container ).data( 'loading', false );
123 } );
124
125 // Remove Button on Posts End.
126 if ( res.data.posts_end || !data.length ) {
127
128 // Remove Load More button.
129 $( pagination ).remove();
130 } else {
131
132 // Add Load More button.
133 sight_portfolio_load_more_insert( container, settings );
134 }
135
136 $( container ).find( '.sight-portfolio-area__main' ).removeClass( 'sight-portfolio-loading' );
137 } else {
138 $( container ).find( '.sight-portfolio-area__main' ).removeClass( 'sight-portfolio-loading' );
139 }
140
141
142 } ).fail( function( xhr, textStatus, e ) {
143 // console.log(xhr.responseText);
144 } );
145 }
146
147 /**
148 * Initialization Load More
149 */
150 function sight_portfolio_load_more_init( infinite, blockId ) {
151
152 $( '.sight-portfolio-area' ).each( function() {
153
154 var sight_ajax_settings;
155
156 if ( blockId ) {
157 let itemId = $( this ).closest( `[data-block]` ).attr( 'id' );
158
159 if ( itemId !== blockId ) {
160 return;
161 }
162 } else if ( $( this ).data( 'init' ) ) {
163 return;
164 }
165
166 var archive_data = $( this ).data( 'items-area' );
167
168 if ( archive_data ) {
169 sight_ajax_settings = JSON.parse( window.atob( archive_data ) );
170 }
171
172 if ( sight_ajax_settings ) {
173 // Set load more settings.
174 $( this ).data( 'settings', sight_ajax_settings );
175 $( this ).data( 'page', 2 );
176 $( this ).data( 'loading', false );
177 $( this ).data( 'scrollHandling', {
178 allow: $.parseJSON( 'infinite' === sight_ajax_settings.pagination_type ? true : false ),
179 delay: 400
180 } );
181
182 if ( !infinite && ( 'infinite' === sight_ajax_settings.pagination_type ? true : false ) ) {
183 return;
184 }
185
186 // Add load more button.
187 if ( sight_ajax_settings.max_num_pages > 1 ) {
188 sight_portfolio_load_more_insert( this, sight_ajax_settings );
189 }
190 }
191
192 $( this ).data( 'init', true );
193 } );
194 }
195
196 sight_portfolio_load_more_init( true, false );
197
198 sight.addAction( 'sight.components.serverSideRender.onChange', 'sight/portfolio/loadmore', function( props ) {
199 if ( 'sight/portfolio' === props.block ) {
200
201 let blockId = $( `[id=block-${props.blockProps.clientId}]` ).attr( 'id' );
202
203 sight_portfolio_load_more_init( false, blockId );
204 }
205 } );
206
207 // On Scroll Event.
208 $( window ).scroll( function() {
209
210 $( '.sight-portfolio-area .sight-portfolio-load-more' ).each( function() {
211
212 var container = $( this ).closest( '.sight-portfolio-area' );
213
214 // Vars loading.
215 var loading = $( container ).data( 'loading' );
216 var scrollHandling = $( container ).data( 'scrollHandling' );
217
218 if ( 'undefined' === typeof scrollHandling ) {
219 return;
220 }
221
222 if ( $( this ).length && !loading && scrollHandling.allow ) {
223
224 scrollHandling.allow = false;
225
226 $( container ).data( 'scrollHandling', scrollHandling );
227
228 setTimeout( function() {
229 var scrollHandling = $( container ).data( 'scrollHandling' );
230
231 if ( 'undefined' === typeof scrollHandling ) {
232 return;
233 }
234
235 scrollHandling.allow = true;
236
237 $( container ).data( 'scrollHandling', scrollHandling );
238 }, scrollHandling.delay );
239
240 var offset = $( this ).offset().top - $( window ).scrollTop();
241 if ( 4000 > offset ) {
242 sight_portfolio_ajax_get_posts( container );
243 }
244 }
245 } );
246 } );
247
248 // On Click Event.
249 $( 'body' ).on( 'click', '.sight-portfolio-load-more', function() {
250 var container = $( this ).closest( '.sight-portfolio-area' );
251 var loading = $( this ).data( 'loading' );
252
253 if ( !loading ) {
254 sight_portfolio_ajax_get_posts( container, false );
255 }
256 } );
257
258 // On Click Categories.
259 $( 'body' ).on( 'click', '.sight-portfolio-area-filter__list a', function( e ) {
260 var container = $( this ).closest( '.sight-portfolio-area' );
261
262 // Remove active item.
263 $( this ).parent().siblings().removeClass( 'sight-filter-active' );
264
265 // Active item.
266 $( this ).parent().addClass( 'sight-filter-active' );
267
268 // Ajax.
269 sight_portfolio_ajax_get_posts( container, true );
270
271 e.preventDefault();
272 } );
273