Strong Testimonials - Version 2.33

Version Description

Download this release

Release Info

Developer machothemes
Plugin Icon 128x128 Strong Testimonials
Version 2.33
Comparing to
See all releases

Code changes from version 2.32.4 to 2.33

Files changed (55) hide show
  1. admin/about/about.php +0 -11
  2. admin/about/addons.php +2 -11
  3. admin/about/class-strong-testimonials-about.php +2 -16
  4. admin/about/how-to.php +0 -19
  5. admin/about/links.php +1 -8
  6. admin/admin.php +1 -1
  7. admin/class-strong-testimonials-defaults.php +3 -0
  8. admin/class-strong-testimonials-list-table.php +0 -3
  9. admin/class-strong-testimonials-page-shortcodes.php +0 -2
  10. admin/class-walker-strong-category-checklist.php +0 -1
  11. admin/class-walker-strong-form-category-checklist.php +0 -1
  12. admin/css/views.css +4 -7
  13. admin/css/views.css.map +0 -7
  14. admin/custom-fields.php +2 -2
  15. admin/edd/EDD_SL_Plugin_Updater.php +0 -500
  16. admin/edd/Strong_Plugin_Updater.php +0 -234
  17. admin/js/views.js +33 -0
  18. admin/partials/views/option-content.php +87 -55
  19. admin/scss/_partials/_misc.scss +4 -9
  20. admin/settings/class-strong-testimonials-settings-compat.php +0 -2
  21. admin/settings/partials/form.php +0 -1
  22. admin/settings/partials/general.php +0 -1
  23. admin/views-validate.php +90 -59
  24. admin/views.php +1 -2
  25. includes/class-strong-view-display.php +35 -0
  26. includes/class-strong-view-slideshow.php +2 -1
  27. includes/class-strong-view.php +165 -29
  28. includes/class-walker-strong-category-checklist-front.php +0 -1
  29. includes/filters.php +30 -1
  30. includes/functions-activation.php +0 -1
  31. includes/functions-content.php +106 -94
  32. includes/functions-image.php +0 -2
  33. includes/functions-template.php +28 -34
  34. includes/functions-views.php +0 -3
  35. includes/functions.php +1 -3
  36. includes/l10n-polylang.php +3 -0
  37. includes/l10n-wpml.php +6 -0
  38. includes/scripts.php +16 -1
  39. public/css/animate.min.css +11 -0
  40. public/css/custom.css +0 -5
  41. public/js/controller.js +13 -1
  42. public/js/controller.min.js +1 -1
  43. public/js/lib/form-validation/form-validation.js +0 -2
  44. public/js/lib/readmore/readmore.js +122 -0
  45. public/js/lib/readmore/readmore.min.js +1 -0
  46. public/js/lib/strongslider/jquery.strongslider.js +1 -0
  47. public/js/lib/strongslider/jquery.strongslider.min.js +1 -1
  48. readme.txt +13 -55
  49. strong-testimonials.php +22 -22
  50. templates-scss/_partials/_base.scss +12 -0
  51. templates/bold/content.css +8 -0
  52. templates/default/content.css +8 -0
  53. templates/modern/content.css +8 -0
  54. templates/simple/content.css +8 -0
  55. templates/small-widget/content.css +8 -0
admin/about/about.php DELETED
@@ -1,11 +0,0 @@
1
- <h2><?php _e( 'Flexible Features. Strong Support.', 'strong-testimonials' ); ?></h2>
2
- <?php /* translators: %s is a formatted number */ ?>
3
- <p class="lead-description"><?php printf( __( 'The highest-rated free testimonials plugin trusted by more than %s people.', 'strong-testimonials' ), number_format_i18n( 60000 ) ); ?></p>
4
- <div class="feature-section one-col">
5
- <div class="col">
6
- <p><?php _e( 'Designed from the ground up to simplify the process of customizing your testimonials or reviews.', 'strong-testimonials' ); ?></p>
7
- <p><?php _e( '<strong>Custom fields</strong> are deeply integrated into Strong Testimonials. It even includes a default set of custom fields so you can get started quickly.', 'strong-testimonials' ); ?></p>
8
- <p><?php _e( 'Forget about complicated shortcodes. Use <strong>views</strong> to construct unlimited testimonial displays including grids and slideshows with features like excerpts and pagination in a variety of templates.', 'strong-testimonials' ); ?></p>
9
- <p><?php _e( 'Integrate with plugins like Popup Maker or Google Captcha. For developers, actions and filters allow further customization.', 'strong-testimonials' ); ?></p>
10
- </div>
11
- </div>
 
 
 
 
 
 
 
 
 
 
 
admin/about/addons.php CHANGED
@@ -1,17 +1,8 @@
1
  <hr />
2
 
3
- <h2><?php _e( 'Get More Features With Pro Add-ons', 'strong-testimonials' ); ?></h2>
4
 
5
  <div id="addons" class="feature-section three-col">
6
- <div class="col sidebar-block sidebar-news addon review-markup">
7
- <h3>Review Markup</h3>
8
- <p>Improve your search engine results and get rich snippets by adding review markup to your testimonials. </p>
9
- <div class="actions">
10
- <a href="https://strongplugins.com/plugins/strong-testimonials-review-markup/?utm_source=plugin&utm_medium=about" target="_blank">Learn more</a>
11
- &nbsp;&bull;&nbsp;
12
- <a href="https://strongdemos.com/strong-testimonials-review-markup/?utm_source=plugin&utm_medium=about" target="_blank">Go demo</a>
13
- </div>
14
- </div>
15
  <div class="col sidebar-block sidebar-news addon multiple-forms">
16
  <h3>Multiple Forms</h3>
17
  <p>Need more forms for different products or services? No problem. Create unlimited forms.</p>
@@ -30,7 +21,7 @@
30
  </div>
31
  <div class="col sidebar-block sidebar-news addon assignment">
32
  <h3>Assignment</h3>
33
- <p>Assign testimonials to any object (posts, pages, media or custom content types) with features designed to simplify your workflow. Works well with portfolio, directory and service business themes.</p>
34
  <div class="actions">
35
  <a href="https://strongplugins.com/plugins/strong-testimonials-assignment?utm_source=plugin&utm_medium=about" target="_blank">Learn more</a>
36
  &nbsp;&bull;&nbsp;
1
  <hr />
2
 
3
+ <h2><?php _e( 'Get More Features With Free Add-ons', 'strong-testimonials' ); ?></h2>
4
 
5
  <div id="addons" class="feature-section three-col">
 
 
 
 
 
 
 
 
 
6
  <div class="col sidebar-block sidebar-news addon multiple-forms">
7
  <h3>Multiple Forms</h3>
8
  <p>Need more forms for different products or services? No problem. Create unlimited forms.</p>
21
  </div>
22
  <div class="col sidebar-block sidebar-news addon assignment">
23
  <h3>Assignment</h3>
24
+ <p>Assign testimonials to any content type with features designed to simplify your workflow. Works well with portfolio, directory and service business themes.</p>
25
  <div class="actions">
26
  <a href="https://strongplugins.com/plugins/strong-testimonials-assignment?utm_source=plugin&utm_medium=about" target="_blank">Learn more</a>
27
  &nbsp;&bull;&nbsp;
admin/about/class-strong-testimonials-about.php CHANGED
@@ -52,7 +52,7 @@ class Strong_Testimonials_About {
52
  */
53
  public function about_page() {
54
  $major_minor = strtok( WPMTST_VERSION, '.' ) . '.' . strtok( '.' );
55
- $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'about';
56
  $url = admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' );
57
  ?>
58
  <div class="wrap about-wrap">
@@ -63,41 +63,27 @@ class Strong_Testimonials_About {
63
  <p class="about-text">
64
  <?php _e( 'Thank you for updating to the latest version!' ); ?>
65
  <?php /* translators: %s is the plugin version number */ ?>
66
- <?php printf( 'Strong Testimonials %s adds a slider carousel option.', $major_minor ); ?>
67
  </p>
68
 
69
  <div class="wp-badge strong-testimonials"><?php printf( __( 'Version %s' ), $major_minor ); ?></div>
70
 
71
  <h2 class="nav-tab-wrapper wp-clearfix">
72
 
73
- <a href="<?php echo $url; ?>" class="nav-tab <?php echo $active_tab == 'about' ? 'nav-tab-active' : ''; ?>"><?php _e( 'About' ); ?></a>
74
-
75
- <a href="<?php echo add_query_arg( 'tab', 'whats-new', $url ); ?>" class="nav-tab <?php echo $active_tab == 'whats-new' ? 'nav-tab-active' : ''; ?>"><?php _e( 'What&#8217;s New' ); ?></a>
76
-
77
  <a href="<?php echo add_query_arg( 'tab', 'how-to', $url ); ?>" class="nav-tab <?php echo $active_tab == 'how-to' ? 'nav-tab-active' : ''; ?>"><?php _e( 'How To', 'strong-testimonials' ); ?></a>
78
 
79
  <a href="<?php echo add_query_arg( 'tab', 'privacy', $url ); ?>" class="nav-tab <?php echo $active_tab == 'privacy' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Privacy' ); ?></a>
80
 
81
  </h2>
82
 
83
- <!--
84
- <div class="changelog point-releases">
85
- </div>
86
- -->
87
 
88
  <?php
89
  switch( $active_tab ) {
90
  case 'privacy':
91
  include WPMTST_ADMIN . 'about/privacy.php';
92
  break;
93
- case 'how-to':
94
  include WPMTST_ADMIN . 'about/how-to.php';
95
  break;
96
- case 'whats-new':
97
- include WPMTST_ADMIN . 'about/whats-new.php';
98
- break;
99
- default:
100
- include WPMTST_ADMIN. 'about/about.php';
101
  }
102
 
103
  include WPMTST_ADMIN. 'about/links.php';
52
  */
53
  public function about_page() {
54
  $major_minor = strtok( WPMTST_VERSION, '.' ) . '.' . strtok( '.' );
55
+ $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'how-to';
56
  $url = admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' );
57
  ?>
58
  <div class="wrap about-wrap">
63
  <p class="about-text">
64
  <?php _e( 'Thank you for updating to the latest version!' ); ?>
65
  <?php /* translators: %s is the plugin version number */ ?>
 
66
  </p>
67
 
68
  <div class="wp-badge strong-testimonials"><?php printf( __( 'Version %s' ), $major_minor ); ?></div>
69
 
70
  <h2 class="nav-tab-wrapper wp-clearfix">
71
 
 
 
 
 
72
  <a href="<?php echo add_query_arg( 'tab', 'how-to', $url ); ?>" class="nav-tab <?php echo $active_tab == 'how-to' ? 'nav-tab-active' : ''; ?>"><?php _e( 'How To', 'strong-testimonials' ); ?></a>
73
 
74
  <a href="<?php echo add_query_arg( 'tab', 'privacy', $url ); ?>" class="nav-tab <?php echo $active_tab == 'privacy' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Privacy' ); ?></a>
75
 
76
  </h2>
77
 
 
 
 
 
78
 
79
  <?php
80
  switch( $active_tab ) {
81
  case 'privacy':
82
  include WPMTST_ADMIN . 'about/privacy.php';
83
  break;
84
+ default:
85
  include WPMTST_ADMIN . 'about/how-to.php';
86
  break;
 
 
 
 
 
87
  }
88
 
89
  include WPMTST_ADMIN. 'about/links.php';
admin/about/how-to.php CHANGED
@@ -4,25 +4,6 @@ $add_the_view = __( 'Add the view to a page or sidebar using its unique shortcod
4
  <h2><?php _e( 'Let\'s Get Started', 'strong-testimonials' ); ?></h2>
5
  <p class="lead-description"><?php _e( 'This plugin is different than others you may have tried.', 'strong-testimonials' ); ?></p>
6
 
7
- <div class="feature-section one-col">
8
- <p><?php printf( __( 'Testimonials are like posts. They can be viewed individually. For example, a testimonial with the title "Highly recommended!" is viewable at <a href="#" class="nogo">%1$s</a>.', 'strong-testimonials' ), home_url( 'testimonial/highly-recommended' ) ); ?></p>
9
-
10
- <script>
11
- document.querySelector(".nogo").addEventListener("click", function (e) {
12
- e.preventDefault();
13
- this.blur();
14
- });
15
- </script>
16
-
17
- <p><?php _e( 'The more common approach is to display a group of testimonials. Among the many options, you can select which testimonials to include, what fields to show, and the layout.', 'strong-testimonials' ); ?></p>
18
-
19
- <p><?php _e( 'The plugin provides a tool for configuring those displays: <strong>Views</strong>.', 'strong-testimonials' ); ?>
20
- <?php _e( 'A view is simply a group of settings with an easy-to-use editor.', 'strong-testimonials' ); ?>
21
- <?php _e( 'You can create <em>unlimited</em> views.', 'strong-testimonials' ); ?>
22
- <?php _e( 'Each view has its own simple shortcode.', 'strong-testimonials' ); ?>
23
- </p>
24
- </div>
25
-
26
  <div class="feature-section two-col">
27
  <div class="col">
28
  <h3><?php _e('How to Add the Form', 'strong-testimonials' ); ?></h3>
4
  <h2><?php _e( 'Let\'s Get Started', 'strong-testimonials' ); ?></h2>
5
  <p class="lead-description"><?php _e( 'This plugin is different than others you may have tried.', 'strong-testimonials' ); ?></p>
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  <div class="feature-section two-col">
8
  <div class="col">
9
  <h3><?php _e('How to Add the Form', 'strong-testimonials' ); ?></h3>
admin/about/links.php CHANGED
@@ -8,15 +8,8 @@ $links = array();
8
 
9
  $links[] = sprintf( '<a href="%s" target="_blank">%s</a>',
10
  esc_url( 'http://wordpress.org/support/plugin/strong-testimonials' ),
11
- __( 'Use the public support forum', 'strong-testimonials' ) );
12
 
13
- $links[] = __( 'or', 'strong-testimonials' ) . ' ' . sprintf( '<a href="%s" target="_blank">%s</a>',
14
- esc_url( 'https://support.strongplugins.com' ),
15
- __( 'submit a private support ticket', 'strong-testimonials' ) );
16
-
17
- $links[] = __( 'or', 'strong-testimonials' ) . ' ' . sprintf( '<a href="%s" target="_blank">%s</a>',
18
- esc_url( 'https://strongplugins.com/contact/' ),
19
- __( 'contact the developer', 'strong-testimonials' ) );
20
  ?>
21
  <ul>
22
  <?php foreach ( $links as $link ) : ?>
8
 
9
  $links[] = sprintf( '<a href="%s" target="_blank">%s</a>',
10
  esc_url( 'http://wordpress.org/support/plugin/strong-testimonials' ),
11
+ __( 'Use the community support forum', 'strong-testimonials' ) );
12
 
 
 
 
 
 
 
 
13
  ?>
14
  <ul>
15
  <?php foreach ( $links as $link ) : ?>
admin/admin.php CHANGED
@@ -204,7 +204,7 @@ function wpmtst_plugin_row_meta( $plugin_meta, $plugin_file, $plugin_data = arra
204
 
205
  return $plugin_meta;
206
  }
207
- add_filter( 'plugin_row_meta', 'wpmtst_plugin_row_meta' , 10, 4 );
208
 
209
 
210
  /**
204
 
205
  return $plugin_meta;
206
  }
207
+ //add_filter( 'plugin_row_meta', 'wpmtst_plugin_row_meta' , 10, 4 );
208
 
209
 
210
  /**
admin/class-strong-testimonials-defaults.php CHANGED
@@ -705,6 +705,9 @@ class Strong_Testimonials_Defaults {
705
  'more_post' => true,
706
  'more_post_ellipsis' => true,
707
  'more_post_text' => _x( 'Read more', 'link', 'strong-testimonials' ),
 
 
 
708
  'more_page' => false,
709
  'more_page_hook' => 'wpmtst_view_footer',
710
  'more_page_id' => 0,
705
  'more_post' => true,
706
  'more_post_ellipsis' => true,
707
  'more_post_text' => _x( 'Read more', 'link', 'strong-testimonials' ),
708
+ 'more_post_in_place' => false,
709
+ 'less_post' => false,
710
+ 'less_post_text' => __( 'Show less', 'strong-testimonials' ),
711
  'more_page' => false,
712
  'more_page_hook' => 'wpmtst_view_footer',
713
  'more_page_id' => 0,
admin/class-strong-testimonials-list-table.php CHANGED
@@ -8,9 +8,6 @@
8
  *
9
  * @since 3.1.0
10
  * @access private
11
- *
12
- * @package
13
- * @subpackage
14
  */
15
 
16
  if ( !class_exists( 'Strong_Testimonials_List_Table' ) ) :
8
  *
9
  * @since 3.1.0
10
  * @access private
 
 
 
11
  */
12
 
13
  if ( !class_exists( 'Strong_Testimonials_List_Table' ) ) :
admin/class-strong-testimonials-page-shortcodes.php CHANGED
@@ -31,8 +31,6 @@ class Strong_Testimonials_Page_Shortcodes {
31
 
32
  <h1><?php _e( 'Shortcodes', 'strong-testimonials' ); ?></h1>
33
 
34
- <p><?php printf( wp_kses( __( 'Open a <a href="%s" target="_blank">support ticket</a> if you need help.', 'strong-testimonials' ), $tags ), wpmtst_support_url() ); ?></p>
35
-
36
  <h2><?php _e( 'Testimonial Views', 'strong-testimonials' ); ?></h2>
37
 
38
  <p>
31
 
32
  <h1><?php _e( 'Shortcodes', 'strong-testimonials' ); ?></h1>
33
 
 
 
34
  <h2><?php _e( 'Testimonial Views', 'strong-testimonials' ); ?></h2>
35
 
36
  <p>
admin/class-walker-strong-category-checklist.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Taxonomy API: Walker_Strong_Category_Checklist class
4
  *
5
- * @package Strong_Testimonials
6
  * @since 2.2.0
7
  */
8
 
2
  /**
3
  * Taxonomy API: Walker_Strong_Category_Checklist class
4
  *
 
5
  * @since 2.2.0
6
  */
7
 
admin/class-walker-strong-form-category-checklist.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Taxonomy API: Walker_Strong_Form_Category_Checklist class
4
  *
5
- * @package Strong_Testimonials
6
  * @since 2.2.0
7
  */
8
 
2
  /**
3
  * Taxonomy API: Walker_Strong_Form_Category_Checklist class
4
  *
 
5
  * @since 2.2.0
6
  */
7
 
admin/css/views.css CHANGED
@@ -251,14 +251,11 @@ td.column-name strong {
251
  td.rowspan {
252
  border-left: 1px solid #DDD; }
253
 
254
- .highlight-on {
255
- background: rgba(0, 164, 243, 0.05);
256
- border: 1px solid rgba(0, 164, 243, 0.1);
257
- padding: 0 0.5em; }
258
-
259
  .subgroup {
260
- border: 1px solid #DDD;
261
- padding: 0 0.5em; }
 
 
262
 
263
  .subgroup-heading {
264
  font-weight: 600; }
251
  td.rowspan {
252
  border-left: 1px solid #DDD; }
253
 
 
 
 
 
 
254
  .subgroup {
255
+ background: #f8f8f8;
256
+ border: 1px solid #f1f1f1;
257
+ padding: 0.25em 1em;
258
+ margin-right: 1em; }
259
 
260
  .subgroup-heading {
261
  font-weight: 600; }
admin/css/views.css.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "mappings": "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",
4
- "sources": ["../scss/views.scss","../scss/_partials/_structure.scss","../scss/_partials/_view-info.scss","../scss/_partials/_category-filter.scss","../scss/_partials/_checkbox-icons.scss","../scss/_partials/_misc.scss","../scss/_partials/_screenshots.scss","../scss/_partials/_inputs.scss","../scss/_partials/_elements.scss","../scss/_partials/_form-table.scss","../scss/_partials/_category-checkboxes.scss","../scss/_partials/_list-radio-buttons.scss","../scss/_partials/_template.scss","../scss/_partials/_layout.scss","../scss/_partials/_layout-examples.scss","../scss/_partials/_layout-example-columns.scss","../scss/_partials/_layout-example-grid.scss","../scss/_partials/_layout-example-masonry.scss","../scss/_partials/_background.scss","../scss/_partials/_custom-fields.scss","../scss/_partials/_help-tab.scss","../scss/_partials/_sticky-views.scss"],
5
- "names": [],
6
- "file": "views.css"
7
- }
 
 
 
 
 
 
 
admin/custom-fields.php CHANGED
@@ -156,8 +156,8 @@ function wpmtst_settings_custom_fields( $form_id = 1 ) {
156
  $fields = $forms[$form_id]['fields'];
157
  ?>
158
  <div class="wrap wpmtst">
159
- <h1><?php _e( 'Fields', 'strong-testimonials' ); ?></h1>
160
-
161
  <?php do_action( 'wpmtst_fields_editor_before_fields_intro' ); ?>
162
 
163
  <div id="left-col">
156
  $fields = $forms[$form_id]['fields'];
157
  ?>
158
  <div class="wrap wpmtst">
159
+ <h1 class="wp-heading-inline"><?php _e( 'Fields', 'strong-testimonials' ); ?></h1>
160
+ <hr class="wp-header-end">
161
  <?php do_action( 'wpmtst_fields_editor_before_fields_intro' ); ?>
162
 
163
  <div id="left-col">
admin/edd/EDD_SL_Plugin_Updater.php DELETED
@@ -1,500 +0,0 @@
1
- <?php
2
-
3
- // Exit if accessed directly
4
- if ( ! defined( 'ABSPATH' ) ) exit;
5
-
6
- /**
7
- * Allows plugins to use their own update API.
8
- *
9
- * @author Easy Digital Downloads
10
- * @version 1.6.16
11
- */
12
- class EDD_SL_Plugin_Updater {
13
-
14
- private $api_url = '';
15
- private $api_data = array();
16
- private $name = '';
17
- private $slug = '';
18
- private $version = '';
19
- private $wp_override = false;
20
- private $cache_key = '';
21
-
22
- /**
23
- * Class constructor.
24
- *
25
- * @uses plugin_basename()
26
- * @uses hook()
27
- *
28
- * @param string $_api_url The URL pointing to the custom API endpoint.
29
- * @param string $_plugin_file Path to the plugin file.
30
- * @param array $_api_data Optional data to send with API calls.
31
- */
32
- public function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
33
-
34
- global $edd_plugin_data;
35
-
36
- $this->api_url = trailingslashit( $_api_url );
37
- $this->api_data = $_api_data;
38
- $this->name = plugin_basename( $_plugin_file );
39
- $this->slug = basename( $_plugin_file, '.php' );
40
- $this->version = $_api_data['version'];
41
- $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false;
42
- $this->beta = ! empty( $this->api_data['beta'] ) ? true : false;
43
- $this->cache_key = 'edd_sl_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) );
44
-
45
- $edd_plugin_data[ $this->slug ] = $this->api_data;
46
-
47
- /**
48
- * Fires after the $edd_plugin_data is setup.
49
- *
50
- * @since x.x.x
51
- *
52
- * @param array $edd_plugin_data Array of EDD SL plugin data.
53
- */
54
- do_action( 'post_edd_sl_plugin_updater_setup', $edd_plugin_data );
55
-
56
- // Set up hooks.
57
- $this->init();
58
-
59
- }
60
-
61
- /**
62
- * Set up WordPress filters to hook into WP's update process.
63
- *
64
- * @uses add_filter()
65
- *
66
- * @return void
67
- */
68
- public function init() {
69
-
70
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
71
- add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
72
- remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 );
73
- add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 );
74
- add_action( 'admin_init', array( $this, 'show_changelog' ) );
75
-
76
- }
77
-
78
- /**
79
- * Check for Updates at the defined API endpoint and modify the update array.
80
- *
81
- * This function dives into the update API just when WordPress creates its update array,
82
- * then adds a custom API call and injects the custom plugin data retrieved from the API.
83
- * It is reassembled from parts of the native WordPress plugin update code.
84
- * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
85
- *
86
- * @uses api_request()
87
- *
88
- * @param array $_transient_data Update array build by WordPress.
89
- * @return array Modified update array with custom plugin data.
90
- */
91
- public function check_update( $_transient_data ) {
92
-
93
- global $pagenow;
94
-
95
- if ( ! is_object( $_transient_data ) ) {
96
- $_transient_data = new stdClass;
97
- }
98
-
99
- if ( 'plugins.php' == $pagenow && is_multisite() ) {
100
- return $_transient_data;
101
- }
102
-
103
- if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) {
104
- return $_transient_data;
105
- }
106
-
107
- $version_info = $this->get_cached_version_info();
108
-
109
- if ( false === $version_info ) {
110
- $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) );
111
-
112
- $this->set_version_info_cache( $version_info );
113
-
114
- }
115
-
116
- if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
117
-
118
- if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
119
-
120
- $_transient_data->response[ $this->name ] = $version_info;
121
-
122
- }
123
-
124
- $_transient_data->last_checked = time();
125
- $_transient_data->checked[ $this->name ] = $this->version;
126
-
127
- }
128
-
129
- return $_transient_data;
130
- }
131
-
132
- /**
133
- * show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise!
134
- *
135
- * @param string $file
136
- * @param array $plugin
137
- */
138
- public function show_update_notification( $file, $plugin ) {
139
-
140
- if ( is_network_admin() ) {
141
- return;
142
- }
143
-
144
- if( ! current_user_can( 'update_plugins' ) ) {
145
- return;
146
- }
147
-
148
- if( ! is_multisite() ) {
149
- return;
150
- }
151
-
152
- if ( $this->name != $file ) {
153
- return;
154
- }
155
-
156
- // Remove our filter on the site transient
157
- remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 );
158
-
159
- $update_cache = get_site_transient( 'update_plugins' );
160
-
161
- $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass();
162
-
163
- if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) {
164
-
165
- $version_info = $this->get_cached_version_info();
166
-
167
- if ( false === $version_info ) {
168
- $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) );
169
-
170
- $this->set_version_info_cache( $version_info );
171
- }
172
-
173
- if ( ! is_object( $version_info ) ) {
174
- return;
175
- }
176
-
177
- if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
178
-
179
- $update_cache->response[ $this->name ] = $version_info;
180
-
181
- }
182
-
183
- $update_cache->last_checked = time();
184
- $update_cache->checked[ $this->name ] = $this->version;
185
-
186
- set_site_transient( 'update_plugins', $update_cache );
187
-
188
- } else {
189
-
190
- $version_info = $update_cache->response[ $this->name ];
191
-
192
- }
193
-
194
- // Restore our filter
195
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
196
-
197
- if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) {
198
-
199
- // build a plugin list row, with update notification
200
- $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
201
- # <tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">
202
- echo '<tr class="plugin-update-tr" id="' . $this->slug . '-update" data-slug="' . $this->slug . '" data-plugin="' . $this->slug . '/' . $file . '">';
203
- echo '<td colspan="3" class="plugin-update colspanchange">';
204
- echo '<div class="update-message notice inline notice-warning notice-alt">';
205
-
206
- $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' );
207
-
208
- if ( empty( $version_info->download_link ) ) {
209
- printf(
210
- __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ),
211
- esc_html( $version_info->name ),
212
- '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
213
- esc_html( $version_info->new_version ),
214
- '</a>'
215
- );
216
- } else {
217
- printf(
218
- __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ),
219
- esc_html( $version_info->name ),
220
- '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
221
- esc_html( $version_info->new_version ),
222
- '</a>',
223
- '<a href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) .'">',
224
- '</a>'
225
- );
226
- }
227
-
228
- do_action( "in_plugin_update_message-{$file}", $plugin, $version_info );
229
-
230
- echo '</div></td></tr>';
231
- }
232
- }
233
-
234
- /**
235
- * Updates information on the "View version x.x details" page with custom data.
236
- *
237
- * @uses api_request()
238
- *
239
- * @param mixed $_data
240
- * @param string $_action
241
- * @param object $_args
242
- * @return object $_data
243
- */
244
- public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
245
-
246
- if ( $_action != 'plugin_information' ) {
247
-
248
- return $_data;
249
-
250
- }
251
-
252
- if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) {
253
-
254
- return $_data;
255
-
256
- }
257
-
258
- $to_send = array(
259
- 'slug' => $this->slug,
260
- 'is_ssl' => is_ssl(),
261
- 'fields' => array(
262
- 'banners' => array(),
263
- 'reviews' => false
264
- )
265
- );
266
-
267
- $cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) );
268
-
269
- // Get the transient where we store the api request for this plugin for 24 hours
270
- $edd_api_request_transient = $this->get_cached_version_info( $cache_key );
271
-
272
- //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now.
273
- if ( empty( $edd_api_request_transient ) ) {
274
-
275
- $api_response = $this->api_request( 'plugin_information', $to_send );
276
-
277
- // Expires in 3 hours
278
- $this->set_version_info_cache( $api_response, $cache_key );
279
-
280
- if ( false !== $api_response ) {
281
- $_data = $api_response;
282
- }
283
-
284
- } else {
285
- $_data = $edd_api_request_transient;
286
- }
287
-
288
- // Convert sections into an associative array, since we're getting an object, but Core expects an array.
289
- if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) {
290
- $new_sections = array();
291
- foreach ( $_data->sections as $key => $value ) {
292
- $new_sections[ $key ] = $value;
293
- }
294
-
295
- $_data->sections = $new_sections;
296
- }
297
-
298
- // Convert banners into an associative array, since we're getting an object, but Core expects an array.
299
- if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) {
300
- $new_banners = array();
301
- foreach ( $_data->banners as $key => $value ) {
302
- $new_banners[ $key ] = $value;
303
- }
304
-
305
- $_data->banners = $new_banners;
306
- }
307
-
308
- return $_data;
309
- }
310
-
311
- /**
312
- * Disable SSL verification in order to prevent download update failures
313
- *
314
- * @param array $args
315
- * @param string $url
316
- * @return object $array
317
- */
318
- public function http_request_args( $args, $url ) {
319
-
320
- $verify_ssl = $this->verify_ssl();
321
- if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
322
- $args['sslverify'] = $verify_ssl;
323
- }
324
- return $args;
325
-
326
- }
327
-
328
- /**
329
- * Calls the API and, if successfull, returns the object delivered by the API.
330
- *
331
- * @uses get_bloginfo()
332
- * @uses wp_remote_post()
333
- * @uses is_wp_error()
334
- *
335
- * @param string $_action The requested action.
336
- * @param array $_data Parameters for the API action.
337
- * @return false|object
338
- */
339
- private function api_request( $_action, $_data ) {
340
-
341
- global $wp_version;
342
-
343
- $data = array_merge( $this->api_data, $_data );
344
-
345
- if ( $data['slug'] != $this->slug ) {
346
- return;
347
- }
348
-
349
- if( $this->api_url == trailingslashit (home_url() ) ) {
350
- return false; // Don't allow a plugin to ping itself
351
- }
352
-
353
- $api_params = array(
354
- 'edd_action' => 'get_version',
355
- 'license' => ! empty( $data['license'] ) ? $data['license'] : '',
356
- 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
357
- 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
358
- 'version' => isset( $data['version'] ) ? $data['version'] : false,
359
- 'slug' => $data['slug'],
360
- 'author' => $data['author'],
361
- 'url' => home_url(),
362
- 'beta' => ! empty( $data['beta'] ),
363
- );
364
-
365
- $verify_ssl = $this->verify_ssl();
366
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) );
367
-
368
- if ( ! is_wp_error( $request ) ) {
369
- $request = json_decode( wp_remote_retrieve_body( $request ) );
370
- }
371
-
372
- if ( $request && isset( $request->sections ) ) {
373
- $request->sections = maybe_unserialize( $request->sections );
374
- } else {
375
- $request = false;
376
- }
377
-
378
- if ( $request && isset( $request->banners ) ) {
379
- $request->banners = maybe_unserialize( $request->banners );
380
- }
381
-
382
- if( ! empty( $request->sections ) ) {
383
- foreach( $request->sections as $key => $section ) {
384
- $request->$key = (array) $section;
385
- }
386
- }
387
-
388
- return $request;
389
- }
390
-
391
- public function show_changelog() {
392
-
393
- global $edd_plugin_data;
394
-
395
- if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) {
396
- return;
397
- }
398
-
399
- if( empty( $_REQUEST['plugin'] ) ) {
400
- return;
401
- }
402
-
403
- if( empty( $_REQUEST['slug'] ) ) {
404
- return;
405
- }
406
-
407
- if( ! current_user_can( 'update_plugins' ) ) {
408
- wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
409
- }
410
-
411
- $data = $edd_plugin_data[ $_REQUEST['slug'] ];
412
- $beta = ! empty( $data['beta'] ) ? true : false;
413
- $cache_key = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_' . $beta . '_version_info' );
414
- $version_info = $this->get_cached_version_info( $cache_key );
415
-
416
- if( false === $version_info ) {
417
-
418
- $api_params = array(
419
- 'edd_action' => 'get_version',
420
- 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
421
- 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
422
- 'slug' => $_REQUEST['slug'],
423
- 'author' => $data['author'],
424
- 'url' => home_url(),
425
- 'beta' => ! empty( $data['beta'] )
426
- );
427
-
428
- $verify_ssl = $this->verify_ssl();
429
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) );
430
-
431
- if ( ! is_wp_error( $request ) ) {
432
- $version_info = json_decode( wp_remote_retrieve_body( $request ) );
433
- }
434
-
435
-
436
- if ( ! empty( $version_info ) && isset( $version_info->sections ) ) {
437
- $version_info->sections = maybe_unserialize( $version_info->sections );
438
- } else {
439
- $version_info = false;
440
- }
441
-
442
- if( ! empty( $version_info ) ) {
443
- foreach( $version_info->sections as $key => $section ) {
444
- $version_info->$key = (array) $section;
445
- }
446
- }
447
-
448
- $this->set_version_info_cache( $version_info, $cache_key );
449
-
450
- }
451
-
452
- if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) {
453
- echo '<div style="background:#fff;padding:10px;">' . $version_info->sections['changelog'] . '</div>';
454
- }
455
-
456
- exit;
457
- }
458
-
459
- public function get_cached_version_info( $cache_key = '' ) {
460
-
461
- if( empty( $cache_key ) ) {
462
- $cache_key = $this->cache_key;
463
- }
464
-
465
- $cache = get_option( $cache_key );
466
-
467
- if( empty( $cache['timeout'] ) || time() > $cache['timeout'] ) {
468
- return false; // Cache is expired
469
- }
470
-
471
- return json_decode( $cache['value'] );
472
-
473
- }
474
-
475
- public function set_version_info_cache( $value = '', $cache_key = '' ) {
476
-
477
- if( empty( $cache_key ) ) {
478
- $cache_key = $this->cache_key;
479
- }
480
-
481
- $data = array(
482
- 'timeout' => strtotime( '+3 hours', time() ),
483
- 'value' => json_encode( $value )
484
- );
485
-
486
- update_option( $cache_key, $data, 'no' );
487
-
488
- }
489
-
490
- /**
491
- * Returns if the SSL of the store should be verified.
492
- *
493
- * @since 1.6.13
494
- * @return bool
495
- */
496
- private function verify_ssl() {
497
- return (bool) apply_filters( 'edd_sl_api_request_verify_ssl', true, $this );
498
- }
499
-
500
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/edd/Strong_Plugin_Updater.php DELETED
@@ -1,234 +0,0 @@
1
- <?php
2
- // Exit if accessed directly
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
- /**
6
- * Class Strong_Plugin_Updater
7
- */
8
- class Strong_Plugin_Updater {
9
-
10
- public function __construct() {
11
-
12
- add_action( 'admin_init', array( $this, 'plugin_updater' ), 0 ); // Don't change this priority
13
-
14
- add_action( 'wp_ajax_wpmtst_activate_license', array( $this, 'activate_license' ) );
15
-
16
- add_action( 'wp_ajax_wpmtst_deactivate_license', array( $this, 'deactivate_license' ) );
17
-
18
- }
19
-
20
- function plugin_updater() {
21
-
22
- // retrieve our license key from the DB
23
- $addons = get_option( 'wpmtst_addons' );
24
- if ( !$addons ) return;
25
-
26
- foreach ( $addons as $addon => $addon_info ) {
27
-
28
- /**
29
- * Repair missing file name due to bug in license activation process.
30
- *
31
- * @since 2.21.2
32
- */
33
- if ( ! isset( $addon_info['file'] ) ) {
34
- $addon_info['file'] = "strong-testimonials-{$addon}/strong-testimonials-{$addon}.php";
35
- $addons[ $addon ] = $addon_info;
36
- update_option( 'wpmtst_addons', $addons );
37
- }
38
-
39
- $license_key = '';
40
- $version = '';
41
-
42
- if ( isset( $addon_info['license']['key'] ) ) {
43
- $license_key = trim( $addon_info['license']['key'] );
44
- }
45
-
46
- if ( isset( $addon_info['version'] ) ) {
47
- $version = $addon_info['version'];
48
- }
49
-
50
- if ( ! $license_key || ! $version ) {
51
- return;
52
- }
53
-
54
- // setup the updater
55
- $args = array(
56
- 'version' => $version, // current installed version number
57
- 'license' => $license_key, // license key
58
- 'item_name' => $addon_info['name'], // name of this plugin
59
- 'author' => 'Chris Dillon', // author of this plugin
60
- 'url' => home_url()
61
- );
62
- $edd_updater = new EDD_SL_Plugin_Updater( STRONGPLUGINS_STORE_URL, $addon_info['file'], $args );
63
- }
64
-
65
- }
66
-
67
- /**
68
- * Activate a license key.
69
- */
70
- function activate_license() {
71
-
72
- if ( !check_ajax_referer( 'wpmtst-admin', 'security', false ) ) {
73
- wp_send_json_error();
74
- }
75
-
76
- if ( isset( $_GET['action'] ) && 'wpmtst_activate_license' == $_GET['action'] ) {
77
-
78
- $plugin = $_GET['plugin'];
79
-
80
- // retrieve the license from the database
81
- $addons = get_option( 'wpmtst_addons' );
82
- $addon = $addons[ $plugin ];
83
- $license = trim( $addon['license']['key'] );
84
-
85
- // data to send in our API request
86
- $api_params = array(
87
- 'edd_action' => 'activate_license',
88
- 'license' => $license,
89
- 'item_name' => $addon['name'], // the name of our product in EDD
90
- 'url' => home_url()
91
- );
92
-
93
- $license_data = new stdClass();
94
- $license_data->license = '';
95
-
96
- // Call the custom API.
97
- $response = wp_remote_post( STRONGPLUGINS_STORE_URL, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
98
-
99
- // make sure the response came back okay
100
- if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
101
-
102
- if ( is_wp_error( $response ) ) {
103
- $message = $response->get_error_message();
104
- } else {
105
- $message = __( 'An error occurred, please try again.' );
106
- }
107
-
108
- } else {
109
-
110
- $license_data = json_decode( wp_remote_retrieve_body( $response ) );
111
-
112
- if ( !isset( $license_data->success ) ) {
113
-
114
- $message = __( 'An error occurred, please contact support.' );
115
-
116
- } elseif ( false === $license_data->success ) {
117
-
118
- switch( $license_data->error ) {
119
-
120
- case 'expired' :
121
-
122
- $message = sprintf(
123
- __( 'Your license key expired on %s.' ),
124
- date_i18n( get_option( 'date_format' ), strtotime( $license_data->expires, current_time( 'timestamp' ) ) )
125
- );
126
- break;
127
-
128
- case 'revoked' :
129
-
130
- $message = __( 'Your license key has been disabled.' );
131
- break;
132
-
133
- case 'missing' :
134
-
135
- $message = __( 'Invalid license.' );
136
- break;
137
-
138
- case 'invalid' :
139
- case 'site_inactive' :
140
-
141
- $message = __( 'Your license is not active for this URL.' );
142
- break;
143
-
144
- case 'item_name_mismatch' :
145
-
146
- $message = sprintf( __( 'This appears to be an invalid license key for %s.' ), $addon['name'] );
147
- break;
148
-
149
- case 'no_activations_left':
150
-
151
- $message = __( 'Your license key has reached its activation limit.' );
152
- break;
153
-
154
- default :
155
-
156
- $message = __( 'An error occurred, please try again.' );
157
- break;
158
- }
159
-
160
- }
161
-
162
- }
163
-
164
- // Check if anything passed on a message constituting a failure
165
- if ( !empty( $message ) ) {
166
- wp_send_json_error( $message );
167
- }
168
-
169
- // $license_data->license will be either "valid" or "invalid"
170
- $addon['license']['status'] = $license_data->license;
171
- $addons[ $plugin ] = $addon;
172
- update_option( 'wpmtst_addons', $addons );
173
- wp_send_json_success( $license_data->license );
174
- }
175
- }
176
-
177
- /**
178
- * Deactivate a license key. This will also decrease the site count.
179
- */
180
- function deactivate_license() {
181
-
182
- if ( ! check_ajax_referer( 'wpmtst-admin', 'security', false ) ) {
183
- wp_send_json_error();
184
- }
185
-
186
- if ( isset( $_GET['action'] ) && 'wpmtst_deactivate_license' == $_GET['action'] ) {
187
-
188
- $plugin = $_GET['plugin'];
189
-
190
- // retrieve the license from the database
191
- $addons = get_option( 'wpmtst_addons' );
192
- $addon = $addons[ $plugin ];
193
- $license = trim( $addon['license']['key'] );
194
-
195
- // data to send in our API request
196
- $api_params = array(
197
- 'edd_action' => 'deactivate_license',
198
- 'license' => $license,
199
- 'item_name' => $addon['name'], // the name of our product in EDD
200
- 'url' => home_url()
201
- );
202
-
203
- // Call the custom API.
204
- $response = wp_remote_post( STRONGPLUGINS_STORE_URL, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
205
-
206
- // make sure the response came back okay
207
- if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
208
-
209
- if ( is_wp_error( $response ) ) {
210
- $message = $response->get_error_message();
211
- } else {
212
- $message = __( 'An error occurred, please try again.' );
213
- }
214
-
215
- wp_send_json_error( $message );
216
- }
217
-
218
- // decode the license data
219
- $license_data = json_decode( wp_remote_retrieve_body( $response ) );
220
-
221
- // $license_data->license will be either "deactivated" or "failed"
222
- if( $license_data->license == 'deactivated' ) {
223
- unset( $addons[ $plugin ]['license']['status'] );
224
- update_option( 'wpmtst_addons', $addons );
225
- wp_send_json_success( $license_data->license );
226
- }
227
-
228
- wp_send_json_error( $license_data->license );
229
- }
230
- }
231
-
232
- }
233
-
234
- new Strong_Plugin_Updater();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/js/views.js CHANGED
@@ -228,6 +228,7 @@ jQuery(document).ready(function ($) {
228
  * TODO Use a technique similar to if-then for adding/removing classes
229
  */
230
 
 
231
  var viewContent = $('#view-content');
232
  var viewContentChange = function () {
233
  var thisValue = viewContent.val();
@@ -241,6 +242,38 @@ jQuery(document).ready(function ($) {
241
  };
242
  viewContentChange();
243
  viewContent.on('change', viewContentChange);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
 
245
  /**
246
  * Plugin: Show/Hide parts based on current Mode
228
  * TODO Use a technique similar to if-then for adding/removing classes
229
  */
230
 
231
+ /*
232
  var viewContent = $('#view-content');
233
  var viewContentChange = function () {
234
  var thisValue = viewContent.val();
242
  };
243
  viewContentChange();
244
  viewContent.on('change', viewContentChange);
245
+ */
246
+
247
+ /**
248
+ * Update option for [adding read-more to excerpts] based on setting
249
+ * for [read-more type] (link to post or expand in place).
250
+ */
251
+ var viewHybrid = $('#view-more_post_in_place');
252
+
253
+ var viewHybridChange = function () {
254
+
255
+ var thisValue = viewHybrid.val();
256
+
257
+ // var viewMoreFullPost = $('#view-more_full_post');
258
+ // if ('1' === thisValue) {
259
+ // viewMoreFullPost.prop('disabled', true).find('option[value=\'1\']').prop('selected', true);
260
+ // } else {
261
+ // viewMoreFullPost.removeProp('disabled');
262
+ // }
263
+
264
+ var viewDefaultMore = $('#view-use_default_more');
265
+ if ('1' === thisValue) {
266
+ viewDefaultMore.prop('disabled', true).find('option[value=\'0\']').prop('selected', true);
267
+ } else {
268
+ viewDefaultMore.removeProp('disabled');
269
+ }
270
+ viewDefaultMore.change();
271
+
272
+ };
273
+
274
+ viewHybridChange();
275
+
276
+ viewHybrid.on('change', viewHybridChange);
277
 
278
  /**
279
  * Plugin: Show/Hide parts based on current Mode
admin/partials/views/option-content.php CHANGED
@@ -8,7 +8,6 @@
8
 
9
  <!-- Content type -->
10
  <div id="option-content" class="row">
11
-
12
  <div class="row-inner">
13
 
14
  <!-- select -->
@@ -27,13 +26,11 @@
27
  </div>
28
 
29
  <!-- info & screenshot -->
30
-
31
  <div class="inline then fast then_truncated then_not_entire then_not_excerpt" style="display: none;">
32
  <p class="description">
33
  <?php _e( 'This will strip tags like &lt;em&gt; and &lt;strong&gt;.', 'strong-testimonials' ); ?>
34
  </p>
35
  </div>
36
-
37
  <div class="inline then fast then_not_truncated then_not_entire then_excerpt" style="display: none;">
38
  <p class="description">
39
  <?php printf( __( 'To create manual excerpts, you may need to enable them in the post editor like in this <a href="%s" class="thickbox">screenshot</a>.', 'strong-testimonials' ), esc_url( '#TB_inline?width=&height=210&inlineId=screenshot-screen-options' ) ); ?>
@@ -43,14 +40,13 @@
43
  </p>
44
  </div>
45
 
46
- </div><!-- .row-inner -->
47
-
48
- </div><!-- #option-content -->
49
 
50
  <!-- Excerpt length -->
51
  <div id="option-content-length" class="row then then_not_entire then_excerpt then_truncated" style="display: none;">
52
 
53
- <div class="row-inner highlight2">
54
 
55
  <!-- info -->
56
  <div class="inline tight then then_excerpt then_not_truncated" style="display: none;">
@@ -87,7 +83,7 @@
87
  </label>
88
  </div>
89
 
90
- </div><!-- .row-inner -->
91
 
92
  </div><!-- #option-content-length -->
93
 
@@ -96,28 +92,77 @@
96
 
97
  <div class="row-inner subgroup">
98
 
99
- <div class="subgroup-heading">
100
- <?php _e( '"Read more" link', 'strong-testimonials' ); ?>
101
- </div>
102
-
103
- <!-- default or custom -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  <div class="row-inner">
105
-
106
- <div class="inline tight">
 
 
107
  <label>
108
- <select id="view-use_default_more" class="if selectgroup min-width-1" name="view[data][use_default_more]">
 
 
109
  <option value="1" <?php selected( $view['use_default_more'] ); ?>>
110
- <?php _ex( 'default link text', 'display setting', 'strong-testimonials' ); ?>
111
  </option>
112
  <option value="0" <?php selected( ! $view['use_default_more'] ); ?>>
113
- <?php _ex( 'custom link text (recommended)', 'display setting', 'strong-testimonials' ); ?>
114
  </option>
115
  </select>
116
  </label>
117
- </div>
118
-
119
- <div class="inline tight last then fast then_use_default_more then_0 then_not_1" style="display: none;">
120
-
 
 
121
  <span id="option-link-text" class="inline-span">
122
  <label for="view-more_post_text">
123
  <input type="text" id="view-more_post_text" name="view[data][more_post_text]"
@@ -125,38 +170,28 @@
125
  placeholder="<?php _e( 'enter a phrase', 'strong-testimonials' ); ?>">
126
  </label>
127
  </span>
128
-
129
- <span id="option-ellipsis">
130
-
131
- <input type="checkbox" id="view-more_post_ellipsis" class="if toggle checkbox"
132
- name="view[data][more_post_ellipsis]" value="1"
133
- <?php checked( isset( $view['more_post_ellipsis'] ) && $view['more_post_ellipsis'] );?>>
134
-
135
- <label for="view-more_post_ellipsis">
136
-
137
- <?php _e( 'ellipsis', 'strong-testimonials' ); ?>
138
-
139
- <div class="inline tight">
140
- <div class="then then_excerpt then_not_truncated" style="display: none;">
141
- <?php _e( '(automatic excerpt only)', 'strong-testimonials' ); ?>
142
- </div>
143
- </div>
144
-
145
  </label>
146
-
147
  </span>
148
-
149
- </div>
150
-
151
- <div class="inline tight then fast then_use_default_more then_1 then_not_0" style="display: none;">
152
- <p class="description short"><?php _e( 'If you only see [&hellip;] without a link then your theme<br> does not provide this. Use the custom link text instead.', 'strong-testimonials' ); ?></p>
153
- </div>
154
-
155
- </div><!-- .row-inner -->
156
 
157
  <!-- automatic or both -->
158
  <div class="row-inner then then_excerpt then_not_truncated" style="display: none;">
159
-
160
  <div class="inline">
161
  <label>
162
  <select id="view-more_full_post" class="if selectgroup" name="view[data][more_full_post]">
@@ -169,12 +204,9 @@
169
  </select>
170
  </label>
171
  </div>
172
-
173
- </div><!-- .row-inner -->
174
-
175
- </div><!-- .row-inner.subgroup -->
176
-
177
- </div><!-- #option-content-read-more -->
178
 
179
  <div class="row links then then_not_entire then_truncated then_excerpt" style="display: none;">
180
  <p class="description tall solo">
8
 
9
  <!-- Content type -->
10
  <div id="option-content" class="row">
 
11
  <div class="row-inner">
12
 
13
  <!-- select -->
26
  </div>
27
 
28
  <!-- info & screenshot -->
 
29
  <div class="inline then fast then_truncated then_not_entire then_not_excerpt" style="display: none;">
30
  <p class="description">
31
  <?php _e( 'This will strip tags like &lt;em&gt; and &lt;strong&gt;.', 'strong-testimonials' ); ?>
32
  </p>
33
  </div>
 
34
  <div class="inline then fast then_not_truncated then_not_entire then_excerpt" style="display: none;">
35
  <p class="description">
36
  <?php printf( __( 'To create manual excerpts, you may need to enable them in the post editor like in this <a href="%s" class="thickbox">screenshot</a>.', 'strong-testimonials' ), esc_url( '#TB_inline?width=&height=210&inlineId=screenshot-screen-options' ) ); ?>
40
  </p>
41
  </div>
42
 
43
+ </div>
44
+ </div>
 
45
 
46
  <!-- Excerpt length -->
47
  <div id="option-content-length" class="row then then_not_entire then_excerpt then_truncated" style="display: none;">
48
 
49
+ <div class="row-inner">
50
 
51
  <!-- info -->
52
  <div class="inline tight then then_excerpt then_not_truncated" style="display: none;">
83
  </label>
84
  </div>
85
 
86
+ </div>
87
 
88
  </div><!-- #option-content-length -->
89
 
92
 
93
  <div class="row-inner subgroup">
94
 
95
+ <!-- action: full post or in place -->
96
+ <div class="row-inner">
97
+ <div class="inline">
98
+ <?php _e( 'Add a <strong>Read more</strong> link to', 'strong-testimonials' ); ?>
99
+ </div>
100
+ <div class="inline tight">
101
+ <label>
102
+ <select id="view-more_post_in_place"
103
+ class="if selectgroup"
104
+ name="view[data][more_post_in_place]">
105
+ <option value="0" <?php selected( ! $view['more_post_in_place'] ); ?>>
106
+ <?php // TODO Get label from Properties ?>
107
+ <?php _e( 'the full testimonial', 'strong-testimonials' ); ?>
108
+ </option>
109
+ <option value="1" <?php selected( $view['more_post_in_place'] ); ?>>
110
+ <?php _e( 'expand content in place', 'strong-testimonials' ); ?>
111
+ </option>
112
+ </select>
113
+ </label>
114
+ </div>
115
+ </div>
116
+
117
+ <!-- ellipsis -->
118
+ <div class="row-inner">
119
+ <div class="then then_use_default_more then_0 then_not_1" style="display: none;">
120
+ <div class="inline">
121
+ <label>
122
+ <select id="view-more_post_ellipsis"
123
+ class="if selectgroup"
124
+ name="view[data][more_post_ellipsis]">
125
+ <option value="1" <?php selected( $view['more_post_ellipsis'] ); ?>>
126
+ <?php _e( 'with an ellipsis', 'strong-testimonials' ); ?>
127
+ </option>
128
+ <option value="0" <?php selected( ! $view['more_post_ellipsis'] ); ?>>
129
+ <?php _e( 'without an ellipsis', 'strong-testimonials' ); ?>
130
+ </option>
131
+ </select>
132
+ </label>
133
+ </div>
134
+ <div class="inline then then_excerpt then_not_truncated" style="display: none;">
135
+ <p class="description">
136
+ <?php _e( 'Automatic excerpt only.', 'strong-testimonials' ); ?>
137
+ </p>
138
+ </div>
139
+ </div>
140
+ </div>
141
+
142
+ <!-- default or custom -->
143
  <div class="row-inner">
144
+ <div class="inline tight then fast then_more_post_in_place then_1 then_not_0" style="display: none;">
145
+ <?php _e( 'with link text to read more', 'strong-testimonials' ); ?>
146
+ </div>
147
+ <div class="inline then fast then_more_post_in_place then_0 then_not_1" style="display: none;">
148
  <label>
149
+ <select id="view-use_default_more"
150
+ class="if selectgroup min-width-1"
151
+ name="view[data][use_default_more]">
152
  <option value="1" <?php selected( $view['use_default_more'] ); ?>>
153
+ <?php _ex( 'with default link text', 'display setting', 'strong-testimonials' ); ?>
154
  </option>
155
  <option value="0" <?php selected( ! $view['use_default_more'] ); ?>>
156
+ <?php _ex( 'with custom link text', 'display setting', 'strong-testimonials' ); ?>
157
  </option>
158
  </select>
159
  </label>
160
+ </div>
161
+ <div class="inline then fast then_use_default_more then_1 then_not_0" style="display: none;">
162
+ <p class="description"><?php _e( 'If you only see [&hellip;] without a link then use the custom link text instead.', 'strong-testimonials' ); ?></p>
163
+ </div>
164
+ <!-- read more -->
165
+ <div class="inline then fast then_use_default_more then_0 then_not_1" style="display: none;">
166
  <span id="option-link-text" class="inline-span">
167
  <label for="view-more_post_text">
168
  <input type="text" id="view-more_post_text" name="view[data][more_post_text]"
170
  placeholder="<?php _e( 'enter a phrase', 'strong-testimonials' ); ?>">
171
  </label>
172
  </span>
173
+ </div>
174
+ </div>
175
+
176
+ <!-- read less -->
177
+ <div class="row-inner then fast then_more_post_in_place then_1 then_not_0" style="display: none;">
178
+ <div class="inline tight">
179
+ <?php _e( 'and link text to read less', 'strong-testimonials' ); ?>
180
+ </div>
181
+ <div class="inline tight">
182
+ <span id="option-link-text-less" class="inline-span">
183
+ <label for="view-less_post_text">
184
+ <input type="text" id="view-less_post_text" name="view[data][less_post_text]"
185
+ value="<?php echo $view['less_post_text']; ?>" size="22"
186
+ placeholder="<?php _e( 'enter a phrase', 'strong-testimonials' ); ?>">
 
 
 
187
  </label>
 
188
  </span>
189
+ <p class="inline description"><?php _e( 'Leave blank to leave content expanded without a link.', 'strong-testimonials' ); ?></p>
190
+ </div>
191
+ </div>
 
 
 
 
 
192
 
193
  <!-- automatic or both -->
194
  <div class="row-inner then then_excerpt then_not_truncated" style="display: none;">
 
195
  <div class="inline">
196
  <label>
197
  <select id="view-more_full_post" class="if selectgroup" name="view[data][more_full_post]">
204
  </select>
205
  </label>
206
  </div>
207
+ </div>
208
+ </div>
209
+ </div>
 
 
 
210
 
211
  <div class="row links then then_not_entire then_truncated then_excerpt" style="display: none;">
212
  <p class="description tall solo">
admin/scss/_partials/_misc.scss CHANGED
@@ -16,16 +16,11 @@ td.rowspan {
16
  border-left: 1px solid #DDD;
17
  }
18
 
19
- // Highlight the manual excerpt creation option in Content group.
20
- .highlight-on {
21
- background: rgba($blue, 0.05);
22
- border: 1px solid rgba($blue, 0.1);
23
- padding: 0 0.5em;
24
- }
25
-
26
  .subgroup {
27
- border: 1px solid #DDD;
28
- padding: 0 0.5em;
 
 
29
  }
30
 
31
  .subgroup-heading {
16
  border-left: 1px solid #DDD;
17
  }
18
 
 
 
 
 
 
 
 
19
  .subgroup {
20
+ background: #f8f8f8;
21
+ border: 1px solid #f1f1f1;
22
+ padding: 0.25em 1em;
23
+ margin-right: 1em;
24
  }
25
 
26
  .subgroup-heading {
admin/settings/class-strong-testimonials-settings-compat.php CHANGED
@@ -245,8 +245,6 @@ class Strong_Testimonials_Settings_Compat {
245
 
246
  <h2><?php _e( 'Compatibility Settings', 'strong-testimonials' ); ?></h2>
247
 
248
- <p class="about"><?php printf( __( '<a href="%s" target="_blank">Start a support ticket</a> if you need help with these options.', 'strong-testimonials' ), wpmtst_support_url() ); ?></p>
249
-
250
  <?php
251
  }
252
 
245
 
246
  <h2><?php _e( 'Compatibility Settings', 'strong-testimonials' ); ?></h2>
247
 
 
 
248
  <?php
249
  }
250
 
admin/settings/partials/form.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Form Settings
4
  *
5
- * @package Strong_Testimonials
6
  * @since 1.13
7
  */
8
  $pages_list = wpmtst_get_pages();
2
  /**
3
  * Form Settings
4
  *
 
5
  * @since 1.13
6
  */
7
  $pages_list = wpmtst_get_pages();
admin/settings/partials/general.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Settings
4
  *
5
- * @package Strong_Testimonials
6
  * @since 1.13
7
  */
8
 
2
  /**
3
  * Settings
4
  *
 
5
  * @since 1.13
6
  */
7
 
admin/views-validate.php CHANGED
@@ -90,65 +90,7 @@ function wpmtst_sanitize_view( $input ) {
90
  $data['excerpt_length'] = (int) sanitize_text_field( $input['excerpt_length'] );
91
  $data['use_default_length'] = sanitize_text_field( $input['use_default_length'] );
92
 
93
- // Read more --> post
94
- $data['more_full_post'] = $input['more_full_post'];
95
- if ( 'truncated' == $data['content'] || 'excerpt' == $data['content'] ) {
96
- $data['more_post'] = 1;
97
- } else {
98
- $data['more_post'] = 0;
99
- }
100
- $data['more_post_ellipsis'] = isset( $input['more_post_ellipsis'] ) ? 1 : 0;
101
- $data['more_post_text'] = sanitize_text_field( $input['more_post_text'] );
102
- $data['use_default_more'] = $input['use_default_more'];
103
-
104
- // Read more --> page
105
- if ( isset( $input['more_page'] ) && $input['more_page'] ) {
106
-
107
- // Check the "ID or slug" field first
108
- if ( $input['more_page_id2'] ) {
109
-
110
- // is post ID?
111
- $id = sanitize_text_field( $input['more_page_id2'] );
112
- if ( is_numeric( $id ) ) {
113
- if ( ! get_posts( array( 'p' => $id, 'post_type' => array( 'page', 'post' ), 'post_status' => 'publish' ) ) ) {
114
- $id = null;
115
- }
116
- } else {
117
- // is post slug?
118
- $target = get_posts( array( 'name' => $id, 'post_type' => array( 'page', 'post' ), 'post_status' => 'publish' ) );
119
- if ( $target ) {
120
- $id = $target[0]->ID;
121
- }
122
- }
123
-
124
- if ( $id ) {
125
- $data['more_page_id'] = $id;
126
- unset( $data['more_page_id2'] );
127
- }
128
-
129
- } else {
130
-
131
- if ( $input['more_page_id'] ) {
132
- if ( is_numeric( $input['more_page_id'] ) ) {
133
- $data['more_page_id'] = (int) sanitize_text_field( $input['more_page_id'] );
134
- } else {
135
- $data['more_page_id'] = sanitize_text_field( $input['more_page_id'] );
136
- }
137
- }
138
-
139
- }
140
-
141
- // Only enable more_page if a page was selected by either method.
142
- if ( isset( $data['more_page_id'] ) && $data['more_page_id'] ) {
143
- $data['more_page'] = 1;
144
- }
145
- }
146
- if ( ! $input['more_page_text'] ) {
147
- $data['more_page_text'] = $default_view['more_page_text'];
148
- } else {
149
- $data['more_page_text'] = sanitize_text_field( $input['more_page_text'] );
150
- }
151
- $data['more_page_hook'] = sanitize_text_field( $input['more_page_hook'] );
152
 
153
  // Thumbnail
154
  $data['thumbnail'] = isset( $input['thumbnail'] ) ? 1 : 0;
@@ -228,6 +170,95 @@ function wpmtst_sanitize_view( $input ) {
228
  return $data;
229
  }
230
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  /**
232
  * Single testimonial
233
  *
90
  $data['excerpt_length'] = (int) sanitize_text_field( $input['excerpt_length'] );
91
  $data['use_default_length'] = sanitize_text_field( $input['use_default_length'] );
92
 
93
+ $data = wpmtst_sanitize_view_readmore( $data, $input, $default_view );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  // Thumbnail
96
  $data['thumbnail'] = isset( $input['thumbnail'] ) ? 1 : 0;
170
  return $data;
171
  }
172
 
173
+ /**
174
+ * Read-more options.
175
+ *
176
+ * @param $data
177
+ * @param $input
178
+ * @param $default_view
179
+ *
180
+ * @since 2.33.0 As separate function.
181
+ *
182
+ * @return array
183
+ */
184
+ function wpmtst_sanitize_view_readmore( $data, $input, $default_view ) {
185
+ if ( 'truncated' == $data['content'] || 'excerpt' == $data['content'] ) {
186
+ $data['more_post'] = 1;
187
+ } else {
188
+ $data['more_post'] = 0;
189
+ }
190
+ $data['more_post_ellipsis'] = sanitize_text_field( $input['more_post_ellipsis'] );
191
+ $data['use_default_more'] = $input['use_default_more'];
192
+ $data['more_post_text'] = sanitize_text_field( $input['more_post_text'] );
193
+ $data['less_post_text'] = sanitize_text_field( $input['less_post_text'] );
194
+
195
+ /**
196
+ * Read more in place
197
+ *
198
+ * @since 2.33.0
199
+ */
200
+ $data['more_post_in_place'] = isset( $input['more_post_in_place'] ) ? $input['more_post_in_place'] : 0;
201
+
202
+ /**
203
+ * Read more --> post (dependent on more-post-in-place)
204
+ */
205
+ $data['more_full_post'] = sanitize_text_field( $input['more_full_post'] );
206
+
207
+ /**
208
+ * Read more --> page
209
+ */
210
+ if ( isset( $input['more_page'] ) && $input['more_page'] ) {
211
+
212
+ // Check the "ID or slug" field first
213
+ if ( $input['more_page_id2'] ) {
214
+
215
+ // is post ID?
216
+ $id = sanitize_text_field( $input['more_page_id2'] );
217
+ if ( is_numeric( $id ) ) {
218
+ if ( ! get_posts( array( 'p' => $id, 'post_type' => array( 'page', 'post' ), 'post_status' => 'publish' ) ) ) {
219
+ $id = null;
220
+ }
221
+ } else {
222
+ // is post slug?
223
+ $target = get_posts( array( 'name' => $id, 'post_type' => array( 'page', 'post' ), 'post_status' => 'publish' ) );
224
+ if ( $target ) {
225
+ $id = $target[0]->ID;
226
+ }
227
+ }
228
+
229
+ if ( $id ) {
230
+ $data['more_page_id'] = $id;
231
+ unset( $data['more_page_id2'] );
232
+ }
233
+
234
+ } else {
235
+
236
+ if ( $input['more_page_id'] ) {
237
+ if ( is_numeric( $input['more_page_id'] ) ) {
238
+ $data['more_page_id'] = (int) sanitize_text_field( $input['more_page_id'] );
239
+ } else {
240
+ $data['more_page_id'] = sanitize_text_field( $input['more_page_id'] );
241
+ }
242
+ }
243
+
244
+ }
245
+
246
+ // Only enable more_page if a page was selected by either method.
247
+ if ( isset( $data['more_page_id'] ) && $data['more_page_id'] ) {
248
+ $data['more_page'] = 1;
249
+ }
250
+ }
251
+
252
+ if ( ! $input['more_page_text'] ) {
253
+ $data['more_page_text'] = $default_view['more_page_text'];
254
+ } else {
255
+ $data['more_page_text'] = sanitize_text_field( $input['more_page_text'] );
256
+ }
257
+ $data['more_page_hook'] = sanitize_text_field( $input['more_page_hook'] );
258
+
259
+ return $data;
260
+ }
261
+
262
  /**
263
  * Single testimonial
264
  *
admin/views.php CHANGED
@@ -3,7 +3,6 @@
3
  * View admin functions.
4
  *
5
  * @since 1.21.0
6
- * @package Strong_Testimonials
7
  */
8
 
9
 
@@ -48,7 +47,7 @@ function wpmtst_views_admin() {
48
 
49
  echo '<h1>' . __( 'Edit View', 'strong-testimonials' ) . '</h1>';
50
 
51
- $message = __( 'An error occurred.', 'strong-testimonials' ) . ' ' . sprintf( wp_kses( __( 'Please <a href="%s" target="_blank">open a support ticket</a>.', 'strong-testimonials' ), $tags ), wpmtst_support_url() );
52
 
53
  wp_die( sprintf( '<div class="notice notice-error"><p>%s</p></div>', $message ) );
54
 
3
  * View admin functions.
4
  *
5
  * @since 1.21.0
 
6
  */
7
 
8
 
47
 
48
  echo '<h1>' . __( 'Edit View', 'strong-testimonials' ) . '</h1>';
49
 
50
+ $message = __( 'An error occurred.', 'strong-testimonials' );
51
 
52
  wp_die( sprintf( '<div class="notice notice-error"><p>%s</p></div>', $message ) );
53
 
includes/class-strong-view-display.php CHANGED
@@ -79,6 +79,7 @@ class Strong_View_Display extends Strong_View {
79
  $this->has_stars();
80
  $this->has_pagination();
81
  $this->has_layouts();
 
82
 
83
  $this->load_extra_stylesheets();
84
 
@@ -322,6 +323,10 @@ class Strong_View_Display extends Strong_View {
322
  $container_data_list['state'] = 'idle';
323
  }
324
 
 
 
 
 
325
  // layouts
326
  $content_class_list[] = 'strong-' . ( $this->atts['layout'] ? $this->atts['layout'] : 'normal' );
327
  $content_class_list[] = 'columns-' . ( $this->atts['layout'] ? $this->atts['column_count'] : '1' );
@@ -351,10 +356,28 @@ class Strong_View_Display extends Strong_View {
351
  return ( $this->atts['pagination'] && 'simple' == $this->atts['pagination_settings']['type'] );
352
  }
353
 
 
 
 
 
 
 
 
354
  public function is_masonry() {
355
  return ( 'masonry' == $this->atts['layout'] );
356
  }
357
 
 
 
 
 
 
 
 
 
 
 
 
358
  /**
359
  * Pagination
360
  *
@@ -442,6 +465,18 @@ class Strong_View_Display extends Strong_View {
442
  WPMST()->render->add_script( 'wpmtst-controller' );
443
  }
444
 
 
 
 
 
 
 
 
 
 
 
 
 
445
  }
446
 
447
  endif;
79
  $this->has_stars();
80
  $this->has_pagination();
81
  $this->has_layouts();
82
+ $this->has_readmore();
83
 
84
  $this->load_extra_stylesheets();
85
 
323
  $container_data_list['state'] = 'idle';
324
  }
325
 
326
+ if ( $this->is_hybrid() ) {
327
+ $container_class_list[] = 'more-in-place';
328
+ }
329
+
330
  // layouts
331
  $content_class_list[] = 'strong-' . ( $this->atts['layout'] ? $this->atts['layout'] : 'normal' );
332
  $content_class_list[] = 'columns-' . ( $this->atts['layout'] ? $this->atts['column_count'] : '1' );
356
  return ( $this->atts['pagination'] && 'simple' == $this->atts['pagination_settings']['type'] );
357
  }
358
 
359
+ /**
360
+ * Return true if using Masonry.
361
+ *
362
+ * @since 2.28.0
363
+ *
364
+ * @return bool
365
+ */
366
  public function is_masonry() {
367
  return ( 'masonry' == $this->atts['layout'] );
368
  }
369
 
370
+ /**
371
+ * Return true if read-more in place.
372
+ *
373
+ * @since 2.33.0
374
+ *
375
+ * @return bool
376
+ */
377
+ public function is_hybrid() {
378
+ return ( isset( $this->atts['more_post_in_place'] ) && $this->atts['more_post_in_place'] );
379
+ }
380
+
381
  /**
382
  * Pagination
383
  *
465
  WPMST()->render->add_script( 'wpmtst-controller' );
466
  }
467
 
468
+ /**
469
+ * Read more in place
470
+ *
471
+ * @since 2.33.0
472
+ */
473
+ public function has_readmore() {
474
+ if ( $this->is_hybrid() ) {
475
+ WPMST()->render->add_style( 'wpmtst-animate' );
476
+ WPMST()->render->add_script( 'wpmtst-readmore' );
477
+ }
478
+ }
479
+
480
  }
481
 
482
  endif;
includes/class-strong-view-slideshow.php CHANGED
@@ -33,6 +33,7 @@ class Strong_View_Slideshow extends Strong_View_Display {
33
  $this->find_stylesheet();
34
  $this->has_slideshow();
35
  $this->has_stars();
 
36
 
37
  $this->load_extra_stylesheets();
38
 
@@ -396,7 +397,7 @@ class Strong_View_Slideshow extends Strong_View_Display {
396
  'autoControls' => 0,
397
  'pager' => 0,
398
  'slideCount' => $this->post_count,
399
- 'debug' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG,
400
  'compat' => $compat,
401
  'touchEnabled' => $options['touch_enabled'],
402
  'type' => $this->atts['slideshow_settings']['type'],
33
  $this->find_stylesheet();
34
  $this->has_slideshow();
35
  $this->has_stars();
36
+ $this->has_readmore();
37
 
38
  $this->load_extra_stylesheets();
39
 
397
  'autoControls' => 0,
398
  'pager' => 0,
399
  'slideCount' => $this->post_count,
400
+ 'debug' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG && apply_filters( 'debug_strong_slider', true ),
401
  'compat' => $compat,
402
  'touchEnabled' => $options['touch_enabled'],
403
  'type' => $this->atts['slideshow_settings']['type'],
includes/class-strong-view.php CHANGED
@@ -61,6 +61,18 @@ class Strong_View {
61
  $this->plugin_version = get_option( 'wpmtst_plugin_version' );
62
  }
63
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  /**
65
  * Return our rendered template.
66
  *
@@ -70,6 +82,11 @@ class Strong_View {
70
  return $this->html;
71
  }
72
 
 
 
 
 
 
73
  public function nothing_found() {
74
  ob_start();
75
  ?>
@@ -98,34 +115,153 @@ class Strong_View {
98
  * Add content filters.
99
  */
100
  public function add_content_filters() {
101
- if ( isset( $this->atts['content'] ) && 'truncated' == $this->atts['content'] ) {
102
 
103
- // Force use of content instead of manual excerpt.
104
- add_filter( 'wpmtst_get_the_excerpt', 'wpmtst_bypass_excerpt', 1 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
 
106
- } elseif ( isset( $this->atts['content'] ) && 'excerpt' == $this->atts['content'] ) {
107
 
108
- // Maybe add read-more to manual excerpts.
109
- add_filter( 'wpmtst_get_the_excerpt', 'wpmtst_custom_excerpt_more', 20 );
 
110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  }
112
- // else no filters
113
  }
114
 
115
  /**
116
- * Add content filters.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  */
118
  public function remove_content_filters() {
119
- if ( isset( $this->atts['content'] ) && 'truncated' == $this->atts['content'] ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
- remove_filter( 'wpmtst_get_the_excerpt', 'wpmtst_bypass_excerpt', 1 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
123
- } elseif ( isset( $this->atts['content'] ) && 'excerpt' == $this->atts['content'] ) {
 
124
 
125
- remove_filter( 'wpmtst_get_the_excerpt', 'wpmtst_custom_excerpt_more', 20 );
 
 
 
 
 
 
 
 
 
 
126
 
 
 
 
 
 
 
 
 
 
 
 
127
  }
128
- // else no filters
 
129
  }
130
 
131
  /**
@@ -171,11 +307,10 @@ class Strong_View {
171
  $script = WPMST()->templates->get_template_config( $this->atts, 'script', false );
172
 
173
  if ( $script ) {
174
- $handle = 'testimonials-' . $this->atts['template'];
175
  wp_register_script( $handle, $script, $deps_array );
176
  WPMST()->render->add_script( $handle );
177
- }
178
- else {
179
  foreach ( $deps_array as $handle ) {
180
  WPMST()->render->add_script( $handle );
181
  }
@@ -194,13 +329,13 @@ class Strong_View {
194
  */
195
  public function find_stylesheet( $enqueue = true ) {
196
  // In case of deactivated widgets still referencing deleted Views
197
- if ( ! isset( $this->atts['template'] ) || ! $this->atts['template'] ) {
198
  return false;
199
  }
200
 
201
  $stylesheet = WPMST()->templates->get_template_attr( $this->atts, 'stylesheet', false );
202
  if ( $stylesheet ) {
203
- $handle = 'testimonials-' . str_replace( ':', '-', $this->atts['template'] );
204
  $this->set_stylesheet( $handle );
205
  wp_register_style( $handle, $stylesheet, array(), $this->plugin_version );
206
  if ( $enqueue ) {
@@ -222,7 +357,8 @@ class Strong_View {
222
  * @return array
223
  */
224
  public function get_template_css_class() {
225
- $template_name = $this->atts['template'];
 
226
 
227
  // Maintain back-compat with template format version 1.0.
228
  $class = str_replace( ':content', '', $template_name );
@@ -236,10 +372,10 @@ class Strong_View {
236
 
237
  foreach ( $template_object['config']['options'] as $option ) {
238
 
239
- if ( isset( $this->atts['template_settings'][ $template_name ][ $option->name ] ) ) {
240
 
241
  foreach ( $option->values as $value ) {
242
- if ( $value->value == $this->atts['template_settings'][ $template_name ][ $option->name ] ) {
243
  if ( isset( $value->class_name ) ) {
244
  $class_list[] = $value->class_name;
245
  }
@@ -280,7 +416,7 @@ class Strong_View {
280
  * @return bool
281
  */
282
  public function is_form() {
283
- return ( isset( $this->atts['mode'] ) && 'form' == $this->atts['mode'] );
284
  }
285
 
286
  /**
@@ -289,7 +425,7 @@ class Strong_View {
289
  * @since 2.30.0
290
  */
291
  public function custom_font_color() {
292
- $font_color = $this->atts['font-color'];
293
  if ( ! isset( $font_color['type'] ) || 'custom' != $font_color['type'] ) {
294
  return;
295
  }
@@ -297,7 +433,7 @@ class Strong_View {
297
  $c1 = isset( $font_color['color'] ) ? $font_color['color'] : '';
298
 
299
  if ( $c1 ) {
300
- $view_el = ".strong-view-id-{$this->atts['view']}";
301
  $handle = $this->get_stylesheet();
302
 
303
  if ( $this->is_form() ) {
@@ -319,7 +455,7 @@ class Strong_View {
319
  * Build CSS for custom background.
320
  */
321
  public function custom_background() {
322
- $background = $this->atts['background'];
323
  if ( ! isset( $background['type'] ) ) {
324
  return;
325
  }
@@ -348,11 +484,11 @@ class Strong_View {
348
 
349
  // Special handling for Divi Builder
350
  $prefix = '';
351
- if ( isset( $this->atts['divi_builder'] ) && $this->atts['divi_builder'] && wpmtst_divi_builder_active() ) {
352
  $prefix = '#et_builder_outer_content ';
353
  }
354
 
355
- $view_el = "$prefix.strong-view-id-{$this->atts['view']}";
356
 
357
  // Includes special handling for Bold template.
358
  if ( $c1 && $c2 ) {
@@ -417,8 +553,8 @@ class Strong_View {
417
  * @since 2.16.0 In Strong_View class.
418
  */
419
  public function has_stars() {
420
- if ( isset( $this->atts['client_section'] ) ) {
421
- foreach ( $this->atts['client_section'] as $field ) {
422
  if ( 'rating' == $field['type'] ) {
423
  WPMST()->render->add_style( 'wpmtst-rating-display' );
424
  break;
61
  $this->plugin_version = get_option( 'wpmtst_plugin_version' );
62
  }
63
 
64
+ /**
65
+ * Return a specific view attribute.
66
+ *
67
+ * @param $att
68
+ * @since 2.33.0
69
+ *
70
+ * @return mixed|null
71
+ */
72
+ public function get_att( $att ) {
73
+ return isset( $this->atts[ $att ] ) ? $this->atts[ $att ] : null;
74
+ }
75
+
76
  /**
77
  * Return our rendered template.
78
  *
82
  return $this->html;
83
  }
84
 
85
+ /**
86
+ * Warning message of view not found.
87
+ *
88
+ * @return string
89
+ */
90
  public function nothing_found() {
91
  ob_start();
92
  ?>
115
  * Add content filters.
116
  */
117
  public function add_content_filters() {
 
118
 
119
+ if ( 'truncated' == $this->get_att( 'content' ) ) {
120
+
121
+ // automatic excerpt
122
+
123
+ $this->excerpt_filters();
124
+
125
+ $this->hybrid_content();
126
+
127
+ add_filter( 'wpmtst_get_the_excerpt', 'wpmtst_bypass_excerpt', 1 );
128
+
129
+ if ( $this->get_att( 'more_post_ellipsis' ) ) {
130
+ add_filter( 'wpmtst_use_ellipsis', '__return_true' );
131
+ }
132
+
133
+ } elseif ( 'excerpt' == $this->get_att( 'content' ) ) {
134
+
135
+ // manual excerpt (if no excerpt then use automatic excerpt)
136
+
137
+ $this->excerpt_filters();
138
 
139
+ $this->hybrid_content();
140
 
141
+ if ( $this->get_att( 'more_full_post' ) ) {
142
+ add_filter( 'wpmtst_get_the_excerpt', array( $this, 'manual_excerpt_more' ), 20 );
143
+ }
144
 
145
+ if ( $this->get_att( 'more_post_ellipsis' ) ) {
146
+ add_filter( 'wpmtst_use_ellipsis', array( $this, 'has_no_excerpt' ) );
147
+ } else {
148
+ add_filter( 'wpmtst_use_ellipsis', '__return_false' );
149
+ }
150
+
151
+ } else {
152
+
153
+ // full content
154
+ add_filter( 'wpmtst_get_the_content', 'wpmtst_the_content_filtered' );
155
+
156
+ }
157
+
158
+ }
159
+
160
+ /**
161
+ * Add excerpt filters.
162
+ *
163
+ * @since 2.33.0
164
+ */
165
+ public function excerpt_filters() {
166
+ add_filter( 'wpmtst_get_the_content', 'wpmtst_the_excerpt_filtered' );
167
+ add_filter( 'wpmtst_get_the_excerpt', 'wpmtst_trim_excerpt' );
168
+
169
+ if ( ! $this->get_att( 'use_default_length' ) ) {
170
+ add_filter( 'excerpt_length', array( $this, 'excerpt_length' ) );
171
+ }
172
+
173
+ if ( ! $this->get_att( 'use_default_more' ) ) {
174
+ add_filter( 'excerpt_more', array( $this, 'excerpt_more' ) );
175
  }
 
176
  }
177
 
178
  /**
179
+ * Add hybrid content filters.
180
+ *
181
+ * @since 2.33.0
182
+ */
183
+ public function hybrid_content() {
184
+ if ( $this->get_att( 'more_post_in_place' ) ) {
185
+ add_filter( 'wpmtst_is_hybrid_content', '__return_true' );
186
+ } else {
187
+ add_filter( 'wpmtst_read_more_post_link', 'wpmtst_prepend_ellipsis' );
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Remove content filters.
193
+ *
194
+ * @since 2.33.0
195
  */
196
  public function remove_content_filters() {
197
+ remove_filter( 'wpmtst_get_the_content', 'wpmtst_the_content_filtered' );
198
+ remove_filter( 'wpmtst_get_the_content', 'wpmtst_the_excerpt_filtered' );
199
+
200
+ remove_filter( 'excerpt_length', array( $this, 'excerpt_length' ) );
201
+ remove_filter( 'excerpt_more', array( $this, 'excerpt_more' ) );
202
+ remove_filter( 'wpmtst_read_more_post_link', 'wpmtst_prepend_ellipsis' );
203
+
204
+ remove_filter( 'wpmtst_get_the_excerpt', 'wpmtst_bypass_excerpt', 1 );
205
+ remove_filter( 'wpmtst_get_the_excerpt', 'wpmtst_hybrid_excerpt' );
206
+ remove_filter( 'wpmtst_get_the_excerpt', 'wpmtst_trim_excerpt' );
207
+ remove_filter( 'wpmtst_get_the_excerpt', array( $this, 'manual_excerpt_more' ), 20 );
208
+
209
+ remove_filter( 'wpmtst_is_hybrid_content', '__return_true' );
210
+ remove_filter( 'wpmtst_use_ellipsis', '__return_true' );
211
+ remove_filter( 'wpmtst_use_ellipsis', array( $this, 'has_no_excerpt' ) );
212
+ }
213
 
214
+ /**
215
+ * Return true if post has no manual excerpt.
216
+ *
217
+ * @since 2.33.0
218
+ *
219
+ * @return bool
220
+ */
221
+ public function has_no_excerpt() {
222
+ return ! has_excerpt();
223
+ }
224
+
225
+ /**
226
+ * Set custom excerpt length.
227
+ *
228
+ * @param $words
229
+ * @since 2.33.0
230
+ *
231
+ * @return mixed|null
232
+ */
233
+ public function excerpt_length( $words ) {
234
+ $excerpt_length = $this->get_att( 'excerpt_length' );
235
 
236
+ return $excerpt_length ? $excerpt_length : $words;
237
+ }
238
 
239
+ /**
240
+ * The read-more link, maybe prepended with an ellipsis.
241
+ *
242
+ * @param $more
243
+ * @since 2.33.0
244
+ *
245
+ * @return string
246
+ */
247
+ public function excerpt_more( $more ) {
248
+ return wpmtst_get_excerpt_more_link();
249
+ }
250
 
251
+ /**
252
+ * Maybe add read-more to manual excerpt.
253
+ *
254
+ * @since 2.26.0
255
+ * @param $excerpt
256
+ *
257
+ * @return string
258
+ */
259
+ public function manual_excerpt_more( $excerpt ) {
260
+ if ( has_excerpt() ) {
261
+ $excerpt .= apply_filters( 'excerpt_more', ' [&hellip;]' );
262
  }
263
+
264
+ return $excerpt;
265
  }
266
 
267
  /**
307
  $script = WPMST()->templates->get_template_config( $this->atts, 'script', false );
308
 
309
  if ( $script ) {
310
+ $handle = 'testimonials-' . $this->get_att( 'template' );
311
  wp_register_script( $handle, $script, $deps_array );
312
  WPMST()->render->add_script( $handle );
313
+ } else {
 
314
  foreach ( $deps_array as $handle ) {
315
  WPMST()->render->add_script( $handle );
316
  }
329
  */
330
  public function find_stylesheet( $enqueue = true ) {
331
  // In case of deactivated widgets still referencing deleted Views
332
+ if ( ! $this->get_att( 'template' ) ) {
333
  return false;
334
  }
335
 
336
  $stylesheet = WPMST()->templates->get_template_attr( $this->atts, 'stylesheet', false );
337
  if ( $stylesheet ) {
338
+ $handle = 'testimonials-' . str_replace( ':', '-', $this->get_att( 'template' ) );
339
  $this->set_stylesheet( $handle );
340
  wp_register_style( $handle, $stylesheet, array(), $this->plugin_version );
341
  if ( $enqueue ) {
357
  * @return array
358
  */
359
  public function get_template_css_class() {
360
+ $template_name = $this->get_att( 'template' );
361
+ $template_settings = $this->get_att( 'template_settings' );
362
 
363
  // Maintain back-compat with template format version 1.0.
364
  $class = str_replace( ':content', '', $template_name );
372
 
373
  foreach ( $template_object['config']['options'] as $option ) {
374
 
375
+ if ( isset( $template_settings[ $template_name ][ $option->name ] ) ) {
376
 
377
  foreach ( $option->values as $value ) {
378
+ if ( $value->value == $template_settings[ $template_name ][ $option->name ] ) {
379
  if ( isset( $value->class_name ) ) {
380
  $class_list[] = $value->class_name;
381
  }
416
  * @return bool
417
  */
418
  public function is_form() {
419
+ return ( 'form' == $this->get_att( 'mode' ) );
420
  }
421
 
422
  /**
425
  * @since 2.30.0
426
  */
427
  public function custom_font_color() {
428
+ $font_color = $this->get_att( 'font-color' );
429
  if ( ! isset( $font_color['type'] ) || 'custom' != $font_color['type'] ) {
430
  return;
431
  }
433
  $c1 = isset( $font_color['color'] ) ? $font_color['color'] : '';
434
 
435
  if ( $c1 ) {
436
+ $view_el = ".strong-view-id-{$this->get_att( 'view' )}";
437
  $handle = $this->get_stylesheet();
438
 
439
  if ( $this->is_form() ) {
455
  * Build CSS for custom background.
456
  */
457
  public function custom_background() {
458
+ $background = $this->get_att( 'background' );
459
  if ( ! isset( $background['type'] ) ) {
460
  return;
461
  }
484
 
485
  // Special handling for Divi Builder
486
  $prefix = '';
487
+ if ( $this->get_att( 'divi_builder' ) && wpmtst_divi_builder_active() ) {
488
  $prefix = '#et_builder_outer_content ';
489
  }
490
 
491
+ $view_el = "$prefix.strong-view-id-{$this->get_att( 'view' )}";
492
 
493
  // Includes special handling for Bold template.
494
  if ( $c1 && $c2 ) {
553
  * @since 2.16.0 In Strong_View class.
554
  */
555
  public function has_stars() {
556
+ if ( $this->get_att( 'client_section' ) ) {
557
+ foreach ( $this->get_att( 'client_section' ) as $field ) {
558
  if ( 'rating' == $field['type'] ) {
559
  WPMST()->render->add_style( 'wpmtst-rating-display' );
560
  break;
includes/class-walker-strong-category-checklist-front.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Taxonomy API: Walker_Strong_Category_Checklist_Front class
4
  *
5
- * @package Strong_Testimonials
6
  * @since 2.17.0
7
  */
8
 
2
  /**
3
  * Taxonomy API: Walker_Strong_Category_Checklist_Front class
4
  *
 
5
  * @since 2.17.0
6
  */
7
 
includes/filters.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
 
3
  /**
4
  * Remove whitespace between tags. Helps prevent double wpautop in plugins
@@ -18,6 +21,32 @@ function wpmtst_remove_whitespace( $html ) {
18
 
19
  return $html;
20
  }
21
-
22
  add_filter( 'strong_view_html', 'wpmtst_remove_whitespace' );
23
  add_filter( 'strong_view_form_html', 'wpmtst_remove_whitespace' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * Filters
4
+ */
5
 
6
  /**
7
  * Remove whitespace between tags. Helps prevent double wpautop in plugins
21
 
22
  return $html;
23
  }
 
24
  add_filter( 'strong_view_html', 'wpmtst_remove_whitespace' );
25
  add_filter( 'strong_view_form_html', 'wpmtst_remove_whitespace' );
26
+
27
+
28
+ /**
29
+ * Content filters.
30
+ *
31
+ * @since 2.33.0 Moved to `init` action.
32
+ */
33
+ function wpmtst_content_filters() {
34
+ add_filter( 'wpmtst_the_content', array( $GLOBALS['wp_embed'], 'run_shortcode' ), 8 );
35
+ add_filter( 'wpmtst_the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
36
+ add_filter( 'wpmtst_the_content', 'wptexturize' );
37
+ add_filter( 'wpmtst_the_content', 'wpautop' );
38
+ add_filter( 'wpmtst_the_content', 'shortcode_unautop' );
39
+ add_filter( 'wpmtst_the_content', 'prepend_attachment' );
40
+ add_filter( 'wpmtst_the_content', 'wp_make_content_images_responsive' );
41
+ add_filter( 'wpmtst_the_content', 'do_shortcode', 11 );
42
+ add_filter( 'wpmtst_the_content', 'convert_smilies', 20 );
43
+
44
+ add_filter( 'wpmtst_the_excerpt', 'wptexturize' );
45
+ add_filter( 'wpmtst_the_excerpt', 'convert_smilies' );
46
+ add_filter( 'wpmtst_the_excerpt', 'convert_chars' );
47
+ add_filter( 'wpmtst_the_excerpt', 'wpautop' );
48
+ add_filter( 'wpmtst_the_excerpt', 'shortcode_unautop' );
49
+ add_filter( 'wpmtst_the_excerpt', 'do_shortcode', 11 );
50
+ add_filter( 'wpmtst_the_excerpt', 'convert_smilies', 20 );
51
+ }
52
+ add_action( 'init', 'wpmtst_content_filters' );
includes/functions-activation.php CHANGED
@@ -31,7 +31,6 @@ function wpmtst_update_tables() {
31
  $message .= __( 'The plugin has been deactivated.', 'strong-testimonials' );
32
  $message .= '</p>';
33
  $message .= '<p><code>' . $wpdb->last_error . '</code></p>';
34
- $message .= '<p>' . sprintf( __( 'Please <a href="%s" target="_blank">open a support ticket</a>.', 'strong-testimonials' ), wpmtst_support_url() ) . '</p>';
35
  $message .= '<p>' . sprintf( __( '<a href="%s">Go back to Dashboard</a>', 'strong-testimonials' ), esc_url( admin_url() ) ) . '</p>';
36
 
37
  wp_die( sprintf( '<div class="error strong-view-error">%s</div>', $message ) );
31
  $message .= __( 'The plugin has been deactivated.', 'strong-testimonials' );
32
  $message .= '</p>';
33
  $message .= '<p><code>' . $wpdb->last_error . '</code></p>';
 
34
  $message .= '<p>' . sprintf( __( '<a href="%s">Go back to Dashboard</a>', 'strong-testimonials' ), esc_url( admin_url() ) ) . '</p>';
35
 
36
  wp_die( sprintf( '<div class="error strong-view-error">%s</div>', $message ) );
includes/functions-content.php CHANGED
@@ -1,8 +1,6 @@
1
  <?php
2
  /**
3
  * Content functions.
4
- *
5
- * @package Strong_Testimonials
6
  */
7
 
8
  /**
@@ -69,113 +67,65 @@ function wpmtst_bypass_excerpt( $text ) {
69
  }
70
 
71
  /**
72
- * Based on wp_trim_excerpt().
73
  *
74
  * @since 2.26.0
75
- * @param string $text
76
  *
77
  * @return string
78
  */
79
- function wpmtst_trim_excerpt( $text = '' ) {
80
- $raw_excerpt = $text;
81
- if ( '' == $text ) {
82
- $text = get_the_content('');
83
- $text = strip_shortcodes( $text );
84
- $text = apply_filters( 'wpmtst_the_content', $text );
85
- $text = str_replace(']]>', ']]&gt;', $text);
86
-
87
- /**
88
- * Filters the number of words in an excerpt.
89
- *
90
- * @param int $number The number of words. Default 55.
91
- */
92
- if ( WPMST()->atts( 'use_default_length' ) ) {
93
- $excerpt_length = apply_filters( 'excerpt_length', 55 );
94
- } else {
95
- $excerpt_length = apply_filters( 'wpmtst_excerpt_length', 55 );
96
- }
97
- /**
98
- * Filters the string in the "more" link displayed after a trimmed excerpt.
99
- *
100
- * @param string $more_string The string shown within the more link.
101
- */
102
- if ( WPMST()->atts( 'use_default_more' ) ) {
103
- $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
104
- } else {
105
- $excerpt_more = apply_filters( 'wpmtst_excerpt_more', ' ' . '[&hellip;]' );
106
- }
107
- $text = wpmtst_trim_words( $text, $excerpt_length, $excerpt_more );
108
  }
 
109
  /**
110
  * Filters the trimmed excerpt string.
111
  *
112
  * @param string $text The trimmed text.
113
  * @param string $raw_excerpt The text prior to trimming.
114
  */
115
- return apply_filters( 'wpmtst_trim_excerpt', $text, $raw_excerpt );
116
  }
117
 
118
  /**
119
- * Maybe add read-more to manual excerpt.
120
  *
121
- * @since 2.26.0
122
- * @param $excerpt
123
  *
124
  * @return string
125
  */
126
- function wpmtst_custom_excerpt_more( $excerpt ) {
127
- $excerpt_more = '';
128
- if ( has_excerpt() ) {
129
- if ( WPMST()->atts( 'more_full_post' ) ) {
130
- if ( WPMST()->atts( 'use_default_more' ) ) {
131
- $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
132
- } else {
133
- $excerpt_more = apply_filters( 'wpmtst_excerpt_more', ' ' . '[&hellip;]' );
134
- }
135
- }
136
- }
137
-
138
- return $excerpt . $excerpt_more;
139
- }
140
-
141
- /**
142
- * Modify the excerpt length.
143
- *
144
- * @since 2.10.0
145
- * @param $words
146
- *
147
- * @return int
148
- */
149
- function wpmtst_excerpt_length( $words ) {
150
- $excerpt_length = WPMST()->atts( 'excerpt_length' );
151
- if ( $excerpt_length ) {
152
- $words = $excerpt_length;
153
  }
 
 
154
 
155
- return $words;
156
- }
157
-
158
- /**
159
- * Modify the automatic excerpt "Read more" link (via WP filter).
160
- *
161
- * @since 2.10.0
162
- * @param $more
163
- *
164
- * @return string
165
- */
166
- function wpmtst_excerpt_more( $more ) {
167
- $ellipsis = WPMST()->atts( 'more_post_ellipsis' ) ? __( '&hellip;' ) : '';
168
-
169
- return $ellipsis . ' ' . wpmtst_get_excerpt_more_link();
170
- }
171
-
172
- /**
173
- * Return "Read more" for manual excerpts.
174
- *
175
- * @return string
176
- */
177
- function wpmtst_excerpt_more_full_post() {
178
- return ' ' . wpmtst_get_excerpt_more_link();
179
  }
180
 
181
  /**
@@ -192,7 +142,20 @@ function wpmtst_get_excerpt_more_link() {
192
  apply_filters( 'wpmtst_read_more_post_link_text', WPMST()->atts( 'more_post_text' ), WPMST()->atts() ), get_the_title()
193
  );
194
 
195
- $link = sprintf( '<a href="%s" class="readmore">%s</a>', esc_url( $url ), $link_text );
 
 
 
 
 
 
 
 
 
 
 
 
 
196
 
197
  return apply_filters( 'wpmtst_read_more_post_link', $link );
198
  }
@@ -203,10 +166,11 @@ function wpmtst_get_excerpt_more_link() {
203
  * @param $text
204
  * @param int $num_words
205
  * @param null $more
 
206
  *
207
  * @return string
208
  */
209
- function wpmtst_trim_words( $text, $num_words = 55, $more = null ) {
210
  if ( null === $more ) {
211
  $more = __( '&hellip;' );
212
  }
@@ -224,17 +188,65 @@ function wpmtst_trim_words( $text, $num_words = 55, $more = null ) {
224
  $words_array = array_slice( $words_array[0], 0, $num_words + 1 );
225
  $sep = '';
226
  } else {
227
- $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
 
228
  $sep = ' ';
229
  }
230
 
231
  if ( count( $words_array ) > $num_words ) {
232
- array_pop( $words_array );
233
- $text = implode( $sep, $words_array );
234
- $text = $text . $more;
 
 
235
  } else {
236
  $text = implode( $sep, $words_array );
237
  }
238
 
239
  return $text;
240
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
  /**
3
  * Content functions.
 
 
4
  */
5
 
6
  /**
67
  }
68
 
69
  /**
70
+ * Based on wp_trim_excerpt(). On wpmtst_get_the_excerpt hook.
71
  *
72
  * @since 2.26.0
73
+ * @param string $excerpt The manual excerpt.
74
  *
75
  * @return string
76
  */
77
+ function wpmtst_trim_excerpt( $excerpt = '' ) {
78
+ $raw_excerpt = $excerpt;
79
+
80
+ /**
81
+ * Filter hybrid value here to allow individual overrides.
82
+ */
83
+ $hybrid = apply_filters( 'wpmtst_is_hybrid_content', false );
84
+
85
+ if ( '' == $excerpt ) {
86
+
87
+ $text = wpmtst_get_the_prepared_text();
88
+
89
+ // Create excerpt if post has no manual excerpt.
90
+ $excerpt_length = apply_filters( 'excerpt_length', 55 );
91
+ $excerpt_more = apply_filters( 'excerpt_more', ' [&hellip;]' );
92
+ $excerpt = wpmtst_trim_words( $text, $excerpt_length, $excerpt_more, $hybrid );
93
+
94
+ } elseif ( $hybrid ) {
95
+
96
+ $text = wpmtst_get_the_prepared_text( true );
97
+
98
+ // Append hybrid content as hidden span to the manual excerpt.
99
+ $excerpt .= wpmtst_trim_words( $text, 0, '', true );
100
+
 
 
 
 
 
101
  }
102
+
103
  /**
104
  * Filters the trimmed excerpt string.
105
  *
106
  * @param string $text The trimmed text.
107
  * @param string $raw_excerpt The text prior to trimming.
108
  */
109
+ return apply_filters( 'wpmtst_trim_excerpt', $excerpt, $raw_excerpt );
110
  }
111
 
112
  /**
113
+ * Prepare the post content.
114
  *
115
+ * @param bool $hybrid
116
+ * @since 2.33.0
117
  *
118
  * @return string
119
  */
120
+ function wpmtst_get_the_prepared_text( $hybrid = false ) {
121
+ $text = get_the_content( '' );
122
+ if ( ! $hybrid ) {
123
+ $text = strip_shortcodes( $text );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  }
125
+ $text = apply_filters( 'wpmtst_the_content', $text );
126
+ $text = str_replace( ']]>', ']]&gt;', $text );
127
 
128
+ return $text;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  }
130
 
131
  /**
142
  apply_filters( 'wpmtst_read_more_post_link_text', WPMST()->atts( 'more_post_text' ), WPMST()->atts() ), get_the_title()
143
  );
144
 
145
+ $link_class = apply_filters( 'wpmtst_read_more_post_link_class', 'readmore' );
146
+
147
+ if ( apply_filters( 'wpmtst_is_hybrid_content', false ) ) {
148
+ // no href
149
+ $link = sprintf( '<a aria-expanded="false" aria-controls="more-%1$d" class="%2s readmore-toggle"><span class="readmore-text" data-more-text="%4$s" data-less-text="%5$s">%3$s</span></a>',
150
+ get_the_ID(), // 1
151
+ $link_class, // 2
152
+ $link_text, // 3
153
+ WPMST()->atts( 'more_post_text' ), // 4
154
+ WPMST()->atts( 'less_post_text' ) // 5
155
+ );
156
+ } else {
157
+ $link = sprintf( '<a href="%s" class="%s">%s</a>', esc_url( $url ), $link_class, $link_text );
158
+ }
159
 
160
  return apply_filters( 'wpmtst_read_more_post_link', $link );
161
  }
166
  * @param $text
167
  * @param int $num_words
168
  * @param null $more
169
+ * @param bool $hybrid
170
  *
171
  * @return string
172
  */
173
+ function wpmtst_trim_words( $text, $num_words = 55, $more = null, $hybrid = false ) {
174
  if ( null === $more ) {
175
  $more = __( '&hellip;' );
176
  }
188
  $words_array = array_slice( $words_array[0], 0, $num_words + 1 );
189
  $sep = '';
190
  } else {
191
+ $offset = $hybrid ? 0 : $num_words + 1;
192
+ $words_array = preg_split( "/[\n\r\t ]+/", $text, $offset, PREG_SPLIT_NO_EMPTY );
193
  $sep = ' ';
194
  }
195
 
196
  if ( count( $words_array ) > $num_words ) {
197
+ if ( $hybrid ) {
198
+ $text = wpmtst_assemble_hybrid( $words_array, $num_words, $sep, $more );
199
+ } else {
200
+ $text = wpmtst_assemble_excerpt( $words_array, $sep, $more );
201
+ }
202
  } else {
203
  $text = implode( $sep, $words_array );
204
  }
205
 
206
  return $text;
207
  }
208
+
209
+ /**
210
+ * Assemble excerpt from trimmed array.
211
+ *
212
+ * @param $words_array
213
+ * @param $sep
214
+ * @param $more
215
+ * @since 2.33.0
216
+ *
217
+ * @return string
218
+ */
219
+ function wpmtst_assemble_excerpt( $words_array, $sep, $more ) {
220
+ array_pop( $words_array );
221
+ $text = implode( $sep, $words_array );
222
+
223
+ return $text . $more;
224
+ }
225
+
226
+ /**
227
+ * Assemble excerpt + rest of content in hidden span.
228
+ *
229
+ * @param $words_array
230
+ * @param $num_words
231
+ * @param $sep
232
+ * @param $more
233
+ * @since 2.33.0
234
+ *
235
+ * @return string
236
+ */
237
+ function wpmtst_assemble_hybrid( $words_array, $num_words, $sep, $more ) {
238
+ $ellipsis = wpmtst_ellipsis();
239
+ if ( $ellipsis ) {
240
+ $ellipsis = '<span class="ellipsis">' . $ellipsis . ' </span>';
241
+ /* ! This space is important: ^ */
242
+ }
243
+
244
+ $first_half = implode( $sep, array_slice( $words_array, 0, $num_words ) );
245
+ $second_half = implode( $sep, array_slice( $words_array, $num_words ) );
246
+
247
+ $wrap_open = '<span class="readmore-content animated" id="more-' . get_the_ID() . '" hidden> ';
248
+ $wrap_close = ' </span>';
249
+
250
+ return $first_half . $ellipsis . ' ' . $wrap_open . $second_half . $wrap_close . $more;
251
+ /* ! This space is important: ^ */
252
+ }
includes/functions-image.php CHANGED
@@ -1,8 +1,6 @@
1
  <?php
2
  /**
3
  * Featured image functions.
4
- *
5
- * @package Strong_Testimonials
6
  */
7
 
8
  /**
1
  <?php
2
  /**
3
  * Featured image functions.
 
 
4
  */
5
 
6
  /**
includes/functions-template.php CHANGED
@@ -1,34 +1,8 @@
1
  <?php
2
  /**
3
  * Template Functions
4
- *
5
- * @package Strong_Testimonials
6
  */
7
 
8
- // Display filters
9
-
10
- add_filter( 'wpmtst_the_content', array( $GLOBALS['wp_embed'], 'run_shortcode' ), 8 );
11
- add_filter( 'wpmtst_the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
12
- add_filter( 'wpmtst_the_content', 'wptexturize' );
13
- add_filter( 'wpmtst_the_content', 'wpautop' );
14
- add_filter( 'wpmtst_the_content', 'shortcode_unautop' );
15
- add_filter( 'wpmtst_the_content', 'prepend_attachment' );
16
- add_filter( 'wpmtst_the_content', 'wp_make_content_images_responsive' );
17
- add_filter( 'wpmtst_the_content', 'do_shortcode', 11 );
18
- add_filter( 'wpmtst_the_content', 'convert_smilies', 20 );
19
-
20
- add_filter( 'wpmtst_the_excerpt', 'wptexturize' );
21
- add_filter( 'wpmtst_the_excerpt', 'convert_smilies' );
22
- add_filter( 'wpmtst_the_excerpt', 'convert_chars' );
23
- add_filter( 'wpmtst_the_excerpt', 'wpautop' );
24
- add_filter( 'wpmtst_the_excerpt', 'shortcode_unautop' );
25
- add_filter( 'wpmtst_the_excerpt', 'do_shortcode', 11 );
26
- add_filter( 'wpmtst_the_excerpt', 'convert_smilies', 20 );
27
-
28
- add_filter( 'wpmtst_excerpt_length', 'wpmtst_excerpt_length' );
29
- add_filter( 'wpmtst_excerpt_more', 'wpmtst_excerpt_more' );
30
- add_filter( 'wpmtst_get_the_excerpt', 'wpmtst_trim_excerpt' );
31
-
32
  /**
33
  * Template function for showing a View.
34
  *
@@ -92,19 +66,13 @@ function wpmtst_the_title( $before = '', $after = '' ) {
92
  */
93
  function wpmtst_the_content() {
94
  /**
95
- * Use this hook to remove specific _core_ content filters.
96
  *
97
  * @since 2.26.0
98
  */
99
  do_action( 'wpmtst_before_content_filters' );
100
 
101
- $att = WPMST()->atts( 'content' );
102
- if ( 'truncated' == $att || 'excerpt' == $att ) {
103
- // Excerpt filters added in view class.
104
- echo wpmtst_the_excerpt_filtered();
105
- } else {
106
- echo wpmtst_the_content_filtered();
107
- }
108
 
109
  /**
110
  * Restore content filters that were removed.
@@ -114,6 +82,32 @@ function wpmtst_the_content() {
114
  do_action( 'wpmtst_after_content_filters' );
115
  }
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  /**
118
  * Assemble link to secondary "Read more" page.
119
  *
1
  <?php
2
  /**
3
  * Template Functions
 
 
4
  */
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  /**
7
  * Template function for showing a View.
8
  *
66
  */
67
  function wpmtst_the_content() {
68
  /**
69
+ * Use this hook to remove specific content filters.
70
  *
71
  * @since 2.26.0
72
  */
73
  do_action( 'wpmtst_before_content_filters' );
74
 
75
+ echo apply_filters( 'wpmtst_get_the_content', '' );
 
 
 
 
 
 
76
 
77
  /**
78
  * Restore content filters that were removed.
82
  do_action( 'wpmtst_after_content_filters' );
83
  }
84
 
85
+ /**
86
+ * Like the_excerpt().
87
+ *
88
+ * @since 2.33.0
89
+ */
90
+ function wpmtst_the_excerpt() {
91
+ echo wpmtst_the_excerpt_filtered();
92
+ }
93
+
94
+ /**
95
+ * The ellipsis on read-more's.
96
+ *
97
+ * @since 2.33.0
98
+ */
99
+ function wpmtst_ellipsis() {
100
+ if ( apply_filters( 'wpmtst_use_ellipsis', true ) ) {
101
+ return apply_filters( 'wpmtst_ellipsis', __( '&hellip;' ) );
102
+ }
103
+
104
+ return '';
105
+ }
106
+
107
+ function wpmtst_prepend_ellipsis( $more ) {
108
+ return wpmtst_ellipsis() . ' ' . $more;
109
+ }
110
+
111
  /**
112
  * Assemble link to secondary "Read more" page.
113
  *
includes/functions-views.php CHANGED
@@ -1,8 +1,6 @@
1
  <?php
2
  /**
3
  * View Functions
4
- *
5
- * @package Strong_Testimonials
6
  */
7
 
8
  /**
@@ -37,7 +35,6 @@ function wpmtst_get_views() {
37
  $message = '<p><span style="color: #CD0000;">';
38
  $message .= __( 'An error occurred.', 'strong-testimonials' ) . '</span>&nbsp;';
39
  $message .= __( 'The plugin has been deactivated.', 'strong-testimonials' ) . '&nbsp;';
40
- $message .= sprintf( __( 'Please <a href="%s" target="_blank">open a support ticket</a>.', 'strong-testimonials' ), wpmtst_support_url() ) . '</p>';
41
  $message .= '<p>' . sprintf( __( '<a href="%s">Go back to Dashboard</a>', 'strong-testimonials' ), esc_url( admin_url() ) ) . '</p>';
42
  wp_die( sprintf( '<div class="error strong-view-error">%s</div>', $message ) );
43
  }
1
  <?php
2
  /**
3
  * View Functions
 
 
4
  */
5
 
6
  /**
35
  $message = '<p><span style="color: #CD0000;">';
36
  $message .= __( 'An error occurred.', 'strong-testimonials' ) . '</span>&nbsp;';
37
  $message .= __( 'The plugin has been deactivated.', 'strong-testimonials' ) . '&nbsp;';
 
38
  $message .= '<p>' . sprintf( __( '<a href="%s">Go back to Dashboard</a>', 'strong-testimonials' ), esc_url( admin_url() ) ) . '</p>';
39
  wp_die( sprintf( '<div class="error strong-view-error">%s</div>', $message ) );
40
  }
includes/functions.php CHANGED
@@ -1,12 +1,10 @@
1
  <?php
2
  /**
3
  * Functions
4
- *
5
- * @package Strong_Testimonials
6
  */
7
 
8
  function wpmtst_support_url() {
9
- return esc_url( 'https://strongplugins.com/support/' );
10
  }
11
 
12
  /**
1
  <?php
2
  /**
3
  * Functions
 
 
4
  */
5
 
6
  function wpmtst_support_url() {
7
+ return esc_url( 'https://strongplugins.com/' );
8
  }
9
 
10
  /**
includes/l10n-polylang.php CHANGED
@@ -120,6 +120,9 @@ function wpmtst_readmore_polylang() {
120
  pll_register_string( sprintf( __( 'View %s : Read more (testimonial)', 'strong-testimonials', false ),
121
  $view['id'] ), $view_data['more_post_text'], $context );
122
 
 
 
 
123
  pll_register_string( sprintf( __( 'View %s : Read more (page or post)', 'strong-testimonials', false ),
124
  $view['id'] ), $view_data['more_page_text'], $context );
125
  }
120
  pll_register_string( sprintf( __( 'View %s : Read more (testimonial)', 'strong-testimonials', false ),
121
  $view['id'] ), $view_data['more_post_text'], $context );
122
 
123
+ pll_register_string( sprintf( __( 'View %s : Read less (testimonial)', 'strong-testimonials', false ),
124
+ $view['id'] ), $view_data['less_post_text'], $context );
125
+
126
  pll_register_string( sprintf( __( 'View %s : Read more (page or post)', 'strong-testimonials', false ),
127
  $view['id'] ), $view_data['more_page_text'], $context );
128
  }
includes/l10n-wpml.php CHANGED
@@ -199,6 +199,11 @@ function wpmtst_readmore_wpml( $options ) {
199
  $string = sprintf( __( 'View %s : Read more (testimonial)', 'strong-testimonials' ), $options['id'] );
200
  do_action( 'wpml_register_single_string', $context, $string, $options['more_post_text'] );
201
 
 
 
 
 
 
202
  $string = sprintf( __( 'View %s : Read more (page or post)', 'strong-testimonials' ), $options['id'] );
203
  do_action( 'wpml_register_single_string', $context, $string, $options['more_page_text'] );
204
  }
@@ -215,6 +220,7 @@ function wpmtst_update_view_wpml( $view ) {
215
  array(
216
  'id' => $view['id'],
217
  'more_post_text' => $view['data']['more_post_text'],
 
218
  'more_page_text' => $view['data']['more_page_text'],
219
  )
220
  );
199
  $string = sprintf( __( 'View %s : Read more (testimonial)', 'strong-testimonials' ), $options['id'] );
200
  do_action( 'wpml_register_single_string', $context, $string, $options['more_post_text'] );
201
 
202
+ /* Translators: %s is the View ID. */
203
+ $string = sprintf( __( 'View %s : Read less (testimonial)', 'strong-testimonials' ), $options['id'] );
204
+ do_action( 'wpml_register_single_string', $context, $string, $options['less_post_text'] );
205
+
206
+ /* Translators: %s is the View ID. */
207
  $string = sprintf( __( 'View %s : Read more (page or post)', 'strong-testimonials' ), $options['id'] );
208
  do_action( 'wpml_register_single_string', $context, $string, $options['more_page_text'] );
209
  }
220
  array(
221
  'id' => $view['id'],
222
  'more_post_text' => $view['data']['more_post_text'],
223
+ 'less_post_text' => $view['data']['less_post_text'],
224
  'more_page_text' => $view['data']['more_page_text'],
225
  )
226
  );
includes/scripts.php CHANGED
@@ -48,7 +48,7 @@ function wpmtst_scripts() {
48
  'script' => isset( $ajax['script'] ) ? $ajax['script'] : '',
49
  'containerId' => isset( $ajax['container_id'] ) ? $ajax['container_id'] : '',
50
  'addedNodeId' => isset( $ajax['addednode_id'] ) ? $ajax['addednode_id'] : '',
51
- 'debug' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG,
52
  );
53
  wp_localize_script( 'wpmtst-controller', 'strongControllerParms', $parms );
54
 
@@ -184,6 +184,20 @@ function wpmtst_scripts() {
184
  $plugin_version,
185
  true );
186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  }
188
  add_action( 'wp_enqueue_scripts', 'wpmtst_scripts' );
189
 
@@ -205,6 +219,7 @@ function wpmtst_defer_scripts( $tag, $handle ) {
205
  'jquery-actual',
206
  'verge',
207
  'wpmtst-slider',
 
208
  );
209
 
210
  if ( in_array( $handle, $scripts_to_defer ) ) {
48
  'script' => isset( $ajax['script'] ) ? $ajax['script'] : '',
49
  'containerId' => isset( $ajax['container_id'] ) ? $ajax['container_id'] : '',
50
  'addedNodeId' => isset( $ajax['addednode_id'] ) ? $ajax['addednode_id'] : '',
51
+ 'debug' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG && apply_filters( 'debug_strong_controller', true ),
52
  );
53
  wp_localize_script( 'wpmtst-controller', 'strongControllerParms', $parms );
54
 
184
  $plugin_version,
185
  true );
186
 
187
+ /**
188
+ * Read more in place
189
+ */
190
+ wp_register_script( 'wpmtst-readmore',
191
+ WPMTST_PUBLIC_URL . "js/lib/readmore/readmore{$min}.js",
192
+ array(),
193
+ $plugin_version,
194
+ true );
195
+
196
+ wp_register_style( 'wpmtst-animate',
197
+ WPMTST_PUBLIC_URL . 'css/animate.min.css',
198
+ array(),
199
+ '' );
200
+
201
  }
202
  add_action( 'wp_enqueue_scripts', 'wpmtst_scripts' );
203
 
219
  'jquery-actual',
220
  'verge',
221
  'wpmtst-slider',
222
+ 'wpmtst-readmore',
223
  );
224
 
225
  if ( in_array( $handle, $scripts_to_defer ) ) {
public/css/animate.min.css ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+
3
+ /*!
4
+ * animate.css -http://daneden.me/animate
5
+ * Version - 3.7.0
6
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
7
+ *
8
+ * Copyright (c) 2018 Daniel Eden
9
+ */
10
+
11
+ @-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;-webkit-transform-origin:center bottom;animation-name:bounce;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-name:headShake;-webkit-animation-timing-function:ease-in-out;animation-name:headShake;animation-timing-function:ease-in-out}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-animation-name:swing;-webkit-transform-origin:top center;animation-name:swing;transform-origin:top center}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;-webkit-transform-origin:center;animation-name:jello;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.heartBeat{-webkit-animation-duration:1.3s;-webkit-animation-name:heartBeat;-webkit-animation-timing-function:ease-in-out;animation-duration:1.3s;animation-name:heartBeat;animation-timing-function:ease-in-out}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{-webkit-transform:scale3d(1.03,1.03,1.03);opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{-webkit-transform:scaleX(1);opacity:1;transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{-webkit-transform:scale3d(1.03,1.03,1.03);opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{-webkit-transform:scaleX(1);opacity:1;transform:scaleX(1)}}.bounceIn{-webkit-animation-duration:.75s;-webkit-animation-name:bounceIn;animation-duration:.75s;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,-3000px,0);opacity:0;transform:translate3d(0,-3000px,0)}60%{-webkit-transform:translate3d(0,25px,0);opacity:1;transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,-3000px,0);opacity:0;transform:translate3d(0,-3000px,0)}60%{-webkit-transform:translate3d(0,25px,0);opacity:1;transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(-3000px,0,0);opacity:0;transform:translate3d(-3000px,0,0)}60%{-webkit-transform:translate3d(25px,0,0);opacity:1;transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(-3000px,0,0);opacity:0;transform:translate3d(-3000px,0,0)}60%{-webkit-transform:translate3d(25px,0,0);opacity:1;transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(3000px,0,0);opacity:0;transform:translate3d(3000px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);opacity:1;transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(3000px,0,0);opacity:0;transform:translate3d(3000px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);opacity:1;transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,3000px,0);opacity:0;transform:translate3d(0,3000px,0)}60%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,3000px,0);opacity:0;transform:translate3d(0,3000px,0)}60%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{-webkit-transform:scale3d(1.1,1.1,1.1);opacity:1;transform:scale3d(1.1,1.1,1.1)}to{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{-webkit-transform:scale3d(1.1,1.1,1.1);opacity:1;transform:scale3d(1.1,1.1,1.1)}to{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-duration:.75s;-webkit-animation-name:bounceOut;animation-duration:.75s;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{-webkit-transform:translate3d(20px,0,0);opacity:1;transform:translate3d(20px,0,0)}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{-webkit-transform:translate3d(20px,0,0);opacity:1;transform:translate3d(20px,0,0)}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{-webkit-transform:translate3d(-20px,0,0);opacity:1;transform:translate3d(-20px,0,0)}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{-webkit-transform:translate3d(-20px,0,0);opacity:1;transform:translate3d(-20px,0,0)}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{-webkit-transform:translate3d(0,20px,0);opacity:1;transform:translate3d(0,20px,0)}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{-webkit-transform:translate3d(0,20px,0);opacity:1;transform:translate3d(0,20px,0)}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInDown{0%{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInDownBig{0%{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInLeft{0%{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInRight{0%{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInRightBig{0%{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInUp{0%{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInUpBig{0%{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn)}40%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg)}50%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg)}80%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg)}to{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg)}}@keyframes flip{0%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn)}40%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg)}50%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg)}80%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg)}to{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg)}}.animated.flip{-webkit-animation-name:flip;-webkit-backface-visibility:visible;animation-name:flip;backface-visibility:visible}@-webkit-keyframes flipInX{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{-webkit-transform:perspective(400px) rotateX(10deg);opacity:1;transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{-webkit-transform:perspective(400px) rotateX(10deg);opacity:1;transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-animation-name:flipInX;-webkit-backface-visibility:visible!important;animation-name:flipInX;backface-visibility:visible!important}@-webkit-keyframes flipInY{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateY(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateY(-20deg)}60%{-webkit-transform:perspective(400px) rotateY(10deg);opacity:1;transform:perspective(400px) rotateY(10deg)}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateY(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateY(-20deg)}60%{-webkit-transform:perspective(400px) rotateY(10deg);opacity:1;transform:perspective(400px) rotateY(10deg)}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-animation-name:flipInY;-webkit-backface-visibility:visible!important;animation-name:flipInY;backface-visibility:visible!important}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);opacity:1;transform:perspective(400px) rotateX(-20deg)}to{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0;transform:perspective(400px) rotateX(90deg)}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);opacity:1;transform:perspective(400px) rotateX(-20deg)}to{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0;transform:perspective(400px) rotateX(90deg)}}.flipOutX{-webkit-animation-duration:.75s;-webkit-animation-name:flipOutX;-webkit-backface-visibility:visible!important;animation-duration:.75s;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);opacity:1;transform:perspective(400px) rotateY(-15deg)}to{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0;transform:perspective(400px) rotateY(90deg)}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);opacity:1;transform:perspective(400px) rotateY(-15deg)}to{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0;transform:perspective(400px) rotateY(90deg)}}.flipOutY{-webkit-animation-duration:.75s;-webkit-animation-name:flipOutY;-webkit-backface-visibility:visible!important;animation-duration:.75s;animation-name:flipOutY;backface-visibility:visible!important}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{-webkit-transform:skewX(20deg);opacity:1;transform:skewX(20deg)}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{-webkit-transform:skewX(20deg);opacity:1;transform:skewX(20deg)}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-name:lightSpeedIn;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}@keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-name:lightSpeedOut;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(-200deg);transform-origin:center}to{-webkit-transform:translateZ(0);-webkit-transform-origin:center;opacity:1;transform:translateZ(0);transform-origin:center}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(-200deg);transform-origin:center}to{-webkit-transform:translateZ(0);-webkit-transform-origin:center;opacity:1;transform:translateZ(0);transform-origin:center}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(45deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(45deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-90deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-90deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;opacity:1;transform-origin:center}to{-webkit-transform:rotate(200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(200deg);transform-origin:center}}@keyframes rotateOut{0%{-webkit-transform-origin:center;opacity:1;transform-origin:center}to{-webkit-transform:rotate(200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(200deg);transform-origin:center}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-45deg);transform-origin:right bottom}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-45deg);transform-origin:right bottom}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(90deg);transform-origin:right bottom}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(90deg);transform-origin:right bottom}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform-origin:top left}20%,60%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(80deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform:rotate(80deg);transform-origin:top left}40%,80%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(60deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;opacity:1;transform:rotate(60deg);transform-origin:top left}to{-webkit-transform:translate3d(0,700px,0);opacity:0;transform:translate3d(0,700px,0)}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform-origin:top left}20%,60%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(80deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform:rotate(80deg);transform-origin:top left}40%,80%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(60deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;opacity:1;transform:rotate(60deg);transform-origin:top left}to{-webkit-transform:translate3d(0,700px,0);opacity:0;transform:translate3d(0,700px,0)}}.hinge{-webkit-animation-duration:2s;-webkit-animation-name:hinge;animation-duration:2s;animation-name:hinge}@-webkit-keyframes jackInTheBox{0%{-webkit-transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{-webkit-transform:scale(1);opacity:1;transform:scale(1)}}@keyframes jackInTheBox{0%{-webkit-transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{-webkit-transform:scale(1);opacity:1;transform:scale(1)}}.jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes rollIn{0%{-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) rotate(120deg);opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) rotate(120deg);opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}}@keyframes zoomInDown{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0)}}@keyframes zoomInLeft{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0)}}@keyframes zoomInRight{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}}@keyframes zoomInUp{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom}}@keyframes zoomOutDown{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{-webkit-transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}@keyframes zoomOutLeft{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{-webkit-transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{-webkit-transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}@keyframes zoomOutRight{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{-webkit-transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom}}@keyframes zoomOutUp{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:hidden}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:hidden}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:hidden}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:hidden}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:hidden}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:hidden}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:hidden}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:hidden}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.animated{-webkit-animation-duration:1s;-webkit-animation-fill-mode:both;animation-duration:1s;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s}.animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s}.animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s}.animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s}.animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s}.animated.fast{-webkit-animation-duration:.8s;animation-duration:.8s}.animated.faster{-webkit-animation-duration:.5s;animation-duration:.5s}.animated.slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.slower{-webkit-animation-duration:3s;animation-duration:3s}@media (prefers-reduced-motion){.animated{-webkit-animation:unset!important;-webkit-transition:none!important;animation:unset!important;transition:none!important}}
public/css/custom.css DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Strong Testimonials custom stylesheet
3
- *
4
- * Just a placeholder to allow use of wp_add_inline_style()
5
- */
 
 
 
 
 
public/js/controller.js CHANGED
@@ -1,7 +1,7 @@
1
  /**
2
  * Component Controller
3
  *
4
- * Version 1.1.0
5
  * For Strong Testimonials version 2.31
6
  *
7
  * @namespace window.strongControllerParms
@@ -125,6 +125,17 @@ var strongController = {
125
  this.iframes = jQuery('iframe');
126
  },
127
 
 
 
 
 
 
 
 
 
 
 
 
128
  /**
129
  * Create observer that reacts to nodes added or removed.
130
  *
@@ -260,6 +271,7 @@ var strongController = {
260
  strongController.initLayouts();
261
  strongController.initForm();
262
  strongController.initIframes();
 
263
  },
264
 
265
  /**
1
  /**
2
  * Component Controller
3
  *
4
+ * Version 1.2
5
  * For Strong Testimonials version 2.31
6
  *
7
  * @namespace window.strongControllerParms
125
  this.iframes = jQuery('iframe');
126
  },
127
 
128
+ /**
129
+ * Listen for custom events from other scripts.
130
+ */
131
+ customEvents: function () {
132
+ addEventListener( 'toggleFullContent', function (event) {
133
+ if (strongController.grids.length) {
134
+ strongController.grids.masonry();
135
+ }
136
+ });
137
+ },
138
+
139
  /**
140
  * Create observer that reacts to nodes added or removed.
141
  *
271
  strongController.initLayouts();
272
  strongController.initForm();
273
  strongController.initIframes();
274
+ strongController.customEvents();
275
  },
276
 
277
  /**
public/js/controller.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";var debugit=false;var strongController={grids:{},iframes:{},defaults:{initializeOn:"windowLoad",method:"",universalTimer:500,observerTimer:500,containerId:"page",addedNodeId:"content",event:"",script:"",debug:false},config:{},setup:function(settings){settings.universalTimer=parseInt(settings.universalTimer);settings.observerTimer=parseInt(settings.observerTimer);settings.debug=!!settings.debug;debugit=settings.debug;this.config=jQuery.extend({},this.defaults,settings)},mutationObserver:window.MutationObserver||window.WebKitMutationObserver,eventListenerSupported:window.addEventListener,checkInit:function(){return jQuery('.strong-view[data-state="idle"]').length},initSliders:function(){var sliders=jQuery('.strong-view.slider-container[data-state="idle"]');if(debugit)console.log("sliders found:",sliders.length);if(sliders.length){sliders.each(function(){jQuery(this).strongSlider()})}},initPagers:function(){var pagers=jQuery('.strong-pager[data-state="idle"]');if(debugit)console.log("pagers found:",pagers.length);if(pagers.length){pagers.each(function(){jQuery(this).strongPager()})}},initLayouts:function(){this.grids=jQuery('.strong-view[data-state="idle"] .strong-masonry');if(debugit)console.log("Masonry found:",this.grids.length);if(this.grids.length){this.grids.prepend('<div class="grid-sizer"></div><div class="gutter-sizer"></div>');this.grids.imagesLoaded(function(){strongController.grids.masonry({columnWidth:".grid-sizer",gutter:".gutter-sizer",itemSelector:".testimonial",percentPosition:true});strongController.grids.closest(".strong-view").attr("data-state","init")})}},initForm:function(){var forms=jQuery('.strong-form[data-state="idle"]');var messages=jQuery(".testimonial-success");if(debugit)console.log("forms found:",forms.length);if(debugit)console.log("messages found:",messages.length);if(forms.length||messages.length){strongValidation.init()}},initIframes:function(){this.iframes=jQuery("iframe")},observer:function(obj,callback){if(this.mutationObserver){var obs=new this.mutationObserver(function(mutations){for(var i=0;i<mutations.length;i++){if(mutations[i].addedNodes.length){if(debugit)console.log("mutation observed",mutations);for(var j=0;j<mutations[i].addedNodes.length;j++){if(mutations[i].addedNodes[j].id===strongController.config.containerId){if(debugit)console.log("+",strongController.config.containerId);callback();return}}}}});obs.observe(obj,{childList:true,subtree:true})}else if(this.eventListenerSupported){obj.addEventListener("DOMNodeInserted",function(e){if(e.currentTarget.id===obj.id){if(debugit)console.log("DOMNodeInserted:",e.currentTarget.id);callback()}},false)}},intervalId:null,timeoutId:null,newInterval:function(){strongController.intervalId=setInterval(function tick(){if(debugit)console.log("tick > checkInit",strongController.checkInit());if(strongController.checkInit()){strongController.start()}},strongController.config.universalTimer)},newTimeout:function(){strongController.timeoutId=setTimeout(function tick(){if(debugit)console.log("tick > checkInit",strongController.checkInit());if(strongController.checkInit()){strongController.start()}},strongController.config.observerTimer)},init:function(){if(debugit)console.log("strongController init");var settings={};if(typeof window.strongControllerParms!=="undefined"){settings=window.strongControllerParms}else{if(debugit)console.log("settings not found")}this.setup(settings);if(debugit)console.log("config",this.config);if("documentReady"===this.config.initializeOn){jQuery(document).ready(function(){if(debugit)console.log("document ready");strongController.start();strongController.listen()})}else{jQuery(window).on("load",function(){if(debugit)console.log("window load");strongController.start();strongController.listen()})}jQuery(window).on("load",function(){strongController.listenForIframeReady()})},start:function(){if(debugit)console.log("start");strongController.initSliders();strongController.initPagers();strongController.initLayouts();strongController.initForm();strongController.initIframes()},listen:function(){if(debugit)console.log("listen");switch(this.config.method){case"universal":this.newInterval();break;case"observer":this.observer(document.getElementById(this.config.containerId),this.newTimeout);break;case"event":document.addEventListener(this.config.event,this.start);break;case"script":switch(this.config.script){case"barba":if(typeof Barba==="object"&&Barba.hasOwnProperty("Dispatcher")){Barba.Dispatcher.on("transitionCompleted",this.start)}break;default:}break;default:}},listenForIframeReady:function(){if(debugit)console.log("listenForIframeReady");if(strongController.iframes.length&&strongController.grids.length){strongController.iframes.ready(function(){setTimeout(function(){strongController.grids.masonry();if(debugit)console.log("listenForIframeReady","timeout 1")},1e3);setTimeout(function(){strongController.grids.masonry();if(debugit)console.log("listenForIframeReady","timeout 2")},2e3)})}else{if(debugit)console.log("listenForIframeReady","no iframes or Masonry found")}}};strongController.init();
1
+ "use strict";var debugit=false;var strongController={grids:{},iframes:{},defaults:{initializeOn:"windowLoad",method:"",universalTimer:500,observerTimer:500,containerId:"page",addedNodeId:"content",event:"",script:"",debug:false},config:{},setup:function(settings){settings.universalTimer=parseInt(settings.universalTimer);settings.observerTimer=parseInt(settings.observerTimer);settings.debug=!!settings.debug;debugit=settings.debug;this.config=jQuery.extend({},this.defaults,settings)},mutationObserver:window.MutationObserver||window.WebKitMutationObserver,eventListenerSupported:window.addEventListener,checkInit:function(){return jQuery('.strong-view[data-state="idle"]').length},initSliders:function(){var sliders=jQuery('.strong-view.slider-container[data-state="idle"]');if(debugit)console.log("sliders found:",sliders.length);if(sliders.length){sliders.each(function(){jQuery(this).strongSlider()})}},initPagers:function(){var pagers=jQuery('.strong-pager[data-state="idle"]');if(debugit)console.log("pagers found:",pagers.length);if(pagers.length){pagers.each(function(){jQuery(this).strongPager()})}},initLayouts:function(){this.grids=jQuery('.strong-view[data-state="idle"] .strong-masonry');if(debugit)console.log("Masonry found:",this.grids.length);if(this.grids.length){this.grids.prepend('<div class="grid-sizer"></div><div class="gutter-sizer"></div>');this.grids.imagesLoaded(function(){strongController.grids.masonry({columnWidth:".grid-sizer",gutter:".gutter-sizer",itemSelector:".testimonial",percentPosition:true});strongController.grids.closest(".strong-view").attr("data-state","init")})}},initForm:function(){var forms=jQuery('.strong-form[data-state="idle"]');var messages=jQuery(".testimonial-success");if(debugit)console.log("forms found:",forms.length);if(debugit)console.log("messages found:",messages.length);if(forms.length||messages.length){strongValidation.init()}},initIframes:function(){this.iframes=jQuery("iframe")},customEvents:function(){addEventListener("toggleFullContent",function(event){if(strongController.grids.length){strongController.grids.masonry()}})},observer:function(obj,callback){if(this.mutationObserver){var obs=new this.mutationObserver(function(mutations){for(var i=0;i<mutations.length;i++){if(mutations[i].addedNodes.length){if(debugit)console.log("mutation observed",mutations);for(var j=0;j<mutations[i].addedNodes.length;j++){if(mutations[i].addedNodes[j].id===strongController.config.containerId){if(debugit)console.log("+",strongController.config.containerId);callback();return}}}}});obs.observe(obj,{childList:true,subtree:true})}else if(this.eventListenerSupported){obj.addEventListener("DOMNodeInserted",function(e){if(e.currentTarget.id===obj.id){if(debugit)console.log("DOMNodeInserted:",e.currentTarget.id);callback()}},false)}},intervalId:null,timeoutId:null,newInterval:function(){strongController.intervalId=setInterval(function tick(){if(debugit)console.log("tick > checkInit",strongController.checkInit());if(strongController.checkInit()){strongController.start()}},strongController.config.universalTimer)},newTimeout:function(){strongController.timeoutId=setTimeout(function tick(){if(debugit)console.log("tick > checkInit",strongController.checkInit());if(strongController.checkInit()){strongController.start()}},strongController.config.observerTimer)},init:function(){if(debugit)console.log("strongController init");var settings={};if(typeof window.strongControllerParms!=="undefined"){settings=window.strongControllerParms}else{if(debugit)console.log("settings not found")}this.setup(settings);if(debugit)console.log("config",this.config);if("documentReady"===this.config.initializeOn){jQuery(document).ready(function(){if(debugit)console.log("document ready");strongController.start();strongController.listen()})}else{jQuery(window).on("load",function(){if(debugit)console.log("window load");strongController.start();strongController.listen()})}jQuery(window).on("load",function(){strongController.listenForIframeReady()})},start:function(){if(debugit)console.log("start");strongController.initSliders();strongController.initPagers();strongController.initLayouts();strongController.initForm();strongController.initIframes();strongController.customEvents()},listen:function(){if(debugit)console.log("listen");switch(this.config.method){case"universal":this.newInterval();break;case"observer":this.observer(document.getElementById(this.config.containerId),this.newTimeout);break;case"event":document.addEventListener(this.config.event,this.start);break;case"script":switch(this.config.script){case"barba":if(typeof Barba==="object"&&Barba.hasOwnProperty("Dispatcher")){Barba.Dispatcher.on("transitionCompleted",this.start)}break;default:}break;default:}},listenForIframeReady:function(){if(debugit)console.log("listenForIframeReady");if(strongController.iframes.length&&strongController.grids.length){strongController.iframes.ready(function(){setTimeout(function(){strongController.grids.masonry();if(debugit)console.log("listenForIframeReady","timeout 1")},1e3);setTimeout(function(){strongController.grids.masonry();if(debugit)console.log("listenForIframeReady","timeout 2")},2e3)})}else{if(debugit)console.log("listenForIframeReady","no iframes or Masonry found")}}};strongController.init();
public/js/lib/form-validation/form-validation.js CHANGED
@@ -1,7 +1,5 @@
1
  /**
2
  * Submission form validation
3
- *
4
- * @package Strong_Testimonials
5
  */
6
 
7
  var strongValidation = {
1
  /**
2
  * Submission form validation
 
 
3
  */
4
 
5
  var strongValidation = {
public/js/lib/readmore/readmore.js ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * readmore.js
3
+ *
4
+ * @param toggleButtonText
5
+ * @param toggleButtonText.dataset
6
+ * @param toggleButtonText.dataset.moreText
7
+ * @param toggleButtonText.dataset.lessText
8
+ */
9
+
10
+ (function () {
11
+
12
+ /*
13
+ * forEach method
14
+ * thanks https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/
15
+ */
16
+ var forEach = function (array, callback, scope) {
17
+ for (var i = 0; i < array.length; i++) {
18
+ callback.call(scope, i, array[i]); // passes back stuff we need
19
+ }
20
+ };
21
+
22
+ /*
23
+ * Do stuff at the end of animation.
24
+ */
25
+ var onAnimationEnd = function (event) {
26
+ if (event.type === 'animationend' && event.animationName === 'fadeOutUp') {
27
+ // Add `hidden` attribute
28
+ event.target.setAttribute('hidden', 'true');
29
+
30
+ // Show read-more link
31
+ event.target.parentElement.querySelector('.readmore-toggle').style.display = 'inline';
32
+
33
+ // Show ellipsis
34
+ var ellipsis = event.target.parentElement.querySelector('.ellipsis');
35
+ if (ellipsis) {
36
+ ellipsis.style.display = 'inline';
37
+ }
38
+
39
+ fireCustomEvent();
40
+ }
41
+ };
42
+
43
+ var fireCustomEvent = function () {
44
+ window.dispatchEvent(new Event('toggleFullContent'));
45
+ };
46
+
47
+ // Only in modern browsers.
48
+ if ('querySelector' in document && 'addEventListener' in window) {
49
+
50
+ // Listen for an animation.
51
+ var fullTextWrappers = document.querySelectorAll('.readmore-content');
52
+
53
+ forEach(fullTextWrappers, function (index, fullTextWrapper) {
54
+ fullTextWrapper.addEventListener('transitionend', onAnimationEnd);
55
+ fullTextWrapper.addEventListener('animationend', onAnimationEnd);
56
+ });
57
+
58
+ // Listen to each button.
59
+ var toggleButtons = document.querySelectorAll('.readmore-toggle');
60
+
61
+ forEach(toggleButtons, function (index, toggleButton) {
62
+
63
+ toggleButton.addEventListener('click', function () {
64
+
65
+ var fullTextWrapper = this.parentElement.querySelector('.readmore-content');
66
+ if (!fullTextWrapper) {
67
+ return;
68
+ }
69
+
70
+ var ellipsis = this.parentElement.querySelector('.ellipsis');
71
+ var toggleButtonText = this.querySelector('.readmore-text');
72
+
73
+ // change attributes and text if full text is shown/hidden
74
+ if (fullTextWrapper.hasAttribute('hidden')) {
75
+
76
+ // show
77
+
78
+ // 1. remove hidden attribute so we can animate it
79
+ fullTextWrapper.removeAttribute('hidden');
80
+
81
+ // 2. update toggle link
82
+ // change text (may be blank)
83
+ toggleButtonText.innerText = toggleButtonText.dataset.lessText;
84
+ toggleButton.setAttribute('aria-expanded', true);
85
+ if( ellipsis ) {
86
+ ellipsis.style.display = 'none';
87
+ }
88
+
89
+ // 3. animate it
90
+ fullTextWrapper.classList.add('fadeInDown');
91
+ fullTextWrapper.classList.remove('fadeOutUp');
92
+ fullTextWrapper.classList.remove('faster');
93
+
94
+ fireCustomEvent();
95
+
96
+ } else {
97
+
98
+ // hide
99
+
100
+ // 1. update toggle link
101
+ // hide link during transition
102
+ toggleButton.style.display = 'none'
103
+ toggleButton.setAttribute('aria-expanded', false);
104
+ // change link text (may be blank)
105
+ toggleButtonText.innerText = toggleButtonText.dataset.moreText;
106
+
107
+ // 2. animate it
108
+ fullTextWrapper.classList.add('fadeOutUp');
109
+ fullTextWrapper.classList.add('faster');
110
+ fullTextWrapper.classList.remove('fadeInDown');
111
+
112
+ // 3. do stuff at end of animation (the event listener above)
113
+
114
+ }
115
+
116
+ });
117
+
118
+ });
119
+
120
+ }
121
+
122
+ })();
public/js/lib/readmore/readmore.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(){var forEach=function(array,callback,scope){for(var i=0;i<array.length;i++){callback.call(scope,i,array[i])}};var onAnimationEnd=function(event){if(event.type==="animationend"&&event.animationName==="fadeOutUp"){event.target.setAttribute("hidden","true");event.target.parentElement.querySelector(".readmore-toggle").style.display="inline";var ellipsis=event.target.parentElement.querySelector(".ellipsis");if(ellipsis){ellipsis.style.display="inline"}fireCustomEvent()}};var fireCustomEvent=function(){window.dispatchEvent(new Event("toggleFullContent"))};if("querySelector"in document&&"addEventListener"in window){var fullTextWrappers=document.querySelectorAll(".readmore-content");forEach(fullTextWrappers,function(index,fullTextWrapper){fullTextWrapper.addEventListener("transitionend",onAnimationEnd);fullTextWrapper.addEventListener("animationend",onAnimationEnd)});var toggleButtons=document.querySelectorAll(".readmore-toggle");forEach(toggleButtons,function(index,toggleButton){toggleButton.addEventListener("click",function(){var fullTextWrapper=this.parentElement.querySelector(".readmore-content");if(!fullTextWrapper){return}var ellipsis=this.parentElement.querySelector(".ellipsis");var toggleButtonText=this.querySelector(".readmore-text");if(fullTextWrapper.hasAttribute("hidden")){fullTextWrapper.removeAttribute("hidden");toggleButtonText.innerText=toggleButtonText.dataset.lessText;toggleButton.setAttribute("aria-expanded",true);if(ellipsis){ellipsis.style.display="none"}fullTextWrapper.classList.add("fadeInDown");fullTextWrapper.classList.remove("fadeOutUp");fullTextWrapper.classList.remove("faster");fireCustomEvent()}else{toggleButton.style.display="none";toggleButton.setAttribute("aria-expanded",false);toggleButtonText.innerText=toggleButtonText.dataset.moreText;fullTextWrapper.classList.add("fadeOutUp");fullTextWrapper.classList.add("faster");fullTextWrapper.classList.remove("fadeInDown")}})})}})();
public/js/lib/strongslider/jquery.strongslider.js CHANGED
@@ -588,6 +588,7 @@
588
 
589
  window.addEventListener('resize', updateLayout, false);
590
  window.addEventListener('orientationchange', updateLayout, false);
 
591
 
592
  // Test this with dev console closed
593
  // (or click in the document once to establish focus).
588
 
589
  window.addEventListener('resize', updateLayout, false);
590
  window.addEventListener('orientationchange', updateLayout, false);
591
+ window.addEventListener('toggleFullContent', updateLayout, false);
592
 
593
  // Test this with dev console closed
594
  // (or click in the document once to establish focus).
public/js/lib/strongslider/jquery.strongslider.min.js CHANGED
@@ -1 +1 @@
1
- (function($){var defaults={debug:false,logAs:"strongSlider",compat:{lazyload:{active:false,classes:{}}},mode:"horizontal",slideSelector:"div.t-slide",infiniteLoop:true,hideControlOnEnd:false,speed:500,easing:null,slideMargin:10,startSlide:0,randomStart:false,captions:false,adaptiveHeight:false,adaptiveHeightSpeed:500,video:false,useCSS:true,preloadImages:"visible",responsive:true,slideZIndex:50,wrapperClass:"wpmslider-wrapper",stretch:false,imagesLoaded:true,touchEnabled:true,swipeThreshold:50,oneToOneTouch:true,preventDefaultSwipeX:true,preventDefaultSwipeY:false,ariaLive:true,ariaHidden:true,keyboardEnabled:false,pager:true,pagerType:"full",pagerShortSeparator:" / ",pagerSelector:null,buildPager:null,pagerCustom:null,controls:true,nextText:"Next",prevText:"Prev",nextSelector:null,prevSelector:null,autoControls:false,startText:"Start",stopText:"Stop",autoControlsCombine:false,autoControlsSelector:null,auto:true,pause:4e3,autoStart:true,autoDirection:"next",stopAutoOnClick:false,autoHover:false,autoDelay:0,autoSlideForOnePage:false,minSlides:1,maxSlides:1,moveSlides:0,onSliderLoad:function(){return true},onSlideBefore:function(){return true},onSlideAfter:function(){return true},onSlideNext:function(){return true},onSlidePrev:function(){return true},onSliderResize:function(){return true},onAutoChange:function(){return true}};$.fn.strongSlider=function(options){if(this.length===0){return this}var slider={},viewEl=this,el=this.find(".wpmslider-content");if($(el).data("strongSlider")){return}var init=function(){if($(el).data("strongSlider")){return}slider.visibilityInterval=0;slider.hidden=false;var sliderVar=viewEl.data("slider-var");var config={};if(typeof window[sliderVar]!=="undefined"){config=window[sliderVar].config}slider.settings=$.extend({},defaults,config,options);slider.debug=slider.settings.debug;slider.logAs=slider.settings.logAs;if(slider.debug)console.log(slider.logAs,"slider.settings",slider.settings);slider.children=el.children(slider.settings.slideSelector);if(slider.children.length<slider.settings.minSlides){slider.settings.minSlides=slider.children.length}if(slider.children.length<slider.settings.maxSlides){slider.settings.maxSlides=slider.children.length}if(slider.settings.randomStart){slider.settings.startSlide=Math.floor(Math.random()*slider.children.length)}slider.active={index:slider.settings.startSlide};setBreakpoint();if(slider.carousel){slider.settings.preloadImages="all"}slider.working=false;slider.controls={};slider.interval=null;slider.animProp=slider.settings.mode==="vertical"?"top":"left";slider.usingCSS=slider.settings.useCSS&&slider.settings.mode!=="fade"&&function(){var div=document.createElement("div"),props=["WebkitPerspective","MozPerspective","OPerspective","msPerspective"];for(var i=0;i<props.length;i++){if(div.style[props[i]]!==undefined){slider.cssPrefix=props[i].replace("Perspective","").toLowerCase();slider.animProp="-"+slider.cssPrefix+"-transform";return true}}return false}();if(slider.settings.mode==="vertical"){slider.settings.maxSlides=slider.settings.minSlides}el.data("origStyle",el.attr("style"));el.children(slider.settings.slideSelector).each(function(){$(this).data("origStyle",$(this).attr("style"))});if(!el.getSlideCount()){return}if(slider.settings.imagesLoaded){viewEl.imagesLoaded(function(){initVisibilityCheck()})}else{initVisibilityCheck()}};var reallyVisible=function(){return viewEl.is(":visible")&&viewEl.css("visibility")!=="hidden"};var compatCheck=function(){if(slider.settings.compat.lazyload){var inProgress=false;for(var i=0,len=slider.settings.compat.lazyload.classes.length;i<len;i++){var startClass=slider.settings.compat.lazyload.classes[i].start;var finishClass=slider.settings.compat.lazyload.classes[i].finish;if(startClass&&finishClass){if(viewEl.find("img."+startClass).length&&!viewEl.find("img."+finishClass).length){inProgress=true}}else if(startClass){if(viewEl.find("img."+startClass).length){inProgress=true}}else if(finishClass){if(!viewEl.find("img."+finishClass).length){inProgress=true}}}if(inProgress){if(slider.debug)console.log(slider.logAs,"lazy loading...");return false}}if(slider.debug)console.log(slider.logAs,"compat check complete");return true};var initVisibilityCheck=function(){if(reallyVisible()&&compatCheck()){clearInterval(slider.visibilityInterval);setup()}else{if(slider.visibilityInterval===0){slider.visibilityInterval=setInterval(initVisibilityCheck,1e3*4)}}};var setup=function(){var preloadSelector=slider.children.eq(slider.settings.startSlide);el.wrap('<div class="'+slider.settings.wrapperClass+'"><div class="wpmslider-viewport"></div></div>');slider.viewport=el.parent();if(slider.settings.ariaLive){slider.viewport.attr("aria-live","polite")}slider.loader=$('<div class="wpmslider-loading" />');slider.viewport.prepend(slider.loader);el.css({width:slider.settings.mode==="horizontal"?slider.children.length*1e3+215+"%":"auto",position:"relative"});if(slider.usingCSS&&slider.settings.easing){el.css("-"+slider.cssPrefix+"-transition-timing-function",slider.settings.easing)}else if(!slider.settings.easing){slider.settings.easing="swing"}slider.viewport.css({width:"100%",overflow:"hidden",position:"relative"});slider.viewport.parent().css({maxWidth:getViewportMaxWidth2()});if(!slider.settings.pager&&!slider.settings.controls){slider.viewport.parent().css({margin:"0 auto"})}slider.children.css({float:slider.settings.mode==="horizontal"?"left":"none",listStyle:"none",position:"relative"});updateWidth();if(slider.settings.mode==="horizontal"&&slider.settings.slideMargin>0){slider.children.css("marginRight",slider.settings.slideMargin)}if(slider.settings.mode==="vertical"&&slider.settings.slideMargin>0){slider.children.css("marginBottom",slider.settings.slideMargin)}if(slider.settings.mode==="fade"){slider.children.css({position:"absolute",zIndex:0,display:"none"});slider.children.eq(slider.settings.startSlide).css({zIndex:slider.settings.slideZIndex,display:"block"})}else{slider.children.css({display:"block"})}slider.controls.el=$('<div class="wpmslider-controls" />');if(slider.settings.captions){appendCaptions()}slider.active.last=slider.settings.startSlide===getPagerQty()-1;if(slider.settings.video){el.fitVids()}if(slider.settings.preloadImages==="none"){preloadSelector=null}else if(slider.settings.preloadImages==="all"){preloadSelector=slider.children}if(slider.settings.controls){appendControlPrev()}if(slider.settings.auto&&slider.settings.autoControls){appendControlsAuto()}if(slider.settings.pager){appendPager()}if(slider.settings.controls){appendControlNext()}if(slider.settings.controls||slider.settings.autoControls||slider.settings.pager){slider.viewport.after(slider.controls.el)}if(preloadSelector===null){start()}else{loadElements(preloadSelector,start)}};var setBreakpoint=function(){if(slider.debug)console.log(slider.logAs,"setBreakpoint");var currentBreakpoint=slider.settings.breakpoints.single;var breakpoints=slider.settings.breakpoints.multiple;if(slider.settings.type==="show_multiple"){for(var key in breakpoints){if(breakpoints.hasOwnProperty(key)){if(verge.viewportW()>=breakpoints[key].width){currentBreakpoint=breakpoints[key];break}}}}if(slider.debug)console.log("current breakpoint",currentBreakpoint);slider.settings.maxSlides=currentBreakpoint.maxSlides;slider.settings.moveSlides=currentBreakpoint.moveSlides;slider.settings.slideMargin=currentBreakpoint.slideMargin;slider.carousel=slider.settings.minSlides>1||slider.settings.maxSlides>1};var updateWidth=function(){setBreakpoint();slider.children.css("width",getSlideWidth2())};var loadElements=function(selector,callback){var total=selector.find('img:not([src=""]), iframe').length,count=0;if(total===0){callback();return}selector.find('img:not([src=""]), iframe').each(function(){$(this).one("load error",function(){if(++count===total){callback()}}).each(function(){if(this.complete||this.src===""){$(this).trigger("load")}})})};var start=function(){if(slider.settings.infiniteLoop&&slider.settings.mode!=="fade"){var slice=slider.settings.mode==="vertical"?slider.settings.minSlides:slider.settings.maxSlides,sliceAppend=slider.children.slice(0,slice).clone(true).addClass("wpmslider-clone"),slicePrepend=slider.children.slice(-slice).clone(true).addClass("wpmslider-clone");if(slider.settings.ariaHidden){sliceAppend.attr("aria-hidden",true);slicePrepend.attr("aria-hidden",true)}el.append(sliceAppend).prepend(slicePrepend)}slider.loader.remove();if(slider.settings.mode==="vertical"){slider.settings.adaptiveHeight=true}el.redrawSlider();slider.settings.onSliderLoad.call(el,slider.active.index);slider.initialized=true;slider.visibilityInterval=setInterval(visibilityCheck,500);if(slider.settings.responsive){attachListeners()}if(slider.settings.auto&&slider.settings.autoStart&&(getPagerQty()>1||slider.settings.autoSlideForOnePage)){initAuto()}if(slider.settings.pager){updatePagerActive(slider.settings.startSlide)}if(slider.settings.controls){updateDirectionControls()}if(slider.settings.touchEnabled){initTouch()}if(slider.settings.keyboardEnabled){$(document).keydown(keyPress)}};var attachListeners=function(){window.addEventListener("resize",updateLayout,false);window.addEventListener("orientationchange",updateLayout,false);window.addEventListener("blur",function(){pauseEvent("blur")});window.addEventListener("focus",function(){playEvent("blur")})};var updateLayout=_.debounce(function(){if(slider.debug)console.log(slider.logAs,"updateLayout");resizeWindow()},250);var visibilityCheck=function(){if(!slider.settings.auto){return}if(!reallyVisible()){pauseEvent("hide")}else{playEvent("hide")}if(!verge.inViewport(el)){pauseEvent("scroll")}else{playEvent("scroll")}};var pauseEvent=function(action){if(slider.interval){el.stopAuto(true);slider.autoPaused=action;if(slider.debug)console.log(slider.logAs,"pause",action)}};var playEvent=function(action){if(slider.autoPaused===action){el.startAuto(true);slider.autoPaused=null;if(slider.debug)console.log(slider.logAs,"play",action)}};var setSlideHeight=function(){var heights=slider.children.map(function(){return jQuery(this).actual("outerHeight")}).get();var maxHeight=arrayMax(heights);slider.children.height(maxHeight)};var unsetSlideHeight=function(){slider.children.height("auto")};var arrayMax=function(array){return Math.max.apply(Math,array)};var getViewportHeight=function(){var height=0;var children=$();if(slider.settings.mode!=="vertical"&&!slider.settings.adaptiveHeight){children=slider.children}else{if(!slider.carousel){children=slider.children.eq(slider.active.index)}else{var currentIndex=slider.settings.moveSlides===1?slider.active.index:slider.active.index*getMoveBy();children=slider.children.eq(currentIndex);for(var i=1;i<=slider.settings.maxSlides-1;i++){if(currentIndex+i>=slider.children.length){children=children.add(slider.children.eq(i-1))}else{children=children.add(slider.children.eq(currentIndex+i))}}}}if(slider.settings.mode==="vertical"){children.each(function(index){height+=$(this).outerHeight()});if(slider.settings.slideMargin>0){height+=slider.settings.slideMargin*(slider.settings.minSlides-1)}}else{height=Math.max.apply(Math,children.map(function(){return $(this).outerHeight(false)}).get())}if(slider.viewport.css("box-sizing")==="border-box"){height+=parseFloat(slider.viewport.css("padding-top"))+parseFloat(slider.viewport.css("padding-bottom"))+parseFloat(slider.viewport.css("border-top-width"))+parseFloat(slider.viewport.css("border-bottom-width"))}else if(slider.viewport.css("box-sizing")==="padding-box"){height+=parseFloat(slider.viewport.css("padding-top"))+parseFloat(slider.viewport.css("padding-bottom"))}return height};var setViewportHeight=function(){slider.viewport.height(getViewportHeight()+2)};var getViewportMaxWidth2=function(){return"100%"};var getSlideWidth2=function(){var wrapWidth=slider.viewport.width();var margins=slider.settings.slideMargin*(slider.settings.maxSlides-1);return Math.floor((wrapWidth-margins)/slider.settings.maxSlides)};var getNumberSlidesShowing2=function(){return slider.settings.maxSlides};var getPagerQty=function(){var pagerQty=0,breakPoint=0,counter=0;if(slider.settings.moveSlides>0){if(slider.settings.infiniteLoop){pagerQty=Math.ceil(slider.children.length/getMoveBy())}else{while(breakPoint<slider.children.length){++pagerQty;breakPoint=counter+getNumberSlidesShowing2();counter+=slider.settings.moveSlides<=getNumberSlidesShowing2()?slider.settings.moveSlides:getNumberSlidesShowing2()}return counter}}else{pagerQty=Math.ceil(slider.children.length/getNumberSlidesShowing2())}return pagerQty};var getMoveBy=function(){if(slider.settings.moveSlides>0&&slider.settings.moveSlides<=getNumberSlidesShowing2()){return slider.settings.moveSlides}return getNumberSlidesShowing2()};var setSlidePosition=function(){var position,lastChild,lastShowingIndex;if(slider.children.length>slider.settings.maxSlides&&slider.active.last&&!slider.settings.infiniteLoop){if(slider.settings.mode==="horizontal"){lastChild=slider.children.last();position=lastChild.position();setPositionProperty(-(position.left-(slider.viewport.width()-lastChild.outerWidth())),"reset",0)}else if(slider.settings.mode==="vertical"){lastShowingIndex=slider.children.length-slider.settings.minSlides;position=slider.children.eq(lastShowingIndex).position();setPositionProperty(-position.top,"reset",0)}}else{position=slider.children.eq(slider.active.index*getMoveBy()).position();if(slider.active.index===getPagerQty()-1){slider.active.last=true}if(position!==undefined){if(slider.settings.mode==="horizontal"){setPositionProperty(-position.left,"reset",0)}else if(slider.settings.mode==="vertical"){setPositionProperty(-position.top,"reset",0)}else if(slider.settings.mode==="none"){setPositionProperty(-position.top,"reset",0)}}}};var setPositionProperty=function(value,type,duration,params){var animateObj,propValue;if(slider.usingCSS){if(slider.settings.mode==="vertical"){propValue="translateY("+value+"px)"}else if(slider.settings.mode==="horizontal"){propValue="translateX("+value+"px"}else if(slider.settings.mode==="none"){propValue="translateY("+value+"px)";duration=0}el.css("-"+slider.cssPrefix+"-transition-duration",duration/1e3+"s");if(type==="slide"){el.css(slider.animProp,propValue);if(duration!==0){el.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(e){if(!$(e.target).is(el)){return}el.off("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd");updateAfterSlideTransition()})}else{updateAfterSlideTransition()}}else if(type==="reset"){el.css(slider.animProp,propValue)}}else{animateObj={};animateObj[slider.animProp]=value;if(type==="slide"){el.animate(animateObj,duration,slider.settings.easing,function(){updateAfterSlideTransition()})}else if(type==="reset"){el.css(slider.animProp,value)}}};var populatePager=function(){var pagerHtml="",linkContent="",pagerQty=getPagerQty();for(var i=0;i<pagerQty;i++){linkContent="";if(slider.settings.buildPager){if(slider.settings.buildPager==="icons"){linkContent=""}if($.isFunction(slider.settings.buildPager)||slider.settings.pagerCustom){linkContent=slider.settings.buildPager(i)}slider.pagerEl.addClass("wpmslider-custom-pager")}else{linkContent=i+1;slider.pagerEl.addClass("wpmslider-default-pager")}pagerHtml+='<div class="wpmslider-pager-item"><a href="" data-slide-index="'+i+'" class="wpmslider-pager-link">'+linkContent+"</a></div>"}slider.pagerEl.html(pagerHtml)};var appendPager=function(){if(!slider.settings.pagerCustom){slider.pagerEl=$('<div class="wpmslider-pager" />');if(slider.settings.pagerSelector){$(slider.settings.pagerSelector).html(slider.pagerEl)}else{slider.controls.el.addClass("wpmslider-has-pager").append(slider.pagerEl)}populatePager()}else{slider.pagerEl=$(slider.settings.pagerCustom)}slider.pagerEl.on("click touchend","a",clickPagerBind)};var appendControlPrev=function(){slider.controls.prev=$('<a class="wpmslider-prev" href="">'+slider.settings.prevText+"</a>");slider.controls.prev.on("click touchend",clickPrevBind);if(slider.settings.prevSelector){$(slider.settings.prevSelector).append(slider.controls.prev)}if(!slider.settings.prevSelector){slider.controls.directionEl=$('<div class="wpmslider-controls-direction" />');slider.controls.directionEl.append(slider.controls.prev);slider.controls.el.addClass("wpmslider-has-controls-direction").append(slider.controls.directionEl)}};var appendControlNext=function(){slider.controls.next=$('<a class="wpmslider-next" href="">'+slider.settings.nextText+"</a>");slider.controls.next.on("click touchend",clickNextBind);if(slider.settings.nextSelector){$(slider.settings.nextSelector).append(slider.controls.next)}if(!slider.settings.nextSelector){slider.controls.directionEl=$('<div class="wpmslider-controls-direction" />');slider.controls.directionEl.append(slider.controls.next);slider.controls.el.addClass("wpmslider-has-controls-direction").append(slider.controls.directionEl)}};var appendControlsAuto=function(){slider.controls.start=$('<div class="wpmslider-controls-auto-item"><a class="wpmslider-start" href="">'+slider.settings.startText+"</a></div>");slider.controls.stop=$('<div class="wpmslider-controls-auto-item"><a class="wpmslider-stop" href="">'+slider.settings.stopText+"</a></div>");slider.controls.autoEl=$('<div class="wpmslider-controls-auto" />');slider.controls.autoEl.on("click",".wpmslider-start",clickStartBind);slider.controls.autoEl.on("click",".wpmslider-stop",clickStopBind);if(slider.settings.autoControlsCombine){slider.controls.autoEl.append(slider.controls.start)}else{slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop)}if(slider.settings.autoControlsSelector){$(slider.settings.autoControlsSelector).html(slider.controls.autoEl)}else{slider.controls.el.addClass("wpmslider-has-controls-auto").append(slider.controls.autoEl)}updateAutoControls(slider.settings.autoStart?"stop":"start")};var appendCaptions=function(){slider.children.each(function(index){var title=$(this).find("img:first").attr("title");if(title!==undefined&&(""+title).length){$(this).append('<div class="wpmslider-caption"><span>'+title+"</span></div>")}})};var clickNextBind=function(e){e.preventDefault();e.stopPropagation();if(slider.controls.el.hasClass("disabled")){return}if(slider.settings.auto&&slider.settings.stopAutoOnClick){if(slider.debug)console.log(slider.logAs,"stop on navigation");el.stopAuto()}el.goToNextSlide()};var clickPrevBind=function(e){e.preventDefault();e.stopPropagation();if(slider.controls.el.hasClass("disabled")){return}if(slider.settings.auto&&slider.settings.stopAutoOnClick){if(slider.debug)console.log(slider.logAs,"stop on navigation");el.stopAuto()}el.goToPrevSlide()};var clickStartBind=function(e){el.startAuto();e.preventDefault();e.stopPropagation()};var clickStopBind=function(e){el.stopAuto();e.preventDefault();e.stopPropagation()};var clickPagerBind=function(e){var pagerLink,pagerIndex;e.preventDefault();e.stopPropagation();if(slider.controls.el.hasClass("disabled")){return}if(slider.settings.auto&&slider.settings.stopAutoOnClick){if(slider.debug)console.log(slider.logAs,"stop on navigation");el.stopAuto()}pagerLink=$(e.currentTarget);if(pagerLink.attr("data-slide-index")!==undefined){pagerIndex=parseInt(pagerLink.attr("data-slide-index"));if(pagerIndex!==slider.active.index){el.goToSlide(pagerIndex)}}};var updatePagerActive=function(slideIndex){var len=slider.children.length;if(slider.settings.pagerType==="short"){if(slider.settings.maxSlides>1){len=Math.ceil(slider.children.length/slider.settings.maxSlides)}slider.pagerEl.html(slideIndex+1+slider.settings.pagerShortSeparator+len);return}slider.pagerEl.find("a").removeClass("active");slider.pagerEl.each(function(i,el){$(el).find("a").eq(slideIndex).addClass("active")})};var updateAfterSlideTransition=function(){if(slider.settings.infiniteLoop){var position="";if(slider.active.index===0){position=slider.children.eq(0).position()}else if(slider.active.index===getPagerQty()-1&&slider.carousel){position=slider.children.eq((getPagerQty()-1)*getMoveBy()).position()}else if(slider.active.index===slider.children.length-1){position=slider.children.eq(slider.children.length-1).position()}if(position){if(slider.settings.mode==="horizontal"){setPositionProperty(-position.left,"reset",0)}else if(slider.settings.mode==="vertical"){setPositionProperty(-position.top,"reset",0)}}}slider.working=false;slider.settings.onSlideAfter.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index)};var updateAutoControls=function(state){if(slider.settings.autoControlsCombine){slider.controls.autoEl.html(slider.controls[state])}else{slider.controls.autoEl.find("a").removeClass("active");slider.controls.autoEl.find("a:not(.wpmslider-"+state+")").addClass("active")}};var updateDirectionControls=function(){if(getPagerQty()===1){slider.controls.prev.addClass("disabled");slider.controls.next.addClass("disabled")}else if(!slider.settings.infiniteLoop&&slider.settings.hideControlOnEnd){if(slider.active.index===0){slider.controls.prev.addClass("disabled");slider.controls.next.removeClass("disabled")}else if(slider.active.index===getPagerQty()-1){slider.controls.next.addClass("disabled");slider.controls.prev.removeClass("disabled")}else{slider.controls.prev.removeClass("disabled");slider.controls.next.removeClass("disabled")}}};var initAuto=function(){if(slider.settings.autoDelay>0){setTimeout(el.startAuto,slider.settings.autoDelay)}else{el.startAuto()}if(slider.settings.autoHover){el.hover(function(){pauseEvent("hover")},function(){playEvent("hover")})}};var keyPress=function(e){var activeElementTag=document.activeElement.tagName.toLowerCase(),tagFilters="input|textarea",p=new RegExp(activeElementTag,["i"]),result=p.exec(tagFilters);if(result===null&&verge.inViewport(el)){if(e.keyCode===39){clickNextBind(e);return false}else if(e.keyCode===37){clickPrevBind(e);return false}}};var initTouch=function(){slider.touch={start:{x:0,y:0},end:{x:0,y:0}};slider.viewport.on("touchstart MSPointerDown pointerdown",onTouchStart);slider.viewport.on("click",".wpmslider a",function(e){if(slider.viewport.hasClass("click-disabled")){e.preventDefault();e.stopPropagation();slider.viewport.removeClass("click-disabled")}})};var onTouchStart=function(e){if(e.type!=="touchstart"&&e.button!==0){return}slider.controls.el.addClass("disabled");if(slider.working){e.preventDefault();e.stopPropagation();slider.controls.el.removeClass("disabled")}else{slider.touch.originalPos=el.position();var orig=e.originalEvent,touchPoints=typeof orig.changedTouches!=="undefined"?orig.changedTouches:[orig];var chromePointerEvents=typeof PointerEvent==="function";if(chromePointerEvents){if(orig.pointerId===undefined){return}}slider.touch.start.x=touchPoints[0].pageX;slider.touch.start.y=touchPoints[0].pageY;if(slider.viewport.get(0).setPointerCapture){slider.pointerId=orig.pointerId;slider.viewport.get(0).setPointerCapture(slider.pointerId)}slider.originalClickTarget=orig.originalTarget||orig.target;slider.originalClickButton=orig.button;slider.originalClickButtons=orig.buttons;slider.originalEventType=orig.type;slider.hasMove=false;slider.viewport.on("touchmove MSPointerMove pointermove",onTouchMove);slider.viewport.on("touchend MSPointerUp pointerup",onTouchEnd);slider.viewport.on("MSPointerCancel pointercancel",onPointerCancel)}};var onPointerCancel=function(e){e.preventDefault();setPositionProperty(slider.touch.originalPos.left,"reset",0);slider.controls.el.removeClass("disabled");slider.viewport.off("MSPointerCancel pointercancel",onPointerCancel);slider.viewport.off("touchmove MSPointerMove pointermove",onTouchMove);slider.viewport.off("touchend MSPointerUp pointerup",onTouchEnd);if(slider.viewport.get(0).releasePointerCapture){slider.viewport.get(0).releasePointerCapture(slider.pointerId)}};var onTouchMove=function(e){var orig=e.originalEvent,touchPoints=typeof orig.changedTouches!=="undefined"?orig.changedTouches:[orig],xMovement=Math.abs(touchPoints[0].pageX-slider.touch.start.x),yMovement=Math.abs(touchPoints[0].pageY-slider.touch.start.y),value=0,change=0;slider.hasMove=true;if(xMovement*3>yMovement&&slider.settings.preventDefaultSwipeX){e.preventDefault();e.stopPropagation()}else if(yMovement*3>xMovement&&slider.settings.preventDefaultSwipeY){e.preventDefault();e.stopPropagation()}if(e.type!=="touchmove"){e.preventDefault()}if(slider.settings.mode!=="fade"&&slider.settings.oneToOneTouch){if(slider.settings.mode==="horizontal"){change=touchPoints[0].pageX-slider.touch.start.x;value=slider.touch.originalPos.left+change}else{change=touchPoints[0].pageY-slider.touch.start.y;value=slider.touch.originalPos.top+change}setPositionProperty(value,"reset",0)}};var onTouchEnd=function(e){e.preventDefault();slider.viewport.off("touchmove MSPointerMove pointermove",onTouchMove);slider.controls.el.removeClass("disabled");var orig=e.originalEvent,touchPoints=typeof orig.changedTouches!=="undefined"?orig.changedTouches:[orig],value=0,distance=0;slider.touch.end.x=touchPoints[0].pageX;slider.touch.end.y=touchPoints[0].pageY;if(slider.settings.mode==="fade"){distance=Math.abs(slider.touch.start.x-slider.touch.end.x);if(distance>=slider.settings.swipeThreshold){if(slider.touch.start.x>slider.touch.end.x){el.goToNextSlide()}else{el.goToPrevSlide()}el.stopAuto()}}else{if(slider.settings.mode==="horizontal"){distance=slider.touch.end.x-slider.touch.start.x;value=slider.touch.originalPos.left}else{distance=slider.touch.end.y-slider.touch.start.y;value=slider.touch.originalPos.top}if(!slider.settings.infiniteLoop&&(slider.active.index===0&&distance>0||slider.active.last&&distance<0)){setPositionProperty(value,"reset",200)}else{if(Math.abs(distance)>=slider.settings.swipeThreshold){if(distance<0){el.goToNextSlide()}else{el.goToPrevSlide()}el.stopAuto()}else{setPositionProperty(value,"reset",200)}}}slider.viewport.off("touchend MSPointerUp pointerup",onTouchEnd);if(slider.viewport.get(0).releasePointerCapture){slider.viewport.get(0).releasePointerCapture(slider.pointerId)}if(slider.hasMove===false&&(slider.originalClickButton===0||slider.originalEventType==="touchstart")){$(slider.originalClickTarget).trigger({type:"click",button:slider.originalClickButton,buttons:slider.originalClickButtons})}};var resizeWindow=function(e){if(!slider.initialized){if(slider.debug)console.log(slider.logAs,"slider not initialized");return}if(slider.working){if(slider.debug)console.log(slider.logAs,"slider working");window.setTimeout(resizeWindow,10)}else{el.redrawSlider();slider.settings.onSliderResize.call(el,slider.active.index)}};var applyAriaHiddenAttributes=function(startVisibleIndex){var numberOfSlidesShowing=getNumberSlidesShowing2();if(slider.settings.ariaHidden){slider.children.attr("aria-hidden","true");slider.children.slice(startVisibleIndex,startVisibleIndex+numberOfSlidesShowing).attr("aria-hidden","false")}};var setSlideIndex=function(slideIndex){if(slideIndex<0){if(slider.settings.infiniteLoop){return getPagerQty()-1}else{return slider.active.index}}else if(slideIndex>=getPagerQty()){if(slider.settings.infiniteLoop){return 0}else{return slider.active.index}}else{return slideIndex}};el.goToSlide=function(slideIndex,direction){var performTransition=true,moveBy=0,position={left:0,top:0},lastChild=null,lastShowingIndex,eq,value,requestEl;slider.oldIndex=slider.active.index;slider.active.index=setSlideIndex(slideIndex);if(slider.working||slider.active.index===slider.oldIndex){return}slider.working=true;performTransition=slider.settings.onSlideBefore.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index);if(typeof performTransition!=="undefined"&&!performTransition){slider.active.index=slider.oldIndex;slider.working=false;return}if(direction==="next"){if(!slider.settings.onSlideNext.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index)){performTransition=false}}else if(direction==="prev"){if(!slider.settings.onSlidePrev.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index)){performTransition=false}}slider.active.last=slider.active.index>=getPagerQty()-1;if(slider.settings.pager||slider.settings.pagerCustom){updatePagerActive(slider.active.index)}if(slider.settings.controls){updateDirectionControls()}if(slider.settings.mode==="fade"){if(slider.settings.adaptiveHeight&&slider.viewport.height()!==getViewportHeight()){slider.viewport.animate({height:getViewportHeight()},slider.settings.adaptiveHeightSpeed)}slider.children.filter(":visible").fadeOut(slider.settings.speed).css({zIndex:0});slider.children.eq(slider.active.index).css("zIndex",slider.settings.slideZIndex+1).fadeIn(slider.settings.speed,function(){$(this).css("zIndex",slider.settings.slideZIndex);updateAfterSlideTransition()})}else{if(slider.settings.adaptiveHeight&&slider.viewport.height()!==getViewportHeight()){slider.viewport.animate({height:getViewportHeight()},slider.settings.adaptiveHeightSpeed)}if(!slider.settings.infiniteLoop&&slider.carousel&&slider.active.last){if(slider.settings.mode==="horizontal"){lastChild=slider.children.eq(slider.children.length-1);position=lastChild.position();moveBy=slider.viewport.width()-lastChild.outerWidth()}else{lastShowingIndex=slider.children.length-slider.settings.minSlides;position=slider.children.eq(lastShowingIndex).position()}}else if(slider.carousel&&slider.active.last&&direction==="prev"){eq=slider.settings.moveSlides===1?slider.settings.maxSlides-getMoveBy():(getPagerQty()-1)*getMoveBy()-(slider.children.length-slider.settings.maxSlides);lastChild=el.children(".wpmslider-clone").eq(eq);position=lastChild.position()}else if(direction==="next"&&slider.active.index===0){position=el.find("> .wpmslider-clone").eq(slider.settings.maxSlides).position();slider.active.last=false}else if(slideIndex>=0){requestEl=slideIndex*parseInt(getMoveBy());position=slider.children.eq(requestEl).position()}if(typeof position!=="undefined"){value=slider.settings.mode==="horizontal"?-(position.left-moveBy):-position.top;setPositionProperty(value,"slide",slider.settings.speed)}slider.working=false}if(slider.settings.ariaHidden){applyAriaHiddenAttributes(slider.active.index*getMoveBy())}};el.goToNextSlide=function(){if(!slider.settings.infiniteLoop&&slider.active.last){return}if(slider.working===true){return}var pagerIndex=parseInt(slider.active.index)+1;el.goToSlide(pagerIndex,"next")};el.goToPrevSlide=function(){if(!slider.settings.infiniteLoop&&slider.active.index===0){return}if(slider.working===true){return}var pagerIndex=parseInt(slider.active.index)-1;el.goToSlide(pagerIndex,"prev")};el.startAuto=function(preventControlUpdate){if(slider.interval){return}slider.interval=setInterval(function(){if(slider.settings.autoDirection==="next"){el.goToNextSlide()}else{el.goToPrevSlide()}},slider.settings.pause);slider.settings.onAutoChange.call(el,true);if(slider.settings.autoControls&&preventControlUpdate!==true){updateAutoControls("stop")}};el.stopAuto=function(preventControlUpdate){if(slider.autoPaused)slider.autoPaused=false;if(!slider.interval){return}clearInterval(slider.interval);slider.interval=null;slider.settings.onAutoChange.call(el,false);if(slider.settings.autoControls&&preventControlUpdate!==true){updateAutoControls("start")}};el.getCurrentSlide=function(){return slider.active.index};el.getCurrentSlideElement=function(){return slider.children.eq(slider.active.index)};el.getSlideElement=function(index){return slider.children.eq(index)};el.getSlideCount=function(){return slider.children.length};el.isWorking=function(){return slider.working};el.redrawSlider=function(){if(slider.debug)console.log(slider.logAs,"redrawSlider");updateWidth();unsetSlideHeight();setViewportHeight();if(slider.settings.stretch){setSlideHeight()}slider.children.add(el.find(".wpmslider-clone")).outerWidth(getSlideWidth2());setSlidePosition();if(slider.active.last){slider.active.index=getPagerQty()-1}if(slider.active.index>=getPagerQty()){slider.active.last=true}if(slider.settings.pager&&!slider.settings.pagerCustom){populatePager();updatePagerActive(slider.active.index)}if(slider.settings.ariaHidden){applyAriaHiddenAttributes(slider.active.index*getMoveBy())}};el.destroySlider=function(){if(!slider.initialized){return}slider.initialized=false;$(".wpmslider-clone",this).remove();slider.children.each(function(){if($(this).data("origStyle")!==undefined){$(this).attr("style",$(this).data("origStyle"))}else{$(this).removeAttr("style")}});if($(this).data("origStyle")!==undefined){this.attr("style",$(this).data("origStyle"))}else{$(this).removeAttr("style")}$(this).unwrap().unwrap();if(slider.controls.el){slider.controls.el.remove()}if(slider.controls.next){slider.controls.next.remove()}if(slider.controls.prev){slider.controls.prev.remove()}if(slider.pagerEl&&slider.settings.controls&&!slider.settings.pagerCustom){slider.pagerEl.remove()}$(".wpmslider-caption",this).remove();if(slider.controls.autoEl){slider.controls.autoEl.remove()}clearInterval(slider.interval);clearInterval(slider.visibilityInterval);if(slider.settings.responsive){$(window).off("resize",resizeWindow)}if(slider.settings.keyboardEnabled){$(document).off("keydown",keyPress)}$(this).removeData("strongSlider")};el.reloadSlider=function(settings){if(settings!==undefined){options=settings}el.destroySlider();init();$(el).data("strongSlider",this)};init();$(el).data("strongSlider",this);viewEl.attr("data-state","init");if(slider.debug)console.log(slider.logAs,"viewport",verge.viewportW(),"x",verge.viewportH());return this}})(jQuery);
1
+ (function($){var defaults={debug:false,logAs:"strongSlider",compat:{lazyload:{active:false,classes:{}}},mode:"horizontal",slideSelector:"div.t-slide",infiniteLoop:true,hideControlOnEnd:false,speed:500,easing:null,slideMargin:10,startSlide:0,randomStart:false,captions:false,adaptiveHeight:false,adaptiveHeightSpeed:500,video:false,useCSS:true,preloadImages:"visible",responsive:true,slideZIndex:50,wrapperClass:"wpmslider-wrapper",stretch:false,imagesLoaded:true,touchEnabled:true,swipeThreshold:50,oneToOneTouch:true,preventDefaultSwipeX:true,preventDefaultSwipeY:false,ariaLive:true,ariaHidden:true,keyboardEnabled:false,pager:true,pagerType:"full",pagerShortSeparator:" / ",pagerSelector:null,buildPager:null,pagerCustom:null,controls:true,nextText:"Next",prevText:"Prev",nextSelector:null,prevSelector:null,autoControls:false,startText:"Start",stopText:"Stop",autoControlsCombine:false,autoControlsSelector:null,auto:true,pause:4e3,autoStart:true,autoDirection:"next",stopAutoOnClick:false,autoHover:false,autoDelay:0,autoSlideForOnePage:false,minSlides:1,maxSlides:1,moveSlides:0,onSliderLoad:function(){return true},onSlideBefore:function(){return true},onSlideAfter:function(){return true},onSlideNext:function(){return true},onSlidePrev:function(){return true},onSliderResize:function(){return true},onAutoChange:function(){return true}};$.fn.strongSlider=function(options){if(this.length===0){return this}var slider={},viewEl=this,el=this.find(".wpmslider-content");if($(el).data("strongSlider")){return}var init=function(){if($(el).data("strongSlider")){return}slider.visibilityInterval=0;slider.hidden=false;var sliderVar=viewEl.data("slider-var");var config={};if(typeof window[sliderVar]!=="undefined"){config=window[sliderVar].config}slider.settings=$.extend({},defaults,config,options);slider.debug=slider.settings.debug;slider.logAs=slider.settings.logAs;if(slider.debug)console.log(slider.logAs,"slider.settings",slider.settings);slider.children=el.children(slider.settings.slideSelector);if(slider.children.length<slider.settings.minSlides){slider.settings.minSlides=slider.children.length}if(slider.children.length<slider.settings.maxSlides){slider.settings.maxSlides=slider.children.length}if(slider.settings.randomStart){slider.settings.startSlide=Math.floor(Math.random()*slider.children.length)}slider.active={index:slider.settings.startSlide};setBreakpoint();if(slider.carousel){slider.settings.preloadImages="all"}slider.working=false;slider.controls={};slider.interval=null;slider.animProp=slider.settings.mode==="vertical"?"top":"left";slider.usingCSS=slider.settings.useCSS&&slider.settings.mode!=="fade"&&function(){var div=document.createElement("div"),props=["WebkitPerspective","MozPerspective","OPerspective","msPerspective"];for(var i=0;i<props.length;i++){if(div.style[props[i]]!==undefined){slider.cssPrefix=props[i].replace("Perspective","").toLowerCase();slider.animProp="-"+slider.cssPrefix+"-transform";return true}}return false}();if(slider.settings.mode==="vertical"){slider.settings.maxSlides=slider.settings.minSlides}el.data("origStyle",el.attr("style"));el.children(slider.settings.slideSelector).each(function(){$(this).data("origStyle",$(this).attr("style"))});if(!el.getSlideCount()){return}if(slider.settings.imagesLoaded){viewEl.imagesLoaded(function(){initVisibilityCheck()})}else{initVisibilityCheck()}};var reallyVisible=function(){return viewEl.is(":visible")&&viewEl.css("visibility")!=="hidden"};var compatCheck=function(){if(slider.settings.compat.lazyload){var inProgress=false;for(var i=0,len=slider.settings.compat.lazyload.classes.length;i<len;i++){var startClass=slider.settings.compat.lazyload.classes[i].start;var finishClass=slider.settings.compat.lazyload.classes[i].finish;if(startClass&&finishClass){if(viewEl.find("img."+startClass).length&&!viewEl.find("img."+finishClass).length){inProgress=true}}else if(startClass){if(viewEl.find("img."+startClass).length){inProgress=true}}else if(finishClass){if(!viewEl.find("img."+finishClass).length){inProgress=true}}}if(inProgress){if(slider.debug)console.log(slider.logAs,"lazy loading...");return false}}if(slider.debug)console.log(slider.logAs,"compat check complete");return true};var initVisibilityCheck=function(){if(reallyVisible()&&compatCheck()){clearInterval(slider.visibilityInterval);setup()}else{if(slider.visibilityInterval===0){slider.visibilityInterval=setInterval(initVisibilityCheck,1e3*4)}}};var setup=function(){var preloadSelector=slider.children.eq(slider.settings.startSlide);el.wrap('<div class="'+slider.settings.wrapperClass+'"><div class="wpmslider-viewport"></div></div>');slider.viewport=el.parent();if(slider.settings.ariaLive){slider.viewport.attr("aria-live","polite")}slider.loader=$('<div class="wpmslider-loading" />');slider.viewport.prepend(slider.loader);el.css({width:slider.settings.mode==="horizontal"?slider.children.length*1e3+215+"%":"auto",position:"relative"});if(slider.usingCSS&&slider.settings.easing){el.css("-"+slider.cssPrefix+"-transition-timing-function",slider.settings.easing)}else if(!slider.settings.easing){slider.settings.easing="swing"}slider.viewport.css({width:"100%",overflow:"hidden",position:"relative"});slider.viewport.parent().css({maxWidth:getViewportMaxWidth2()});if(!slider.settings.pager&&!slider.settings.controls){slider.viewport.parent().css({margin:"0 auto"})}slider.children.css({float:slider.settings.mode==="horizontal"?"left":"none",listStyle:"none",position:"relative"});updateWidth();if(slider.settings.mode==="horizontal"&&slider.settings.slideMargin>0){slider.children.css("marginRight",slider.settings.slideMargin)}if(slider.settings.mode==="vertical"&&slider.settings.slideMargin>0){slider.children.css("marginBottom",slider.settings.slideMargin)}if(slider.settings.mode==="fade"){slider.children.css({position:"absolute",zIndex:0,display:"none"});slider.children.eq(slider.settings.startSlide).css({zIndex:slider.settings.slideZIndex,display:"block"})}else{slider.children.css({display:"block"})}slider.controls.el=$('<div class="wpmslider-controls" />');if(slider.settings.captions){appendCaptions()}slider.active.last=slider.settings.startSlide===getPagerQty()-1;if(slider.settings.video){el.fitVids()}if(slider.settings.preloadImages==="none"){preloadSelector=null}else if(slider.settings.preloadImages==="all"){preloadSelector=slider.children}if(slider.settings.controls){appendControlPrev()}if(slider.settings.auto&&slider.settings.autoControls){appendControlsAuto()}if(slider.settings.pager){appendPager()}if(slider.settings.controls){appendControlNext()}if(slider.settings.controls||slider.settings.autoControls||slider.settings.pager){slider.viewport.after(slider.controls.el)}if(preloadSelector===null){start()}else{loadElements(preloadSelector,start)}};var setBreakpoint=function(){if(slider.debug)console.log(slider.logAs,"setBreakpoint");var currentBreakpoint=slider.settings.breakpoints.single;var breakpoints=slider.settings.breakpoints.multiple;if(slider.settings.type==="show_multiple"){for(var key in breakpoints){if(breakpoints.hasOwnProperty(key)){if(verge.viewportW()>=breakpoints[key].width){currentBreakpoint=breakpoints[key];break}}}}if(slider.debug)console.log("current breakpoint",currentBreakpoint);slider.settings.maxSlides=currentBreakpoint.maxSlides;slider.settings.moveSlides=currentBreakpoint.moveSlides;slider.settings.slideMargin=currentBreakpoint.slideMargin;slider.carousel=slider.settings.minSlides>1||slider.settings.maxSlides>1};var updateWidth=function(){setBreakpoint();slider.children.css("width",getSlideWidth2())};var loadElements=function(selector,callback){var total=selector.find('img:not([src=""]), iframe').length,count=0;if(total===0){callback();return}selector.find('img:not([src=""]), iframe').each(function(){$(this).one("load error",function(){if(++count===total){callback()}}).each(function(){if(this.complete||this.src===""){$(this).trigger("load")}})})};var start=function(){if(slider.settings.infiniteLoop&&slider.settings.mode!=="fade"){var slice=slider.settings.mode==="vertical"?slider.settings.minSlides:slider.settings.maxSlides,sliceAppend=slider.children.slice(0,slice).clone(true).addClass("wpmslider-clone"),slicePrepend=slider.children.slice(-slice).clone(true).addClass("wpmslider-clone");if(slider.settings.ariaHidden){sliceAppend.attr("aria-hidden",true);slicePrepend.attr("aria-hidden",true)}el.append(sliceAppend).prepend(slicePrepend)}slider.loader.remove();if(slider.settings.mode==="vertical"){slider.settings.adaptiveHeight=true}el.redrawSlider();slider.settings.onSliderLoad.call(el,slider.active.index);slider.initialized=true;slider.visibilityInterval=setInterval(visibilityCheck,500);if(slider.settings.responsive){attachListeners()}if(slider.settings.auto&&slider.settings.autoStart&&(getPagerQty()>1||slider.settings.autoSlideForOnePage)){initAuto()}if(slider.settings.pager){updatePagerActive(slider.settings.startSlide)}if(slider.settings.controls){updateDirectionControls()}if(slider.settings.touchEnabled){initTouch()}if(slider.settings.keyboardEnabled){$(document).keydown(keyPress)}};var attachListeners=function(){window.addEventListener("resize",updateLayout,false);window.addEventListener("orientationchange",updateLayout,false);window.addEventListener("toggleFullContent",updateLayout,false);window.addEventListener("blur",function(){pauseEvent("blur")});window.addEventListener("focus",function(){playEvent("blur")})};var updateLayout=_.debounce(function(){if(slider.debug)console.log(slider.logAs,"updateLayout");resizeWindow()},250);var visibilityCheck=function(){if(!slider.settings.auto){return}if(!reallyVisible()){pauseEvent("hide")}else{playEvent("hide")}if(!verge.inViewport(el)){pauseEvent("scroll")}else{playEvent("scroll")}};var pauseEvent=function(action){if(slider.interval){el.stopAuto(true);slider.autoPaused=action;if(slider.debug)console.log(slider.logAs,"pause",action)}};var playEvent=function(action){if(slider.autoPaused===action){el.startAuto(true);slider.autoPaused=null;if(slider.debug)console.log(slider.logAs,"play",action)}};var setSlideHeight=function(){var heights=slider.children.map(function(){return jQuery(this).actual("outerHeight")}).get();var maxHeight=arrayMax(heights);slider.children.height(maxHeight)};var unsetSlideHeight=function(){slider.children.height("auto")};var arrayMax=function(array){return Math.max.apply(Math,array)};var getViewportHeight=function(){var height=0;var children=$();if(slider.settings.mode!=="vertical"&&!slider.settings.adaptiveHeight){children=slider.children}else{if(!slider.carousel){children=slider.children.eq(slider.active.index)}else{var currentIndex=slider.settings.moveSlides===1?slider.active.index:slider.active.index*getMoveBy();children=slider.children.eq(currentIndex);for(var i=1;i<=slider.settings.maxSlides-1;i++){if(currentIndex+i>=slider.children.length){children=children.add(slider.children.eq(i-1))}else{children=children.add(slider.children.eq(currentIndex+i))}}}}if(slider.settings.mode==="vertical"){children.each(function(index){height+=$(this).outerHeight()});if(slider.settings.slideMargin>0){height+=slider.settings.slideMargin*(slider.settings.minSlides-1)}}else{height=Math.max.apply(Math,children.map(function(){return $(this).outerHeight(false)}).get())}if(slider.viewport.css("box-sizing")==="border-box"){height+=parseFloat(slider.viewport.css("padding-top"))+parseFloat(slider.viewport.css("padding-bottom"))+parseFloat(slider.viewport.css("border-top-width"))+parseFloat(slider.viewport.css("border-bottom-width"))}else if(slider.viewport.css("box-sizing")==="padding-box"){height+=parseFloat(slider.viewport.css("padding-top"))+parseFloat(slider.viewport.css("padding-bottom"))}return height};var setViewportHeight=function(){slider.viewport.height(getViewportHeight()+2)};var getViewportMaxWidth2=function(){return"100%"};var getSlideWidth2=function(){var wrapWidth=slider.viewport.width();var margins=slider.settings.slideMargin*(slider.settings.maxSlides-1);return Math.floor((wrapWidth-margins)/slider.settings.maxSlides)};var getNumberSlidesShowing2=function(){return slider.settings.maxSlides};var getPagerQty=function(){var pagerQty=0,breakPoint=0,counter=0;if(slider.settings.moveSlides>0){if(slider.settings.infiniteLoop){pagerQty=Math.ceil(slider.children.length/getMoveBy())}else{while(breakPoint<slider.children.length){++pagerQty;breakPoint=counter+getNumberSlidesShowing2();counter+=slider.settings.moveSlides<=getNumberSlidesShowing2()?slider.settings.moveSlides:getNumberSlidesShowing2()}return counter}}else{pagerQty=Math.ceil(slider.children.length/getNumberSlidesShowing2())}return pagerQty};var getMoveBy=function(){if(slider.settings.moveSlides>0&&slider.settings.moveSlides<=getNumberSlidesShowing2()){return slider.settings.moveSlides}return getNumberSlidesShowing2()};var setSlidePosition=function(){var position,lastChild,lastShowingIndex;if(slider.children.length>slider.settings.maxSlides&&slider.active.last&&!slider.settings.infiniteLoop){if(slider.settings.mode==="horizontal"){lastChild=slider.children.last();position=lastChild.position();setPositionProperty(-(position.left-(slider.viewport.width()-lastChild.outerWidth())),"reset",0)}else if(slider.settings.mode==="vertical"){lastShowingIndex=slider.children.length-slider.settings.minSlides;position=slider.children.eq(lastShowingIndex).position();setPositionProperty(-position.top,"reset",0)}}else{position=slider.children.eq(slider.active.index*getMoveBy()).position();if(slider.active.index===getPagerQty()-1){slider.active.last=true}if(position!==undefined){if(slider.settings.mode==="horizontal"){setPositionProperty(-position.left,"reset",0)}else if(slider.settings.mode==="vertical"){setPositionProperty(-position.top,"reset",0)}else if(slider.settings.mode==="none"){setPositionProperty(-position.top,"reset",0)}}}};var setPositionProperty=function(value,type,duration,params){var animateObj,propValue;if(slider.usingCSS){if(slider.settings.mode==="vertical"){propValue="translateY("+value+"px)"}else if(slider.settings.mode==="horizontal"){propValue="translateX("+value+"px"}else if(slider.settings.mode==="none"){propValue="translateY("+value+"px)";duration=0}el.css("-"+slider.cssPrefix+"-transition-duration",duration/1e3+"s");if(type==="slide"){el.css(slider.animProp,propValue);if(duration!==0){el.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(e){if(!$(e.target).is(el)){return}el.off("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd");updateAfterSlideTransition()})}else{updateAfterSlideTransition()}}else if(type==="reset"){el.css(slider.animProp,propValue)}}else{animateObj={};animateObj[slider.animProp]=value;if(type==="slide"){el.animate(animateObj,duration,slider.settings.easing,function(){updateAfterSlideTransition()})}else if(type==="reset"){el.css(slider.animProp,value)}}};var populatePager=function(){var pagerHtml="",linkContent="",pagerQty=getPagerQty();for(var i=0;i<pagerQty;i++){linkContent="";if(slider.settings.buildPager){if(slider.settings.buildPager==="icons"){linkContent=""}if($.isFunction(slider.settings.buildPager)||slider.settings.pagerCustom){linkContent=slider.settings.buildPager(i)}slider.pagerEl.addClass("wpmslider-custom-pager")}else{linkContent=i+1;slider.pagerEl.addClass("wpmslider-default-pager")}pagerHtml+='<div class="wpmslider-pager-item"><a href="" data-slide-index="'+i+'" class="wpmslider-pager-link">'+linkContent+"</a></div>"}slider.pagerEl.html(pagerHtml)};var appendPager=function(){if(!slider.settings.pagerCustom){slider.pagerEl=$('<div class="wpmslider-pager" />');if(slider.settings.pagerSelector){$(slider.settings.pagerSelector).html(slider.pagerEl)}else{slider.controls.el.addClass("wpmslider-has-pager").append(slider.pagerEl)}populatePager()}else{slider.pagerEl=$(slider.settings.pagerCustom)}slider.pagerEl.on("click touchend","a",clickPagerBind)};var appendControlPrev=function(){slider.controls.prev=$('<a class="wpmslider-prev" href="">'+slider.settings.prevText+"</a>");slider.controls.prev.on("click touchend",clickPrevBind);if(slider.settings.prevSelector){$(slider.settings.prevSelector).append(slider.controls.prev)}if(!slider.settings.prevSelector){slider.controls.directionEl=$('<div class="wpmslider-controls-direction" />');slider.controls.directionEl.append(slider.controls.prev);slider.controls.el.addClass("wpmslider-has-controls-direction").append(slider.controls.directionEl)}};var appendControlNext=function(){slider.controls.next=$('<a class="wpmslider-next" href="">'+slider.settings.nextText+"</a>");slider.controls.next.on("click touchend",clickNextBind);if(slider.settings.nextSelector){$(slider.settings.nextSelector).append(slider.controls.next)}if(!slider.settings.nextSelector){slider.controls.directionEl=$('<div class="wpmslider-controls-direction" />');slider.controls.directionEl.append(slider.controls.next);slider.controls.el.addClass("wpmslider-has-controls-direction").append(slider.controls.directionEl)}};var appendControlsAuto=function(){slider.controls.start=$('<div class="wpmslider-controls-auto-item"><a class="wpmslider-start" href="">'+slider.settings.startText+"</a></div>");slider.controls.stop=$('<div class="wpmslider-controls-auto-item"><a class="wpmslider-stop" href="">'+slider.settings.stopText+"</a></div>");slider.controls.autoEl=$('<div class="wpmslider-controls-auto" />');slider.controls.autoEl.on("click",".wpmslider-start",clickStartBind);slider.controls.autoEl.on("click",".wpmslider-stop",clickStopBind);if(slider.settings.autoControlsCombine){slider.controls.autoEl.append(slider.controls.start)}else{slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop)}if(slider.settings.autoControlsSelector){$(slider.settings.autoControlsSelector).html(slider.controls.autoEl)}else{slider.controls.el.addClass("wpmslider-has-controls-auto").append(slider.controls.autoEl)}updateAutoControls(slider.settings.autoStart?"stop":"start")};var appendCaptions=function(){slider.children.each(function(index){var title=$(this).find("img:first").attr("title");if(title!==undefined&&(""+title).length){$(this).append('<div class="wpmslider-caption"><span>'+title+"</span></div>")}})};var clickNextBind=function(e){e.preventDefault();e.stopPropagation();if(slider.controls.el.hasClass("disabled")){return}if(slider.settings.auto&&slider.settings.stopAutoOnClick){if(slider.debug)console.log(slider.logAs,"stop on navigation");el.stopAuto()}el.goToNextSlide()};var clickPrevBind=function(e){e.preventDefault();e.stopPropagation();if(slider.controls.el.hasClass("disabled")){return}if(slider.settings.auto&&slider.settings.stopAutoOnClick){if(slider.debug)console.log(slider.logAs,"stop on navigation");el.stopAuto()}el.goToPrevSlide()};var clickStartBind=function(e){el.startAuto();e.preventDefault();e.stopPropagation()};var clickStopBind=function(e){el.stopAuto();e.preventDefault();e.stopPropagation()};var clickPagerBind=function(e){var pagerLink,pagerIndex;e.preventDefault();e.stopPropagation();if(slider.controls.el.hasClass("disabled")){return}if(slider.settings.auto&&slider.settings.stopAutoOnClick){if(slider.debug)console.log(slider.logAs,"stop on navigation");el.stopAuto()}pagerLink=$(e.currentTarget);if(pagerLink.attr("data-slide-index")!==undefined){pagerIndex=parseInt(pagerLink.attr("data-slide-index"));if(pagerIndex!==slider.active.index){el.goToSlide(pagerIndex)}}};var updatePagerActive=function(slideIndex){var len=slider.children.length;if(slider.settings.pagerType==="short"){if(slider.settings.maxSlides>1){len=Math.ceil(slider.children.length/slider.settings.maxSlides)}slider.pagerEl.html(slideIndex+1+slider.settings.pagerShortSeparator+len);return}slider.pagerEl.find("a").removeClass("active");slider.pagerEl.each(function(i,el){$(el).find("a").eq(slideIndex).addClass("active")})};var updateAfterSlideTransition=function(){if(slider.settings.infiniteLoop){var position="";if(slider.active.index===0){position=slider.children.eq(0).position()}else if(slider.active.index===getPagerQty()-1&&slider.carousel){position=slider.children.eq((getPagerQty()-1)*getMoveBy()).position()}else if(slider.active.index===slider.children.length-1){position=slider.children.eq(slider.children.length-1).position()}if(position){if(slider.settings.mode==="horizontal"){setPositionProperty(-position.left,"reset",0)}else if(slider.settings.mode==="vertical"){setPositionProperty(-position.top,"reset",0)}}}slider.working=false;slider.settings.onSlideAfter.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index)};var updateAutoControls=function(state){if(slider.settings.autoControlsCombine){slider.controls.autoEl.html(slider.controls[state])}else{slider.controls.autoEl.find("a").removeClass("active");slider.controls.autoEl.find("a:not(.wpmslider-"+state+")").addClass("active")}};var updateDirectionControls=function(){if(getPagerQty()===1){slider.controls.prev.addClass("disabled");slider.controls.next.addClass("disabled")}else if(!slider.settings.infiniteLoop&&slider.settings.hideControlOnEnd){if(slider.active.index===0){slider.controls.prev.addClass("disabled");slider.controls.next.removeClass("disabled")}else if(slider.active.index===getPagerQty()-1){slider.controls.next.addClass("disabled");slider.controls.prev.removeClass("disabled")}else{slider.controls.prev.removeClass("disabled");slider.controls.next.removeClass("disabled")}}};var initAuto=function(){if(slider.settings.autoDelay>0){setTimeout(el.startAuto,slider.settings.autoDelay)}else{el.startAuto()}if(slider.settings.autoHover){el.hover(function(){pauseEvent("hover")},function(){playEvent("hover")})}};var keyPress=function(e){var activeElementTag=document.activeElement.tagName.toLowerCase(),tagFilters="input|textarea",p=new RegExp(activeElementTag,["i"]),result=p.exec(tagFilters);if(result===null&&verge.inViewport(el)){if(e.keyCode===39){clickNextBind(e);return false}else if(e.keyCode===37){clickPrevBind(e);return false}}};var initTouch=function(){slider.touch={start:{x:0,y:0},end:{x:0,y:0}};slider.viewport.on("touchstart MSPointerDown pointerdown",onTouchStart);slider.viewport.on("click",".wpmslider a",function(e){if(slider.viewport.hasClass("click-disabled")){e.preventDefault();e.stopPropagation();slider.viewport.removeClass("click-disabled")}})};var onTouchStart=function(e){if(e.type!=="touchstart"&&e.button!==0){return}slider.controls.el.addClass("disabled");if(slider.working){e.preventDefault();e.stopPropagation();slider.controls.el.removeClass("disabled")}else{slider.touch.originalPos=el.position();var orig=e.originalEvent,touchPoints=typeof orig.changedTouches!=="undefined"?orig.changedTouches:[orig];var chromePointerEvents=typeof PointerEvent==="function";if(chromePointerEvents){if(orig.pointerId===undefined){return}}slider.touch.start.x=touchPoints[0].pageX;slider.touch.start.y=touchPoints[0].pageY;if(slider.viewport.get(0).setPointerCapture){slider.pointerId=orig.pointerId;slider.viewport.get(0).setPointerCapture(slider.pointerId)}slider.originalClickTarget=orig.originalTarget||orig.target;slider.originalClickButton=orig.button;slider.originalClickButtons=orig.buttons;slider.originalEventType=orig.type;slider.hasMove=false;slider.viewport.on("touchmove MSPointerMove pointermove",onTouchMove);slider.viewport.on("touchend MSPointerUp pointerup",onTouchEnd);slider.viewport.on("MSPointerCancel pointercancel",onPointerCancel)}};var onPointerCancel=function(e){e.preventDefault();setPositionProperty(slider.touch.originalPos.left,"reset",0);slider.controls.el.removeClass("disabled");slider.viewport.off("MSPointerCancel pointercancel",onPointerCancel);slider.viewport.off("touchmove MSPointerMove pointermove",onTouchMove);slider.viewport.off("touchend MSPointerUp pointerup",onTouchEnd);if(slider.viewport.get(0).releasePointerCapture){slider.viewport.get(0).releasePointerCapture(slider.pointerId)}};var onTouchMove=function(e){var orig=e.originalEvent,touchPoints=typeof orig.changedTouches!=="undefined"?orig.changedTouches:[orig],xMovement=Math.abs(touchPoints[0].pageX-slider.touch.start.x),yMovement=Math.abs(touchPoints[0].pageY-slider.touch.start.y),value=0,change=0;slider.hasMove=true;if(xMovement*3>yMovement&&slider.settings.preventDefaultSwipeX){e.preventDefault();e.stopPropagation()}else if(yMovement*3>xMovement&&slider.settings.preventDefaultSwipeY){e.preventDefault();e.stopPropagation()}if(e.type!=="touchmove"){e.preventDefault()}if(slider.settings.mode!=="fade"&&slider.settings.oneToOneTouch){if(slider.settings.mode==="horizontal"){change=touchPoints[0].pageX-slider.touch.start.x;value=slider.touch.originalPos.left+change}else{change=touchPoints[0].pageY-slider.touch.start.y;value=slider.touch.originalPos.top+change}setPositionProperty(value,"reset",0)}};var onTouchEnd=function(e){e.preventDefault();slider.viewport.off("touchmove MSPointerMove pointermove",onTouchMove);slider.controls.el.removeClass("disabled");var orig=e.originalEvent,touchPoints=typeof orig.changedTouches!=="undefined"?orig.changedTouches:[orig],value=0,distance=0;slider.touch.end.x=touchPoints[0].pageX;slider.touch.end.y=touchPoints[0].pageY;if(slider.settings.mode==="fade"){distance=Math.abs(slider.touch.start.x-slider.touch.end.x);if(distance>=slider.settings.swipeThreshold){if(slider.touch.start.x>slider.touch.end.x){el.goToNextSlide()}else{el.goToPrevSlide()}el.stopAuto()}}else{if(slider.settings.mode==="horizontal"){distance=slider.touch.end.x-slider.touch.start.x;value=slider.touch.originalPos.left}else{distance=slider.touch.end.y-slider.touch.start.y;value=slider.touch.originalPos.top}if(!slider.settings.infiniteLoop&&(slider.active.index===0&&distance>0||slider.active.last&&distance<0)){setPositionProperty(value,"reset",200)}else{if(Math.abs(distance)>=slider.settings.swipeThreshold){if(distance<0){el.goToNextSlide()}else{el.goToPrevSlide()}el.stopAuto()}else{setPositionProperty(value,"reset",200)}}}slider.viewport.off("touchend MSPointerUp pointerup",onTouchEnd);if(slider.viewport.get(0).releasePointerCapture){slider.viewport.get(0).releasePointerCapture(slider.pointerId)}if(slider.hasMove===false&&(slider.originalClickButton===0||slider.originalEventType==="touchstart")){$(slider.originalClickTarget).trigger({type:"click",button:slider.originalClickButton,buttons:slider.originalClickButtons})}};var resizeWindow=function(e){if(!slider.initialized){if(slider.debug)console.log(slider.logAs,"slider not initialized");return}if(slider.working){if(slider.debug)console.log(slider.logAs,"slider working");window.setTimeout(resizeWindow,10)}else{el.redrawSlider();slider.settings.onSliderResize.call(el,slider.active.index)}};var applyAriaHiddenAttributes=function(startVisibleIndex){var numberOfSlidesShowing=getNumberSlidesShowing2();if(slider.settings.ariaHidden){slider.children.attr("aria-hidden","true");slider.children.slice(startVisibleIndex,startVisibleIndex+numberOfSlidesShowing).attr("aria-hidden","false")}};var setSlideIndex=function(slideIndex){if(slideIndex<0){if(slider.settings.infiniteLoop){return getPagerQty()-1}else{return slider.active.index}}else if(slideIndex>=getPagerQty()){if(slider.settings.infiniteLoop){return 0}else{return slider.active.index}}else{return slideIndex}};el.goToSlide=function(slideIndex,direction){var performTransition=true,moveBy=0,position={left:0,top:0},lastChild=null,lastShowingIndex,eq,value,requestEl;slider.oldIndex=slider.active.index;slider.active.index=setSlideIndex(slideIndex);if(slider.working||slider.active.index===slider.oldIndex){return}slider.working=true;performTransition=slider.settings.onSlideBefore.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index);if(typeof performTransition!=="undefined"&&!performTransition){slider.active.index=slider.oldIndex;slider.working=false;return}if(direction==="next"){if(!slider.settings.onSlideNext.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index)){performTransition=false}}else if(direction==="prev"){if(!slider.settings.onSlidePrev.call(el,slider.children.eq(slider.active.index),slider.oldIndex,slider.active.index)){performTransition=false}}slider.active.last=slider.active.index>=getPagerQty()-1;if(slider.settings.pager||slider.settings.pagerCustom){updatePagerActive(slider.active.index)}if(slider.settings.controls){updateDirectionControls()}if(slider.settings.mode==="fade"){if(slider.settings.adaptiveHeight&&slider.viewport.height()!==getViewportHeight()){slider.viewport.animate({height:getViewportHeight()},slider.settings.adaptiveHeightSpeed)}slider.children.filter(":visible").fadeOut(slider.settings.speed).css({zIndex:0});slider.children.eq(slider.active.index).css("zIndex",slider.settings.slideZIndex+1).fadeIn(slider.settings.speed,function(){$(this).css("zIndex",slider.settings.slideZIndex);updateAfterSlideTransition()})}else{if(slider.settings.adaptiveHeight&&slider.viewport.height()!==getViewportHeight()){slider.viewport.animate({height:getViewportHeight()},slider.settings.adaptiveHeightSpeed)}if(!slider.settings.infiniteLoop&&slider.carousel&&slider.active.last){if(slider.settings.mode==="horizontal"){lastChild=slider.children.eq(slider.children.length-1);position=lastChild.position();moveBy=slider.viewport.width()-lastChild.outerWidth()}else{lastShowingIndex=slider.children.length-slider.settings.minSlides;position=slider.children.eq(lastShowingIndex).position()}}else if(slider.carousel&&slider.active.last&&direction==="prev"){eq=slider.settings.moveSlides===1?slider.settings.maxSlides-getMoveBy():(getPagerQty()-1)*getMoveBy()-(slider.children.length-slider.settings.maxSlides);lastChild=el.children(".wpmslider-clone").eq(eq);position=lastChild.position()}else if(direction==="next"&&slider.active.index===0){position=el.find("> .wpmslider-clone").eq(slider.settings.maxSlides).position();slider.active.last=false}else if(slideIndex>=0){requestEl=slideIndex*parseInt(getMoveBy());position=slider.children.eq(requestEl).position()}if(typeof position!=="undefined"){value=slider.settings.mode==="horizontal"?-(position.left-moveBy):-position.top;setPositionProperty(value,"slide",slider.settings.speed)}slider.working=false}if(slider.settings.ariaHidden){applyAriaHiddenAttributes(slider.active.index*getMoveBy())}};el.goToNextSlide=function(){if(!slider.settings.infiniteLoop&&slider.active.last){return}if(slider.working===true){return}var pagerIndex=parseInt(slider.active.index)+1;el.goToSlide(pagerIndex,"next")};el.goToPrevSlide=function(){if(!slider.settings.infiniteLoop&&slider.active.index===0){return}if(slider.working===true){return}var pagerIndex=parseInt(slider.active.index)-1;el.goToSlide(pagerIndex,"prev")};el.startAuto=function(preventControlUpdate){if(slider.interval){return}slider.interval=setInterval(function(){if(slider.settings.autoDirection==="next"){el.goToNextSlide()}else{el.goToPrevSlide()}},slider.settings.pause);slider.settings.onAutoChange.call(el,true);if(slider.settings.autoControls&&preventControlUpdate!==true){updateAutoControls("stop")}};el.stopAuto=function(preventControlUpdate){if(slider.autoPaused)slider.autoPaused=false;if(!slider.interval){return}clearInterval(slider.interval);slider.interval=null;slider.settings.onAutoChange.call(el,false);if(slider.settings.autoControls&&preventControlUpdate!==true){updateAutoControls("start")}};el.getCurrentSlide=function(){return slider.active.index};el.getCurrentSlideElement=function(){return slider.children.eq(slider.active.index)};el.getSlideElement=function(index){return slider.children.eq(index)};el.getSlideCount=function(){return slider.children.length};el.isWorking=function(){return slider.working};el.redrawSlider=function(){if(slider.debug)console.log(slider.logAs,"redrawSlider");updateWidth();unsetSlideHeight();setViewportHeight();if(slider.settings.stretch){setSlideHeight()}slider.children.add(el.find(".wpmslider-clone")).outerWidth(getSlideWidth2());setSlidePosition();if(slider.active.last){slider.active.index=getPagerQty()-1}if(slider.active.index>=getPagerQty()){slider.active.last=true}if(slider.settings.pager&&!slider.settings.pagerCustom){populatePager();updatePagerActive(slider.active.index)}if(slider.settings.ariaHidden){applyAriaHiddenAttributes(slider.active.index*getMoveBy())}};el.destroySlider=function(){if(!slider.initialized){return}slider.initialized=false;$(".wpmslider-clone",this).remove();slider.children.each(function(){if($(this).data("origStyle")!==undefined){$(this).attr("style",$(this).data("origStyle"))}else{$(this).removeAttr("style")}});if($(this).data("origStyle")!==undefined){this.attr("style",$(this).data("origStyle"))}else{$(this).removeAttr("style")}$(this).unwrap().unwrap();if(slider.controls.el){slider.controls.el.remove()}if(slider.controls.next){slider.controls.next.remove()}if(slider.controls.prev){slider.controls.prev.remove()}if(slider.pagerEl&&slider.settings.controls&&!slider.settings.pagerCustom){slider.pagerEl.remove()}$(".wpmslider-caption",this).remove();if(slider.controls.autoEl){slider.controls.autoEl.remove()}clearInterval(slider.interval);clearInterval(slider.visibilityInterval);if(slider.settings.responsive){$(window).off("resize",resizeWindow)}if(slider.settings.keyboardEnabled){$(document).off("keydown",keyPress)}$(this).removeData("strongSlider")};el.reloadSlider=function(settings){if(settings!==undefined){options=settings}el.destroySlider();init();$(el).data("strongSlider",this)};init();$(el).data("strongSlider",this);viewEl.attr("data-state","init");if(slider.debug)console.log(slider.logAs,"viewport",verge.viewportW(),"x",verge.viewportH());return this}})(jQuery);
readme.txt CHANGED
@@ -1,20 +1,20 @@
1
  === Strong Testimonials ===
2
- Contributors: cdillon27
3
- Tags: testimonials, testimonial slider, testimonial form, reviews, star ratings
4
- Requires at least: 3.7
5
- Requires PHP: 5.2.4
6
  Tested up to: 5.0
7
- Stable tag: 2.32.4
8
- License: GPLv2 or later
9
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Simple yet powerful. Very customizable. Developer-friendly. Strong support.
12
 
13
  == Description ==
14
 
15
- In just a few steps, you will be collecting and publishing your testimonials or reviews. Beginners and pros alike will appreciate the wealth of flexible features refined over 4 years from user feedback and requests. Keep moving forward with quick and thorough support to help you with configuration and customization.
16
 
17
- **[See the demos](https://strongdemos.com/strong-testimonials/)** | **[Read the documentation](https://strongplugins.com/documents/)** | **[Shop for add-ons](https://strongplugins.com/plugins/category/strong-testimonials/)**
18
 
19
  ### Primary Features
20
 
@@ -39,11 +39,9 @@ In just a few steps, you will be collecting and publishing your testimonials or
39
 
40
  ### Style
41
 
42
- > This plugin provides a few designs with only basic style options for background color and font color. Everything else will be inherited from your theme.
43
- >
44
- > Some templates have light & dark versions and other options. If you want to customize things like fonts, margins and borders, you will need custom CSS.
45
- >
46
- > I will help with theme conflicts and a few tweaks. Otherwise, consider learning enough CSS to be dangerous or hiring a developer for a couple hours.
47
 
48
  ### Testimonial Submission Form
49
 
@@ -59,10 +57,6 @@ Send custom notification emails to multiple admins.
59
 
60
  Submit the form via Ajax for use with plugins like [Popup Maker](https://wordpress.org/plugins/popup-maker/).
61
 
62
- #### Free Add-on
63
-
64
- Use the [Country Selector](https://wordpress.org/plugins/strong-testimonials-country-selector/) plugin to add a country selector to your form. [See the demo](https://strongdemos.com/strong-testimonials/form-examples/with-country-selector/).
65
-
66
  ### Displaying Testimonials
67
 
68
  **Everything happens in a View**. Instead of learning multiple shortcodes with dozens of options, a View contains all the options in a simple, intuitive editor that no other testimonial plugin has.
@@ -98,35 +92,9 @@ However, this plugin provides features that may involve private data.
98
  * If you enable comments on testimonials, the plugin will use your theme's single post template and comment form.
99
  * If you embed third-party posts such as Twitter, YouTube and FaceBook in your testimonials, you will be agreeing to the Terms of Use of those third-party sites.
100
 
101
- ### Pro Add-ons
102
-
103
- #### Assignment
104
-
105
- Assign testimonials to any object (posts, pages, media or custom content types) with features designed to simplify your workflow. Works well with portfolio, directory and service business themes. [Learn more](https://strongplugins.com/plugins/strong-testimonials-assignment/?utm_source=wordpressorg&utm_medium=readme)
106
-
107
- #### Review Markup
108
-
109
- Testimonials are essentially five-star reviews. Adding review markup will improve search results and encourage search engines to display rich snippets (the stars). [Learn more](https://strongplugins.com/plugins/strong-testimonials-review-markup/?utm_source=wordpressorg&utm_medium=readme)
110
-
111
- #### Multiple Forms
112
-
113
- Create unlimited forms, each with their own custom fields, to tailor testimonials for different products, services and markets. [Learn more](https://strongplugins.com/plugins/strong-testimonials-multiple-forms/?utm_source=wordpressorg&utm_medium=readme)
114
-
115
- #### Properties
116
-
117
- Want to rebrand "testimonials" as "reviews", "customer stories" or something else? Want to change the permalink structure? Control every aspect front and back. [Learn more](https://strongplugins.com/plugins/strong-testimonials-properties/?utm_source=wordpressorg&utm_medium=readme)
118
-
119
- ### Documentation
120
-
121
- * [Getting started](https://strongplugins.com/document/strong-testimonials/getting-started/?utm_source=wordpressorg&utm_medium=readme)
122
- * [Star ratings](https://strongplugins.com/document/strong-testimonials/star-ratings/?utm_source=wordpressorg&utm_medium=readme)
123
- * [Customizing the form](https://strongplugins.com/document/strong-testimonials/complete-example-customizing-form/?utm_source=wordpressorg&utm_medium=readme)
124
- * and [more&hellip;](https://strongplugins.com/documents/?utm_source=wordpressorg&utm_medium=readme)
125
 
126
  ### Try these plugins too
127
 
128
- * [FooBox Image Lightbox](https://wordpress.org/plugins/foobox-image-lightbox/) to view thumbnails as full-size images.
129
- * [Simple CSS](https://wordpress.org/plugins/simple-css/) works great for quick CSS tweaks.
130
  * [Wider Admin Menu](https://wordpress.org/plugins/wider-admin-menu/) lets your admin menu b r e a t h e.
131
 
132
  == Installation ==
@@ -192,16 +160,6 @@ Yes. This requires a lightbox so if your theme does not include one, you will ne
192
 
193
  No. If you already have testimonials in another plugin or theme, you will have to re-enter them. Why? Because every theme and plugin stores data differently.
194
 
195
- = Is it true that including a link to my site in my support requests really helps you troubleshoot problems? =
196
-
197
- Undeniably, yes.
198
-
199
- This [screenshot](http://www.screencast.com/t/TPMRWM0yug) shows where I immediately start looking for clues before asking for more information and potentially waiting hours or days for a response (it happens).
200
-
201
- I can usually determine what theme you're using, what plugins are active, whether you're using any caching/minification/optimization (do you need to clear your cache?), if there are any JavaScript errors in your theme or another plugin (more common than you may think), and somewhat how the testimonial view is configured.
202
-
203
- If you prefer, start a private support ticket at [support.strongplugins.com](https://support.strongplugins.com).
204
-
205
  == Screenshots ==
206
 
207
  1. Slideshow
1
  === Strong Testimonials ===
2
+ Contributors: cdillon27, machothemes,silkalns
3
+ Tags: testimonials, testimonial slider, testimonial form, star ratings
4
+ Requires at least: 4.0
5
+ Requires PHP: 5.6
6
  Tested up to: 5.0
7
+ Stable tag: 2.33
8
+ License: GPLv3 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
11
+ Simple yet powerful. Very customizable. Developer-friendly.
12
 
13
  == Description ==
14
 
15
+ **Strong Testimonials** is a standalone plugin built, maintained & operated by the friendly folks over at [MachoThemes](https://www.machothemes.com/)
16
 
17
+ In just a few steps, you will be collecting and publishing your testimonials or reviews. Beginners and pros alike will appreciate the wealth of flexible features refined over 4 years from user feedback and requests.
18
 
19
  ### Primary Features
20
 
39
 
40
  ### Style
41
 
42
+ This plugin provides a few designs with only basic style options for background color and font color. Everything else will be inherited from your theme.
43
+
44
+ Some templates have light & dark versions and other options. If you want to customize things like fonts, margins and borders, you will need custom CSS.
 
 
45
 
46
  ### Testimonial Submission Form
47
 
57
 
58
  Submit the form via Ajax for use with plugins like [Popup Maker](https://wordpress.org/plugins/popup-maker/).
59
 
 
 
 
 
60
  ### Displaying Testimonials
61
 
62
  **Everything happens in a View**. Instead of learning multiple shortcodes with dozens of options, a View contains all the options in a simple, intuitive editor that no other testimonial plugin has.
92
  * If you enable comments on testimonials, the plugin will use your theme's single post template and comment form.
93
  * If you embed third-party posts such as Twitter, YouTube and FaceBook in your testimonials, you will be agreeing to the Terms of Use of those third-party sites.
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
 
96
  ### Try these plugins too
97
 
 
 
98
  * [Wider Admin Menu](https://wordpress.org/plugins/wider-admin-menu/) lets your admin menu b r e a t h e.
99
 
100
  == Installation ==
160
 
161
  No. If you already have testimonials in another plugin or theme, you will have to re-enter them. Why? Because every theme and plugin stores data differently.
162
 
 
 
 
 
 
 
 
 
 
 
163
  == Screenshots ==
164
 
165
  1. Slideshow
strong-testimonials.php CHANGED
@@ -1,22 +1,31 @@
1
  <?php
2
  /**
3
- * Plugin Name: Strong Testimonials
4
- * Plugin URI: https://strongplugins.com/plugins/strong-testimonials/
5
- * Description: Collect and display your testimonials or reviews.
6
- * Author: Chris Dillon
7
- * Version: 2.32.4
 
 
 
 
 
 
8
  *
9
- * Author URI: https://strongplugins.com/
10
- * Text Domain: strong-testimonials
11
- * Domain Path: /languages
12
- * Requires: 3.7 or higher
13
- * License: GPLv2 or later
14
  *
15
- * Copyright 2014-2018 Chris Dillon chris@strongwp.com
 
 
 
 
 
 
16
  *
17
  * This program is free software; you can redistribute it and/or modify
18
  * it under the terms of the GNU General Public License as published by
19
- * the Free Software Foundation; either version 2 of the License, or
20
  * (at your option) any later version.
21
  *
22
  * This program is distributed in the hope that it will be useful,
@@ -34,7 +43,7 @@ if ( ! defined( 'ABSPATH' ) ) {
34
  exit;
35
  }
36
 
37
- define( 'WPMTST_VERSION', '2.32.4' );
38
  define( 'WPMTST_PLUGIN', plugin_basename( __FILE__ ) ); // strong-testimonials/strong-testimonials.php
39
  define( 'WPMTST', dirname( WPMTST_PLUGIN ) ); // strong-testimonials
40
  define( 'STRONGPLUGINS_STORE_URL', 'https://strongplugins.com' );
@@ -281,15 +290,6 @@ final class Strong_Testimonials {
281
  require_once WPMTST_ADMIN . 'view-list-order.php';
282
  require_once WPMTST_ADMIN . 'views-validate.php';
283
 
284
- /**
285
- * Add-on plugin updater.
286
- *
287
- * @since 2.1
288
- */
289
- if ( ! class_exists( 'EDD_SL_Plugin_Updater' ) ) {
290
- include WPMTST_ADMIN . 'edd/EDD_SL_Plugin_Updater.php';
291
- }
292
- include WPMTST_ADMIN . 'edd/Strong_Plugin_Updater.php';
293
  }
294
  }
295
 
1
  <?php
2
  /**
3
+ * Plugin Name: Strong Testimonials
4
+ * Description: Collect and display your testimonials or reviews.
5
+ * Author: MachoThemes
6
+ * Version: 2.33
7
+ * Author URI: https://www.machothemes.com/
8
+ * Text Domain: strong-testimonials
9
+ * Domain Path: /languages
10
+ * Requires: 4.0 or higher
11
+ * License: GPLv3 or later
12
+ * License URI: http://www.gnu.org/licenses/gpl-3.0.html
13
+ * Requires PHP: 5.6
14
  *
15
+ * Copyright 2014-2019 Chris Dillon chris@strongwp.com
16
+ * Copyright 2019 MachoThemes office@machothemes.com
 
 
 
17
  *
18
+ * Original Plugin URI: https://strongplugins.com/plugins/strong-testimonials
19
+ * Original Author URI: https://strongplugins.com
20
+ * Original Author: https://profiles.wordpress.org/cdillon27/
21
+ *
22
+ * NOTE:
23
+ * Chris Dillon ownership rights were ceased on: 01/20/2019 06:52:23 PM when ownership was turned over to MachoThemes
24
+ * MachoThemes ownership started on: 01/20/2019 06:52:24 PM
25
  *
26
  * This program is free software; you can redistribute it and/or modify
27
  * it under the terms of the GNU General Public License as published by
28
+ * the Free Software Foundation; either version 3 of the License, or
29
  * (at your option) any later version.
30
  *
31
  * This program is distributed in the hope that it will be useful,
43
  exit;
44
  }
45
 
46
+ define( 'WPMTST_VERSION', '2.33' );
47
  define( 'WPMTST_PLUGIN', plugin_basename( __FILE__ ) ); // strong-testimonials/strong-testimonials.php
48
  define( 'WPMTST', dirname( WPMTST_PLUGIN ) ); // strong-testimonials
49
  define( 'STRONGPLUGINS_STORE_URL', 'https://strongplugins.com' );
290
  require_once WPMTST_ADMIN . 'view-list-order.php';
291
  require_once WPMTST_ADMIN . 'views-validate.php';
292
 
 
 
 
 
 
 
 
 
 
293
  }
294
  }
295
 
templates-scss/_partials/_base.scss CHANGED
@@ -33,6 +33,18 @@
33
  .testimonial-field-before {
34
  margin-right: 0.5em;
35
  }
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
 
38
  .strong-view {
33
  .testimonial-field-before {
34
  margin-right: 0.5em;
35
  }
36
+
37
+ a.readmore,
38
+ a.readmore-toggle {
39
+ white-space: nowrap;
40
+ z-index: 100;
41
+ }
42
+
43
+ a.readmore-toggle {
44
+ &:hover {
45
+ cursor: pointer;
46
+ }
47
+ }
48
  }
49
 
50
  .strong-view {
templates/bold/content.css CHANGED
@@ -54,6 +54,14 @@ Thanks https://css-tricks.com/minimum-paragraph-widths/
54
  .strong-view.bold .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
 
 
 
 
 
 
 
 
57
 
58
  .strong-view.slider-container {
59
  opacity: 1;
54
  .strong-view.bold .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
57
+ .strong-view.bold a.readmore,
58
+ .strong-view.bold a.readmore-toggle {
59
+ white-space: nowrap;
60
+ z-index: 100;
61
+ }
62
+ .strong-view.bold a.readmore-toggle:hover {
63
+ cursor: pointer;
64
+ }
65
 
66
  .strong-view.slider-container {
67
  opacity: 1;
templates/default/content.css CHANGED
@@ -54,6 +54,14 @@ Thanks https://css-tricks.com/minimum-paragraph-widths/
54
  .strong-view.default .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
 
 
 
 
 
 
 
 
57
 
58
  .strong-view.slider-container {
59
  opacity: 1;
54
  .strong-view.default .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
57
+ .strong-view.default a.readmore,
58
+ .strong-view.default a.readmore-toggle {
59
+ white-space: nowrap;
60
+ z-index: 100;
61
+ }
62
+ .strong-view.default a.readmore-toggle:hover {
63
+ cursor: pointer;
64
+ }
65
 
66
  .strong-view.slider-container {
67
  opacity: 1;
templates/modern/content.css CHANGED
@@ -54,6 +54,14 @@ Thanks https://css-tricks.com/minimum-paragraph-widths/
54
  .strong-view.modern .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
 
 
 
 
 
 
 
 
57
 
58
  .strong-view.slider-container {
59
  opacity: 1;
54
  .strong-view.modern .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
57
+ .strong-view.modern a.readmore,
58
+ .strong-view.modern a.readmore-toggle {
59
+ white-space: nowrap;
60
+ z-index: 100;
61
+ }
62
+ .strong-view.modern a.readmore-toggle:hover {
63
+ cursor: pointer;
64
+ }
65
 
66
  .strong-view.slider-container {
67
  opacity: 1;
templates/simple/content.css CHANGED
@@ -54,6 +54,14 @@ Thanks https://css-tricks.com/minimum-paragraph-widths/
54
  .strong-view.simple .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
 
 
 
 
 
 
 
 
57
 
58
  .strong-view.slider-container {
59
  opacity: 1;
54
  .strong-view.simple .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
57
+ .strong-view.simple a.readmore,
58
+ .strong-view.simple a.readmore-toggle {
59
+ white-space: nowrap;
60
+ z-index: 100;
61
+ }
62
+ .strong-view.simple a.readmore-toggle:hover {
63
+ cursor: pointer;
64
+ }
65
 
66
  .strong-view.slider-container {
67
  opacity: 1;
templates/small-widget/content.css CHANGED
@@ -54,6 +54,14 @@ Thanks https://css-tricks.com/minimum-paragraph-widths/
54
  .strong-view.small-widget .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
 
 
 
 
 
 
 
 
57
 
58
  .strong-view.slider-container {
59
  opacity: 1;
54
  .strong-view.small-widget .testimonial-field-before {
55
  margin-right: 0.5em;
56
  }
57
+ .strong-view.small-widget a.readmore,
58
+ .strong-view.small-widget a.readmore-toggle {
59
+ white-space: nowrap;
60
+ z-index: 100;
61
+ }
62
+ .strong-view.small-widget a.readmore-toggle:hover {
63
+ cursor: pointer;
64
+ }
65
 
66
  .strong-view.slider-container {
67
  opacity: 1;