WP Product Review Lite - Version 3.7.1

Version Description

  • 2019-08-24
Download this release

Release Info

Developer codeinwp
Plugin Icon WP Product Review Lite
Version 3.7.1
Comparing to
See all releases

Code changes from version 3.7.0 to 3.7.1

CHANGELOG.md CHANGED
@@ -1,4 +1,10 @@
1
 
 
 
 
 
 
 
2
  ### v3.7.0 - 2019-07-04
3
  **Changes:**
4
  * Add rating scale out of 5
1
 
2
+ ### v3.7.1 - 2019-08-24
3
+ **Changes:**
4
+ * Improve UI for AMP requests
5
+ * Fix CSS conflict with some themes
6
+ * Make rating column sortable in listing screen
7
+
8
  ### v3.7.0 - 2019-07-04
9
  **Changes:**
10
  * Add rating scale out of 5
assets/css/circle.css CHANGED
@@ -21,9 +21,6 @@
21
  height: 100%;
22
  border: 15px solid #333;
23
  border-radius: 50%;
24
- -webkit-transform: rotate(0deg);
25
- -ms-transform: rotate(0deg);
26
- transform: rotate(0deg);
27
  }
28
 
29
  .wppr-pie-fill,
21
  height: 100%;
22
  border: 15px solid #333;
23
  border-radius: 50%;
 
 
 
24
  }
25
 
26
  .wppr-pie-fill,
assets/css/default.css CHANGED
@@ -385,7 +385,8 @@
385
  list-style: none;
386
  }
387
 
388
- .review-wu-right ul li {
 
389
  list-style: none !important;
390
  }
391
 
@@ -495,24 +496,3 @@
495
  float: none;
496
  position: relative;
497
  }
498
-
499
- .clearfix:after {
500
- display: block;
501
- visibility: hidden;
502
- clear: both;
503
- height: 0;
504
- font-size: 0;
505
- content: " ";
506
- }
507
-
508
- .clearfix {
509
- display: inline-block;
510
- }
511
-
512
- * html .clearfix {
513
- height: 1%;
514
- }
515
-
516
- .clearfix {
517
- display: block;
518
- }
385
  list-style: none;
386
  }
387
 
388
+ .review-wu-right ul li,
389
+ .review-wu-right ol li {
390
  list-style: none !important;
391
  }
392
 
496
  float: none;
497
  position: relative;
498
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/rating-amp.css CHANGED
@@ -22,14 +22,22 @@
22
  }
23
 
24
  .wppr-template ul li, .wppr-template ol li {
 
 
 
 
 
 
 
 
25
  position: initial !important;
26
  list-style-type: disc;
27
  background: none !important;
28
  }
29
 
30
- #review-statistics .review-wu-bars ul.wppr-weak li.colored,
31
- #review-statistics .review-wu-bars ul.wppr-not-bad li.colored,
32
- #review-statistics .review-wu-bars ul.wppr-good li.colored,
33
- #review-statistics .review-wu-bars ul.wppr-very-good li.colored {
34
  background: none !important;
35
  }
22
  }
23
 
24
  .wppr-template ul li, .wppr-template ol li {
25
+ position: initial !important;
26
+ background: none !important;
27
+ }
28
+
29
+ .wppr-template-1 ul li,
30
+ .wppr-template-1 ol li,
31
+ .wppr-template-2 ul li,
32
+ .wppr-template-2 ol li {
33
  position: initial !important;
34
  list-style-type: disc;
35
  background: none !important;
36
  }
37
 
38
+ #review-statistics .review-wu-bars ul.wppr-weak.wppr-custom-icon li.colored,
39
+ #review-statistics .review-wu-bars ul.wppr-not-bad.wppr-custom-icon li.colored,
40
+ #review-statistics .review-wu-bars ul.wppr-good.wppr-custom-icon li.colored,
41
+ #review-statistics .review-wu-bars ul.wppr-very-good.wppr-custom-icon li.colored {
42
  background: none !important;
43
  }
includes/admin/class-wppr-admin.php CHANGED
@@ -247,6 +247,12 @@ class WPPR_Admin {
247
  foreach ( $data as $option ) {
248
  $model->wppr_set_option( $option['name'], $option['value'] );
249
  }
 
 
 
 
 
 
250
  die();
251
  }
252
 
@@ -376,6 +382,7 @@ class WPPR_Admin {
376
  $type = in_array( $post_type, array( 'post', 'page' ), true ) ? "{$post_type}s" : "{$post_type}_posts";
377
  add_filter( "manage_{$type}_columns", array( $this, 'manage_posts_columns' ), 10, 1 );
378
  add_action( "manage_{$type}_custom_column", array( $this, 'manage_posts_custom_column' ), 10, 2 );
 
379
  }
380
  }
381
 
@@ -437,10 +444,19 @@ class WPPR_Admin {
437
  * @access public
438
  */
439
  public function manage_posts_columns( $columns ) {
440
- $columns['wppr_review'] = __( 'Review', 'wp-product-review' );
441
  return $columns;
442
  }
443
 
 
 
 
 
 
 
 
 
 
444
  /**
445
  * Manage the additional column.s
446
  *
@@ -499,6 +515,8 @@ class WPPR_Admin {
499
 
500
  add_filter( 'manage_wppr_review_posts_columns', array( $this, 'manage_cpt_columns' ), 10, 1 );
501
  add_action( 'manage_wppr_review_posts_custom_column', array( $this, 'manage_cpt_custom_column' ), 10, 2 );
 
 
502
  }
503
 
504
  /**
@@ -529,11 +547,49 @@ class WPPR_Admin {
529
  break;
530
  case 'wppr_rating':
531
  $model = new WPPR_Review_Model( $id );
532
- echo $model->get_rating();
 
 
 
 
 
 
 
533
  break;
534
  }
535
  }
536
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
537
  /**
538
  * Add an upsell bar when the tab starts.
539
  *
247
  foreach ( $data as $option ) {
248
  $model->wppr_set_option( $option['name'], $option['value'] );
249
  }
250
+
251
+ // delete the transients for AMP.
252
+ $templates = apply_filters( 'wppr_review_templates', array( 'default', 'style1', 'style2' ) );
253
+ foreach ( $templates as $template ) {
254
+ delete_transient( '_wppr_amp_css_' . str_replace( '.', '_', $this->version ) . '_' . $template );
255
+ }
256
  die();
257
  }
258
 
382
  $type = in_array( $post_type, array( 'post', 'page' ), true ) ? "{$post_type}s" : "{$post_type}_posts";
383
  add_filter( "manage_{$type}_columns", array( $this, 'manage_posts_columns' ), 10, 1 );
384
  add_action( "manage_{$type}_custom_column", array( $this, 'manage_posts_custom_column' ), 10, 2 );
385
+ add_action( "manage_edit-{$post_type}_sortable_columns", array( $this, 'sort_posts_custom_column' ), 10, 1 );
386
  }
387
  }
388
 
444
  * @access public
445
  */
446
  public function manage_posts_columns( $columns ) {
447
+ $columns['wppr_review'] = __( 'Review Rating', 'wp-product-review' );
448
  return $columns;
449
  }
450
 
451
+ /**
452
+ * Defines the sortable columns.
453
+ *
454
+ * @access public
455
+ */
456
+ public function sort_posts_custom_column( $columns ) {
457
+ $columns['wppr_review'] = 'wppr_review';
458
+ return $columns;
459
+ }
460
  /**
461
  * Manage the additional column.s
462
  *
515
 
516
  add_filter( 'manage_wppr_review_posts_columns', array( $this, 'manage_cpt_columns' ), 10, 1 );
517
  add_action( 'manage_wppr_review_posts_custom_column', array( $this, 'manage_cpt_custom_column' ), 10, 2 );
518
+ add_filter( 'manage_edit-wppr_review_sortable_columns', array( $this, 'sort_cpt_custom_column' ), 10, 1 );
519
+ add_action( 'pre_get_posts', array( $this, 'sort_cpt_custom_column_order') );
520
  }
521
 
522
  /**
547
  break;
548
  case 'wppr_rating':
549
  $model = new WPPR_Review_Model( $id );
550
+ // save the rating as a temporary post meta which can be used in pre_get_posts
551
+ add_filter(
552
+ 'wppr_rating', function( $rating, $id ) {
553
+ update_post_meta( $id, '_wppr_rating_num_temp', $rating );
554
+ return $rating;
555
+ }, 10, 2
556
+ );
557
+ echo wppr_layout_get_rating( $model, 'stars', '' );
558
  break;
559
  }
560
  }
561
 
562
+ /**
563
+ * Defines the sortable columns.
564
+ *
565
+ * @access public
566
+ */
567
+ public function sort_cpt_custom_column( $columns ) {
568
+ $columns['wppr_rating'] = 'wppr_rating_num';
569
+ return $columns;
570
+ }
571
+
572
+ /**
573
+ * Defines the logic to use for sortable columns.
574
+ *
575
+ * @access public
576
+ */
577
+ public function sort_cpt_custom_column_order( $query ) {
578
+ if ( ! is_admin() ) {
579
+ return;
580
+ }
581
+
582
+ $orderby = $query->get( 'orderby' );
583
+
584
+ switch ( $orderby ) {
585
+ case 'wppr_rating_num':
586
+ $query->set( 'meta_key', '_wppr_rating_num_temp' );
587
+ $query->set( 'orderby', 'meta_value_num' );
588
+ break;
589
+ }
590
+ }
591
+
592
+
593
  /**
594
  * Add an upsell bar when the tab starts.
595
  *
includes/class-wppr.php CHANGED
@@ -67,7 +67,7 @@ class WPPR {
67
  */
68
  public function __construct() {
69
  $this->plugin_name = 'wppr';
70
- $this->version = '3.7.0';
71
 
72
  $this->load_dependencies();
73
  $this->set_locale();
67
  */
68
  public function __construct() {
69
  $this->plugin_name = 'wppr';
70
+ $this->version = '3.7.1';
71
 
72
  $this->load_dependencies();
73
  $this->set_locale();
includes/functions.php CHANGED
@@ -155,14 +155,34 @@ if ( ! function_exists( 'wppr_default_get_rating' ) ) {
155
 
156
  switch ( $type ) {
157
  case 'donut':
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  ?>
159
  <div class="<?php echo $div_class1; ?>">
160
  <div class="review-wu-grade-content <?php echo $div_class2; ?>">
161
  <div class="wppr-c100 wppr-p<?php echo esc_attr( $rating ) . ' ' . esc_attr( $review_object->get_rating_class() ); ?>">
162
  <span><?php echo esc_html( $rating_10 ); ?></span>
163
  <div class="wppr-slice">
164
- <div class="wppr-bar" style="<?php echo apply_filters( 'wppr_rating_circle_bar_styles', '', $rating ); ?>"></div>
165
- <div class="wppr-fill" style="<?php echo apply_filters( 'wppr_rating_circle_fill_styles', '', $rating ); ?>"></div>
166
  </div>
167
  <div class="wppr-slice-center"></div>
168
  </div>
155
 
156
  switch ( $type ) {
157
  case 'donut':
158
+ $class_bar = $class_fill = '';
159
+ $style_bar = apply_filters( 'wppr_rating_circle_bar_styles', '', $rating );
160
+ $style_fill = apply_filters( 'wppr_rating_circle_fill_styles', '', $rating );
161
+ if ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() ) {
162
+ $class_bar = md5( $style_bar ) . '-donut';
163
+ $class_fill = md5( $style_fill ) . '-donut';
164
+ $style_bar = $style_fill = '';
165
+ add_filter(
166
+ 'wppr_global_style', function( $css, $review ) {
167
+ $review_rating = $review->get_rating();
168
+ $rating = round( $review_rating );
169
+ $style_bar = apply_filters( 'wppr_rating_circle_bar_styles', '', $rating );
170
+ $style_fill = apply_filters( 'wppr_rating_circle_fill_styles', '', $rating );
171
+ $class_bar = md5( $style_bar ) . '-donut';
172
+ $class_fill = md5( $style_fill ) . '-donut';
173
+ $css = $css . ".$class_bar { $style_bar } .$class_fill { $style_fill }";
174
+ return $css;
175
+ }, 10, 2
176
+ );
177
+ }
178
  ?>
179
  <div class="<?php echo $div_class1; ?>">
180
  <div class="review-wu-grade-content <?php echo $div_class2; ?>">
181
  <div class="wppr-c100 wppr-p<?php echo esc_attr( $rating ) . ' ' . esc_attr( $review_object->get_rating_class() ); ?>">
182
  <span><?php echo esc_html( $rating_10 ); ?></span>
183
  <div class="wppr-slice">
184
+ <div class="wppr-bar <?php echo $class_bar; ?>" style="<?php echo $style_bar; ?>"></div>
185
+ <div class="wppr-fill <?php echo $class_fill; ?>" style="<?php echo $style_fill; ?>"></div>
186
  </div>
187
  <div class="wppr-slice-center"></div>
188
  </div>
includes/public/class-wppr-public.php CHANGED
@@ -704,12 +704,12 @@ class Wppr_Public {
704
  }
705
  $output .= $this->generate_styles();
706
  $output .= $wp_filesystem->get_contents( WPPR_PATH . '/assets/css/rating-amp.css' );
707
- $output = apply_filters( 'wppr_global_style', $output );
708
  $output = $this->minify_amp_css( $output );
709
 
710
  set_transient( $amp_cache_key, $output, HOUR_IN_SECONDS );
711
  }
712
- echo apply_filters( 'wppr_add_amp_css', $output );
713
  }
714
 
715
  /**
@@ -770,8 +770,8 @@ class Wppr_Public {
770
  if ( defined( 'WPPR_PRO_VERSION' ) && version_compare( WPPR_PRO_VERSION, '2.4', '<' ) && 'style1' !== $this->review->get_template() ) {
771
  echo '<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">';
772
  }
773
- echo '<link rel="stylesheet" href="' . site_url( '/wp-includes/css/dashicons.min.css' ) . '"">';
774
  }
 
775
  }
776
 
777
  /**
704
  }
705
  $output .= $this->generate_styles();
706
  $output .= $wp_filesystem->get_contents( WPPR_PATH . '/assets/css/rating-amp.css' );
707
+ $output = apply_filters( 'wppr_global_style', $output, $this->review );
708
  $output = $this->minify_amp_css( $output );
709
 
710
  set_transient( $amp_cache_key, $output, HOUR_IN_SECONDS );
711
  }
712
+ echo apply_filters( 'wppr_add_amp_css', $output, $this->review );
713
  }
714
 
715
  /**
770
  if ( defined( 'WPPR_PRO_VERSION' ) && version_compare( WPPR_PRO_VERSION, '2.4', '<' ) && 'style1' !== $this->review->get_template() ) {
771
  echo '<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">';
772
  }
 
773
  }
774
+ echo '<link rel="stylesheet" href="' . site_url( '/wp-includes/css/dashicons.min.css' ) . '"">';
775
  }
776
 
777
  /**
includes/public/layouts/style2.php CHANGED
@@ -24,11 +24,7 @@
24
  <div class="wppr-review-rating <?php echo is_rtl() ? 'rtl' : ''; ?>">
25
  <?php wppr_layout_get_rating( $review_object, 'number', 'style2' ); ?>
26
  <?php wppr_layout_get_image( $review_object, 'wppr-review-product-image wppr-default-img', 'wppr-product-image' ); ?>
27
-
28
- <div class="clearfix"></div>
29
-
30
  <?php wppr_layout_get_user_rating( $review_object ); ?>
31
-
32
  </div>
33
 
34
  <?php wppr_layout_get_pros( $review_object, 'wppr-review-pros', 'h3', 'wppr-review-pros-name' ); ?>
@@ -38,7 +34,6 @@
38
 
39
  <?php wppr_layout_get_options_ratings( $review_object, 'stars' ); ?>
40
 
41
- <div class="clearfix"></div>
42
  </div><!-- end .wppr-review-container -->
43
 
44
  <?php wppr_layout_get_affiliate_buttons( $review_object ); ?>
24
  <div class="wppr-review-rating <?php echo is_rtl() ? 'rtl' : ''; ?>">
25
  <?php wppr_layout_get_rating( $review_object, 'number', 'style2' ); ?>
26
  <?php wppr_layout_get_image( $review_object, 'wppr-review-product-image wppr-default-img', 'wppr-product-image' ); ?>
 
 
 
27
  <?php wppr_layout_get_user_rating( $review_object ); ?>
 
28
  </div>
29
 
30
  <?php wppr_layout_get_pros( $review_object, 'wppr-review-pros', 'h3', 'wppr-review-pros-name' ); ?>
34
 
35
  <?php wppr_layout_get_options_ratings( $review_object, 'stars' ); ?>
36
 
 
37
  </div><!-- end .wppr-review-container -->
38
 
39
  <?php wppr_layout_get_affiliate_buttons( $review_object ); ?>
package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "name": "wp-product-review",
3
- "version": "3.7.0",
4
  "lockfileVersion": 1,
5
  "requires": true,
6
  "dependencies": {
@@ -41,9 +41,9 @@
41
  "dev": true
42
  },
43
  "ajv": {
44
- "version": "6.10.0",
45
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
46
- "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
47
  "dev": true,
48
  "requires": {
49
  "fast-deep-equal": "2.0.1",
@@ -106,10 +106,10 @@
106
  "dev": true,
107
  "requires": {
108
  "archiver-utils": "1.3.0",
109
- "async": "2.6.2",
110
  "buffer-crc32": "0.2.13",
111
  "glob": "7.0.6",
112
- "lodash": "4.17.11",
113
  "readable-stream": "2.3.6",
114
  "tar-stream": "1.6.2",
115
  "walkdir": "0.0.11",
@@ -117,12 +117,12 @@
117
  },
118
  "dependencies": {
119
  "async": {
120
- "version": "2.6.2",
121
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
122
- "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
123
  "dev": true,
124
  "requires": {
125
- "lodash": "4.17.11"
126
  }
127
  }
128
  }
@@ -134,9 +134,9 @@
134
  "dev": true,
135
  "requires": {
136
  "glob": "7.0.6",
137
- "graceful-fs": "4.2.0",
138
  "lazystream": "1.0.0",
139
- "lodash": "4.17.11",
140
  "normalize-path": "2.1.1",
141
  "readable-stream": "2.3.6"
142
  }
@@ -265,18 +265,18 @@
265
  "dev": true
266
  },
267
  "autoprefixer": {
268
- "version": "9.6.0",
269
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.0.tgz",
270
- "integrity": "sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==",
271
  "dev": true,
272
  "requires": {
273
- "browserslist": "4.6.3",
274
- "caniuse-lite": "1.0.30000979",
275
  "chalk": "2.4.2",
276
  "normalize-range": "0.1.2",
277
  "num2fraction": "1.2.2",
278
  "postcss": "7.0.17",
279
- "postcss-value-parser": "3.3.1"
280
  }
281
  },
282
  "aws-sign2": {
@@ -353,9 +353,9 @@
353
  }
354
  },
355
  "base64-js": {
356
- "version": "1.3.0",
357
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
358
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
359
  "dev": true
360
  },
361
  "bcrypt-pbkdf": {
@@ -412,7 +412,7 @@
412
  "requires": {
413
  "nice-try": "1.0.5",
414
  "path-key": "2.0.1",
415
- "semver": "5.7.0",
416
  "shebang-command": "1.2.0",
417
  "which": "1.3.1"
418
  }
@@ -464,7 +464,7 @@
464
  "optional": true,
465
  "requires": {
466
  "bin-version": "3.1.0",
467
- "semver": "5.7.0",
468
  "semver-truncate": "1.1.2"
469
  }
470
  },
@@ -691,23 +691,23 @@
691
  }
692
  },
693
  "browserslist": {
694
- "version": "4.6.3",
695
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.3.tgz",
696
- "integrity": "sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ==",
697
  "dev": true,
698
  "requires": {
699
- "caniuse-lite": "1.0.30000979",
700
- "electron-to-chromium": "1.3.186",
701
- "node-releases": "1.1.25"
702
  }
703
  },
704
  "buffer": {
705
- "version": "5.2.1",
706
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
707
- "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
708
  "dev": true,
709
  "requires": {
710
- "base64-js": "1.3.0",
711
  "ieee754": "1.1.13"
712
  }
713
  },
@@ -768,7 +768,7 @@
768
  "integrity": "sha1-HFQaoQilAQb2ML3Zj+HeyLoTP1E=",
769
  "dev": true,
770
  "requires": {
771
- "graceful-fs": "4.2.0",
772
  "mkdirp": "0.5.1",
773
  "object-assign": "4.1.1",
774
  "rimraf": "2.6.3"
@@ -822,9 +822,9 @@
822
  }
823
  },
824
  "caniuse-lite": {
825
- "version": "1.0.30000979",
826
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000979.tgz",
827
- "integrity": "sha512-gcu45yfq3B7Y+WB05fOMfr0EiSlq+1u+m6rPHyJli/Wy3PVQNGaU7VA4bZE5qw+AU2UVOBR/N5g1bzADUqdvFw==",
828
  "dev": true
829
  },
830
  "caseless": {
@@ -1084,7 +1084,7 @@
1084
  "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
1085
  "dev": true,
1086
  "requires": {
1087
- "buffer": "5.2.1"
1088
  }
1089
  },
1090
  "crc32-stream": {
@@ -1167,13 +1167,13 @@
1167
  "optional": true
1168
  },
1169
  "css-tree": {
1170
- "version": "1.0.0-alpha.28",
1171
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz",
1172
- "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==",
1173
  "dev": true,
1174
  "optional": true,
1175
  "requires": {
1176
- "mdn-data": "1.1.4",
1177
  "source-map": "0.5.7"
1178
  },
1179
  "dependencies": {
@@ -1186,13 +1186,6 @@
1186
  }
1187
  }
1188
  },
1189
- "css-url-regex": {
1190
- "version": "1.1.0",
1191
- "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
1192
- "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
1193
- "dev": true,
1194
- "optional": true
1195
- },
1196
  "css-what": {
1197
  "version": "2.1.3",
1198
  "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
@@ -1277,6 +1270,13 @@
1277
  "source-map": "0.5.7"
1278
  }
1279
  },
 
 
 
 
 
 
 
1280
  "source-map": {
1281
  "version": "0.5.7",
1282
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -1360,7 +1360,7 @@
1360
  "decompress-tarbz2": "4.1.1",
1361
  "decompress-targz": "4.1.1",
1362
  "decompress-unzip": "4.0.1",
1363
- "graceful-fs": "4.2.0",
1364
  "make-dir": "1.3.0",
1365
  "pify": "2.3.0",
1366
  "strip-dirs": "2.1.0"
@@ -1574,13 +1574,21 @@
1574
  }
1575
  },
1576
  "dom-serializer": {
1577
- "version": "0.1.1",
1578
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
1579
- "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
1580
  "dev": true,
1581
  "requires": {
1582
- "domelementtype": "1.3.1",
1583
- "entities": "1.1.2"
 
 
 
 
 
 
 
 
1584
  }
1585
  },
1586
  "domelementtype": {
@@ -1605,7 +1613,7 @@
1605
  "dev": true,
1606
  "optional": true,
1607
  "requires": {
1608
- "dom-serializer": "0.1.1",
1609
  "domelementtype": "1.3.1"
1610
  }
1611
  },
@@ -1678,9 +1686,9 @@
1678
  "dev": true
1679
  },
1680
  "electron-to-chromium": {
1681
- "version": "1.3.186",
1682
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.186.tgz",
1683
- "integrity": "sha512-lRyyEUDKenKv/EBVFgfDZDYTDdoAZhzuE+inMUP79+22NDPAA2Ox+f3AShILIjPoUIqRGwvPNbzFcyU8km8g4A==",
1684
  "dev": true
1685
  },
1686
  "encoding": {
@@ -1702,9 +1710,9 @@
1702
  }
1703
  },
1704
  "entities": {
1705
- "version": "1.1.2",
1706
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
1707
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
1708
  "dev": true
1709
  },
1710
  "errlop": {
@@ -1723,7 +1731,7 @@
1723
  "dev": true,
1724
  "requires": {
1725
  "errlop": "1.1.1",
1726
- "semver": "5.7.0"
1727
  }
1728
  }
1729
  }
@@ -1735,7 +1743,7 @@
1735
  "dev": true,
1736
  "requires": {
1737
  "string-template": "0.2.1",
1738
- "xtend": "4.0.1"
1739
  }
1740
  },
1741
  "error-ex": {
@@ -2030,7 +2038,7 @@
2030
  "@nodelib/fs.stat": "1.1.3",
2031
  "glob-parent": "3.1.0",
2032
  "is-glob": "4.0.1",
2033
- "merge2": "1.2.3",
2034
  "micromatch": "3.1.10"
2035
  }
2036
  },
@@ -2229,7 +2237,7 @@
2229
  "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
2230
  "dev": true,
2231
  "requires": {
2232
- "graceful-fs": "4.2.0",
2233
  "jsonfile": "4.0.0",
2234
  "universalify": "0.1.2"
2235
  }
@@ -2246,7 +2254,7 @@
2246
  "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
2247
  "dev": true,
2248
  "requires": {
2249
- "graceful-fs": "4.2.0",
2250
  "inherits": "2.0.4",
2251
  "mkdirp": "0.5.1",
2252
  "rimraf": "2.6.3"
@@ -2371,7 +2379,7 @@
2371
  "requires": {
2372
  "nice-try": "1.0.5",
2373
  "path-key": "2.0.1",
2374
- "semver": "5.7.0",
2375
  "shebang-command": "1.2.0",
2376
  "which": "1.3.1"
2377
  }
@@ -2513,7 +2521,7 @@
2513
  "dev": true,
2514
  "requires": {
2515
  "glob": "7.1.4",
2516
- "lodash": "4.17.11",
2517
  "minimatch": "3.0.4"
2518
  },
2519
  "dependencies": {
@@ -2563,9 +2571,9 @@
2563
  }
2564
  },
2565
  "graceful-fs": {
2566
- "version": "4.2.0",
2567
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
2568
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
2569
  "dev": true
2570
  },
2571
  "graceful-readlink": {
@@ -2662,7 +2670,7 @@
2662
  "archiver": "1.3.0",
2663
  "chalk": "1.1.3",
2664
  "iltorb": "1.3.10",
2665
- "lodash": "4.17.11",
2666
  "pretty-bytes": "4.0.2",
2667
  "stream-buffers": "2.2.0"
2668
  },
@@ -2745,13 +2753,13 @@
2745
  "imagemin-svgo": "7.0.0",
2746
  "p-map": "1.2.0",
2747
  "plur": "3.1.1",
2748
- "pretty-bytes": "5.2.0"
2749
  },
2750
  "dependencies": {
2751
  "pretty-bytes": {
2752
- "version": "5.2.0",
2753
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.2.0.tgz",
2754
- "integrity": "sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w==",
2755
  "dev": true
2756
  }
2757
  }
@@ -2773,19 +2781,19 @@
2773
  "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==",
2774
  "dev": true,
2775
  "requires": {
2776
- "async": "2.6.2",
2777
  "gaze": "1.1.3",
2778
- "lodash": "4.17.11",
2779
  "tiny-lr": "1.1.1"
2780
  },
2781
  "dependencies": {
2782
  "async": {
2783
- "version": "2.6.2",
2784
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
2785
- "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
2786
  "dev": true,
2787
  "requires": {
2788
- "lodash": "4.17.11"
2789
  }
2790
  }
2791
  }
@@ -2811,7 +2819,7 @@
2811
  "colors": "1.1.2",
2812
  "grunt-legacy-log-utils": "2.0.1",
2813
  "hooker": "0.2.3",
2814
- "lodash": "4.17.11"
2815
  }
2816
  },
2817
  "grunt-legacy-log-utils": {
@@ -2821,7 +2829,7 @@
2821
  "dev": true,
2822
  "requires": {
2823
  "chalk": "2.4.2",
2824
- "lodash": "4.17.11"
2825
  }
2826
  },
2827
  "grunt-legacy-util": {
@@ -2834,7 +2842,7 @@
2834
  "exit": "0.1.2",
2835
  "getobject": "0.1.0",
2836
  "hooker": "0.2.3",
2837
- "lodash": "4.17.11",
2838
  "underscore.string": "3.3.5",
2839
  "which": "1.3.1"
2840
  }
@@ -3160,7 +3168,7 @@
3160
  "version": "github:codeinwp/grunt-plugin-fleet#922540b800fafe8a89d60e82699afb8073c1b7c2",
3161
  "dev": true,
3162
  "requires": {
3163
- "autoprefixer": "9.6.0",
3164
  "grunt": "1.0.4",
3165
  "grunt-cachebuster": "0.1.7",
3166
  "grunt-checktextdomain": "1.0.1",
@@ -3183,7 +3191,7 @@
3183
  "grunt-wp-css": "0.2.1",
3184
  "grunt-wp-i18n": "1.0.3",
3185
  "grunt-wp-readme-to-markdown": "2.0.1",
3186
- "ignore": "5.1.2",
3187
  "time-grunt": "1.4.0"
3188
  }
3189
  },
@@ -3260,13 +3268,13 @@
3260
  "dev": true,
3261
  "requires": {
3262
  "grunt": "1.0.4",
3263
- "semver": "6.2.0"
3264
  },
3265
  "dependencies": {
3266
  "semver": {
3267
- "version": "6.2.0",
3268
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz",
3269
- "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==",
3270
  "dev": true
3271
  }
3272
  }
@@ -3279,7 +3287,7 @@
3279
  "requires": {
3280
  "cssbeautify": "0.3.1",
3281
  "csscomb": "3.1.8",
3282
- "lodash": "4.17.11"
3283
  }
3284
  },
3285
  "grunt-wp-i18n": {
@@ -3310,7 +3318,7 @@
3310
  "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
3311
  "dev": true,
3312
  "requires": {
3313
- "ajv": "6.10.0",
3314
  "har-schema": "2.0.0"
3315
  }
3316
  },
@@ -3410,9 +3418,9 @@
3410
  "dev": true
3411
  },
3412
  "hosted-git-info": {
3413
- "version": "2.7.1",
3414
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
3415
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
3416
  "dev": true
3417
  },
3418
  "html-comment-regex": {
@@ -3441,7 +3449,7 @@
3441
  "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
3442
  "dev": true,
3443
  "requires": {
3444
- "dom-serializer": "0.1.1",
3445
  "domelementtype": "1.3.1"
3446
  }
3447
  },
@@ -3517,9 +3525,9 @@
3517
  "dev": true
3518
  },
3519
  "ignore": {
3520
- "version": "5.1.2",
3521
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz",
3522
- "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==",
3523
  "dev": true
3524
  },
3525
  "iltorb": {
@@ -3601,7 +3609,7 @@
3601
  "optional": true,
3602
  "requires": {
3603
  "is-svg": "3.0.0",
3604
- "svgo": "1.2.2"
3605
  }
3606
  },
3607
  "import-lazy": {
@@ -3994,7 +4002,7 @@
3994
  "console-browserify": "1.1.0",
3995
  "exit": "0.1.2",
3996
  "htmlparser2": "3.8.3",
3997
- "lodash": "4.17.11",
3998
  "minimatch": "3.0.4",
3999
  "shelljs": "0.3.0",
4000
  "strip-json-comments": "1.0.4"
@@ -4039,7 +4047,7 @@
4039
  "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
4040
  "dev": true,
4041
  "requires": {
4042
- "graceful-fs": "4.2.0"
4043
  }
4044
  },
4045
  "jsprim": {
@@ -4154,7 +4162,7 @@
4154
  "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
4155
  "dev": true,
4156
  "requires": {
4157
- "graceful-fs": "4.2.0",
4158
  "parse-json": "2.2.0",
4159
  "pify": "2.3.0",
4160
  "pinkie-promise": "2.0.1",
@@ -4181,9 +4189,9 @@
4181
  }
4182
  },
4183
  "lodash": {
4184
- "version": "4.17.11",
4185
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
4186
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
4187
  "dev": true
4188
  },
4189
  "logalot": {
@@ -4288,10 +4296,11 @@
4288
  "dev": true
4289
  },
4290
  "mdn-data": {
4291
- "version": "1.1.4",
4292
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
4293
- "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
4294
- "dev": true
 
4295
  },
4296
  "meow": {
4297
  "version": "3.7.0",
@@ -4312,9 +4321,9 @@
4312
  }
4313
  },
4314
  "merge2": {
4315
- "version": "1.2.3",
4316
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
4317
- "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
4318
  "dev": true
4319
  },
4320
  "micromatch": {
@@ -4463,13 +4472,13 @@
4463
  "dev": true
4464
  },
4465
  "node-abi": {
4466
- "version": "2.9.0",
4467
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.9.0.tgz",
4468
- "integrity": "sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA==",
4469
  "dev": true,
4470
  "optional": true,
4471
  "requires": {
4472
- "semver": "5.7.0"
4473
  }
4474
  },
4475
  "node-gyp": {
@@ -4481,7 +4490,7 @@
4481
  "requires": {
4482
  "fstream": "1.0.12",
4483
  "glob": "7.0.6",
4484
- "graceful-fs": "4.2.0",
4485
  "mkdirp": "0.5.1",
4486
  "nopt": "3.0.6",
4487
  "npmlog": "4.1.2",
@@ -4503,12 +4512,12 @@
4503
  }
4504
  },
4505
  "node-releases": {
4506
- "version": "1.1.25",
4507
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.25.tgz",
4508
- "integrity": "sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ==",
4509
  "dev": true,
4510
  "requires": {
4511
- "semver": "5.7.0"
4512
  }
4513
  },
4514
  "node-uuid": {
@@ -4526,7 +4535,7 @@
4526
  "bluebird": "3.5.5",
4527
  "gettext-parser": "3.1.1",
4528
  "glob": "7.0.6",
4529
- "lodash": "4.17.11",
4530
  "minimist": "1.2.0",
4531
  "mkdirp": "0.5.1",
4532
  "tmp": "0.0.33"
@@ -4554,9 +4563,9 @@
4554
  "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
4555
  "dev": true,
4556
  "requires": {
4557
- "hosted-git-info": "2.7.1",
4558
- "resolve": "1.11.1",
4559
- "semver": "5.7.0",
4560
  "validate-npm-package-license": "3.0.4"
4561
  }
4562
  },
@@ -4940,7 +4949,7 @@
4940
  "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
4941
  "dev": true,
4942
  "requires": {
4943
- "graceful-fs": "4.2.0",
4944
  "pify": "2.3.0",
4945
  "pinkie-promise": "2.0.1"
4946
  }
@@ -5025,9 +5034,9 @@
5025
  }
5026
  },
5027
  "postcss-value-parser": {
5028
- "version": "3.3.1",
5029
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
5030
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
5031
  "dev": true
5032
  },
5033
  "prebuild-install": {
@@ -5042,7 +5051,7 @@
5042
  "github-from-package": "0.0.0",
5043
  "minimist": "1.2.0",
5044
  "mkdirp": "0.5.1",
5045
- "node-abi": "2.9.0",
5046
  "noop-logger": "0.1.1",
5047
  "npmlog": "4.1.2",
5048
  "os-homedir": "1.0.2",
@@ -5114,9 +5123,9 @@
5114
  "dev": true
5115
  },
5116
  "psl": {
5117
- "version": "1.2.0",
5118
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
5119
- "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==",
5120
  "dev": true
5121
  },
5122
  "pump": {
@@ -5306,7 +5315,7 @@
5306
  "safe-buffer": "5.1.2",
5307
  "tough-cookie": "2.4.3",
5308
  "tunnel-agent": "0.6.0",
5309
- "uuid": "3.3.2"
5310
  }
5311
  },
5312
  "requirefresh": {
@@ -5325,15 +5334,15 @@
5325
  "dev": true,
5326
  "requires": {
5327
  "errlop": "1.1.1",
5328
- "semver": "5.7.0"
5329
  }
5330
  }
5331
  }
5332
  },
5333
  "resolve": {
5334
- "version": "1.11.1",
5335
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
5336
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
5337
  "dev": true,
5338
  "requires": {
5339
  "path-parse": "1.0.6"
@@ -5420,7 +5429,7 @@
5420
  "dev": true,
5421
  "requires": {
5422
  "editions": "1.3.4",
5423
- "graceful-fs": "4.2.0"
5424
  }
5425
  },
5426
  "safer-buffer": {
@@ -5446,9 +5455,9 @@
5446
  }
5447
  },
5448
  "semver": {
5449
- "version": "5.7.0",
5450
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
5451
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
5452
  "dev": true
5453
  },
5454
  "semver-regex": {
@@ -5465,7 +5474,7 @@
5465
  "dev": true,
5466
  "optional": true,
5467
  "requires": {
5468
- "semver": "5.7.0"
5469
  }
5470
  },
5471
  "set-blocking": {
@@ -5718,7 +5727,7 @@
5718
  "dev": true,
5719
  "requires": {
5720
  "spdx-expression-parse": "3.0.0",
5721
- "spdx-license-ids": "3.0.4"
5722
  }
5723
  },
5724
  "spdx-exceptions": {
@@ -5734,13 +5743,13 @@
5734
  "dev": true,
5735
  "requires": {
5736
  "spdx-exceptions": "2.2.0",
5737
- "spdx-license-ids": "3.0.4"
5738
  }
5739
  },
5740
  "spdx-license-ids": {
5741
- "version": "3.0.4",
5742
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
5743
- "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==",
5744
  "dev": true
5745
  },
5746
  "split-string": {
@@ -5952,9 +5961,9 @@
5952
  }
5953
  },
5954
  "svgo": {
5955
- "version": "1.2.2",
5956
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz",
5957
- "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==",
5958
  "dev": true,
5959
  "optional": true,
5960
  "requires": {
@@ -5962,8 +5971,7 @@
5962
  "coa": "2.0.2",
5963
  "css-select": "2.0.2",
5964
  "css-select-base-adapter": "0.1.1",
5965
- "css-tree": "1.0.0-alpha.28",
5966
- "css-url-regex": "1.1.0",
5967
  "csso": "3.5.1",
5968
  "js-yaml": "3.13.1",
5969
  "mkdirp": "0.5.1",
@@ -6024,7 +6032,7 @@
6024
  "fs-constants": "1.0.0",
6025
  "readable-stream": "2.3.6",
6026
  "to-buffer": "1.1.1",
6027
- "xtend": "4.0.1"
6028
  }
6029
  },
6030
  "temp-dir": {
@@ -6040,7 +6048,7 @@
6040
  "dev": true,
6041
  "requires": {
6042
  "temp-dir": "1.0.0",
6043
- "uuid": "3.3.2"
6044
  }
6045
  },
6046
  "text-table": {
@@ -6203,7 +6211,7 @@
6203
  "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
6204
  "dev": true,
6205
  "requires": {
6206
- "psl": "1.2.0",
6207
  "punycode": "1.4.1"
6208
  },
6209
  "dependencies": {
@@ -6261,7 +6269,7 @@
6261
  "dev": true,
6262
  "requires": {
6263
  "errlop": "1.1.1",
6264
- "semver": "5.7.0"
6265
  }
6266
  }
6267
  }
@@ -6272,7 +6280,7 @@
6272
  "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
6273
  "dev": true,
6274
  "requires": {
6275
- "buffer": "5.2.1",
6276
  "through": "2.3.8"
6277
  }
6278
  },
@@ -6412,9 +6420,9 @@
6412
  }
6413
  },
6414
  "uuid": {
6415
- "version": "3.3.2",
6416
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
6417
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
6418
  "dev": true
6419
  },
6420
  "validate-npm-package-license": {
@@ -6548,9 +6556,9 @@
6548
  "dev": true
6549
  },
6550
  "xtend": {
6551
- "version": "4.0.1",
6552
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
6553
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
6554
  "dev": true
6555
  },
6556
  "yallist": {
@@ -6577,7 +6585,7 @@
6577
  "requires": {
6578
  "archiver-utils": "1.3.0",
6579
  "compress-commons": "1.2.2",
6580
- "lodash": "4.17.11",
6581
  "readable-stream": "2.3.6"
6582
  }
6583
  }
1
  {
2
  "name": "wp-product-review",
3
+ "version": "3.7.1",
4
  "lockfileVersion": 1,
5
  "requires": true,
6
  "dependencies": {
41
  "dev": true
42
  },
43
  "ajv": {
44
+ "version": "6.10.2",
45
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
46
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
47
  "dev": true,
48
  "requires": {
49
  "fast-deep-equal": "2.0.1",
106
  "dev": true,
107
  "requires": {
108
  "archiver-utils": "1.3.0",
109
+ "async": "2.6.3",
110
  "buffer-crc32": "0.2.13",
111
  "glob": "7.0.6",
112
+ "lodash": "4.17.15",
113
  "readable-stream": "2.3.6",
114
  "tar-stream": "1.6.2",
115
  "walkdir": "0.0.11",
117
  },
118
  "dependencies": {
119
  "async": {
120
+ "version": "2.6.3",
121
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
122
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
123
  "dev": true,
124
  "requires": {
125
+ "lodash": "4.17.15"
126
  }
127
  }
128
  }
134
  "dev": true,
135
  "requires": {
136
  "glob": "7.0.6",
137
+ "graceful-fs": "4.2.2",
138
  "lazystream": "1.0.0",
139
+ "lodash": "4.17.15",
140
  "normalize-path": "2.1.1",
141
  "readable-stream": "2.3.6"
142
  }
265
  "dev": true
266
  },
267
  "autoprefixer": {
268
+ "version": "9.6.1",
269
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz",
270
+ "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==",
271
  "dev": true,
272
  "requires": {
273
+ "browserslist": "4.6.6",
274
+ "caniuse-lite": "1.0.30000989",
275
  "chalk": "2.4.2",
276
  "normalize-range": "0.1.2",
277
  "num2fraction": "1.2.2",
278
  "postcss": "7.0.17",
279
+ "postcss-value-parser": "4.0.2"
280
  }
281
  },
282
  "aws-sign2": {
353
  }
354
  },
355
  "base64-js": {
356
+ "version": "1.3.1",
357
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
358
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
359
  "dev": true
360
  },
361
  "bcrypt-pbkdf": {
412
  "requires": {
413
  "nice-try": "1.0.5",
414
  "path-key": "2.0.1",
415
+ "semver": "5.7.1",
416
  "shebang-command": "1.2.0",
417
  "which": "1.3.1"
418
  }
464
  "optional": true,
465
  "requires": {
466
  "bin-version": "3.1.0",
467
+ "semver": "5.7.1",
468
  "semver-truncate": "1.1.2"
469
  }
470
  },
691
  }
692
  },
693
  "browserslist": {
694
+ "version": "4.6.6",
695
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz",
696
+ "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==",
697
  "dev": true,
698
  "requires": {
699
+ "caniuse-lite": "1.0.30000989",
700
+ "electron-to-chromium": "1.3.238",
701
+ "node-releases": "1.1.28"
702
  }
703
  },
704
  "buffer": {
705
+ "version": "5.4.0",
706
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz",
707
+ "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==",
708
  "dev": true,
709
  "requires": {
710
+ "base64-js": "1.3.1",
711
  "ieee754": "1.1.13"
712
  }
713
  },
768
  "integrity": "sha1-HFQaoQilAQb2ML3Zj+HeyLoTP1E=",
769
  "dev": true,
770
  "requires": {
771
+ "graceful-fs": "4.2.2",
772
  "mkdirp": "0.5.1",
773
  "object-assign": "4.1.1",
774
  "rimraf": "2.6.3"
822
  }
823
  },
824
  "caniuse-lite": {
825
+ "version": "1.0.30000989",
826
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz",
827
+ "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==",
828
  "dev": true
829
  },
830
  "caseless": {
1084
  "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
1085
  "dev": true,
1086
  "requires": {
1087
+ "buffer": "5.4.0"
1088
  }
1089
  },
1090
  "crc32-stream": {
1167
  "optional": true
1168
  },
1169
  "css-tree": {
1170
+ "version": "1.0.0-alpha.33",
1171
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz",
1172
+ "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==",
1173
  "dev": true,
1174
  "optional": true,
1175
  "requires": {
1176
+ "mdn-data": "2.0.4",
1177
  "source-map": "0.5.7"
1178
  },
1179
  "dependencies": {
1186
  }
1187
  }
1188
  },
 
 
 
 
 
 
 
1189
  "css-what": {
1190
  "version": "2.1.3",
1191
  "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
1270
  "source-map": "0.5.7"
1271
  }
1272
  },
1273
+ "mdn-data": {
1274
+ "version": "1.1.4",
1275
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
1276
+ "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
1277
+ "dev": true,
1278
+ "optional": true
1279
+ },
1280
  "source-map": {
1281
  "version": "0.5.7",
1282
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1360
  "decompress-tarbz2": "4.1.1",
1361
  "decompress-targz": "4.1.1",
1362
  "decompress-unzip": "4.0.1",
1363
+ "graceful-fs": "4.2.2",
1364
  "make-dir": "1.3.0",
1365
  "pify": "2.3.0",
1366
  "strip-dirs": "2.1.0"
1574
  }
1575
  },
1576
  "dom-serializer": {
1577
+ "version": "0.2.1",
1578
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz",
1579
+ "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==",
1580
  "dev": true,
1581
  "requires": {
1582
+ "domelementtype": "2.0.1",
1583
+ "entities": "2.0.0"
1584
+ },
1585
+ "dependencies": {
1586
+ "domelementtype": {
1587
+ "version": "2.0.1",
1588
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
1589
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
1590
+ "dev": true
1591
+ }
1592
  }
1593
  },
1594
  "domelementtype": {
1613
  "dev": true,
1614
  "optional": true,
1615
  "requires": {
1616
+ "dom-serializer": "0.2.1",
1617
  "domelementtype": "1.3.1"
1618
  }
1619
  },
1686
  "dev": true
1687
  },
1688
  "electron-to-chromium": {
1689
+ "version": "1.3.238",
1690
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.238.tgz",
1691
+ "integrity": "sha512-k+s6EIiSTgfOm7WiMlGBMMMtBQXSui8OfLN1sXU3RohJOuLGVq0lVm7hXyDIDBcbPM0MeZabAdIPQOSEZT3ZLg==",
1692
  "dev": true
1693
  },
1694
  "encoding": {
1710
  }
1711
  },
1712
  "entities": {
1713
+ "version": "2.0.0",
1714
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
1715
+ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
1716
  "dev": true
1717
  },
1718
  "errlop": {
1731
  "dev": true,
1732
  "requires": {
1733
  "errlop": "1.1.1",
1734
+ "semver": "5.7.1"
1735
  }
1736
  }
1737
  }
1743
  "dev": true,
1744
  "requires": {
1745
  "string-template": "0.2.1",
1746
+ "xtend": "4.0.2"
1747
  }
1748
  },
1749
  "error-ex": {
2038
  "@nodelib/fs.stat": "1.1.3",
2039
  "glob-parent": "3.1.0",
2040
  "is-glob": "4.0.1",
2041
+ "merge2": "1.2.4",
2042
  "micromatch": "3.1.10"
2043
  }
2044
  },
2237
  "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
2238
  "dev": true,
2239
  "requires": {
2240
+ "graceful-fs": "4.2.2",
2241
  "jsonfile": "4.0.0",
2242
  "universalify": "0.1.2"
2243
  }
2254
  "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
2255
  "dev": true,
2256
  "requires": {
2257
+ "graceful-fs": "4.2.2",
2258
  "inherits": "2.0.4",
2259
  "mkdirp": "0.5.1",
2260
  "rimraf": "2.6.3"
2379
  "requires": {
2380
  "nice-try": "1.0.5",
2381
  "path-key": "2.0.1",
2382
+ "semver": "5.7.1",
2383
  "shebang-command": "1.2.0",
2384
  "which": "1.3.1"
2385
  }
2521
  "dev": true,
2522
  "requires": {
2523
  "glob": "7.1.4",
2524
+ "lodash": "4.17.15",
2525
  "minimatch": "3.0.4"
2526
  },
2527
  "dependencies": {
2571
  }
2572
  },
2573
  "graceful-fs": {
2574
+ "version": "4.2.2",
2575
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
2576
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
2577
  "dev": true
2578
  },
2579
  "graceful-readlink": {
2670
  "archiver": "1.3.0",
2671
  "chalk": "1.1.3",
2672
  "iltorb": "1.3.10",
2673
+ "lodash": "4.17.15",
2674
  "pretty-bytes": "4.0.2",
2675
  "stream-buffers": "2.2.0"
2676
  },
2753
  "imagemin-svgo": "7.0.0",
2754
  "p-map": "1.2.0",
2755
  "plur": "3.1.1",
2756
+ "pretty-bytes": "5.3.0"
2757
  },
2758
  "dependencies": {
2759
  "pretty-bytes": {
2760
+ "version": "5.3.0",
2761
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz",
2762
+ "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==",
2763
  "dev": true
2764
  }
2765
  }
2781
  "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==",
2782
  "dev": true,
2783
  "requires": {
2784
+ "async": "2.6.3",
2785
  "gaze": "1.1.3",
2786
+ "lodash": "4.17.15",
2787
  "tiny-lr": "1.1.1"
2788
  },
2789
  "dependencies": {
2790
  "async": {
2791
+ "version": "2.6.3",
2792
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
2793
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
2794
  "dev": true,
2795
  "requires": {
2796
+ "lodash": "4.17.15"
2797
  }
2798
  }
2799
  }
2819
  "colors": "1.1.2",
2820
  "grunt-legacy-log-utils": "2.0.1",
2821
  "hooker": "0.2.3",
2822
+ "lodash": "4.17.15"
2823
  }
2824
  },
2825
  "grunt-legacy-log-utils": {
2829
  "dev": true,
2830
  "requires": {
2831
  "chalk": "2.4.2",
2832
+ "lodash": "4.17.15"
2833
  }
2834
  },
2835
  "grunt-legacy-util": {
2842
  "exit": "0.1.2",
2843
  "getobject": "0.1.0",
2844
  "hooker": "0.2.3",
2845
+ "lodash": "4.17.15",
2846
  "underscore.string": "3.3.5",
2847
  "which": "1.3.1"
2848
  }
3168
  "version": "github:codeinwp/grunt-plugin-fleet#922540b800fafe8a89d60e82699afb8073c1b7c2",
3169
  "dev": true,
3170
  "requires": {
3171
+ "autoprefixer": "9.6.1",
3172
  "grunt": "1.0.4",
3173
  "grunt-cachebuster": "0.1.7",
3174
  "grunt-checktextdomain": "1.0.1",
3191
  "grunt-wp-css": "0.2.1",
3192
  "grunt-wp-i18n": "1.0.3",
3193
  "grunt-wp-readme-to-markdown": "2.0.1",
3194
+ "ignore": "5.1.4",
3195
  "time-grunt": "1.4.0"
3196
  }
3197
  },
3268
  "dev": true,
3269
  "requires": {
3270
  "grunt": "1.0.4",
3271
+ "semver": "6.3.0"
3272
  },
3273
  "dependencies": {
3274
  "semver": {
3275
+ "version": "6.3.0",
3276
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
3277
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
3278
  "dev": true
3279
  }
3280
  }
3287
  "requires": {
3288
  "cssbeautify": "0.3.1",
3289
  "csscomb": "3.1.8",
3290
+ "lodash": "4.17.15"
3291
  }
3292
  },
3293
  "grunt-wp-i18n": {
3318
  "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
3319
  "dev": true,
3320
  "requires": {
3321
+ "ajv": "6.10.2",
3322
  "har-schema": "2.0.0"
3323
  }
3324
  },
3418
  "dev": true
3419
  },
3420
  "hosted-git-info": {
3421
+ "version": "2.8.4",
3422
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
3423
+ "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
3424
  "dev": true
3425
  },
3426
  "html-comment-regex": {
3449
  "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
3450
  "dev": true,
3451
  "requires": {
3452
+ "dom-serializer": "0.2.1",
3453
  "domelementtype": "1.3.1"
3454
  }
3455
  },
3525
  "dev": true
3526
  },
3527
  "ignore": {
3528
+ "version": "5.1.4",
3529
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
3530
+ "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
3531
  "dev": true
3532
  },
3533
  "iltorb": {
3609
  "optional": true,
3610
  "requires": {
3611
  "is-svg": "3.0.0",
3612
+ "svgo": "1.3.0"
3613
  }
3614
  },
3615
  "import-lazy": {
4002
  "console-browserify": "1.1.0",
4003
  "exit": "0.1.2",
4004
  "htmlparser2": "3.8.3",
4005
+ "lodash": "4.17.15",
4006
  "minimatch": "3.0.4",
4007
  "shelljs": "0.3.0",
4008
  "strip-json-comments": "1.0.4"
4047
  "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
4048
  "dev": true,
4049
  "requires": {
4050
+ "graceful-fs": "4.2.2"
4051
  }
4052
  },
4053
  "jsprim": {
4162
  "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
4163
  "dev": true,
4164
  "requires": {
4165
+ "graceful-fs": "4.2.2",
4166
  "parse-json": "2.2.0",
4167
  "pify": "2.3.0",
4168
  "pinkie-promise": "2.0.1",
4189
  }
4190
  },
4191
  "lodash": {
4192
+ "version": "4.17.15",
4193
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
4194
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
4195
  "dev": true
4196
  },
4197
  "logalot": {
4296
  "dev": true
4297
  },
4298
  "mdn-data": {
4299
+ "version": "2.0.4",
4300
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
4301
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
4302
+ "dev": true,
4303
+ "optional": true
4304
  },
4305
  "meow": {
4306
  "version": "3.7.0",
4321
  }
4322
  },
4323
  "merge2": {
4324
+ "version": "1.2.4",
4325
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz",
4326
+ "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==",
4327
  "dev": true
4328
  },
4329
  "micromatch": {
4472
  "dev": true
4473
  },
4474
  "node-abi": {
4475
+ "version": "2.11.0",
4476
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz",
4477
+ "integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==",
4478
  "dev": true,
4479
  "optional": true,
4480
  "requires": {
4481
+ "semver": "5.7.1"
4482
  }
4483
  },
4484
  "node-gyp": {
4490
  "requires": {
4491
  "fstream": "1.0.12",
4492
  "glob": "7.0.6",
4493
+ "graceful-fs": "4.2.2",
4494
  "mkdirp": "0.5.1",
4495
  "nopt": "3.0.6",
4496
  "npmlog": "4.1.2",
4512
  }
4513
  },
4514
  "node-releases": {
4515
+ "version": "1.1.28",
4516
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.28.tgz",
4517
+ "integrity": "sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g==",
4518
  "dev": true,
4519
  "requires": {
4520
+ "semver": "5.7.1"
4521
  }
4522
  },
4523
  "node-uuid": {
4535
  "bluebird": "3.5.5",
4536
  "gettext-parser": "3.1.1",
4537
  "glob": "7.0.6",
4538
+ "lodash": "4.17.15",
4539
  "minimist": "1.2.0",
4540
  "mkdirp": "0.5.1",
4541
  "tmp": "0.0.33"
4563
  "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
4564
  "dev": true,
4565
  "requires": {
4566
+ "hosted-git-info": "2.8.4",
4567
+ "resolve": "1.12.0",
4568
+ "semver": "5.7.1",
4569
  "validate-npm-package-license": "3.0.4"
4570
  }
4571
  },
4949
  "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
4950
  "dev": true,
4951
  "requires": {
4952
+ "graceful-fs": "4.2.2",
4953
  "pify": "2.3.0",
4954
  "pinkie-promise": "2.0.1"
4955
  }
5034
  }
5035
  },
5036
  "postcss-value-parser": {
5037
+ "version": "4.0.2",
5038
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
5039
+ "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==",
5040
  "dev": true
5041
  },
5042
  "prebuild-install": {
5051
  "github-from-package": "0.0.0",
5052
  "minimist": "1.2.0",
5053
  "mkdirp": "0.5.1",
5054
+ "node-abi": "2.11.0",
5055
  "noop-logger": "0.1.1",
5056
  "npmlog": "4.1.2",
5057
  "os-homedir": "1.0.2",
5123
  "dev": true
5124
  },
5125
  "psl": {
5126
+ "version": "1.3.0",
5127
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
5128
+ "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
5129
  "dev": true
5130
  },
5131
  "pump": {
5315
  "safe-buffer": "5.1.2",
5316
  "tough-cookie": "2.4.3",
5317
  "tunnel-agent": "0.6.0",
5318
+ "uuid": "3.3.3"
5319
  }
5320
  },
5321
  "requirefresh": {
5334
  "dev": true,
5335
  "requires": {
5336
  "errlop": "1.1.1",
5337
+ "semver": "5.7.1"
5338
  }
5339
  }
5340
  }
5341
  },
5342
  "resolve": {
5343
+ "version": "1.12.0",
5344
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
5345
+ "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
5346
  "dev": true,
5347
  "requires": {
5348
  "path-parse": "1.0.6"
5429
  "dev": true,
5430
  "requires": {
5431
  "editions": "1.3.4",
5432
+ "graceful-fs": "4.2.2"
5433
  }
5434
  },
5435
  "safer-buffer": {
5455
  }
5456
  },
5457
  "semver": {
5458
+ "version": "5.7.1",
5459
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
5460
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
5461
  "dev": true
5462
  },
5463
  "semver-regex": {
5474
  "dev": true,
5475
  "optional": true,
5476
  "requires": {
5477
+ "semver": "5.7.1"
5478
  }
5479
  },
5480
  "set-blocking": {
5727
  "dev": true,
5728
  "requires": {
5729
  "spdx-expression-parse": "3.0.0",
5730
+ "spdx-license-ids": "3.0.5"
5731
  }
5732
  },
5733
  "spdx-exceptions": {
5743
  "dev": true,
5744
  "requires": {
5745
  "spdx-exceptions": "2.2.0",
5746
+ "spdx-license-ids": "3.0.5"
5747
  }
5748
  },
5749
  "spdx-license-ids": {
5750
+ "version": "3.0.5",
5751
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
5752
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
5753
  "dev": true
5754
  },
5755
  "split-string": {
5961
  }
5962
  },
5963
  "svgo": {
5964
+ "version": "1.3.0",
5965
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz",
5966
+ "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==",
5967
  "dev": true,
5968
  "optional": true,
5969
  "requires": {
5971
  "coa": "2.0.2",
5972
  "css-select": "2.0.2",
5973
  "css-select-base-adapter": "0.1.1",
5974
+ "css-tree": "1.0.0-alpha.33",
 
5975
  "csso": "3.5.1",
5976
  "js-yaml": "3.13.1",
5977
  "mkdirp": "0.5.1",
6032
  "fs-constants": "1.0.0",
6033
  "readable-stream": "2.3.6",
6034
  "to-buffer": "1.1.1",
6035
+ "xtend": "4.0.2"
6036
  }
6037
  },
6038
  "temp-dir": {
6048
  "dev": true,
6049
  "requires": {
6050
  "temp-dir": "1.0.0",
6051
+ "uuid": "3.3.3"
6052
  }
6053
  },
6054
  "text-table": {
6211
  "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
6212
  "dev": true,
6213
  "requires": {
6214
+ "psl": "1.3.0",
6215
  "punycode": "1.4.1"
6216
  },
6217
  "dependencies": {
6269
  "dev": true,
6270
  "requires": {
6271
  "errlop": "1.1.1",
6272
+ "semver": "5.7.1"
6273
  }
6274
  }
6275
  }
6280
  "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
6281
  "dev": true,
6282
  "requires": {
6283
+ "buffer": "5.4.0",
6284
  "through": "2.3.8"
6285
  }
6286
  },
6420
  }
6421
  },
6422
  "uuid": {
6423
+ "version": "3.3.3",
6424
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
6425
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
6426
  "dev": true
6427
  },
6428
  "validate-npm-package-license": {
6556
  "dev": true
6557
  },
6558
  "xtend": {
6559
+ "version": "4.0.2",
6560
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
6561
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
6562
  "dev": true
6563
  },
6564
  "yallist": {
6585
  "requires": {
6586
  "archiver-utils": "1.3.0",
6587
  "compress-commons": "1.2.2",
6588
+ "lodash": "4.17.15",
6589
  "readable-stream": "2.3.6"
6590
  }
6591
  }
readme.md CHANGED
@@ -62,6 +62,13 @@ If you wanna learn more about the <a href="http://www.codeinwp.com/blog/fastest-
62
  - Add rich snippet ( schema ) to your posts
63
 
64
  ## Changelog ##
 
 
 
 
 
 
 
65
  ### 3.7.0 - 2019-07-04 ###
66
 
67
  * Add rating scale out of 5
@@ -565,6 +572,7 @@ Alternatively you can also follow the following steps to install the WP Product
565
 
566
 
567
 
 
568
  ### How to activate user reviews ###
569
 
570
  By default user reviews are disabled since not all the themes are compatible with this option due to different designs for the comment box. You can easily activate them from General Settings
@@ -758,6 +766,24 @@ https://themeisle.com/contact
758
  = How to change the widget image size in WP Product Review =
759
  [https://docs.themeisle.com/article/1056-how-to-change-the-widget-image-size-in-wp-product-review](https://docs.themeisle.com/article/1056-how-to-change-the-widget-image-size-in-wp-product-review)
760
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
761
  == Upgrade Notice ==
762
 
763
  ### 3.0 ###
62
  - Add rich snippet ( schema ) to your posts
63
 
64
  ## Changelog ##
65
+ ### 3.7.1 - 2019-08-24 ###
66
+
67
+ * Improve UI for AMP requests
68
+ * Fix CSS conflict with some themes
69
+ * Make rating column sortable in listing screen
70
+
71
+
72
  ### 3.7.0 - 2019-07-04 ###
73
 
74
  * Add rating scale out of 5
572
 
573
 
574
 
575
+
576
  ### How to activate user reviews ###
577
 
578
  By default user reviews are disabled since not all the themes are compatible with this option due to different designs for the comment box. You can easily activate them from General Settings
766
  = How to change the widget image size in WP Product Review =
767
  [https://docs.themeisle.com/article/1056-how-to-change-the-widget-image-size-in-wp-product-review](https://docs.themeisle.com/article/1056-how-to-change-the-widget-image-size-in-wp-product-review)
768
 
769
+ = How to make Comment Review option work in any theme =
770
+ [https://docs.themeisle.com/article/54-why-comment-review-option-is-not-working-with-my-theme](https://docs.themeisle.com/article/54-why-comment-review-option-is-not-working-with-my-theme)
771
+
772
+ = Enable user reviews in WP Product Review =
773
+ [https://docs.themeisle.com/article/759-enable-user-reviews-in-wp-product-revie](https://docs.themeisle.com/article/759-enable-user-reviews-in-wp-product-revie)
774
+
775
+ = How to remove Pros/Cons list in WP Product Review =
776
+ [https://docs.themeisle.com/article/762-how-to-remove-pros-cons-list-in-wp-product-review](https://docs.themeisle.com/article/762-how-to-remove-pros-cons-list-in-wp-product-review)
777
+
778
+ = How the before/after/manual review box placement option works =
779
+ [https://docs.themeisle.com/article/865-how-the-before-after-manual-review-box-placement-works](https://docs.themeisle.com/article/865-how-the-before-after-manual-review-box-placement-works)
780
+
781
+ = How to display both the product title and image in the review comparison table =
782
+ [https://docs.themeisle.com/article/981-how-to-display-product-title-and-image-both-in-review-table](https://docs.themeisle.com/article/981-how-to-display-product-title-and-image-both-in-review-table)
783
+
784
+ = Add specific "Service" types for schema.org in WP Product Review =
785
+ [https://docs.themeisle.com/article/1071-add-specific-service-types-for-schema-org](https://docs.themeisle.com/article/1071-add-specific-service-types-for-schema-org)
786
+
787
  == Upgrade Notice ==
788
 
789
  ### 3.0 ###
readme.txt CHANGED
@@ -62,6 +62,13 @@ If you wanna learn more about the <a href="http://www.codeinwp.com/blog/fastest-
62
  - Add rich snippet ( schema ) to your posts
63
 
64
  == Changelog ==
 
 
 
 
 
 
 
65
  = 3.7.0 - 2019-07-04 =
66
 
67
  * Add rating scale out of 5
62
  - Add rich snippet ( schema ) to your posts
63
 
64
  == Changelog ==
65
+ = 3.7.1 - 2019-08-24 =
66
+
67
+ * Improve UI for AMP requests
68
+ * Fix CSS conflict with some themes
69
+ * Make rating column sortable in listing screen
70
+
71
+
72
  = 3.7.0 - 2019-07-04 =
73
 
74
  * Add rating scale out of 5
themeisle-hash.json CHANGED
@@ -1 +1 @@
1
- {"class-wppr-autoloader.php":"c7f7f3dd52445edb5f7367ba7b31281f","class-wppr-recursive-filter.php":"6c74b0e7c04529d797ae9689d9a44c8d","index.php":"c76772901fa1b2b14aa3ba32d7773c8a","uninstall.php":"7c6d36652e8dcf013f2c246f4a289acf","wp-product-review.php":"cac22bd899167a33eff54b7ee5e24063"}
1
+ {"class-wppr-autoloader.php":"c7f7f3dd52445edb5f7367ba7b31281f","class-wppr-recursive-filter.php":"6c74b0e7c04529d797ae9689d9a44c8d","index.php":"c76772901fa1b2b14aa3ba32d7773c8a","uninstall.php":"7c6d36652e8dcf013f2c246f4a289acf","wp-product-review.php":"90afddce8cdf2ae3c8f0179c5b891e97"}
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit352003e57eff9edfc8e33fa4e5fb60d8::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitd326e260ad54a8d41951f4c1d19cfa6b::getLoader();
vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit3dc8fdc09d7bd4b63c06d840df5e9715::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit8f304a76338508ad722dc834ae3ec66d::getLoader();
vendor/codeinwp/themeisle-sdk/CHANGELOG.md CHANGED
@@ -1,3 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ## [3.0.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.8...v3.0.9) (2019-06-26)
2
 
3
 
1
+ ## [3.1.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.3...v3.1.4) (2019-08-23)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * license key was missing on get_version call ([365cde6](https://github.com/Codeinwp/themeisle-sdk/commit/365cde6))
7
+ * license key was missing on get_version call ([c02f225](https://github.com/Codeinwp/themeisle-sdk/commit/c02f225))
8
+
9
+ ## [3.1.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.2...v3.1.3) (2019-08-20)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * license deactivation behaviour https://github.com/Codeinwp/visua… ([59c4afe](https://github.com/Codeinwp/themeisle-sdk/commit/59c4afe))
15
+ * license deactivation behaviour https://github.com/Codeinwp/visualizer-pro/issues/192 ([f641e18](https://github.com/Codeinwp/themeisle-sdk/commit/f641e18))
16
+
17
+ ## [3.1.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.1...v3.1.2) (2019-08-12)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * phpunit test case ([efe851c](https://github.com/Codeinwp/themeisle-sdk/commit/efe851c))
23
+ * url format for license endpoint, improve changelog handling and license checks ([a492c68](https://github.com/Codeinwp/themeisle-sdk/commit/a492c68))
24
+
25
+ ## [3.1.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.0...v3.1.1) (2019-08-08)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * adds is_file for file existence check ([d1205c4](https://github.com/Codeinwp/themeisle-sdk/commit/d1205c4))
31
+ * adds is_file for file existence check ([be119c1](https://github.com/Codeinwp/themeisle-sdk/commit/be119c1))
32
+
33
+ # [3.1.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.10...v3.1.0) (2019-08-05)
34
+
35
+
36
+ ### Bug Fixes
37
+
38
+ * adds extra comments for rest of the options, fix [#64](https://github.com/Codeinwp/themeisle-sdk/issues/64) ([018b22f](https://github.com/Codeinwp/themeisle-sdk/commit/018b22f))
39
+ * hide license key when active under a password mask, fix [#67](https://github.com/Codeinwp/themeisle-sdk/issues/67) ([c0633c2](https://github.com/Codeinwp/themeisle-sdk/commit/c0633c2))
40
+ * new uninstall feedback popup issues ([5bda4bd](https://github.com/Codeinwp/themeisle-sdk/commit/5bda4bd))
41
+ * phpcs indentation errors ([d59ed4f](https://github.com/Codeinwp/themeisle-sdk/commit/d59ed4f))
42
+ * undefined notices on license check, fix [#60](https://github.com/Codeinwp/themeisle-sdk/issues/60) ([7f56a97](https://github.com/Codeinwp/themeisle-sdk/commit/7f56a97))
43
+ * uninstall feedback popup placement [[#61](https://github.com/Codeinwp/themeisle-sdk/issues/61)] ([1102d6c](https://github.com/Codeinwp/themeisle-sdk/commit/1102d6c))
44
+
45
+
46
+ ### Features
47
+
48
+ * new product feedback popup ([f0dbab3](https://github.com/Codeinwp/themeisle-sdk/commit/f0dbab3))
49
+ * new uninstall feedback form for themes ([8a29f21](https://github.com/Codeinwp/themeisle-sdk/commit/8a29f21))
50
+
51
+ ## [3.0.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.9...v3.0.10) (2019-07-16)
52
+
53
+
54
+ ### Bug Fixes
55
+
56
+ * compatibility with lower PHP versions ([065ac8e](https://github.com/Codeinwp/themeisle-sdk/commit/065ac8e))
57
+ * not loading licenser when SDK comes from theme [[#62](https://github.com/Codeinwp/themeisle-sdk/issues/62)] ([b706ca7](https://github.com/Codeinwp/themeisle-sdk/commit/b706ca7))
58
+ * not loading licenser when SDK comes from theme [[#65](https://github.com/Codeinwp/themeisle-sdk/issues/65) ([419d8e6](https://github.com/Codeinwp/themeisle-sdk/commit/419d8e6))
59
+ * preserve loaded when adding the licenser one ([cd50434](https://github.com/Codeinwp/themeisle-sdk/commit/cd50434))
60
+
61
  ## [3.0.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.8...v3.0.9) (2019-06-26)
62
 
63
 
vendor/codeinwp/themeisle-sdk/load.php CHANGED
@@ -14,14 +14,22 @@ if ( ! defined( 'ABSPATH' ) ) {
14
  return;
15
  }
16
  // Current SDK version and path.
17
- $themeisle_sdk_version = '3.0.9';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
21
  global $themeisle_sdk_max_path;
22
 
 
 
 
 
 
 
 
 
23
  if ( version_compare( $themeisle_sdk_version, $themeisle_sdk_max_path ) == 0 &&
24
- apply_filters( 'themeisle_sdk_should_overwrite_path', false, $themeisle_sdk_path, $themeisle_sdk_max_path ) ) {
25
  $themeisle_sdk_max_path = $themeisle_sdk_path;
26
  }
27
 
@@ -30,6 +38,21 @@ if ( version_compare( $themeisle_sdk_version, $themeisle_sdk_max_version ) > 0 )
30
  $themeisle_sdk_max_path = $themeisle_sdk_path;
31
  }
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  // load the latest sdk version from the active Themeisle products.
34
  if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
35
  /**
14
  return;
15
  }
16
  // Current SDK version and path.
17
+ $themeisle_sdk_version = '3.1.4';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
21
  global $themeisle_sdk_max_path;
22
 
23
+ // If this is the latest SDK and it comes from a theme, we should load licenser separately.
24
+ $themeisle_sdk_relative_licenser_path = '/src/Modules/Licenser.php';
25
+
26
+ global $themeisle_sdk_abs_licenser_path;
27
+ if ( ! is_file( $themeisle_sdk_path . $themeisle_sdk_relative_licenser_path ) && is_file( $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path ) ) {
28
+ $themeisle_sdk_abs_licenser_path = $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path;
29
+ add_filter( 'themeisle_sdk_required_files', 'themeisle_sdk_load_licenser_if_present' );
30
+ }
31
  if ( version_compare( $themeisle_sdk_version, $themeisle_sdk_max_path ) == 0 &&
32
+ apply_filters( 'themeisle_sdk_should_overwrite_path', false, $themeisle_sdk_path, $themeisle_sdk_max_path ) ) {
33
  $themeisle_sdk_max_path = $themeisle_sdk_path;
34
  }
35
 
38
  $themeisle_sdk_max_path = $themeisle_sdk_path;
39
  }
40
 
41
+ // load the latest sdk version from the active Themeisle products.
42
+ if ( ! function_exists( 'themeisle_sdk_load_licenser_if_present' ) ) :
43
+ /**
44
+ * Always load the licenser, if present.
45
+ *
46
+ * @param array $to_load Previously files to load.
47
+ */
48
+ function themeisle_sdk_load_licenser_if_present( $to_load ) {
49
+ global $themeisle_sdk_abs_licenser_path;
50
+ $to_load[] = $themeisle_sdk_abs_licenser_path;
51
+
52
+ return $to_load;
53
+ }
54
+ endif;
55
+
56
  // load the latest sdk version from the active Themeisle products.
57
  if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
58
  /**
vendor/codeinwp/themeisle-sdk/src/Loader.php CHANGED
@@ -84,7 +84,7 @@ final class Loader {
84
  */
85
  public static function add_product( $base_file ) {
86
 
87
- if ( ! is_readable( $base_file ) ) {
88
  return self::$instance;
89
  }
90
  $product = new Product( $base_file );
84
  */
85
  public static function add_product( $base_file ) {
86
 
87
+ if ( ! is_file( $base_file ) ) {
88
  return self::$instance;
89
  }
90
  $product = new Product( $base_file );
vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php CHANGED
@@ -109,8 +109,66 @@ class Licenser extends Abstract_Module {
109
  $valid_string = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' );
110
  $invalid_string = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' );
111
  $license_message = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
 
113
- echo '<p ><input ' . ( ( 'valid' === $status ) ? ( 'style="border:1px solid #7ad03a; "' ) : '' ) . ' type="text" id="' . $this->product->get_key() . '_license" name="' . $this->product->get_key() . '_license" value="' . $value . '" /><a ' . ( ( 'valid' === $status ) ? ( 'style="color:#fff;background: #7ad03a; display: inline-block;text-decoration: none;font-size: 13px;line-height: 26px;height: 26px; margin-left:5px; padding: 0 10px 1px; -webkit-border-radius: 3px;border-radius: 3px; ">' . $valid_string ) : ( 'style="color:#fff;background: #dd3d36; display: inline-block;text-decoration: none;font-size: 13px;line-height: 26px;height: 26px; margin-left:5px; padding: 0 10px 1px; -webkit-border-radius: 3px;border-radius: 3px; ">' . $invalid_string ) ) . ' </a>&nbsp;&nbsp;&nbsp;<button name="' . $this->product->get_key() . '_btn_trigger" ' . ( ( 'valid' === $status ) ? ( ' class="button button-primary">' . $deactivate_string ) : ( ' class="button button-primary" value="yes" type="submit" >' . $activate_string ) ) . ' </button></p><p class="description">' . sprintf( $license_message, '<a href="' . $this->get_api_url() . '">' . $this->get_distributor_name() . '</a> ', $this->product->get_type() ) . '</p>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
  }
116
 
@@ -424,7 +482,7 @@ class Licenser extends Abstract_Module {
424
  function update_nag() {
425
  $theme = wp_get_theme( $this->product->get_slug() );
426
  $api_response = get_transient( $this->product_key );
427
- if ( false === $api_response ) {
428
  return;
429
  }
430
  $update_url = wp_nonce_url( 'update.php?action=upgrade-theme&amp;theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() );
@@ -436,7 +494,7 @@ class Licenser extends Abstract_Module {
436
  '<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
437
  $theme->get( 'Name' ),
438
  $api_response->new_version,
439
- '#TB_inline?width=640&amp;inlineId=' . $this->product->get_version() . '_changelog',
440
  $theme->get( 'Name' ),
441
  $update_url,
442
  $update_onclick
@@ -486,7 +544,7 @@ class Licenser extends Abstract_Module {
486
 
487
  return false;
488
  }
489
- $update_data->sections = maybe_unserialize( $update_data->sections );
490
 
491
  set_transient( $this->product_key, $update_data, 12 * HOUR_IN_SECONDS );
492
  }
@@ -509,18 +567,17 @@ class Licenser extends Abstract_Module {
509
  $api_params = array(
510
  'edd_action' => 'get_version',
511
  'version' => $this->product->get_version(),
512
- 'license' => $this->license_key,
513
- 'name' => $this->product->get_name(),
514
  'slug' => $this->product->get_slug(),
515
- 'author' => $this->get_distributor_name(),
516
  'url' => rawurlencode( home_url() ),
517
  );
518
  $response = wp_remote_get(
519
- $this->get_api_url(),
520
  array(
521
  'timeout' => 15,
522
  'sslverify' => false,
523
- 'body' => $api_params,
524
  )
525
  );
526
  if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
109
  $valid_string = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' );
110
  $invalid_string = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' );
111
  $license_message = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' );
112
+ ?>
113
+ <style type="text/css">
114
+ input.themeisle-sdk-text-input-valid {
115
+ border: 1px solid #7ad03a;
116
+ }
117
+
118
+ input.themeisle-sdk-license-input {
119
+ width: 300px;
120
+ padding: 5px;
121
+ }
122
+
123
+ .themeisle-sdk-license-deactivate-cta {
124
+ color: #fff;
125
+ background: #7ad03a;
126
+ display: inline-block;
127
+ text-decoration: none;
128
+ font-size: 13px;
129
+ line-height: 30px;
130
+ height: 26px;
131
+ margin-left: 5px;
132
+ padding: 0 10px 3px;
133
+ -webkit-border-radius: 3px;
134
+ border-radius: 3px;
135
+ }
136
+
137
+ .themeisle-sdk-license-activate-cta {
138
+ color: #fff;
139
+ background: #dd3d36;
140
+ display: inline-block;
141
+ text-decoration: none;
142
+ font-size: 13px;
143
+ line-height: 30px;
144
+ height: 26px;
145
+ margin-left: 5px;
146
+ padding: 0 10px 3px;
147
+ -webkit-border-radius: 3px;
148
+ border-radius: 3px;
149
+ }
150
+
151
+ button.button.themeisle-sdk-licenser-button-cta {
152
+ line-height: 26px;
153
+ height: 29px;
154
+ vertical-align: top;
155
+ }
156
 
157
+ </style>
158
+ <?php
159
+ echo sprintf(
160
+ '<p>%s<input class="themeisle-sdk-license-input %s" type="text" id="%s_license" name="%s_license" value="%s" /><a class="%s">%s</a>&nbsp;&nbsp;&nbsp;<button name="%s_btn_trigger" class="button button-primary themeisle-sdk-licenser-button-cta" value="yes" type="submit" >%s</button></p><p class="description">%s</p>',
161
+ ( ( 'valid' === $status ) ? sprintf( '<input type="hidden" value="%s" name="%s_license" />', $value, $this->product->get_key() ) : '' ),
162
+ ( ( 'valid' === $status ) ? 'themeisle-sdk-text-input-valid' : '' ),
163
+ $this->product->get_key(),
164
+ ( ( 'valid' === $status ) ? $this->product->get_key() . '_mask' : $this->product->get_key() ),
165
+ ( ( 'valid' === $status ) ? ( str_repeat( '*', 30 ) . substr( $value, - 5 ) ) : $value ),
166
+ ( 'valid' === $status ? 'themeisle-sdk-license-deactivate-cta' : 'themeisle-sdk-license-activate-cta' ),
167
+ ( 'valid' === $status ? $valid_string : $invalid_string ),
168
+ $this->product->get_key(),
169
+ ( 'valid' === $status ? $deactivate_string : $activate_string ),
170
+ sprintf( $license_message, '<a href="' . $this->get_api_url() . '">' . $this->get_distributor_name() . '</a> ', $this->product->get_type() )
171
+ );
172
 
173
  }
174
 
482
  function update_nag() {
483
  $theme = wp_get_theme( $this->product->get_slug() );
484
  $api_response = get_transient( $this->product_key );
485
+ if ( false === $api_response || ! isset( $api_response->new_version ) ) {
486
  return;
487
  }
488
  $update_url = wp_nonce_url( 'update.php?action=upgrade-theme&amp;theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() );
494
  '<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
495
  $theme->get( 'Name' ),
496
  $api_response->new_version,
497
+ sprintf( '%s&TB_iframe=true&amp;width=1024&amp;height=800', $this->product->get_changelog() ),
498
  $theme->get( 'Name' ),
499
  $update_url,
500
  $update_onclick
544
 
545
  return false;
546
  }
547
+ $update_data->sections = isset( $update_data->sections ) ? maybe_unserialize( $update_data->sections ) : null;
548
 
549
  set_transient( $this->product_key, $update_data, 12 * HOUR_IN_SECONDS );
550
  }
567
  $api_params = array(
568
  'edd_action' => 'get_version',
569
  'version' => $this->product->get_version(),
570
+ 'license' => empty( $this->license_key ) ? 'free' : $this->license_key,
571
+ 'name' => rawurlencode( $this->product->get_name() ),
572
  'slug' => $this->product->get_slug(),
573
+ 'author' => rawurlencode( $this->get_distributor_name() ),
574
  'url' => rawurlencode( home_url() ),
575
  );
576
  $response = wp_remote_get(
577
+ add_query_arg( $api_params, $this->get_api_url() ),
578
  array(
579
  'timeout' => 15,
580
  'sslverify' => false,
 
581
  )
582
  );
583
  if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php CHANGED
@@ -54,7 +54,9 @@ class Uninstall_Feedback extends Abstract_Module {
54
  'placeholder' => 'What\'s the plugin\'s name?',
55
  ),
56
  'I could not get the plugin to work' => array(
57
- 'id' => 4,
 
 
58
  ),
59
  'I no longer need the plugin' => array(
60
  'id' => 5,
@@ -62,7 +64,9 @@ class Uninstall_Feedback extends Abstract_Module {
62
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
63
  ),
64
  'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
65
- 'id' => 6,
 
 
66
  ),
67
  );
68
  /**
@@ -75,7 +79,9 @@ class Uninstall_Feedback extends Abstract_Module {
75
  'id' => 7,
76
  ),
77
  'It lacks options' => array(
78
- 'id' => 8,
 
 
79
  ),
80
  'Is not working with a plugin that I need' => array(
81
  'id' => 9,
@@ -95,7 +101,7 @@ class Uninstall_Feedback extends Abstract_Module {
95
  'Other' => array(
96
  'id' => 999,
97
  'type' => 'textarea',
98
- 'placeholder' => 'cmon cmon tell us',
99
  ),
100
  );
101
  /**
@@ -103,13 +109,13 @@ class Uninstall_Feedback extends Abstract_Module {
103
  *
104
  * @var string $heading_plugin The heading of the modal
105
  */
106
- private $heading_plugin = 'Quick Feedback <span>Because we care about our clients, please leave us feedback.</span>';
107
  /**
108
  * Default heading for theme.
109
  *
110
  * @var string $heading_theme The heading of the modal
111
  */
112
- private $heading_theme = 'Looking to change {theme}? <span> What does not work for you?</span>';
113
  /**
114
  * Default submit button action text.
115
  *
@@ -133,342 +139,338 @@ class Uninstall_Feedback extends Abstract_Module {
133
  return;
134
  }
135
 
136
- add_thickbox();
137
 
138
- $id = $this->product->get_key() . '_deactivate';
 
 
139
 
140
- $this->add_css( $this->product->get_type(), $this->product->get_key() );
141
- $this->add_js( $this->product->get_type(), $this->product->get_key(), '#TB_inline?' . apply_filters( $this->product->get_key() . '_feedback_deactivate_attributes', 'width=600&height=550' ) . '&inlineId=' . $id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
 
143
- echo '<div id="' . $id . '" style="display:none;" class="themeisle-deactivate-box">' . $this->get_html( $this->product->get_type(), $this->product->get_key() ) . '</div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  }
145
 
146
  /**
147
- * Loads the css
148
- *
149
- * @param string $type The type of product.
150
- * @param string $key The product key.
151
  */
152
- function add_css( $type, $key ) {
153
- $key = esc_attr( $key );
154
- $suffix = Product::THEME_TYPE === $type ? 'theme-install-php' : 'plugins-php';
155
- $icon = esc_attr( apply_filters( $this->product->get_slug() . '_uninstall_feedback_icon', '' ) );
156
- if ( empty( $icon ) ) {
157
- $icon = 'data:image/png;base64,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';
158
- }
159
  ?>
160
- <style type="text/css" id="<?php echo $key; ?>ti-deactivate-css">
161
- input[name="ti-deactivate-option"] ~ div {
162
- display: none;
 
 
 
 
163
  }
164
 
165
- input[name="ti-deactivate-option"]:checked ~ div {
166
- display: block;
167
- }
168
 
169
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_window.thickbox-loading:before {
170
- background: none !important;
 
171
  }
172
 
173
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_title {
174
- background: url('<?php echo $icon; ?>') 23px 0px no-repeat;
175
- border: none;
176
- box-sizing: border-box;
177
- color: #373e40;
178
- font-size: 24px;
179
- font-weight: 700;
180
- height: 90px;
181
- padding: 40px 40px 0 120px;
182
- text-transform: uppercase;
183
- width: 100%;
184
  }
185
 
186
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul i {
187
- padding-left: 5px;
188
- margin: 0 1px;
189
  }
190
 
191
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul strong {
192
- width: 125px;
193
- display: block;
194
  margin: 0;
195
- float: left;
196
  }
197
 
198
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul {
199
- margin-left: 39px;
200
- margin-top: 2px;
201
- padding-top: 0px;
202
  }
203
 
204
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content p {
205
- font-style: italic;
206
- margin-bottom: 0px;
207
  }
208
 
209
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content {
 
 
210
  display: none;
211
- }
212
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure-content {
213
- display: block;
214
- position:absolute;
215
- bottom: 100px;
216
  }
217
 
218
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure {
219
- top: -130px;
 
 
 
220
  }
221
 
222
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open {
223
- height: 590px !important;
224
- }
225
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure {
226
- position: absolute;
227
- top: -50px;
228
- font-size: 13px;
229
- color: #8d9192;
230
- font-weight: 400;
231
- right: 40px;
232
  }
233
 
234
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.actions {
235
- box-sizing: border-box;
236
- padding: 30px 40px;
237
- background-color: #eaeaea;
238
  }
239
 
240
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button {
241
- background: #ec5d60;
242
- border: none;
243
- box-shadow: none;
244
- color: #ffffff;
245
- font-size: 15px;
246
- font-weight: 700;
247
- height: auto;
248
- line-height: 20px;
249
- padding: 10px 15px;
250
- text-transform: uppercase;
251
- -webkit-transition: 0.3s ease;
252
- -moz-transition: 0.3s ease;
253
- -ms-transition: 0.3s ease;
254
- -o-transition: 0.3s ease;
255
- transition: 0.3s ease;
256
  }
257
 
258
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary {
259
- background: transparent;
260
- box-shadow: none;
261
- color: #8d9192;
262
- font-weight: 400;
263
- float: right;
264
- line-height: 40px;
265
- padding: 0;
266
- text-decoration: underline;
267
- text-shadow: none;
268
- text-transform: none;
269
  }
270
 
271
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:hover {
272
- background: #e83f42;
 
273
  }
274
 
275
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
276
- background: transparent;
 
 
 
277
  }
278
 
279
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:focus {
280
- box-shadow: none;
281
- outline: none;
282
  }
283
 
284
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:active {
285
- box-shadow: none;
286
- transform: translateY(0);
287
  }
288
 
289
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:disabled {
290
- cursor: not-allowed;
 
291
  }
292
 
293
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
294
- text-decoration: none;
 
 
 
 
 
295
  }
296
 
297
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
298
- background-color: #ffffff;
 
299
  }
300
 
301
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list {
302
- margin: 0;
303
  }
304
 
305
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li {
306
- color: #373e40;
307
- font-size: 13px;
308
- margin-bottom: 5px;
 
309
  }
310
 
311
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li label {
312
- margin-left: 10px;
313
- line-height: 28px;
314
- font-size: 15px;
315
  }
316
 
317
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list input[type=radio] {
318
- margin-top: 1px;
319
  }
320
 
321
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_ajaxContent {
322
- box-sizing: border-box;
323
- height: auto !important;
324
- padding: 20px 40px;
325
- width: 100% !important;
 
 
 
 
 
 
 
 
 
326
  }
327
 
328
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
329
- padding: 10px 15px;
330
- width: 100%;
331
  }
332
 
333
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li div {
334
- margin: 10px 30px;
335
  }
336
 
337
- .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle {
338
- box-sizing: border-box;
339
- display: block;
340
- float: none;
341
- font-weight: 700;
342
- line-height: 1;
343
- padding: 0;
344
- text-align: left;
345
- width: 100%;
346
  }
347
 
348
- .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle span {
349
- color: #8d9192;
350
- display: block;
351
- font-size: 15px;
352
- font-weight: 400;
353
- margin-top: 5px;
354
- text-transform: none;
355
- }
356
 
357
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
358
- width: 100%;
359
  display: block;
360
  position: absolute;
361
- left: 0;
362
- bottom: 0;
 
 
 
 
 
363
  }
364
 
365
- .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
366
- font-size: 32px;
 
 
 
 
 
367
  }
368
 
369
- .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
370
- color: #eee;
 
 
 
 
 
 
 
 
371
  }
372
 
373
- .<?php echo $key; ?>-container #TB_closeWindowButton {
374
- left: auto;
375
- right: -5px;
376
- top: -35px;
377
- color: #eee;
378
  }
379
 
380
- .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
381
- text-align: right;
382
- line-height: 25px;
383
- width: 25px;
384
- height: 25px;
385
- }
386
 
387
- .<?php echo $key; ?>-container #TB_closeWindowButton:focus .tb-close-icon {
388
- box-shadow: none;
389
- outline: none;
390
  }
391
 
392
- .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
393
- font: normal 25px dashicons;
394
  }
395
 
396
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container {
397
- margin: auto !important;
398
- height: 500px !important;
399
- top: 0 !important;
400
- left: 0 !important;
401
- bottom: 0 !important;
402
- right: 0 !important;
403
- width: 600px !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
404
  }
405
  </style>
406
  <?php
407
- do_action( $this->product->get_key() . '_uninstall_feedback_after_css' );
408
  }
409
 
410
  /**
411
- * Loads the js.
412
- *
413
- * @param string $type The type of product.
414
- * @param string $key The product key.
415
- * @param string $src The url that will hijack the deactivate button url.
416
  */
417
- function add_js( $type, $key, $src ) {
418
- $heading = Product::PLUGIN_TYPE === $type ? $this->heading_plugin : str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
419
- $key = esc_attr( $key );
420
- $heading = apply_filters( $this->product->get_key() . '_feedback_deactivate_heading', $heading );
421
  ?>
422
  <script type="text/javascript" id="ti-deactivate-js">
423
  (function ($) {
424
  $(document).ready(function () {
425
- var auto_trigger = false;
426
- var target_element = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
427
- <?php
428
- if ( 'theme' === $type ) {
429
- ?>
430
- auto_trigger = true;
431
- if ($('a.ti-auto-anchor').length == 0) {
432
- $('body').append($('<a class="ti-auto-anchor" href=""></a>'));
433
- }
434
- target_element = 'a.ti-auto-anchor';
435
- <?php
436
- }
437
- ?>
438
 
439
- if (auto_trigger) {
440
- setTimeout(function () {
441
- $('a.ti-auto-anchor').trigger('click');
442
- }, <?php echo self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000; ?> );
443
- }
444
- $(document).on('thickbox:removed', function () {
445
- $.post(ajaxurl, {
446
- 'action': '<?php echo $key . '_uninstall_feedback'; ?>',
447
- 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
448
- 'type': '<?php echo $type; ?>',
449
- 'key': '<?php echo $key; ?>'
450
- });
451
- });
452
- var href = $(target_element).attr('href');
453
- $('#<?php echo $key; ?>ti-deactivate-no').attr('data-ti-action', href).on('click', function (e) {
454
  e.preventDefault();
455
- e.stopPropagation();
456
-
457
- $('body').unbind('thickbox:removed');
458
- tb_remove();
459
- var redirect = $(this).attr('data-ti-action');
460
- if (redirect !== '') {
461
- location.href = redirect;
462
- }
463
  });
464
 
465
- $('#<?php echo $key; ?> ul.ti-list label, #<?php echo $key; ?> ul.ti-list input[name="ti-deactivate-option"]').on('click', function (e) {
466
- $('#<?php echo $key; ?>ti-deactivate-yes').val($('#<?php echo $key; ?>ti-deactivate-yes').attr('data-after-text'));
 
 
467
 
468
- var radio = $(this).prop('tagName') === 'LABEL' ? $(this).parent() : $(this);
469
- if (radio.parent().find('textarea').length > 0 && radio.parent().find('textarea').val().length === 0) {
 
 
470
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
471
- radio.parent().find('textarea').on('keyup', function (ee) {
472
  if ($(this).val().length === 0) {
473
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
474
  } else {
@@ -479,127 +481,236 @@ class Uninstall_Feedback extends Abstract_Module {
479
  $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
480
  }
481
  });
482
- $("#<?php echo $key; ?>-info-disclosure").on('click', function () {
483
- $("#TB_window").toggleClass("<?php echo $key; ?>-container-disc-open");
484
- return false;
485
- });
486
- $('#<?php echo $key; ?>ti-deactivate-yes').attr('data-ti-action', href).on('click', function (e) {
487
  e.preventDefault();
488
  e.stopPropagation();
 
 
 
489
  $.post(ajaxurl, {
490
- 'action': '<?php echo $key . '_uninstall_feedback'; ?>',
491
  'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
492
- 'id': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().attr('ti-option-id'),
493
- 'msg': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().find('textarea').val(),
494
- 'type': '<?php echo $type; ?>',
 
495
  });
496
- var redirect = $(this).attr('data-ti-action');
497
- if (redirect != '') {
498
- location.href = redirect;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  } else {
500
- $('body').unbind('thickbox:removed');
501
- tb_remove();
502
  }
503
  });
504
 
505
- $(target_element).attr('name', '<?php echo wp_kses( $heading, array( 'span' => array() ) ); ?>').attr('href', '<?php echo $src; ?>').addClass('thickbox');
506
- var thicbox_timer;
507
- $(target_element).on('click', function () {
508
- tiBindThickbox();
 
 
 
 
 
509
  });
510
 
511
- function tiBindThickbox() {
512
- var thicbox_timer = setTimeout(function () {
513
- if ($("#<?php echo esc_html( $key ); ?>").is(":visible")) {
514
- $("body").trigger('thickbox:iframe:loaded');
515
- $("#TB_window").addClass("<?php echo $key; ?>-container");
516
- clearTimeout(thicbox_timer);
517
- $('body').unbind('thickbox:removed');
518
- } else {
519
- tiBindThickbox();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
520
  }
521
- }, 100);
522
- }
523
  });
524
  })(jQuery);
 
525
  </script>
526
  <?php
527
-
528
  do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
529
  }
530
 
531
  /**
532
- * Generates the HTML.
533
  *
534
- * @param string $type The type of product.
535
- * @param string $key The product key.
536
  */
537
- function get_html( $type, $key ) {
538
- $options = Product::PLUGIN_TYPE === $type ? $this->options_plugin : $this->options_theme;
539
- $button_cancel = Product::PLUGIN_TYPE === $type ? $this->button_cancel : 'Skip';
540
- $button_submit = Product::PLUGIN_TYPE === $type ? $this->button_submit : 'Submit';
541
- $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
542
- $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $button_submit );
543
- $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $button_cancel );
544
-
545
- $options += $this->other;
546
-
547
- $list = '';
548
- foreach ( $options as $title => $attributes ) {
549
- $id = $attributes['id'];
550
- $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
551
- if ( array_key_exists( 'type', $attributes ) ) {
552
- $list .= '<div>';
553
- $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
554
- switch ( $attributes['type'] ) {
555
- case 'text':
556
- $list .= '<textarea style="width: 100%" rows="1" name="comments" placeholder="' . $placeholder . '"></textarea>';
557
- break;
558
- case 'textarea':
559
- $list .= '<textarea style="width: 100%" rows="2" name="comments" placeholder="' . $placeholder . '"></textarea>';
560
- break;
561
- }
562
- $list .= '</div>';
563
- }
564
- $list .= '</li>';
565
- }
566
-
567
  $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
568
  $disclosure_labels = array_merge(
569
  [
570
  'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No domain name, email address or IP addresses are transmited after you submit the survey.',
571
  'items' => [
572
  sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
573
- sprintf( '%s Uninstall reason %s %s Selected reson from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
574
  ],
575
  ],
576
  $disclosure_new_labels
577
  );
578
 
579
- $info_disclosure_link = '<a href="#" id="' . $this->product->get_key() . '-info-disclosure">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
580
- $info_disclosure_content = '<div id="' . $this->product->get_key() . '-info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
581
  foreach ( $disclosure_labels['items'] as $disclosure_item ) {
582
  $info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
583
  }
584
  $info_disclosure_content .= '</ul></div>';
585
 
586
- return
587
- '<div id="' . $this->product->get_key() . '"><ul class="ti-list">' . $list . '</ul>'
588
- . $info_disclosure_content
589
- . '<div class="actions">'
590
- . get_submit_button(
591
- $button_submit,
592
- 'secondary',
593
- $this->product->get_key() . 'ti-deactivate-yes',
594
- false,
595
- array(
596
- 'data-after-text' => $button_submit,
597
- 'disabled' => true,
598
- )
599
- )
600
- . wp_kses_post( $info_disclosure_link )
601
- . get_submit_button( $button_cancel, 'primary', $this->product->get_key() . 'ti-deactivate-no', false )
602
- . '</div></div>';
603
  }
604
 
605
  /**
54
  'placeholder' => 'What\'s the plugin\'s name?',
55
  ),
56
  'I could not get the plugin to work' => array(
57
+ 'type' => 'textarea',
58
+ 'placeholder' => 'What problem are you experiencing?',
59
+ 'id' => 4,
60
  ),
61
  'I no longer need the plugin' => array(
62
  'id' => 5,
64
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
65
  ),
66
  'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
67
+ 'type' => 'textarea',
68
+ 'placeholder' => 'What problem are you experiencing?',
69
+ 'id' => 6,
70
  ),
71
  );
72
  /**
79
  'id' => 7,
80
  ),
81
  'It lacks options' => array(
82
+ 'placeholder' => 'What option is missing?',
83
+ 'type' => 'text',
84
+ 'id' => 8,
85
  ),
86
  'Is not working with a plugin that I need' => array(
87
  'id' => 9,
101
  'Other' => array(
102
  'id' => 999,
103
  'type' => 'textarea',
104
+ 'placeholder' => 'What can we do better?',
105
  ),
106
  );
107
  /**
109
  *
110
  * @var string $heading_plugin The heading of the modal
111
  */
112
+ private $heading_plugin = 'What’s wrong?';
113
  /**
114
  * Default heading for theme.
115
  *
116
  * @var string $heading_theme The heading of the modal
117
  */
118
+ private $heading_theme = 'What does not work for you in {theme}?';
119
  /**
120
  * Default submit button action text.
121
  *
139
  return;
140
  }
141
 
142
+ $this->add_feedback_popup_style();
143
 
144
+ if ( $this->product->get_type() === 'theme' ) {
145
+ $this->add_theme_feedback_drawer_js();
146
+ $this->render_theme_feedback_popup();
147
 
148
+ return;
149
+ }
150
+ $this->add_plugin_feedback_popup_js();
151
+ $this->render_plugin_feedback_popup();
152
+ }
153
+
154
+ /**
155
+ * Render theme feedback drawer.
156
+ */
157
+ private function render_theme_feedback_popup() {
158
+ $heading = str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
159
+ $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', 'Submit' );
160
+ $options = $this->options_theme;
161
+ $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
162
+ $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
163
+
164
+ $options += $this->other;
165
 
166
+ ?>
167
+ <div class="ti-theme-uninstall-feedback-drawer ti-feedback">
168
+ <div class="popup--header">
169
+ <h5><?php echo wp_kses( $heading, array( 'span' => true ) ); ?> </h5>
170
+ <button class="toggle"><span>&times;</span></button>
171
+ </div><!--/.popup--header-->
172
+ <div class="popup--body">
173
+ <?php $this->render_options_list( $options ); ?>
174
+ </div><!--/.popup--body-->
175
+ <div class="popup--footer">
176
+ <div class="actions">
177
+ <?php
178
+ echo wp_kses_post( $info_disclosure_link );
179
+ echo wp_kses_post( $this->get_disclosure_labels() );
180
+ echo '<div class="buttons">';
181
+ echo get_submit_button(
182
+ $button_submit,
183
+ 'secondary',
184
+ $this->product->get_key() . 'ti-deactivate-yes',
185
+ false,
186
+ array(
187
+ 'data-after-text' => $button_submit,
188
+ 'disabled' => true,
189
+ )
190
+ );
191
+ echo '</div>';
192
+ ?>
193
+ </div><!--/.actions-->
194
+ </div><!--/.popup--footer-->
195
+ </div>
196
+ <?php
197
  }
198
 
199
  /**
200
+ * Add feedback styles.
 
 
 
201
  */
202
+ private function add_feedback_popup_style() {
 
 
 
 
 
 
203
  ?>
204
+ <style>
205
+ .ti-feedback {
206
+ background: #fff;
207
+ max-width: 400px;
208
+ z-index: 10000;
209
+ box-shadow: 0 0 15px -5px rgba(0, 0, 0, .5);
210
+ transition: all .3s ease-out;
211
  }
212
 
 
 
 
213
 
214
+ .ti-feedback .popup--header {
215
+ position: relative;
216
+ background-color: #23A1CE;
217
  }
218
 
219
+ .ti-feedback .popup--header h5 {
220
+ margin: 0;
221
+ font-size: 16px;
222
+ padding: 15px;
223
+ color: #fff;
224
+ font-weight: 600;
225
+ text-align: center;
226
+ letter-spacing: .3px;
 
 
 
227
  }
228
 
229
+ .ti-feedback .popup--body {
230
+ padding: 15px;
 
231
  }
232
 
233
+ .ti-feedback .popup--form {
 
 
234
  margin: 0;
235
+ font-size: 13px;
236
  }
237
 
238
+ .ti-feedback .popup--form input[type="radio"] {
239
+ margin: 0 10px 0 0;
 
 
240
  }
241
 
242
+ .ti-feedback .popup--form input[type="radio"]:checked ~ textarea {
243
+ display: block;
 
244
  }
245
 
246
+ .ti-feedback .popup--form textarea {
247
+ width: 100%;
248
+ margin: 10px 0 0;
249
  display: none;
250
+ max-height: 150px;
 
 
 
 
251
  }
252
 
253
+ .ti-feedback li {
254
+ display: flex;
255
+ align-items: center;
256
+ margin-bottom: 15px;
257
+ flex-wrap: wrap;
258
  }
259
 
260
+ .ti-feedback li label {
261
+ max-width: 90%;
 
 
 
 
 
 
 
 
262
  }
263
 
264
+ .ti-feedback li:last-child {
265
+ margin-bottom: 0;
 
 
266
  }
267
 
268
+ .ti-feedback .popup--footer {
269
+ padding: 0 15px 15px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  }
271
 
272
+ .ti-feedback .actions {
273
+ display: flex;
274
+ flex-wrap: wrap;
 
 
 
 
 
 
 
 
275
  }
276
 
277
+ .info-disclosure-link {
278
+ width: 100%;
279
+ margin-bottom: 15px;
280
  }
281
 
282
+ .ti-feedback .info-disclosure-content {
283
+ max-height: 0;
284
+ overflow: hidden;
285
+ width: 100%;
286
+ transition: .3s ease;
287
  }
288
 
289
+ .ti-feedback .info-disclosure-content.active {
290
+ max-height: 300px;
 
291
  }
292
 
293
+ .ti-feedback .info-disclosure-content p {
294
+ margin: 0;
 
295
  }
296
 
297
+ .ti-feedback .info-disclosure-content ul {
298
+ margin: 10px 0;
299
+ border-radius: 3px;
300
  }
301
 
302
+ .ti-feedback .info-disclosure-content ul li {
303
+ display: flex;
304
+ align-items: center;
305
+ justify-content: space-between;
306
+ margin-bottom: 0;
307
+ padding: 5px 0;
308
+ border-bottom: 1px solid #ccc;
309
  }
310
 
311
+ .ti-feedback .buttons {
312
+ display: flex;
313
+ width: 100%;
314
  }
315
 
316
+ .ti-feedback .buttons input:last-child {
317
+ margin-left: auto;
318
  }
319
 
320
+ .ti-theme-uninstall-feedback-drawer {
321
+ border-top-left-radius: 5px;
322
+ position: fixed;
323
+ top: 100%;
324
+ right: 15px;
325
  }
326
 
327
+ .ti-theme-uninstall-feedback-drawer.active {
328
+ transform: translateY(-100%);
 
 
329
  }
330
 
331
+ .ti-theme-uninstall-feedback-drawer .popup--header {
332
+ border-top-left-radius: 5px;
333
  }
334
 
335
+ .ti-theme-uninstall-feedback-drawer .popup--header .toggle {
336
+ position: absolute;
337
+ padding: 3px 0;
338
+ width: 30px;
339
+ top: -26px;
340
+ right: 0;
341
+ cursor: pointer;
342
+ border-top-left-radius: 5px;
343
+ border-top-right-radius: 5px;
344
+ font-size: 20px;
345
+ background-color: #23A1CE;
346
+ color: #fff;
347
+ border: none;
348
+ line-height: 20px;
349
  }
350
 
351
+ .ti-theme-uninstall-feedback-drawer .toggle span {
352
+ margin: 0;
353
+ display: inline-block;
354
  }
355
 
356
+ .ti-theme-uninstall-feedback-drawer:not(.active) .toggle span {
357
+ transform: rotate(45deg);
358
  }
359
 
360
+ .ti-theme-uninstall-feedback-drawer .popup--header .toggle:hover {
361
+ background-color: #1880a5;
 
 
 
 
 
 
 
362
  }
363
 
 
 
 
 
 
 
 
 
364
 
365
+ .ti-plugin-uninstall-feedback-popup .popup--header:before {
366
+ content: "";
367
  display: block;
368
  position: absolute;
369
+ border: 20px solid #23A1CE;
370
+ left: -10px;
371
+ top: 50%;
372
+ border-top: 20px solid transparent;
373
+ border-bottom: 20px solid transparent;
374
+ border-left: 0;
375
+ transform: translateY(-50%);
376
  }
377
 
378
+ .ti-plugin-uninstall-feedback-popup {
379
+ display: none;
380
+ position: absolute;
381
+ white-space: normal;
382
+ width: 400px;
383
+ left: 100%;
384
+ top: -15px;
385
  }
386
 
387
+ .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i {
388
+ animation: rotation 2s infinite linear;
389
+ display: block;
390
+ float: none;
391
+ align-items: center;
392
+ width: 100%;
393
+ margin: 0 auto;
394
+ height: 100%;
395
+ background: transparent;
396
+ padding: 0;
397
  }
398
 
399
+ .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i:before {
400
+ padding: 0;
401
+ background: transparent;
402
+ box-shadow: none;
403
+ color: #b4b9be
404
  }
405
 
 
 
 
 
 
 
406
 
407
+ .ti-plugin-uninstall-feedback-popup.active {
408
+ display: block;
 
409
  }
410
 
411
+ tr[data-plugin^="<?php echo $this->product->get_slug(); ?>"] .deactivate {
412
+ position: relative;
413
  }
414
 
415
+ body.ti-feedback-open .ti-feedback-overlay {
416
+ content: "";
417
+ display: block;
418
+ background-color: rgba(0, 0, 0, 0.5);
419
+ top: 0;
420
+ bottom: 0;
421
+ right: 0;
422
+ left: 0;
423
+ z-index: 10000;
424
+ position: fixed;
425
+ }
426
+
427
+ @media (max-width: 768px) {
428
+ .ti-plugin-uninstall-feedback-popup {
429
+ position: fixed;
430
+ max-width: 100%;
431
+ margin: 0 auto;
432
+ left: 50%;
433
+ top: 50px;
434
+ transform: translateX(-50%);
435
+ }
436
+
437
+ .ti-plugin-uninstall-feedback-popup .popup--header:before {
438
+ display: none;
439
+ }
440
  }
441
  </style>
442
  <?php
 
443
  }
444
 
445
  /**
446
+ * Theme feedback drawer JS.
 
 
 
 
447
  */
448
+ private function add_theme_feedback_drawer_js() {
449
+ $key = $this->product->get_key();
 
 
450
  ?>
451
  <script type="text/javascript" id="ti-deactivate-js">
452
  (function ($) {
453
  $(document).ready(function () {
454
+ setTimeout(function () {
455
+ $('.ti-theme-uninstall-feedback-drawer').addClass('active');
456
+ }, <?php echo absint( self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000 ); ?> );
 
 
 
 
 
 
 
 
 
 
457
 
458
+ $('.ti-theme-uninstall-feedback-drawer .toggle').on('click', function (e) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
  e.preventDefault();
460
+ $('.ti-theme-uninstall-feedback-drawer').toggleClass('active');
 
 
 
 
 
 
 
461
  });
462
 
463
+ $('.info-disclosure-link').on('click', function (e) {
464
+ e.preventDefault();
465
+ $('.info-disclosure-content').toggleClass('active');
466
+ });
467
 
468
+ $('.ti-theme-uninstall-feedback-drawer input[type="radio"]').on('change', function () {
469
+ var radio = $(this);
470
+ if (radio.parent().find('textarea').length > 0 &&
471
+ radio.parent().find('textarea').val().length === 0) {
472
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
473
+ radio.parent().find('textarea').on('keyup', function (e) {
474
  if ($(this).val().length === 0) {
475
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
476
  } else {
481
  $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
482
  }
483
  });
484
+
485
+ $('#<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
 
 
 
486
  e.preventDefault();
487
  e.stopPropagation();
488
+
489
+ var selectedOption = $(
490
+ '.ti-theme-uninstall-feedback-drawer input[name="ti-deactivate-option"]:checked');
491
  $.post(ajaxurl, {
492
+ 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
493
  'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
494
+ 'id': selectedOption.parent().attr('ti-option-id'),
495
+ 'msg': selectedOption.parent().find('textarea').val(),
496
+ 'type': 'theme',
497
+ 'key': '<?php echo esc_attr( $key ); ?>'
498
  });
499
+ $('.ti-theme-uninstall-feedback-drawer').fadeOut();
500
+ });
501
+ });
502
+ })(jQuery);
503
+
504
+ </script>
505
+ <?php
506
+ do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
507
+ }
508
+
509
+ /**
510
+ * Render the options list.
511
+ *
512
+ * @param array $options the options for the feedback form.
513
+ */
514
+ private function render_options_list( $options ) {
515
+ $key = $this->product->get_key();
516
+ $inputs_row_map = [
517
+ 'text' => 1,
518
+ 'textarea' => 2,
519
+ ];
520
+ ?>
521
+ <ul class="popup--form">
522
+ <?php foreach ( $options as $title => $attributes ) { ?>
523
+ <li ti-option-id="<?php echo esc_attr( $attributes['id'] ); ?>">
524
+ <input type="radio" name="ti-deactivate-option" id="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
525
+ <label for="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
526
+ <?php echo str_replace( '{theme}', $this->product->get_name(), $title ); ?>
527
+ </label>
528
+ <?php
529
+ if ( array_key_exists( 'type', $attributes ) ) {
530
+ $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
531
+ echo '<textarea width="100%" rows="' . $inputs_row_map[ $attributes['type'] ] . '" name="comments" placeholder="' . esc_attr( $placeholder ) . '"></textarea>';
532
+ }
533
+ ?>
534
+ </li>
535
+ <?php } ?>
536
+ </ul>
537
+ <?php
538
+ }
539
+
540
+ /**
541
+ * Render plugin feedback popup.
542
+ */
543
+ private function render_plugin_feedback_popup() {
544
+ $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel );
545
+ $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $this->button_submit );
546
+ $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) );
547
+ $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
548
+
549
+ $options += $this->other;
550
+ ?>
551
+ <div class="ti-plugin-uninstall-feedback-popup ti-feedback" id="<?php echo esc_attr( $this->product->get_slug() . '_uninstall_feedback_popup' ); ?>">
552
+ <div class="popup--header">
553
+ <h5><?php echo wp_kses( $this->heading_plugin, array( 'span' => true ) ); ?> </h5>
554
+ </div><!--/.popup--header-->
555
+ <div class="popup--body">
556
+ <?php $this->render_options_list( $options ); ?>
557
+ </div><!--/.popup--body-->
558
+ <div class="popup--footer">
559
+ <div class="actions">
560
+ <?php
561
+ echo wp_kses_post( $info_disclosure_link );
562
+ echo wp_kses_post( $this->get_disclosure_labels() );
563
+ echo '<div class="buttons">';
564
+ echo get_submit_button(
565
+ $button_cancel,
566
+ 'secondary',
567
+ $this->product->get_key() . 'ti-deactivate-no',
568
+ false
569
+ );
570
+ echo get_submit_button(
571
+ $button_submit,
572
+ 'primary',
573
+ $this->product->get_key() . 'ti-deactivate-yes',
574
+ false,
575
+ array(
576
+ 'data-after-text' => $button_submit,
577
+ 'disabled' => true,
578
+ )
579
+ );
580
+ echo '</div>';
581
+ ?>
582
+ </div><!--/.actions-->
583
+ </div><!--/.popup--footer-->
584
+ </div>
585
+
586
+ <?php
587
+ }
588
+
589
+ /**
590
+ * Add plugin feedback popup JS
591
+ */
592
+ private function add_plugin_feedback_popup_js() {
593
+ $popup_id = '#' . $this->product->get_slug() . '_uninstall_feedback_popup';
594
+ $key = $this->product->get_key();
595
+ ?>
596
+ <script type="text/javascript" id="ti-deactivate-js">
597
+ (function ($) {
598
+ $(document).ready(function () {
599
+ var targetElement = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
600
+ var redirectUrl = $(targetElement).attr('href');
601
+ if ($('.ti-feedback-overlay').length === 0) {
602
+ $('body').prepend('<div class="ti-feedback-overlay"></div>');
603
+ }
604
+ $('<?php echo esc_attr( $popup_id ); ?> ').appendTo($(targetElement).parent());
605
+
606
+ $(targetElement).on('click', function (e) {
607
+ e.preventDefault();
608
+ $('<?php echo esc_attr( $popup_id ); ?> ').addClass('active');
609
+ $('body').addClass('ti-feedback-open');
610
+ $('.ti-feedback-overlay').on('click', function () {
611
+ $('<?php echo esc_attr( $popup_id ); ?> ').removeClass('active');
612
+ $('body').removeClass('ti-feedback-open');
613
+ });
614
+ });
615
+
616
+ $('<?php echo esc_attr( $popup_id ); ?> .info-disclosure-link').on('click', function (e) {
617
+ e.preventDefault();
618
+ $(this).parent().find('.info-disclosure-content').toggleClass('active');
619
+ });
620
+
621
+ $('<?php echo esc_attr( $popup_id ); ?> input[type="radio"]').on('change', function () {
622
+ var radio = $(this);
623
+ if (radio.parent().find('textarea').length > 0 &&
624
+ radio.parent().find('textarea').val().length === 0) {
625
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
626
+ radio.parent().find('textarea').on('keyup', function (e) {
627
+ if ($(this).val().length === 0) {
628
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
629
+ } else {
630
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
631
+ }
632
+ });
633
  } else {
634
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
 
635
  }
636
  });
637
 
638
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-no').on('click', function (e) {
639
+ e.preventDefault();
640
+ e.stopPropagation();
641
+ $(targetElement).unbind('click');
642
+ $('body').removeClass('ti-feedback-open');
643
+ $('<?php echo esc_attr( $popup_id ); ?>').remove();
644
+ if (redirectUrl !== '') {
645
+ location.href = redirectUrl;
646
+ }
647
  });
648
 
649
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
650
+ e.preventDefault();
651
+ e.stopPropagation();
652
+ $(targetElement).unbind('click');
653
+ var selectedOption = $(
654
+ '<?php echo esc_attr( $popup_id ); ?> input[name="ti-deactivate-option"]:checked');
655
+ var data = {
656
+ 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
657
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
658
+ 'id': selectedOption.parent().attr('ti-option-id'),
659
+ 'msg': selectedOption.parent().find('textarea').val(),
660
+ 'type': 'plugin',
661
+ 'key': '<?php echo esc_attr( $key ); ?>'
662
+ };
663
+ $.ajax({
664
+ type: 'POST',
665
+ url: ajaxurl,
666
+ data: data,
667
+ complete() {
668
+ $('body').removeClass('ti-feedback-open');
669
+ $('<?php echo esc_attr( $popup_id ); ?>').remove();
670
+ if (redirectUrl !== '') {
671
+ location.href = redirectUrl;
672
+ }
673
+ },
674
+ beforeSend() {
675
+ $('<?php echo esc_attr( $popup_id ); ?>').addClass('sending-feedback');
676
+ $('<?php echo esc_attr( $popup_id ); ?> .popup--footer').remove();
677
+ $('<?php echo esc_attr( $popup_id ); ?> .popup--body').html('<i class="dashicons dashicons-update-alt"></i>');
678
  }
679
+ });
680
+ });
681
  });
682
  })(jQuery);
683
+
684
  </script>
685
  <?php
 
686
  do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
687
  }
688
 
689
  /**
690
+ * Get the disclosure labels markup.
691
  *
692
+ * @return string
 
693
  */
694
+ private function get_disclosure_labels() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
695
  $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
696
  $disclosure_labels = array_merge(
697
  [
698
  'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No domain name, email address or IP addresses are transmited after you submit the survey.',
699
  'items' => [
700
  sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
701
+ sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
702
  ],
703
  ],
704
  $disclosure_new_labels
705
  );
706
 
707
+ $info_disclosure_content = '<div class="info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
 
708
  foreach ( $disclosure_labels['items'] as $disclosure_item ) {
709
  $info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
710
  }
711
  $info_disclosure_content .= '</ul></div>';
712
 
713
+ return $info_disclosure_content;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
714
  }
715
 
716
  /**
vendor/codeinwp/themeisle-sdk/src/Product.php CHANGED
@@ -114,7 +114,7 @@ class Product {
114
  */
115
  public function __construct( $basefile ) {
116
  if ( ! empty( $basefile ) ) {
117
- if ( is_readable( $basefile ) ) {
118
  $this->basefile = $basefile;
119
  $this->setup_from_path();
120
  $this->setup_from_fileheaders();
@@ -345,7 +345,7 @@ class Product {
345
  public function get_store_url() {
346
 
347
  if ( strpos( $this->store_url, '/themeisle.com' ) !== false ) {
348
- return 'https://store.themeisle.com';
349
  }
350
 
351
  return $this->store_url;
@@ -360,6 +360,21 @@ class Product {
360
  return $this->basefile;
361
  }
362
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363
  /**
364
  * Returns product filename.
365
  *
114
  */
115
  public function __construct( $basefile ) {
116
  if ( ! empty( $basefile ) ) {
117
+ if ( is_file( $basefile ) ) {
118
  $this->basefile = $basefile;
119
  $this->setup_from_path();
120
  $this->setup_from_fileheaders();
345
  public function get_store_url() {
346
 
347
  if ( strpos( $this->store_url, '/themeisle.com' ) !== false ) {
348
+ return 'https://store.themeisle.com/';
349
  }
350
 
351
  return $this->store_url;
360
  return $this->basefile;
361
  }
362
 
363
+ /**
364
+ * Get changelog url.
365
+ *
366
+ * @return string Changelog url.
367
+ */
368
+ public function get_changelog() {
369
+ return add_query_arg(
370
+ [
371
+ 'name' => rawurlencode( $this->get_name() ),
372
+ 'edd_action' => 'view_changelog',
373
+ ],
374
+ $this->get_store_url()
375
+ );
376
+ }
377
+
378
  /**
379
  * Returns product filename.
380
  *
vendor/codeinwp/themeisle-sdk/start.php CHANGED
@@ -37,7 +37,7 @@ $files_to_load = [
37
  $files_to_load = array_merge( $files_to_load, apply_filters( 'themeisle_sdk_required_files', [] ) );
38
 
39
  foreach ( $files_to_load as $file ) {
40
- if ( is_readable( $file ) ) {
41
  require_once $file;
42
  }
43
  }
37
  $files_to_load = array_merge( $files_to_load, apply_filters( 'themeisle_sdk_required_files', [] ) );
38
 
39
  foreach ( $files_to_load as $file ) {
40
+ if ( is_file( $file ) ) {
41
  require_once $file;
42
  }
43
  }
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit352003e57eff9edfc8e33fa4e5fb60d8
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit352003e57eff9edfc8e33fa4e5fb60d8
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit352003e57eff9edfc8e33fa4e5fb60d8', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit352003e57eff9edfc8e33fa4e5fb60d8', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit352003e57eff9edfc8e33fa4e5fb60d8
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire352003e57eff9edfc8e33fa4e5fb60d8($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire352003e57eff9edfc8e33fa4e5fb60d8($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitd326e260ad54a8d41951f4c1d19cfa6b
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitd326e260ad54a8d41951f4c1d19cfa6b', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitd326e260ad54a8d41951f4c1d19cfa6b', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequired326e260ad54a8d41951f4c1d19cfa6b($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequired326e260ad54a8d41951f4c1d19cfa6b($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit3dc8fdc09d7bd4b63c06d840df5e9715 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit3dc8fdc09d7bd4b63c06d840df5e9715 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit3dc8fdc09d7bd4b63c06d840df5e9715', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit3dc8fdc09d7bd4b63c06d840df5e9715', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit8f304a76338508ad722dc834ae3ec66d {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit8f304a76338508ad722dc834ae3ec66d', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit8f304a76338508ad722dc834ae3ec66d', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
vendor/composer/installed.json CHANGED
@@ -34,17 +34,17 @@
34
  },
35
  {
36
  "name": "codeinwp/themeisle-sdk",
37
- "version": "3.0.9",
38
- "version_normalized": "3.0.9.0",
39
  "source": {
40
  "type": "git",
41
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
42
- "reference": "259e2afb33bd523f9807e04ace921f8690350a31"
43
  },
44
  "dist": {
45
  "type": "zip",
46
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/259e2afb33bd523f9807e04ace921f8690350a31",
47
- "reference": "259e2afb33bd523f9807e04ace921f8690350a31",
48
  "shasum": ""
49
  },
50
  "require-dev": {
@@ -52,7 +52,7 @@
52
  "squizlabs/php_codesniffer": "^3.1",
53
  "wp-coding-standards/wpcs": "^1.0.0"
54
  },
55
- "time": "2019-06-26 14:38:00",
56
  "type": "library",
57
  "installation-source": "dist",
58
  "notification-url": "https://packagist.org/downloads/",
34
  },
35
  {
36
  "name": "codeinwp/themeisle-sdk",
37
+ "version": "3.1.4",
38
+ "version_normalized": "3.1.4.0",
39
  "source": {
40
  "type": "git",
41
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
42
+ "reference": "ede4dbdb119ad5b5d317f3866d68c90a45fe8179"
43
  },
44
  "dist": {
45
  "type": "zip",
46
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/ede4dbdb119ad5b5d317f3866d68c90a45fe8179",
47
+ "reference": "ede4dbdb119ad5b5d317f3866d68c90a45fe8179",
48
  "shasum": ""
49
  },
50
  "require-dev": {
52
  "squizlabs/php_codesniffer": "^3.1",
53
  "wp-coding-standards/wpcs": "^1.0.0"
54
  },
55
+ "time": "2019-08-23 08:47:43",
56
  "type": "library",
57
  "installation-source": "dist",
58
  "notification-url": "https://packagist.org/downloads/",
wp-product-review.php CHANGED
@@ -15,7 +15,7 @@
15
  * Plugin Name: WP Product Review Lite
16
  * Plugin URI: https://themeisle.com/plugins/wp-product-review/
17
  * Description: The highest rated and most complete review plugin, now with rich snippets support. Easily turn your basic posts into in-depth reviews.
18
- * Version: 3.7.0
19
  * Author: ThemeIsle
20
  * Author URI: https://themeisle.com/
21
  * Requires at least: 3.5
@@ -67,7 +67,7 @@ register_deactivation_hook( __FILE__, 'deactivate_wppr' );
67
  */
68
  function run_wppr() {
69
 
70
- define( 'WPPR_LITE_VERSION', '3.7.0' );
71
  define( 'WPPR_PATH', dirname( __FILE__ ) );
72
  define( 'WPPR_SLUG', 'wppr' );
73
  define( 'WPPR_UPSELL_LINK', 'https://themeisle.com/plugins/wp-product-review/' );
15
  * Plugin Name: WP Product Review Lite
16
  * Plugin URI: https://themeisle.com/plugins/wp-product-review/
17
  * Description: The highest rated and most complete review plugin, now with rich snippets support. Easily turn your basic posts into in-depth reviews.
18
+ * Version: 3.7.1
19
  * Author: ThemeIsle
20
  * Author URI: https://themeisle.com/
21
  * Requires at least: 3.5
67
  */
68
  function run_wppr() {
69
 
70
+ define( 'WPPR_LITE_VERSION', '3.7.1' );
71
  define( 'WPPR_PATH', dirname( __FILE__ ) );
72
  define( 'WPPR_SLUG', 'wppr' );
73
  define( 'WPPR_UPSELL_LINK', 'https://themeisle.com/plugins/wp-product-review/' );