PluginProbe
WP Ultimate Post Grid / 1.7.2
WP Ultimate Post Grid v1.7.2
4.1.1 trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.8 1.9 2.0 2.1 2.2 2.3 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.2 3.0.0 3.3.0 3.4.0 3.5.0 3.6.0 3.7.0 All 32 releases
wp-ultimate-post-grid / js / grid.js

grid.js in WP Ultimate Post Grid 1.7.2, at js/grid.js

509 lines 18.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var WPUltimatePostGrid = WPUltimatePostGrid || {};
2
3 WPUltimatePostGrid.grids = {};
4
5 WPUltimatePostGrid.initGrid = function(container) {
6 var grid_id = container.data('grid');
7
8 var args = {
9 itemSelector: '.wpupg-item',
10 transitionDuration: wpupg_public.animationSpeed,
11 hiddenStyle: {
12 opacity: 0
13 },
14 visibleStyle: {
15 opacity: 1
16 }
17 };
18
19 if(wpupg_public.rtl) {
20 args.isOriginLeft = false;
21 }
22
23 var layout_mode = container.data('layout-mode');
24 if(layout_mode) {
25 args.layoutMode = layout_mode;
26 }
27
28 if(layout_mode == 'masonry' && container.data('centered')) {
29 args.masonry = {
30 isFitWidth: true
31 };
32 }
33
34 container.isotope(args);
35
36 container.imagesLoaded( function() {
37 container.isotope('layout');
38 });
39
40 WPUltimatePostGrid.grids[grid_id] = {
41 container: container,
42 centered: container.data('centered'),
43 data: window['wpupg_grid_' + container.data('grid-id')],
44 id: container.data('grid-id'),
45 pages: [0],
46 page: 0,
47 filters: {}
48 };
49
50 WPUltimatePostGrid.checkLinks(grid_id);
51 WPUltimatePostGrid.updatePosts(grid_id);
52 };
53
54 WPUltimatePostGrid.updatePosts = function(grid_id) {
55 var grid = WPUltimatePostGrid.grids[grid_id];
56
57 var posts = [];
58
59 grid.container.find('.wpupg-item').each(function() {
60 var post_id = jQuery(this).data('id');
61 posts.push(post_id);
62 });
63
64 WPUltimatePostGrid.grids[grid_id].posts = posts;
65 };
66
67 WPUltimatePostGrid.filterGrid = function(grid_id) {
68 var grid = WPUltimatePostGrid.grids[grid_id];
69 var filters = [];
70
71 // Page filter
72 if(grid.pagination_type == 'pages') {
73 var page = grid.page || 0;
74 filters.push(['.wpupg-page-' + page]);
75 }
76
77 // Taxonomy filters
78 for(var taxonomy in grid.filters) {
79 if(grid.filters.hasOwnProperty(taxonomy)) {
80 var taxonomy_filters = grid.filters[taxonomy];
81
82 var match_one_filters = [];
83 var match_all_filter = '';
84
85 if(taxonomy_filters) {
86 for(var i = 0; i < taxonomy_filters.length; i++) {
87 if(grid.multiselect_type == 'match_one') {
88 match_one_filters.push('.wpupg-tax-' + taxonomy + '-' + taxonomy_filters[i]);
89 } else {
90 match_all_filter += '.wpupg-tax-' + taxonomy + '-' + taxonomy_filters[i];
91 }
92 }
93 }
94
95 if(grid.multiselect_type == 'match_one') {
96 if(match_one_filters.length > 0) filters.push(match_one_filters);
97 } else {
98 if(match_all_filter !== '') filters.push([match_all_filter]);
99 }
100 }
101 }
102
103 grid.filter = '';
104 WPUltimatePostGrid.getFilterString(grid_id, '', filters, 0);
105
106 grid.container.isotope({ filter: grid.filter });
107 grid.container.trigger('wpupgFiltered');
108 WPUltimatePostGrid.updateDeeplink();
109 };
110
111 WPUltimatePostGrid.getFilterString = function(grid_id, s, attrs, k) {
112 if(k==attrs.length) {
113 if(WPUltimatePostGrid.grids[grid_id].filter !== '') s = ', ' + s;
114 WPUltimatePostGrid.grids[grid_id].filter += s;
115 } else {
116 for(var i=0; i<attrs[k].length;i++) {
117 WPUltimatePostGrid.getFilterString(grid_id, s+attrs[k][i], attrs, k+1);
118 }
119 }
120 };
121
122 WPUltimatePostGrid.updateDeeplink = function() {
123 var link = '';
124
125 for(var grid_id in WPUltimatePostGrid.grids) {
126 if(WPUltimatePostGrid.grids.hasOwnProperty(grid_id)) {
127 var grid = WPUltimatePostGrid.grids[grid_id];
128 var grid_link = '';
129
130 // Page filter
131 if(grid.page != 0) grid_link += '|p:' + (grid.page+1);
132
133 // Taxonomy filters
134 for(var taxonomy in grid.filters) {
135 if(grid.filters.hasOwnProperty(taxonomy)) {
136 var taxonomy_filter = grid.filters[taxonomy];
137
138 if(taxonomy_filter.length > 0) {
139 grid_link += '|' + taxonomy + ':' + taxonomy_filter.join(',');
140 }
141 }
142 }
143
144 if(grid_link != '') {
145 if(link != '') link += '#';
146 link += grid_id;
147 link += grid_link;
148 }
149 }
150 }
151
152 if(link == '') link = '*';
153 document.location.hash = link;
154 };
155
156 WPUltimatePostGrid.restoreDeeplink = function() {
157 var link = document.location.hash;
158 link = link.substr(1);
159
160 if(link && link != '*') {
161 // Make sure characters are not URL encoded
162 link = link.replace('%23', '#');
163 link = link.replace('%7C', '|');
164 link = link.replace('%3A', ':');
165 link = link.replace('%2C', ',');
166
167 var grids = link.split('#');
168
169 for(var i=0; i < grids.length; i++) {
170 var parts = grids[i].split('|');
171 var grid_id = parts[0];
172
173 for(var j=1; j < parts.length; j++) {
174 var filter = parts[j].split(':');
175
176 if(filter[0] == 'p') {
177 var page = parseInt(filter[1]) - 1;
178 WPUltimatePostGrid.updatePagination(jQuery('#wpupg-grid-' + grid_id + '-pagination'), page);
179 } else {
180 var terms = filter[1].split(',');
181 WPUltimatePostGrid.updateFilter(jQuery('#wpupg-grid-' + grid_id + '-filter'), filter[0], terms);
182 }
183 }
184 }
185 }
186 };
187
188 WPUltimatePostGrid.checkLinks = function(grid_id) {
189 var grid = WPUltimatePostGrid.grids[grid_id];
190 var link_type = grid.container.data('link-type');
191 var link_target = grid.container.data('link-target');
192
193 if(link_type != 'none') {
194 grid.container.find('.wpupg-item').each(function() {
195 var item = jQuery(this);
196
197 // Remove links from item
198 item.find('a:not(.wpupg-keep-link, .wpurp-recipe-favorite, .wpurp-recipe-add-to-shopping-list, .wpurp-recipe-print-button, .wpurp-recipe-grid-link)').each(function() {
199 var link = jQuery(this);
200 if(link.parents('.sharrre').length == 0) {
201 link.replaceWith(function() { return link.contents(); });
202 }
203 });
204
205 var link = item.data('custom-link') ? item.data('custom-link') : ( link_target == 'post' ? item.data('permalink') : item.data('image') );
206 var rel = link_target == 'post' ? '' : ' rel="lightbox"';
207
208 // Add link around item
209 if (link && item.parent('a').length == 0) {
210 item.wrap('<a href="' + link + '" target="' + link_type + '"' + rel + '></a>');
211 }
212 });
213 }
214 };
215
216 WPUltimatePostGrid.updateFilter = function(container, taxonomy, terms) {
217 var type = container.data('type');
218 var func = 'updateFilter' + type.charAt(0).toUpperCase() + type.slice(1);
219 if(typeof WPUltimatePostGrid[func] == 'function') {
220 WPUltimatePostGrid[func](container, taxonomy, terms);
221 }
222 };
223
224 WPUltimatePostGrid.updateFilterIsotope = function(container, taxonomy, terms) {
225 for(var i = 0; i < terms.length; i++) {
226 container.find('.wpupg-filter-tag-' + terms[i]).click();
227 }
228 };
229
230 WPUltimatePostGrid.initFilterIsotope = function(container) {
231 var grid_id = container.data('grid');
232
233 WPUltimatePostGrid.grids[grid_id].multiselect = container.data('multiselect');
234 WPUltimatePostGrid.grids[grid_id].multiselect_type = container.data('multiselect-type');
235
236 container.find('.wpupg-filter-isotope-term').click(function() {
237 var filter_item = jQuery(this);
238 var taxonomy = filter_item.data('taxonomy');
239 var filter_all = filter_item.data('filter') == undefined;
240 var filter_term = filter_item.data('filter');
241
242 var filters = [];
243
244 if(WPUltimatePostGrid.grids[grid_id].multiselect && !filter_all) {
245 // Make sure "All" is not selected
246 filter_item.siblings('.wpupg-filter-tag-').removeClass('active').trigger('checkActiveFilter');
247
248 filters = WPUltimatePostGrid.grids[grid_id].filters || [];
249
250 if(filters[taxonomy] == undefined) filters[taxonomy] = [];
251
252 var term_index = filters[taxonomy].indexOf(filter_term);
253 if(term_index == -1) {
254 // Term was not select before, add
255 filter_item.addClass('active').trigger('checkActiveFilter');
256 filters[taxonomy].push(filter_term);
257 } else {
258 // Term was already selected, remove
259 filter_item.removeClass('active').trigger('checkActiveFilter');
260 filters[taxonomy].splice(term_index, 1);
261
262 // Set "All" active if no terms left
263 var nbr_terms = 0;
264
265 for(var filter_taxonomy in filters) {
266 if(filters.hasOwnProperty(filter_taxonomy)) {
267 var filter_taxonomy_terms = filters[filter_taxonomy];
268
269 if(filter_taxonomy_terms) {
270 nbr_terms += filter_taxonomy_terms.length;
271 }
272 }
273 }
274
275 if(nbr_terms == 0) {
276 filter_item.siblings('.wpupg-filter-tag-').addClass('active').trigger('checkActiveFilter');
277 }
278 }
279 } else {
280 filter_item.siblings('.wpupg-filter-isotope-term').removeClass('active').trigger('checkActiveFilter');
281 filter_item.addClass('active').trigger('checkActiveFilter');
282
283 if(!filter_all) {
284 filters[taxonomy] = [filter_term];
285 }
286 }
287
288 WPUltimatePostGrid.grids[grid_id].filters = filters;
289 WPUltimatePostGrid.filterGrid(grid_id);
290 });
291
292 var filter_type = container.data('filter-type');
293 var filter_items = container.find('.wpupg-filter-item');
294
295 if(filter_type == 'isotope') {
296 var margin = container.data('margin-vertical') + 'px ' + container.data('margin-horizontal') + 'px';
297 var padding = container.data('padding-vertical') + 'px ' + container.data('padding-horizontal') + 'px';
298 var border = container.data('border-width') + 'px solid ' + container.data('border-color');
299 var background_color = container.data('background-color');
300 var text_color = container.data('text-color');
301
302 var active_border = container.data('border-width') + 'px solid ' + container.data('active-border-color');
303 var active_background_color = container.data('active-background-color');
304 var active_text_color = container.data('active-text-color');
305
306 var hover_border = container.data('border-width') + 'px solid ' + container.data('hover-border-color');
307 var hover_background_color = container.data('hover-background-color');
308 var hover_text_color = container.data('hover-text-color');
309
310 filter_items.each(function() {
311 var filter_item = jQuery(this);
312
313 filter_item
314 .css('margin', margin)
315 .css('padding', padding)
316 .css('border', border)
317 .css('background-color', background_color)
318 .css('color', text_color)
319 .hover(function() {
320 if(!filter_item.hasClass('active')) {
321 filter_item
322 .css('border', hover_border)
323 .css('background-color', hover_background_color)
324 .css('color', hover_text_color);
325 }
326 }, function() {
327 if(!filter_item.hasClass('active')) {
328 filter_item
329 .css('border', border)
330 .css('background-color', background_color)
331 .css('color', text_color);
332 }
333 })
334 .on('checkActiveFilter', function() {
335 if(filter_item.hasClass('active')) {
336 filter_item
337 .css('border', active_border)
338 .css('background-color', active_background_color)
339 .css('color', active_text_color);
340 } else {
341 filter_item
342 .css('border', border)
343 .css('background-color', background_color)
344 .css('color', text_color);
345 }
346 }).trigger('checkActiveFilter');
347 });
348 }
349 };
350
351 WPUltimatePostGrid.updatePagination = function(container, page) {
352 var type = container.data('type');
353 var func = 'updatePagination' + type.charAt(0).toUpperCase() + type.slice(1);
354 if(typeof WPUltimatePostGrid[func] == 'function') {
355 WPUltimatePostGrid[func](container, page);
356 }
357 };
358
359 WPUltimatePostGrid.updatePaginationPages = function(container, page) {
360 container.find('.wpupg-page-' + page).click();
361 };
362
363 WPUltimatePostGrid.initPaginationPages = function(container) {
364 var grid_id = container.data('grid');
365
366 container.find('.wpupg-pagination-term').click(function() {
367 var pagination_item = jQuery(this);
368 pagination_item.siblings('.wpupg-pagination-term').removeClass('active').trigger('checkActiveFilter');
369
370 var page = parseInt(pagination_item.addClass('active').trigger('checkActiveFilter').data('page'));
371
372 if(WPUltimatePostGrid.grids[grid_id].pages.indexOf(page) !== -1) {
373 WPUltimatePostGrid.grids[grid_id].page = page;
374 WPUltimatePostGrid.filterGrid(grid_id);
375 } else {
376 // Get new page via AJAX
377 var data = {
378 action: 'wpupg_get_page',
379 security: wpupg_public.nonce,
380 grid: grid_id,
381 page: page
382 };
383
384 pagination_item.addClass('wpupg-spinner');
385 pagination_item.css('color', WPUltimatePostGrid.grids[grid_id].pagination_style.active_background_color);
386
387 // Get recipes through AJAX
388 jQuery.post(wpupg_public.ajax_url, data, function(html) {
389 var posts = jQuery(html).toArray();
390 WPUltimatePostGrid.grids[grid_id].container.isotope('insert', posts);
391 WPUltimatePostGrid.grids[grid_id].page = page;
392 WPUltimatePostGrid.filterGrid(grid_id);
393 WPUltimatePostGrid.checkLinks(grid_id);
394
395 WPUltimatePostGrid.grids[grid_id].container.imagesLoaded( function() {
396 WPUltimatePostGrid.grids[grid_id].container.isotope('layout');
397 });
398
399 pagination_item.removeClass('wpupg-spinner');
400 pagination_item.css('color', WPUltimatePostGrid.grids[grid_id].pagination_style.active_text_color);
401
402 WPUltimatePostGrid.grids[grid_id].pages.push(page);
403 WPUltimatePostGrid.updatePosts(grid_id);
404 });
405 }
406 });
407
408 var pagination_items = container.find('.wpupg-pagination-term');
409
410 var margin = container.data('margin-vertical') + 'px ' + container.data('margin-horizontal') + 'px';
411 var padding = container.data('padding-vertical') + 'px ' + container.data('padding-horizontal') + 'px';
412 var border = container.data('border-width') + 'px solid ' + container.data('border-color');
413 var background_color = container.data('background-color');
414 var text_color = container.data('text-color');
415
416 var active_border = container.data('border-width') + 'px solid ' + container.data('active-border-color');
417 var active_background_color = container.data('active-background-color');
418 var active_text_color = container.data('active-text-color');
419
420 var hover_border = container.data('border-width') + 'px solid ' + container.data('hover-border-color');
421 var hover_background_color = container.data('hover-background-color');
422 var hover_text_color = container.data('hover-text-color');
423
424 WPUltimatePostGrid.grids[grid_id].pagination_style = {
425 margin: margin,
426 padding: padding,
427 border: border,
428 background_color: background_color,
429 text_color: text_color,
430 active_border: active_border,
431 active_background_color: active_background_color,
432 active_text_color: active_text_color,
433 hover_border: hover_border,
434 hover_background_color: hover_background_color,
435 hover_text_color: hover_text_color
436 }
437
438 pagination_items.each(function() {
439 var pagination_item = jQuery(this);
440
441 pagination_item
442 .css('margin', margin)
443 .css('padding', padding)
444 .css('border', border)
445 .css('background-color', background_color)
446 .css('color', text_color)
447 .hover(function() {
448 if(!pagination_item.hasClass('active')) {
449 pagination_item
450 .css('border', hover_border)
451 .css('background-color', hover_background_color)
452 .css('color', hover_text_color);
453 }
454 }, function() {
455 if(!pagination_item.hasClass('active')) {
456 pagination_item
457 .css('border', border)
458 .css('background-color', background_color)
459 .css('color', text_color);
460 }
461 })
462 .on('checkActiveFilter', function() {
463 if(pagination_item.hasClass('active')) {
464 pagination_item
465 .css('border', active_border)
466 .css('background-color', active_background_color)
467 .css('color', active_text_color);
468 } else {
469 pagination_item
470 .css('border', border)
471 .css('background-color', background_color)
472 .css('color', text_color);
473 }
474 }).trigger('checkActiveFilter');
475 });
476 };
477
478 jQuery(document).ready(function($) {
479 $('.wpupg-grid').each(function() {
480 WPUltimatePostGrid.initGrid($(this));
481 });
482
483 $('.wpupg-filter').each(function() {
484 var container = $(this);
485 var grid_id = container.data('grid');
486 var type = container.data('type');
487
488 WPUltimatePostGrid.grids[grid_id].filter_type = type;
489
490 var func = 'initFilter' + type.charAt(0).toUpperCase() + type.slice(1);
491 if(typeof WPUltimatePostGrid[func] == 'function') {
492 WPUltimatePostGrid[func](container);
493 }
494 });
495
496 $('.wpupg-pagination').each(function() {
497 var container = $(this);
498 var grid_id = container.data('grid');
499 var type = container.data('type');
500
501 WPUltimatePostGrid.grids[grid_id].pagination_type = type;
502
503 var func = 'initPagination' + type.charAt(0).toUpperCase() + type.slice(1);
504 if(typeof WPUltimatePostGrid[func] == 'function') {
505 WPUltimatePostGrid[func](container);
506 }
507 });
508 WPUltimatePostGrid.restoreDeeplink();
509 });