Content Views – Post Grid & List for WordPress - Version 1.5.5

Version Description

  • Bug fixed: Multiple paginations on same page do not work
  • Bug fixed: Fix some UI bugs in Add/Edit View page
Download this release

Release Info

Developer PT Guy
Plugin Icon 128x128 Content Views – Post Grid & List for WordPress
Version 1.5.5
Comparing to
See all releases

Code changes from version 1.5.4 to 1.5.5

README.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
4
  Tags: post, posts, page, pages, query, queries, search, display, show, grid, column, layout, author, blog, categories, category, comment, content, custom, editor, filter, Formatting, image, list, meta, plugin, responsive, shortcode, excerpt, title, tag, term, Taxonomy, thumbnail, pagination, date, scrollable, slider, collapsible
5
  Requires at least: 3.3
6
  Tested up to: 4.1.1
7
- Stable tag: 1.5.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -165,6 +165,10 @@ function my_move_bootstrap( $args ) {
165
 
166
  == Changelog ==
167
 
 
 
 
 
168
  = 1.5.4 =
169
  * Bug fixed: "Invalid post type" error in "All Views" page
170
  * Update: Better responsive output of Scrollable List on Mobile
4
  Tags: post, posts, page, pages, query, queries, search, display, show, grid, column, layout, author, blog, categories, category, comment, content, custom, editor, filter, Formatting, image, list, meta, plugin, responsive, shortcode, excerpt, title, tag, term, Taxonomy, thumbnail, pagination, date, scrollable, slider, collapsible
5
  Requires at least: 3.3
6
  Tested up to: 4.1.1
7
+ Stable tag: 1.5.5
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
165
 
166
  == Changelog ==
167
 
168
+ = 1.5.5 =
169
+ * Bug fixed: Multiple paginations on same page do not work
170
+ * Bug fixed: Fix some UI bugs in Add/Edit View page
171
+
172
  = 1.5.4 =
173
  * Bug fixed: "Invalid post type" error in "All Views" page
174
  * Update: Better responsive output of Scrollable List on Mobile
admin/assets/js/admin.js CHANGED
@@ -8,10 +8,10 @@
8
  * @copyright 2014 PT Guy
9
  */
10
 
11
- ( function ($) {
12
  "use strict";
13
 
14
- $.PT_CV_Admin = $.PT_CV_Admin || { };
15
 
16
  $.PT_CV_Admin = function (options) {
17
  this.options = options;
@@ -21,14 +21,13 @@
21
  };
22
 
23
  $.PT_CV_Admin.prototype = {
24
-
25
  /**
26
  * Toggle panel when click Show/Hide icon on Heading
27
  *
28
  * @param {type} $selector
29
  * @returns {undefined}
30
  */
31
- _toggle_panel : function ($selector) {
32
  $('body').on('click', $selector, function (e) {
33
  var $heading = $(this);
34
  var $span = $heading.find('span.clickable');
@@ -50,7 +49,7 @@
50
  *
51
  * @returns void
52
  */
53
- _toggle_taxonomy_relation : function () {
54
  var $self = this;
55
  var _prefix = $self.options._prefix;
56
 
@@ -96,7 +95,7 @@
96
  * @param {type} el : string to selector
97
  * @returns {undefined}
98
  */
99
- _get_field_val : function (el) {
100
  var $this = $(el);
101
  var value = $(el).val();
102
 
@@ -112,7 +111,7 @@
112
  * @param {type} $toggle_data_js_
113
  * @returns {undefined}
114
  */
115
- dependence_do_all : function ($toggle_data_js_) {
116
  var $self = this;
117
  var _prefix = $self.options._prefix;
118
  var $toggle_data_js = $.parseJSON($toggle_data_js_);
@@ -140,7 +139,7 @@
140
  * @param {type} obj_sub : an object contains (dependence_id, expect_val, operator)
141
  * @returns {undefined}
142
  */
143
- _dependence_group : function (this_val, obj_sub) {
144
  var $self = this;
145
  $.each(obj_sub, function (key, data) {
146
  $self._dependence_element(data[0], this_val, data[2], data[1]);
@@ -155,24 +154,24 @@
155
  * @param {type} expect_val : expect value of B to show A group
156
  * @returns {undefined}
157
  */
158
- _dependence_element : function (dependence_id, this_val, operator, expect_val) {
159
 
160
  var dependence_el = $("#" + dependence_id);
161
  var pass = 0;
162
  switch (operator) {
163
  case "=":
164
- {
165
- if (typeof expect_val === 'string')
166
- expect_val = [expect_val];
167
- pass = ( $.inArray(this_val, expect_val) >= 0 );
168
- }
169
  break;
170
  case "!=":
171
- {
172
- if (typeof expect_val === 'string')
173
- expect_val = [expect_val];
174
- pass = ( $.inArray(this_val, expect_val) < 0 );
175
- }
176
  break;
177
  default :
178
  if (typeof expect_val !== 'object')
@@ -205,7 +204,7 @@
205
  * @param {type} id_prefix
206
  * @returns {undefined}
207
  */
208
- toggle_group : function (selector, id_prefix) {
209
  var $self = this;
210
  // Run on page load
211
  $(selector).each(function () {
@@ -214,7 +213,10 @@
214
  // Run on change
215
  $(selector).each(function () {
216
  $(this).change(function () {
217
- $self._toggle_each_group($(this), id_prefix);
 
 
 
218
  });
219
  });
220
  },
@@ -225,10 +227,10 @@
225
  * @param {type} id_prefix
226
  * @returns {undefined}
227
  */
228
- _toggle_each_group : function ($this, id_prefix) {
229
  var $self = this;
230
  var _prefix = $self.options._prefix;
231
- if ($this.is('select') || ( ( $this.is(':checkbox') || $this.is(':radio') ) && $this.is(':checked') )) {
232
  // Get id of element A which needs to toggle
233
  var toggle_id = '#' + id_prefix + $this.val();
234
 
@@ -272,7 +274,7 @@
272
  *
273
  * @returns {undefined}
274
  */
275
- _content_type : function () {
276
  var $self = this;
277
  var _prefix = $self.options._prefix;
278
 
@@ -353,7 +355,7 @@
353
  * @param string _nonce
354
  * @returns {undefined}
355
  */
356
- preview : function (_nonce) {
357
  var $self = this;
358
  var _prefix = $self.options._prefix;
359
 
@@ -423,46 +425,46 @@
423
  * @param object $this_btn The Show/Hide preview button
424
  * @returns void
425
  */
426
- _preview_request : function (preview_box, _data, _nonce, $this_btn) {
427
  var $self = this;
428
  var _prefix = $self.options._prefix;
429
 
430
  // Setup data
431
  var data = {
432
- action : 'preview_request',
433
- data : _data,
434
  ajax_nonce: _nonce
435
  };
436
 
437
  // Sent POST request
438
  $.ajax({
439
  type: "POST",
440
- url : ajaxurl,
441
  data: data,
442
  }).done(function (response) {
443
- preview_box.css('opacity', '1');
444
- // Hide loading icon
445
- preview_box.next().addClass('hidden');
446
 
447
- // Update content of Preview box
448
- preview_box.html(response);
449
 
450
- // Toggle text of this button
451
- $this_btn.html(PT_CV_ADMIN.btn.preview.hide);
452
 
453
- // Disable preview
454
- $self.options.can_preview = 0;
455
 
456
- // Trigger action, to recall function such as pagination, pinterest render layout...
457
- $('body').trigger(_prefix + 'custom-trigger');
458
- });
459
  },
460
  /**
461
  * Toggle 'Thumbnail settings'
462
  *
463
  * @returns {undefined}
464
  */
465
- _thumbnail_settings : function () {
466
  var _prefix = this.options._prefix;
467
  var _thumbnail_setting_state = 1;
468
 
@@ -501,7 +503,7 @@
501
  * Toggle 'Layout format' when change 'View type'
502
  */
503
  var fn_layout_format = function (this_val, layout_format) {
504
- var expect_val = [ 'scrollable' ];
505
 
506
  // Add more layouts
507
  $('.pt-wrap').trigger('toggle-layout-format', [expect_val]);
@@ -531,7 +533,7 @@
531
  * Toggle text of Preview button
532
  * @returns {undefined}
533
  */
534
- _preview_btn_toggle : function () {
535
 
536
  var $self = this;
537
  var _prefix = $self.options._prefix;
@@ -556,7 +558,6 @@
556
  _fn();
557
  });
558
  },
559
-
560
  /**
561
  * Do handy toggle for Excerpt settings
562
  *
@@ -587,7 +588,6 @@
587
  // Handy do other toggle
588
  $('.pt-wrap').trigger(_prefix + 'multi-level-toggle');
589
  },
590
-
591
  /**
592
  * Custom js for elements
593
  * @returns {undefined}
@@ -635,4 +635,4 @@
635
  });
636
  },
637
  };
638
- }(jQuery) );
8
  * @copyright 2014 PT Guy
9
  */
10
 
11
+ (function ($) {
12
  "use strict";
13
 
14
+ $.PT_CV_Admin = $.PT_CV_Admin || {};
15
 
16
  $.PT_CV_Admin = function (options) {
17
  this.options = options;
21
  };
22
 
23
  $.PT_CV_Admin.prototype = {
 
24
  /**
25
  * Toggle panel when click Show/Hide icon on Heading
26
  *
27
  * @param {type} $selector
28
  * @returns {undefined}
29
  */
30
+ _toggle_panel: function ($selector) {
31
  $('body').on('click', $selector, function (e) {
32
  var $heading = $(this);
33
  var $span = $heading.find('span.clickable');
49
  *
50
  * @returns void
51
  */
52
+ _toggle_taxonomy_relation: function () {
53
  var $self = this;
54
  var _prefix = $self.options._prefix;
55
 
95
  * @param {type} el : string to selector
96
  * @returns {undefined}
97
  */
98
+ _get_field_val: function (el) {
99
  var $this = $(el);
100
  var value = $(el).val();
101
 
111
  * @param {type} $toggle_data_js_
112
  * @returns {undefined}
113
  */
114
+ dependence_do_all: function ($toggle_data_js_) {
115
  var $self = this;
116
  var _prefix = $self.options._prefix;
117
  var $toggle_data_js = $.parseJSON($toggle_data_js_);
139
  * @param {type} obj_sub : an object contains (dependence_id, expect_val, operator)
140
  * @returns {undefined}
141
  */
142
+ _dependence_group: function (this_val, obj_sub) {
143
  var $self = this;
144
  $.each(obj_sub, function (key, data) {
145
  $self._dependence_element(data[0], this_val, data[2], data[1]);
154
  * @param {type} expect_val : expect value of B to show A group
155
  * @returns {undefined}
156
  */
157
+ _dependence_element: function (dependence_id, this_val, operator, expect_val) {
158
 
159
  var dependence_el = $("#" + dependence_id);
160
  var pass = 0;
161
  switch (operator) {
162
  case "=":
163
+ {
164
+ if (typeof expect_val === 'string')
165
+ expect_val = [expect_val];
166
+ pass = ($.inArray(this_val, expect_val) >= 0);
167
+ }
168
  break;
169
  case "!=":
170
+ {
171
+ if (typeof expect_val === 'string')
172
+ expect_val = [expect_val];
173
+ pass = ($.inArray(this_val, expect_val) < 0);
174
+ }
175
  break;
176
  default :
177
  if (typeof expect_val !== 'object')
204
  * @param {type} id_prefix
205
  * @returns {undefined}
206
  */
207
+ toggle_group: function (selector, id_prefix) {
208
  var $self = this;
209
  // Run on page load
210
  $(selector).each(function () {
213
  // Run on change
214
  $(selector).each(function () {
215
  $(this).change(function () {
216
+ var this_ = $(this);
217
+ setTimeout(function () {
218
+ $self._toggle_each_group(this_, id_prefix);
219
+ }, 200);
220
  });
221
  });
222
  },
227
  * @param {type} id_prefix
228
  * @returns {undefined}
229
  */
230
+ _toggle_each_group: function ($this, id_prefix) {
231
  var $self = this;
232
  var _prefix = $self.options._prefix;
233
+ if ($this.is('select') || (($this.is(':checkbox') || $this.is(':radio')) && $this.is(':checked'))) {
234
  // Get id of element A which needs to toggle
235
  var toggle_id = '#' + id_prefix + $this.val();
236
 
274
  *
275
  * @returns {undefined}
276
  */
277
+ _content_type: function () {
278
  var $self = this;
279
  var _prefix = $self.options._prefix;
280
 
355
  * @param string _nonce
356
  * @returns {undefined}
357
  */
358
+ preview: function (_nonce) {
359
  var $self = this;
360
  var _prefix = $self.options._prefix;
361
 
425
  * @param object $this_btn The Show/Hide preview button
426
  * @returns void
427
  */
428
+ _preview_request: function (preview_box, _data, _nonce, $this_btn) {
429
  var $self = this;
430
  var _prefix = $self.options._prefix;
431
 
432
  // Setup data
433
  var data = {
434
+ action: 'preview_request',
435
+ data: _data,
436
  ajax_nonce: _nonce
437
  };
438
 
439
  // Sent POST request
440
  $.ajax({
441
  type: "POST",
442
+ url: ajaxurl,
443
  data: data,
444
  }).done(function (response) {
445
+ preview_box.css('opacity', '1');
446
+ // Hide loading icon
447
+ preview_box.next().addClass('hidden');
448
 
449
+ // Update content of Preview box
450
+ preview_box.html(response);
451
 
452
+ // Toggle text of this button
453
+ $this_btn.html(PT_CV_ADMIN.btn.preview.hide);
454
 
455
+ // Disable preview
456
+ $self.options.can_preview = 0;
457
 
458
+ // Trigger action, to recall function such as pagination, pinterest render layout...
459
+ $('body').trigger(_prefix + 'custom-trigger');
460
+ });
461
  },
462
  /**
463
  * Toggle 'Thumbnail settings'
464
  *
465
  * @returns {undefined}
466
  */
467
+ _thumbnail_settings: function () {
468
  var _prefix = this.options._prefix;
469
  var _thumbnail_setting_state = 1;
470
 
503
  * Toggle 'Layout format' when change 'View type'
504
  */
505
  var fn_layout_format = function (this_val, layout_format) {
506
+ var expect_val = ['scrollable'];
507
 
508
  // Add more layouts
509
  $('.pt-wrap').trigger('toggle-layout-format', [expect_val]);
533
  * Toggle text of Preview button
534
  * @returns {undefined}
535
  */
536
+ _preview_btn_toggle: function () {
537
 
538
  var $self = this;
539
  var _prefix = $self.options._prefix;
558
  _fn();
559
  });
560
  },
 
561
  /**
562
  * Do handy toggle for Excerpt settings
563
  *
588
  // Handy do other toggle
589
  $('.pt-wrap').trigger(_prefix + 'multi-level-toggle');
590
  },
 
591
  /**
592
  * Custom js for elements
593
  * @returns {undefined}
635
  });
636
  },
637
  };
638
+ }(jQuery));
admin/views/view.php CHANGED
@@ -406,7 +406,7 @@ $options = array(
406
  ), // End Order by Settings
407
 
408
  // Author Settings
409
- 'author' => array(
410
  array(
411
  'label' => array(
412
  'text' => __( 'Written by', PT_CV_DOMAIN ),
@@ -438,7 +438,7 @@ $options = array(
438
  ),
439
  ),
440
  ) : array(),
441
- ), // End Author Settings
442
 
443
  // Status Settings
444
  'status' => array(
406
  ), // End Order by Settings
407
 
408
  // Author Settings
409
+ 'author' => apply_filters( PT_CV_PREFIX_ . 'author_settings', array(
410
  array(
411
  'label' => array(
412
  'text' => __( 'Written by', PT_CV_DOMAIN ),
438
  ),
439
  ),
440
  ) : array(),
441
+ ) ), // End Author Settings
442
 
443
  // Status Settings
444
  'status' => array(
content-views.php CHANGED
@@ -10,7 +10,7 @@
10
  * Plugin Name: Content Views
11
  * Plugin URI: http://wordpress.org/plugins/content-views-query-and-display-post-page/
12
  * Description: Query and display <strong>posts, pages</strong> in awesome layouts (<strong>grid, scrollable list, collapsible list</strong>) easier than ever, without coding!
13
- * Version: 1.5.4
14
  * Author: PT Guy
15
  * Author URI: http://profiles.wordpress.org/pt-guy
16
  * Text Domain: content-views
@@ -27,7 +27,7 @@ if ( ! defined( 'WPINC' ) ) {
27
  /*
28
  * Define Constant
29
  */
30
- define( 'PT_CV_VERSION', '1.5.4' );
31
  define( 'PT_CV_FILE', __FILE__ );
32
  $pt_cv_path = plugin_dir_path( __FILE__ );
33
  include_once( $pt_cv_path . 'includes/defines.php' );
10
  * Plugin Name: Content Views
11
  * Plugin URI: http://wordpress.org/plugins/content-views-query-and-display-post-page/
12
  * Description: Query and display <strong>posts, pages</strong> in awesome layouts (<strong>grid, scrollable list, collapsible list</strong>) easier than ever, without coding!
13
+ * Version: 1.5.5
14
  * Author: PT Guy
15
  * Author URI: http://profiles.wordpress.org/pt-guy
16
  * Text Domain: content-views
27
  /*
28
  * Define Constant
29
  */
30
+ define( 'PT_CV_VERSION', '1.5.5' );
31
  define( 'PT_CV_FILE', __FILE__ );
32
  $pt_cv_path = plugin_dir_path( __FILE__ );
33
  include_once( $pt_cv_path . 'includes/defines.php' );
includes/functions.php CHANGED
@@ -201,7 +201,7 @@ if ( ! class_exists( 'PT_CV_Functions' ) ) {
201
  * @return string
202
  */
203
  static function string_slug_to_text( $slug ) {
204
- $slug = preg_replace( '/[^a-zA-Z]+/', ' ', $slug );
205
 
206
  return ucwords( $slug );
207
  }
@@ -582,13 +582,16 @@ if ( ! class_exists( 'PT_CV_Functions' ) ) {
582
 
583
  /**
584
  * Check if this view is processed in this page
 
585
  * @since 1.5.2
586
  */
587
- global $processed_views;
588
- if ( ! empty( $processed_views[$id] ) ) {
 
 
589
  return '';
590
  }
591
- $processed_views[$id] = 1;
592
 
593
  // Escaped value appropriate for use in a SQL query
594
  global $pt_view_settings;
201
  * @return string
202
  */
203
  static function string_slug_to_text( $slug ) {
204
+ $slug = preg_replace( '/[_\-]+/', ' ', $slug );
205
 
206
  return ucwords( $slug );
207
  }
582
 
583
  /**
584
  * Check if this view is processed in this page
585
+ * if processed => hide it
586
  * @since 1.5.2
587
  */
588
+ global $processed_views, $pt_cv_shortcode_params;
589
+ // Same View but has different shortcode parameters => consider as 2 different Views
590
+ $vid = $id . '-' . md5( serialize( $pt_cv_shortcode_params ) );
591
+ if ( ! empty( $processed_views[$vid] ) ) {
592
  return '';
593
  }
594
+ $processed_views[$vid] = 1;
595
 
596
  // Escaped value appropriate for use in a SQL query
597
  global $pt_view_settings;
public/assets/css/public.css CHANGED
@@ -15,9 +15,9 @@
15
  .pt-cv-view *,
16
  .pt-cv-view *:before,
17
  .pt-cv-view *:after {
18
- -webkit-box-sizing: border-box;
19
- -moz-box-sizing: border-box;
20
- box-sizing: border-box;
21
  }
22
 
23
  /* Common */
15
  .pt-cv-view *,
16
  .pt-cv-view *:before,
17
  .pt-cv-view *:after {
18
+ -webkit-box-sizing: border-box !important;
19
+ -moz-box-sizing: border-box !important;
20
+ box-sizing: border-box !important;
21
  }
22
 
23
  /* Common */
public/assets/js/public.js CHANGED
@@ -78,7 +78,7 @@
78
  var selected_page = page;
79
 
80
  $self._setup_pagination(this_, selected_page, function () {
81
- $self.doing = 0;
82
  });
83
  }
84
  });
@@ -97,11 +97,12 @@
97
  var $self = this;
98
  var _prefix = PT_CV_PUBLIC._prefix;
99
 
 
100
  // Prevent duplicate processing
101
- if ($self.doing) {
102
  return;
103
  } else {
104
- $self.doing = 1;
105
  }
106
 
107
  var session_id = this_.attr('data-sid');
@@ -137,9 +138,9 @@
137
  _get_page: function (session_id, selected_page, spinner, pages_holder, callback) {
138
 
139
  var $self = this;
140
-
141
  var page_existed = $self._active_page(selected_page, pages_holder, callback);
142
-
143
  if (page_existed) {
144
  return;
145
  }
78
  var selected_page = page;
79
 
80
  $self._setup_pagination(this_, selected_page, function () {
81
+ PT_CV_PUBLIC.paging = 0;
82
  });
83
  }
84
  });
97
  var $self = this;
98
  var _prefix = PT_CV_PUBLIC._prefix;
99
 
100
+ PT_CV_PUBLIC.paging = PT_CV_PUBLIC.paging || 0;
101
  // Prevent duplicate processing
102
+ if (PT_CV_PUBLIC.paging) {
103
  return;
104
  } else {
105
+ PT_CV_PUBLIC.paging = 1;
106
  }
107
 
108
  var session_id = this_.attr('data-sid');
138
  _get_page: function (session_id, selected_page, spinner, pages_holder, callback) {
139
 
140
  var $self = this;
141
+ // Show content of page if it existed
142
  var page_existed = $self._active_page(selected_page, pages_holder, callback);
143
+ // If page is loaded, exit
144
  if (page_existed) {
145
  return;
146
  }