PluginProbe
WP Ultimate Post Grid / 1.9
WP Ultimate Post Grid v1.9
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.9, at js/grid.js

606 lines 21.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 jQuery(container).on('hover', '.wpupg-item', function(e) {
54 var hovering = e.type == 'mouseenter';
55 WPUltimatePostGrid.hoverGridItem(jQuery(this), hovering);
56 });
57 };
58
59 WPUltimatePostGrid.hoverGridItem = function(grid_item, hovering) {
60 if(hovering) {
61 grid_item.addClass('wpupg-hovering');
62
63 grid_item.find('.wpupg-show-on-hover').each(function() {
64 var item = jQuery(this),
65 effect = item.data('hover-in'),
66 duration = parseInt(item.data('hover-in-duration'));
67
68 if(effect == 'fade') {
69 item.fadeIn(duration);
70 } else if(effect == 'slide') {
71 item.slideDown(duration);
72 } else {
73 item.show();
74 }
75 });
76
77 grid_item.find('.wpupg-hide-on-hover').each(function() {
78 var item = jQuery(this),
79 effect = item.data('hover-out'),
80 duration = parseInt(item.data('hover-out-duration'));
81
82 if(effect == 'fade') {
83 item.fadeOut(duration);
84 } else if(effect == 'slide') {
85 item.slideUp(duration);
86 } else {
87 item.hide();
88 }
89 });
90 } else {
91 grid_item.removeClass('wpupg-hovering');
92
93 grid_item.find('.wpupg-show-on-hover').each(function() {
94 var item = jQuery(this),
95 effect = item.data('hover-out'),
96 duration = parseInt(item.data('hover-out-duration'));
97
98 if(effect == 'fade') {
99 item.fadeOut(duration);
100 } else if(effect == 'slide') {
101 item.slideUp(duration);
102 } else {
103 item.hide();
104 }
105 });
106
107 grid_item.find('.wpupg-hide-on-hover').each(function() {
108 var item = jQuery(this),
109 effect = item.data('hover-in'),
110 duration = parseInt(item.data('hover-in-duration'));
111
112 if(effect == 'fade') {
113 item.fadeIn(duration);
114 } else if(effect == 'slide') {
115 item.slideDown(duration);
116 } else {
117 item.show();
118 }
119 });
120 }
121 };
122
123 WPUltimatePostGrid.updatePosts = function(grid_id) {
124 var grid = WPUltimatePostGrid.grids[grid_id];
125
126 var posts = [];
127
128 grid.container.find('.wpupg-item').each(function() {
129 var post_id = jQuery(this).data('id');
130 posts.push(post_id);
131 });
132
133 WPUltimatePostGrid.grids[grid_id].posts = posts;
134 };
135
136 WPUltimatePostGrid.filterGrid = function(grid_id) {
137 var grid = WPUltimatePostGrid.grids[grid_id];
138 var filters = [];
139
140 // Page filter
141 if(grid.pagination_type == 'pages') {
142 var page = grid.page || 0;
143 filters.push(['.wpupg-page-' + page]);
144 }
145
146 // Taxonomy filters
147 for(var taxonomy in grid.filters) {
148 if(grid.filters.hasOwnProperty(taxonomy)) {
149 var taxonomy_filters = grid.filters[taxonomy];
150
151 var match_one_filters = [];
152 var match_all_filter = '';
153 var filter = '';
154
155 if(taxonomy_filters) {
156 for(var i = 0; i < taxonomy_filters.length; i++) {
157 filter = '.wpupg-tax-' + taxonomy + '-' + taxonomy_filters[i];
158
159 if(grid.multiselect_type == 'match_one') {
160 match_one_filters.push(filter);
161 } else {
162 match_all_filter += filter;
163 }
164 }
165 }
166
167 if(grid.multiselect_type == 'match_one') {
168 if(match_one_filters.length > 0) filters.push(match_one_filters);
169 } else {
170 if(match_all_filter !== '') filters.push([match_all_filter]);
171 }
172 }
173 }
174
175 grid.filter = '';
176 WPUltimatePostGrid.getFilterString(grid_id, '', filters, 0);
177 if(grid.inverse) {
178 if(grid.pagination_type == 'pages') {
179 var page = grid.page || 0;
180 var filter_without_page = grid.filter.replace('.wpupg-page-' + page, '');
181
182 grid.filter = '.wpupg-page-' + page + ':not(' + filter_without_page + ')';
183 } else {
184 grid.filter = ':not(' + grid.filter + ')';
185 }
186 }
187
188 grid.container.isotope({ filter: grid.filter });
189 grid.container.trigger('wpupgFiltered');
190 WPUltimatePostGrid.updateDeeplink();
191 };
192
193 WPUltimatePostGrid.getFilterString = function(grid_id, s, attrs, k) {
194 if(k==attrs.length) {
195 if(WPUltimatePostGrid.grids[grid_id].filter !== '') s = ', ' + s;
196 WPUltimatePostGrid.grids[grid_id].filter += s;
197 } else {
198 for(var i=0; i<attrs[k].length;i++) {
199 WPUltimatePostGrid.getFilterString(grid_id, s+attrs[k][i], attrs, k+1);
200 }
201 }
202 };
203
204 WPUltimatePostGrid.updateDeeplink = function() {
205 var link = '';
206
207 for(var grid_id in WPUltimatePostGrid.grids) {
208 if(WPUltimatePostGrid.grids.hasOwnProperty(grid_id)) {
209 var grid = WPUltimatePostGrid.grids[grid_id];
210 var grid_link = '';
211
212 // Page filter
213 if(grid.page != 0) grid_link += '|p:' + (grid.page+1);
214
215 // Taxonomy filters
216 for(var taxonomy in grid.filters) {
217 if(grid.filters.hasOwnProperty(taxonomy)) {
218 var taxonomy_filter = grid.filters[taxonomy];
219
220 if(taxonomy_filter.length > 0) {
221 grid_link += '|' + taxonomy + ':' + taxonomy_filter.join(',');
222 }
223 }
224 }
225
226 if(grid_link != '') {
227 if(link != '') link += '#';
228 link += grid_id;
229 link += grid_link;
230 }
231 }
232 }
233
234 if(link == '') link = '*';
235 document.location.hash = link;
236 };
237
238 WPUltimatePostGrid.restoreDeeplink = function() {
239 var link = document.location.hash;
240 link = link.substr(1);
241
242 if(link && link != '*') {
243 // Make sure characters are not URL encoded
244 link = link.replace('%23', '#');
245 link = link.replace('%7C', '|');
246 link = link.replace('%3A', ':');
247 link = link.replace('%2C', ',');
248
249 var grids = link.split('#');
250
251 for(var i=0; i < grids.length; i++) {
252 var parts = grids[i].split('|');
253 var grid_id = parts[0];
254
255 for(var j=1; j < parts.length; j++) {
256 var filter = parts[j].split(':');
257
258 if(filter[0] == 'p') {
259 var page = parseInt(filter[1]) - 1;
260 WPUltimatePostGrid.updatePagination(jQuery('#wpupg-grid-' + grid_id + '-pagination'), page);
261 } else {
262 var terms = filter[1].split(',');
263 WPUltimatePostGrid.updateFilter(jQuery('#wpupg-grid-' + grid_id + '-filter'), filter[0], terms);
264 }
265 }
266 }
267 }
268 };
269
270 WPUltimatePostGrid.checkLinks = function(grid_id) {
271 var grid = WPUltimatePostGrid.grids[grid_id];
272 var link_type = grid.container.data('link-type');
273 var link_target = grid.container.data('link-target');
274
275 if(link_type != 'none') {
276 grid.container.find('.wpupg-item').each(function() {
277 var item = jQuery(this);
278
279 // Remove links from item
280 item.find('a:not(.wpupg-keep-link, .wpurp-recipe-favorite, .wpurp-recipe-add-to-shopping-list, .wpurp-recipe-add-to-meal-plan, .wpurp-recipe-print-button, .wpurp-recipe-grid-link)').each(function() {
281 var link = jQuery(this);
282 if(link.parents('.sharrre').length == 0) {
283 link.replaceWith(function() { return link.contents(); });
284 }
285 });
286
287 var link = item.data('custom-link') ? item.data('custom-link') : ( link_target == 'post' ? item.data('permalink') : item.data('image') );
288 var rel = link_target == 'post' ? '' : ' rel="lightbox"';
289
290 // Add link around item
291 if (link && item.parent('a').length == 0) {
292 item.wrap('<a href="' + link + '" target="' + link_type + '"' + rel + '></a>');
293 }
294 });
295 }
296 };
297
298 WPUltimatePostGrid.updateFilter = function(container, taxonomy, terms) {
299 var type = container.data('type');
300 var func = 'updateFilter' + type.charAt(0).toUpperCase() + type.slice(1);
301 if(typeof WPUltimatePostGrid[func] == 'function') {
302 WPUltimatePostGrid[func](container, taxonomy, terms);
303 }
304 };
305
306 WPUltimatePostGrid.updateFilterIsotope = function(container, taxonomy, terms) {
307 for(var i = 0; i < terms.length; i++) {
308 container.find('.wpupg-filter-tag-' + terms[i]).click();
309 }
310 };
311
312 WPUltimatePostGrid.initFilterIsotope = function(container) {
313 var grid_id = container.data('grid');
314
315 WPUltimatePostGrid.grids[grid_id].multiselect = container.data('multiselect');
316 WPUltimatePostGrid.grids[grid_id].multiselect_type = container.data('multiselect-type');
317 WPUltimatePostGrid.grids[grid_id].inverse = container.data('inverse');
318
319 container.find('.wpupg-filter-isotope-term').click(function() {
320 var filter_item = jQuery(this);
321 var taxonomy = filter_item.data('taxonomy');
322 var filter_all = filter_item.data('filter') == undefined;
323 var filter_term = filter_item.data('filter');
324
325 var filters = [];
326
327 if(WPUltimatePostGrid.grids[grid_id].multiselect && !filter_all) {
328 // Make sure "All" is not selected
329 filter_item.siblings('.wpupg-filter-tag-').removeClass('active').trigger('checkActiveFilter');
330
331 filters = WPUltimatePostGrid.grids[grid_id].filters || [];
332
333 if(filters[taxonomy] == undefined) filters[taxonomy] = [];
334
335 var term_index = filters[taxonomy].indexOf(filter_term);
336 if(term_index == -1) {
337 // Term was not select before, add
338 filter_item.addClass('active').trigger('checkActiveFilter');
339 filters[taxonomy].push(filter_term);
340 } else {
341 // Term was already selected, remove
342 filter_item.removeClass('active').trigger('checkActiveFilter');
343 filters[taxonomy].splice(term_index, 1);
344
345 // Set "All" active if no terms left
346 var nbr_terms = 0;
347
348 for(var filter_taxonomy in filters) {
349 if(filters.hasOwnProperty(filter_taxonomy)) {
350 var filter_taxonomy_terms = filters[filter_taxonomy];
351
352 if(filter_taxonomy_terms) {
353 nbr_terms += filter_taxonomy_terms.length;
354 }
355 }
356 }
357
358 if(nbr_terms == 0) {
359 filter_item.siblings('.wpupg-filter-tag-').addClass('active').trigger('checkActiveFilter');
360 }
361 }
362 } else {
363 filter_item.siblings('.wpupg-filter-isotope-term').removeClass('active').trigger('checkActiveFilter');
364 filter_item.addClass('active').trigger('checkActiveFilter');
365
366 if(!filter_all) {
367 filters[taxonomy] = [filter_term];
368 }
369 }
370
371 WPUltimatePostGrid.grids[grid_id].filters = filters;
372 WPUltimatePostGrid.filterGrid(grid_id);
373 });
374
375 var filter_type = container.data('filter-type');
376 var filter_items = container.find('.wpupg-filter-item');
377
378 if(filter_type == 'isotope') {
379 var margin = container.data('margin-vertical') + 'px ' + container.data('margin-horizontal') + 'px';
380 var padding = container.data('padding-vertical') + 'px ' + container.data('padding-horizontal') + 'px';
381 var border = container.data('border-width') + 'px solid ' + container.data('border-color');
382 var background_color = container.data('background-color');
383 var text_color = container.data('text-color');
384
385 var active_border = container.data('border-width') + 'px solid ' + container.data('active-border-color');
386 var active_background_color = container.data('active-background-color');
387 var active_text_color = container.data('active-text-color');
388
389 var hover_border = container.data('border-width') + 'px solid ' + container.data('hover-border-color');
390 var hover_background_color = container.data('hover-background-color');
391 var hover_text_color = container.data('hover-text-color');
392
393 filter_items.each(function() {
394 var filter_item = jQuery(this);
395
396 filter_item
397 .css('margin', margin)
398 .css('padding', padding)
399 .css('border', border)
400 .css('background-color', background_color)
401 .css('color', text_color)
402 .hover(function() {
403 if(!filter_item.hasClass('active')) {
404 filter_item
405 .css('border', hover_border)
406 .css('background-color', hover_background_color)
407 .css('color', hover_text_color);
408 }
409 }, function() {
410 if(!filter_item.hasClass('active')) {
411 filter_item
412 .css('border', border)
413 .css('background-color', background_color)
414 .css('color', text_color);
415 }
416 })
417 .on('checkActiveFilter', function() {
418 if(filter_item.hasClass('active')) {
419 filter_item
420 .css('border', active_border)
421 .css('background-color', active_background_color)
422 .css('color', active_text_color);
423 } else {
424 filter_item
425 .css('border', border)
426 .css('background-color', background_color)
427 .css('color', text_color);
428 }
429 }).trigger('checkActiveFilter');
430 });
431 }
432 };
433
434 WPUltimatePostGrid.updatePagination = function(container, page) {
435 var type = container.data('type');
436
437 if(type) {
438 var func = 'updatePagination' + type.charAt(0).toUpperCase() + type.slice(1);
439 if(typeof WPUltimatePostGrid[func] == 'function') {
440 WPUltimatePostGrid[func](container, page);
441 }
442 }
443 };
444
445 WPUltimatePostGrid.updatePaginationPages = function(container, page) {
446 container.find('.wpupg-page-' + page).click();
447 };
448
449 WPUltimatePostGrid.initPaginationPages = function(container) {
450 var grid_id = container.data('grid');
451
452 container.find('.wpupg-pagination-term').click(function() {
453 var pagination_item = jQuery(this);
454 pagination_item.siblings('.wpupg-pagination-term').removeClass('active').trigger('checkActiveFilter');
455
456 var page = parseInt(pagination_item.addClass('active').trigger('checkActiveFilter').data('page'));
457
458 WPUltimatePostGrid.scrollTo(WPUltimatePostGrid.grids[grid_id].container);
459
460 if(WPUltimatePostGrid.grids[grid_id].pages.indexOf(page) !== -1) {
461 WPUltimatePostGrid.grids[grid_id].page = page;
462 WPUltimatePostGrid.filterGrid(grid_id);
463 } else {
464 // Get new page via AJAX
465 var data = {
466 action: 'wpupg_get_page',
467 security: wpupg_public.nonce,
468 grid: grid_id,
469 page: page
470 };
471
472 pagination_item.addClass('wpupg-spinner');
473 pagination_item.css('color', WPUltimatePostGrid.grids[grid_id].pagination_style.active_background_color);
474
475 // Get recipes through AJAX
476 jQuery.post(wpupg_public.ajax_url, data, function(html) {
477 var posts = jQuery(html).toArray();
478 WPUltimatePostGrid.grids[grid_id].container.isotope('insert', posts);
479 WPUltimatePostGrid.grids[grid_id].page = page;
480 WPUltimatePostGrid.filterGrid(grid_id);
481 WPUltimatePostGrid.checkLinks(grid_id);
482
483 WPUltimatePostGrid.grids[grid_id].container.imagesLoaded( function() {
484 WPUltimatePostGrid.grids[grid_id].container.isotope('layout');
485 });
486
487 pagination_item.removeClass('wpupg-spinner');
488 pagination_item.css('color', WPUltimatePostGrid.grids[grid_id].pagination_style.active_text_color);
489
490 WPUltimatePostGrid.grids[grid_id].pages.push(page);
491 WPUltimatePostGrid.updatePosts(grid_id);
492 });
493 }
494 });
495
496 var pagination_items = container.find('.wpupg-pagination-term');
497
498 var margin = container.data('margin-vertical') + 'px ' + container.data('margin-horizontal') + 'px';
499 var padding = container.data('padding-vertical') + 'px ' + container.data('padding-horizontal') + 'px';
500 var border = container.data('border-width') + 'px solid ' + container.data('border-color');
501 var background_color = container.data('background-color');
502 var text_color = container.data('text-color');
503
504 var active_border = container.data('border-width') + 'px solid ' + container.data('active-border-color');
505 var active_background_color = container.data('active-background-color');
506 var active_text_color = container.data('active-text-color');
507
508 var hover_border = container.data('border-width') + 'px solid ' + container.data('hover-border-color');
509 var hover_background_color = container.data('hover-background-color');
510 var hover_text_color = container.data('hover-text-color');
511
512 WPUltimatePostGrid.grids[grid_id].pagination_style = {
513 margin: margin,
514 padding: padding,
515 border: border,
516 background_color: background_color,
517 text_color: text_color,
518 active_border: active_border,
519 active_background_color: active_background_color,
520 active_text_color: active_text_color,
521 hover_border: hover_border,
522 hover_background_color: hover_background_color,
523 hover_text_color: hover_text_color
524 }
525
526 pagination_items.each(function() {
527 var pagination_item = jQuery(this);
528
529 pagination_item
530 .css('margin', margin)
531 .css('padding', padding)
532 .css('border', border)
533 .css('background-color', background_color)
534 .css('color', text_color)
535 .hover(function() {
536 if(!pagination_item.hasClass('active')) {
537 pagination_item
538 .css('border', hover_border)
539 .css('background-color', hover_background_color)
540 .css('color', hover_text_color);
541 }
542 }, function() {
543 if(!pagination_item.hasClass('active')) {
544 pagination_item
545 .css('border', border)
546 .css('background-color', background_color)
547 .css('color', text_color);
548 }
549 })
550 .on('checkActiveFilter', function() {
551 if(pagination_item.hasClass('active')) {
552 pagination_item
553 .css('border', active_border)
554 .css('background-color', active_background_color)
555 .css('color', active_text_color);
556 } else {
557 pagination_item
558 .css('border', border)
559 .css('background-color', background_color)
560 .css('color', text_color);
561 }
562 }).trigger('checkActiveFilter');
563 });
564 };
565
566 WPUltimatePostGrid.scrollTo = function(target) {
567 var scroll_to = target.offset().top - 50;
568 scroll_to = scroll_to < 0 ? 0 : scroll_to;
569
570 jQuery('html,body').animate({
571 scrollTop: scroll_to
572 }, 500);
573 };
574
575 jQuery(document).ready(function($) {
576 $('.wpupg-grid').each(function() {
577 WPUltimatePostGrid.initGrid($(this));
578 });
579
580 $('.wpupg-filter').each(function() {
581 var container = $(this);
582 var grid_id = container.data('grid');
583 var type = container.data('type');
584
585 WPUltimatePostGrid.grids[grid_id].filter_type = type;
586
587 var func = 'initFilter' + type.charAt(0).toUpperCase() + type.slice(1);
588 if(typeof WPUltimatePostGrid[func] == 'function') {
589 WPUltimatePostGrid[func](container);
590 }
591 });
592
593 $('.wpupg-pagination').each(function() {
594 var container = $(this);
595 var grid_id = container.data('grid');
596 var type = container.data('type');
597
598 WPUltimatePostGrid.grids[grid_id].pagination_type = type;
599
600 var func = 'initPagination' + type.charAt(0).toUpperCase() + type.slice(1);
601 if(typeof WPUltimatePostGrid[func] == 'function') {
602 WPUltimatePostGrid[func](container);
603 }
604 });
605 WPUltimatePostGrid.restoreDeeplink();
606 });