PluginProbe
WP Ultimate Post Grid / 2.0
WP Ultimate Post Grid v2.0
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
← All changes | js/grid.js +111 -233 2.7.02.0 View file →
@@ -26,12 +26,12 @@
26 26 isFitWidth: true
27 27 };
28 28 }
29 29
30 - container.isotopewpupg(args);
30 + container.isotope(args);
31 31
32 32 container.imagesLoaded( function() {
33 - container.isotopewpupg('layout');
33 + container.isotope('layout');
34 34 });
35 35
36 36 WPUltimatePostGrid.grids[grid_id] = {
37 37 args: args,
@@ -40,13 +40,9 @@
40 40 data: window['wpupg_grid_' + container.data('grid-id')],
41 41 id: container.data('grid-id'),
42 42 pages: [0],
43 43 page: 0,
44 - filter: '',
45 - filters: {},
46 - filter_text: false,
47 - filter_text_search: '',
48 - filter_text_posts: []
44 + filters: {}
49 45 };
50 46
51 47 WPUltimatePostGrid.checkLinks(grid_id);
52 48 WPUltimatePostGrid.updatePosts(grid_id);
@@ -54,17 +50,8 @@
54 50 jQuery(container).on('hover', '.wpupg-item', function(e) {
55 51 var hovering = e.type == 'mouseenter';
56 52 WPUltimatePostGrid.hoverGridItem(jQuery(this), hovering);
57 53 });
58 -
59 - // Check for empty grid
60 - if(0 === container.find('.wpupg-item').length) {
61 - WPUltimatePostGrid.checkEmpty(container);
62 - } else {
63 - container.on('arrangeComplete', function() {
64 - WPUltimatePostGrid.checkEmpty(container);
65 - });
66 - }
67 54 };
68 55
69 56 WPUltimatePostGrid.hoverGridItem = function(grid_item, hovering) {
70 57 if(hovering) {
@@ -146,74 +133,57 @@
146 133 WPUltimatePostGrid.filterGrid = function(grid_id) {
147 134 var grid = WPUltimatePostGrid.grids[grid_id];
148 135 var filters = [];
149 136
150 - if(grid.filter_text) {
151 - grid.filter = '';
152 - var posts = [];
137 + // Page filter
138 + if(grid.pagination_type == 'pages') {
139 + var page = grid.page || 0;
140 + filters.push(['.wpupg-page-' + page]);
141 + }
153 142
154 - for(var i=0; i < grid.filter_text_posts.length; i++) {
155 - posts.push('#wpupg-container-post-' + grid.filter_text_posts[i]);
156 - posts.push('#wpurp-container-recipe-' + grid.filter_text_posts[i]);
157 - }
143 + // Taxonomy filters
144 + for(var taxonomy in grid.filters) {
145 + if(grid.filters.hasOwnProperty(taxonomy)) {
146 + var taxonomy_filters = grid.filters[taxonomy];
158 147
159 - if(posts.length == 0) {
160 - posts.push('no-result');
161 - }
148 + var match_one_filters = [];
149 + var match_all_filter = '';
150 + var filter = '';
162 151
163 - WPUltimatePostGrid.getFilterString(grid_id, '', [posts], 0);
164 - } else {
165 - // Page filter
166 - if(grid.pagination_type == 'pages') {
167 - var page = grid.page || 0;
168 - filters.push(['.wpupg-page-' + page]);
169 - }
152 + if(taxonomy_filters) {
153 + for(var i = 0; i < taxonomy_filters.length; i++) {
154 + filter = '.wpupg-tax-' + taxonomy + '-' + taxonomy_filters[i];
170 155
171 - // Taxonomy filters
172 - for(var taxonomy in grid.filters) {
173 - if(grid.filters.hasOwnProperty(taxonomy)) {
174 - var taxonomy_filters = grid.filters[taxonomy];
175 -
176 - var match_one_filters = [];
177 - var match_all_filter = '';
178 - var filter = '';
179 -
180 - if(taxonomy_filters) {
181 - for(var i = 0; i < taxonomy_filters.length; i++) {
182 - filter = '.wpupg-tax-' + taxonomy + '-' + taxonomy_filters[i];
183 -
184 - if(grid.multiselect_type == 'match_one') {
185 - match_one_filters.push(filter);
186 - } else {
187 - match_all_filter += filter;
188 - }
156 + if(grid.multiselect_type == 'match_one') {
157 + match_one_filters.push(filter);
158 + } else {
159 + match_all_filter += filter;
189 160 }
190 161 }
162 + }
191 163
192 - if(grid.multiselect_type == 'match_one') {
193 - if(match_one_filters.length > 0) filters.push(match_one_filters);
194 - } else {
195 - if(match_all_filter !== '') filters.push([match_all_filter]);
196 - }
164 + if(grid.multiselect_type == 'match_one') {
165 + if(match_one_filters.length > 0) filters.push(match_one_filters);
166 + } else {
167 + if(match_all_filter !== '') filters.push([match_all_filter]);
197 168 }
198 169 }
170 + }
199 171
200 - grid.filter = '';
201 - WPUltimatePostGrid.getFilterString(grid_id, '', filters, 0);
202 - if(grid.inverse) {
203 - if(grid.pagination_type == 'pages') {
204 - var page = grid.page || 0;
205 - var filter_without_page = grid.filter.replace('.wpupg-page-' + page, '');
172 + grid.filter = '';
173 + WPUltimatePostGrid.getFilterString(grid_id, '', filters, 0);
174 + if(grid.inverse) {
175 + if(grid.pagination_type == 'pages') {
176 + var page = grid.page || 0;
177 + var filter_without_page = grid.filter.replace('.wpupg-page-' + page, '');
206 178
207 - grid.filter = '.wpupg-page-' + page + ':not(' + filter_without_page + ')';
208 - } else {
209 - grid.filter = ':not(' + grid.filter + ')';
210 - }
179 + grid.filter = '.wpupg-page-' + page + ':not(' + filter_without_page + ')';
180 + } else {
181 + grid.filter = ':not(' + grid.filter + ')';
211 182 }
212 183 }
213 184
214 - jQuery('#wpupg-grid-' + grid_id + '-empty').hide();
215 - grid.container.isotopewpupg({ filter: grid.filter });
185 + grid.container.isotope({ filter: grid.filter });
216 186 grid.container.trigger('wpupgFiltered');
217 187 WPUltimatePostGrid.updateDeeplink();
218 188 };
219 189
@@ -227,18 +197,8 @@
227 197 }
228 198 }
229 199 };
230 200
231 -WPUltimatePostGrid.checkEmpty = function(container) {
232 - var grid_id = container.data('grid'),
233 - filter = WPUltimatePostGrid.grids[grid_id].filter || '.wpupg-item',
234 - visible_items = container.find(filter);
235 -
236 - if(filter !== '' && visible_items.length == 0) {
237 - jQuery('#wpupg-grid-' + grid_id + '-empty').slideDown(300);
238 - }
239 -};
240 -
241 201 WPUltimatePostGrid.updateDeeplink = function() {
242 202 var link = '';
243 203
244 204 for(var grid_id in WPUltimatePostGrid.grids) {
@@ -245,23 +205,18 @@
245 205 if(WPUltimatePostGrid.grids.hasOwnProperty(grid_id)) {
246 206 var grid = WPUltimatePostGrid.grids[grid_id];
247 207 var grid_link = '';
248 208
209 + // Page filter
210 + if(grid.page != 0) grid_link += '+p:' + (grid.page+1);
249 211
250 - if(grid.filter_text) {
251 - grid_link += '+s:' + grid.filter_text_search;
252 - } else {
253 - // Page filter
254 - if(grid.page != 0) grid_link += '+p:' + (grid.page+1);
212 + // Taxonomy filters
213 + for(var taxonomy in grid.filters) {
214 + if(grid.filters.hasOwnProperty(taxonomy)) {
215 + var taxonomy_filter = grid.filters[taxonomy];
255 216
256 - // Taxonomy filters
257 - for(var taxonomy in grid.filters) {
258 - if(grid.filters.hasOwnProperty(taxonomy)) {
259 - var taxonomy_filter = grid.filters[taxonomy];
260 -
261 - if(taxonomy_filter.length > 0) {
262 - grid_link += '+' + taxonomy + ':' + taxonomy_filter.join(',');
263 - }
217 + if(taxonomy_filter.length > 0) {
218 + grid_link += '+' + taxonomy + ':' + taxonomy_filter.join(',');
264 219 }
265 220 }
266 221 }
267 222
@@ -272,71 +227,11 @@
272 227 }
273 228 }
274 229 }
275 230
276 - WPUltimatePostGrid.replaceDeeplink(link);
231 + document.location.hash = link;
277 232 };
278 233
279 -/**
280 - * Source: http://stackoverflow.com/questions/1397329/how-to-remove-the-hash-from-window-location-with-javascript-without-page-refresh/5298684#5298684
281 - */
282 -WPUltimatePostGrid.replaceDeeplink = function(link) {
283 - var scrollV, scrollH, loc = window.location;
284 - if ("replaceState" in history) {
285 - var hash = link == '' ? '' : '#' + link;
286 - history.replaceState("", document.title, loc.pathname + hash + loc.search);
287 - } else {
288 - // Prevent scrolling by storing the page's current scroll offset
289 - scrollV = document.documentElement.scrollTop || document.body.scrollTop;
290 - scrollH = document.documentElement.scrollLeft || document.body.scrollLeft;
291 -
292 - loc.hash = link;
293 -
294 - // Restore the scroll offset, should be flicker free
295 - document.documentElement.scrollTop = document.body.scrollTop = scrollV;
296 - document.documentElement.scrollLeft = document.body.scrollLeft = scrollH;
297 - }
298 -};
299 -
300 -WPUltimatePostGrid.preFilterGrid = function() {
301 - var link = document.location.hash;
302 - link = link.substr(1);
303 -
304 - if(!link) {
305 - var link = '';
306 -
307 - for(var grid_id in WPUltimatePostGrid.grids) {
308 - if(WPUltimatePostGrid.grids.hasOwnProperty(grid_id)) {
309 - var grid = WPUltimatePostGrid.grids[grid_id];
310 - var grid_link = '';
311 -
312 - if(grid.filter_data) {
313 - var pre_filter = grid.filter_data['pre_filter'];
314 -
315 - // Taxonomy filters
316 - for(var taxonomy in pre_filter) {
317 - if(pre_filter.hasOwnProperty(taxonomy)) {
318 - var taxonomy_filter = pre_filter[taxonomy];
319 -
320 - if(taxonomy_filter.length > 0) {
321 - grid_link += '+' + taxonomy + ':' + taxonomy_filter.join(',');
322 - }
323 - }
324 - }
325 - }
326 -
327 - if(grid_link != '') {
328 - if(link != '') link += '#';
329 - link += grid_id;
330 - link += grid_link;
331 - }
332 - }
333 - }
334 -
335 - WPUltimatePostGrid.replaceDeeplink(link);
336 - }
337 -};
338 -
339 234 WPUltimatePostGrid.restoreDeeplink = function() {
340 235 var link = document.location.hash;
341 236 link = link.substr(1);
342 237
@@ -362,13 +257,11 @@
362 257
363 258 if(filter[0] == 'p') {
364 259 var page = parseInt(filter[1]) - 1;
365 260 WPUltimatePostGrid.updatePagination(jQuery('#wpupg-grid-' + grid_id + '-pagination'), page);
366 - } else if(filter[0] == 's') {
367 - WPUltimatePostGrid.updateFilter(jQuery('#wpupg-grid-' + grid_id + '-filter'), filter[0], 'text', filter[1]);
368 261 } else {
369 262 var terms = filter[1].split(',');
370 - WPUltimatePostGrid.updateFilter(jQuery('#wpupg-grid-' + grid_id + '-filter'), filter[0], 'terms', terms);
263 + WPUltimatePostGrid.updateFilter(jQuery('#wpupg-grid-' + grid_id + '-filter'), filter[0], terms);
371 264 }
372 265 }
373 266 }
374 267 }
@@ -375,13 +268,12 @@
375 268 };
376 269
377 270 WPUltimatePostGrid.checkLinks = function(grid_id) {
378 271 var grid = WPUltimatePostGrid.grids[grid_id];
379 - var default_link_type = grid.container.data('link-type');
272 + var link_type = grid.container.data('link-type');
380 273 var link_target = grid.container.data('link-target');
381 - var link_rel = link_target == 'post' ? '' : ' rel="lightbox"';
382 274
383 - if(default_link_type != 'none') {
275 + if(link_type != 'none') {
384 276 grid.container.find('.wpupg-item').each(function() {
385 277 var item = jQuery(this);
386 278
387 279 // Remove links from item
@@ -392,29 +284,27 @@
392 284 }
393 285 });
394 286
395 287 var link = item.data('custom-link') ? item.data('custom-link') : ( link_target == 'post' ? item.data('permalink') : item.data('image') );
396 - var link_behaviour = item.data('custom-link-behaviour');
288 + var rel = link_target == 'post' ? '' : ' rel="lightbox"';
397 289
398 - var link_type = link_behaviour == '_blank' || link_behaviour == '_self' ? link_behaviour : default_link_type;
399 -
400 290 // Add link around item
401 - if (link_behaviour !== 'none' && link && item.parent('a').length == 0) {
402 - item.wrap('<a href="' + link + '" target="' + link_type + '"' + link_rel + ' class="' + wpupg_public.link_class + '"></a>');
291 + if (link && item.parent('a').length == 0) {
292 + item.wrap('<a href="' + link + '" target="' + link_type + '"' + rel + ' class="' + wpupg_public.link_class + '"></a>');
403 293 }
404 294 });
405 295 }
406 296 };
407 297
408 -WPUltimatePostGrid.updateFilter = function(container, taxonomy, type, terms) {
409 - var filter_type = container.data('type');
410 - var func = 'updateFilter' + filter_type.charAt(0).toUpperCase() + filter_type.slice(1);
298 +WPUltimatePostGrid.updateFilter = function(container, taxonomy, terms) {
299 + var type = container.data('type');
300 + var func = 'updateFilter' + type.charAt(0).toUpperCase() + type.slice(1);
411 301 if(typeof WPUltimatePostGrid[func] == 'function') {
412 - WPUltimatePostGrid[func](container, taxonomy, type, terms);
302 + WPUltimatePostGrid[func](container, taxonomy, terms);
413 303 }
414 304 };
415 305
416 -WPUltimatePostGrid.updateFilterIsotope = function(container, taxonomy, type, terms) {
306 +WPUltimatePostGrid.updateFilterIsotope = function(container, taxonomy, terms) {
417 307 for(var i = 0; i < terms.length; i++) {
418 308 container.find('.wpupg-filter-tag-' + terms[i]).click();
419 309 }
420 310 };
@@ -425,71 +315,68 @@
425 315 WPUltimatePostGrid.grids[grid_id].multiselect = container.data('multiselect');
426 316 WPUltimatePostGrid.grids[grid_id].multiselect_type = container.data('multiselect-type');
427 317 WPUltimatePostGrid.grids[grid_id].inverse = container.data('inverse');
428 318
429 - container.find('.wpupg-filter-isotope-term').on('click keydown', function(e) {
430 - // On click, space or enter.
431 - if(e.isTrigger || e.which === 1 || e.which === 13 || e.which === 32) {
432 - var filter_item = jQuery(this);
433 - var taxonomy = filter_item.data('taxonomy');
434 - var filter_all = filter_item.data('filter') == undefined;
435 - var filter_term = filter_item.data('filter');
436 -
437 - var filters = [];
438 -
439 - if(WPUltimatePostGrid.grids[grid_id].multiselect && !filter_all) {
440 - // Make sure "All" is not selected
441 - filter_item.parents('.wpupg-filter-isotope').find('.wpupg-filter-tag-').removeClass('active').trigger('checkActiveFilter');
442 -
443 - filters = WPUltimatePostGrid.grids[grid_id].filters || [];
444 -
445 - if(filters[taxonomy] == undefined) filters[taxonomy] = [];
446 -
447 - var term_index = filters[taxonomy].indexOf(filter_term);
448 - if(term_index == -1) {
449 - // Term was not select before, add
450 - filter_item.addClass('active').trigger('checkActiveFilter');
451 - filters[taxonomy].push(filter_term);
452 - } else {
453 - // Term was already selected, remove
454 - filter_item.removeClass('active').trigger('checkActiveFilter');
455 - filters[taxonomy].splice(term_index, 1);
456 -
457 - // Set "All" active if no terms left
458 - var nbr_terms = 0;
459 -
460 - for(var filter_taxonomy in filters) {
461 - if(filters.hasOwnProperty(filter_taxonomy)) {
462 - var filter_taxonomy_terms = filters[filter_taxonomy];
463 -
464 - if(filter_taxonomy_terms) {
465 - nbr_terms += filter_taxonomy_terms.length;
466 - }
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;
467 354 }
468 355 }
469 -
470 - if(nbr_terms == 0) {
471 - filter_item.parents('.wpupg-filter-isotope').find('.wpupg-filter-tag-').addClass('active').trigger('checkActiveFilter');
472 - }
473 356 }
474 - } else {
475 - filter_item.parents('.wpupg-filter-isotope').find('.wpupg-filter-isotope-term').removeClass('active').trigger('checkActiveFilter');
476 - filter_item.addClass('active').trigger('checkActiveFilter');
477 -
478 - if(!filter_all) {
479 - filters[taxonomy] = [filter_term];
480 - }
357 +
358 + if(nbr_terms == 0) {
359 + filter_item.siblings('.wpupg-filter-tag-').addClass('active').trigger('checkActiveFilter');
360 + }
481 361 }
482 -
483 - WPUltimatePostGrid.grids[grid_id].filters = filters;
484 - WPUltimatePostGrid.filterGrid(grid_id);
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 + }
485 369 }
370 +
371 + WPUltimatePostGrid.grids[grid_id].filters = filters;
372 + WPUltimatePostGrid.filterGrid(grid_id);
486 373 });
487 374
488 375 var filter_type = container.data('filter-type');
489 376 var filter_items = container.find('.wpupg-filter-item');
490 377
491 - if(filter_type == 'isotope' || filter_type == 'text_isotope') {
378 + if(filter_type == 'isotope') {
492 379 var margin = container.data('margin-vertical') + 'px ' + container.data('margin-horizontal') + 'px';
493 380 var padding = container.data('padding-vertical') + 'px ' + container.data('padding-horizontal') + 'px';
494 381 var border = container.data('border-width') + 'px solid ' + container.data('border-color');
495 382 var background_color = container.data('background-color');
@@ -671,26 +558,19 @@
671 558 });
672 559 };
673 560
674 561 WPUltimatePostGrid.insertPosts = function(grid_id, posts) {
675 - var scrollV = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0,
676 - scrollH = document.documentElement.scrollLeft || document.body.scrollLeft;
562 + WPUltimatePostGrid.grids[grid_id].container.isotope('destroy');
677 563
678 - WPUltimatePostGrid.grids[grid_id].container.isotopewpupg('destroy');
679 -
680 564 WPUltimatePostGrid.grids[grid_id].container.append(posts);
681 - WPUltimatePostGrid.grids[grid_id].container.isotopewpupg(WPUltimatePostGrid.grids[grid_id].args);
565 + WPUltimatePostGrid.grids[grid_id].container.isotope(WPUltimatePostGrid.grids[grid_id].args);
682 566
683 - // Restore the scroll offset, should be flicker free
684 - jQuery(window).scrollTop(scrollV);
685 - document.documentElement.scrollLeft = document.body.scrollLeft = scrollH;
686 -
687 567 WPUltimatePostGrid.updatePosts(grid_id);
688 568 WPUltimatePostGrid.checkLinks(grid_id);
689 569 WPUltimatePostGrid.filterGrid(grid_id);
690 570
691 571 WPUltimatePostGrid.grids[grid_id].container.imagesLoaded( function() {
692 - WPUltimatePostGrid.grids[grid_id].container.isotopewpupg('layout');
572 + WPUltimatePostGrid.grids[grid_id].container.isotope('layout');
693 573 WPUltimatePostGrid.grids[grid_id].loading = false;
694 574 });
695 575 };
696 576
@@ -713,9 +593,8 @@
713 593 var grid_id = container.data('grid');
714 594 var type = container.data('type');
715 595
716 596 WPUltimatePostGrid.grids[grid_id].filter_type = type;
717 - WPUltimatePostGrid.grids[grid_id].filter_data = window['wpupg_filter_' + WPUltimatePostGrid.grids[grid_id].id];
718 597
719 598 var func = 'initFilter' + type.charAt(0).toUpperCase() + type.slice(1);
720 599 if(typeof WPUltimatePostGrid[func] == 'function') {
721 600 WPUltimatePostGrid[func](container);
@@ -733,7 +612,6 @@
733 612 if(typeof WPUltimatePostGrid[func] == 'function') {
734 613 WPUltimatePostGrid[func](container);
735 614 }
736 615 });
737 - WPUltimatePostGrid.preFilterGrid();
738 616 WPUltimatePostGrid.restoreDeeplink();
739 617 });