Testimonials Widget - Version 3.3.0

Version Description

= 3.0.0 =

This is a major overhaul without backwards compliance of over 80 changes. Please read the Testimonials Widget 3.0 and Testimonials Widget Premium 2.0 Upgrade Notice for more help.

If you use custom CSS, actions, or filters to modify Testimonials Widget and Testimonials Widget Premium actions or output, this upgrade will not be compatible with those modifications until corrections are made.

= Older Versions =

Read UPGRADING.

Download this release

Release Info

Developer subharanjan
Plugin Icon wp plugin Testimonials Widget
Version 3.3.0
Comparing to
See all releases

Code changes from version 3.2.0 to 3.3.0

Files changed (55) hide show
  1. CHANGELOG.md +15 -0
  2. README.md +0 -1
  3. UPGRADING.md +30 -1
  4. assets/css/testimonials-widget.css +4 -0
  5. includes/class-testimonials-widget-archives-widget.php +3 -3
  6. includes/class-testimonials-widget-categories-widget.php +3 -3
  7. includes/class-testimonials-widget-recent-testimonials-widget.php +3 -3
  8. includes/class-testimonials-widget-settings.php +37 -30
  9. includes/class-testimonials-widget-slider-widget.php +9 -12
  10. includes/class-testimonials-widget-tag-cloud-widget.php +6 -6
  11. includes/class-testimonials-widget-template-loader.php +2 -2
  12. includes/class-testimonials-widget.php +44 -48
  13. includes/libraries/Gamajo-Template-Loader/README.md +9 -21
  14. includes/libraries/Gamajo-Template-Loader/class-gamajo-template-loader.php +2 -42
  15. includes/libraries/aihrus-framework/CHANGELOG.md +13 -0
  16. includes/libraries/aihrus-framework/README.md +2 -2
  17. includes/libraries/aihrus-framework/aihrus-framework.php +4 -18
  18. includes/libraries/aihrus-framework/includes/class-aihrus-common.php +8 -7
  19. includes/libraries/aihrus-framework/includes/class-aihrus-licensing.php +2 -2
  20. includes/libraries/aihrus-framework/includes/class-aihrus-settings.php +2 -4
  21. includes/libraries/aihrus-framework/includes/class-aihrus-widget.php +7 -5
  22. includes/libraries/aihrus-framework/includes/libraries/parsedown/Parsedown.php +565 -439
  23. includes/libraries/aihrus-framework/includes/libraries/parsedown/README.md +27 -17
  24. includes/libraries/aihrus-framework/includes/libraries/parsedown/phpunit.xml.dist +1 -1
  25. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/aligned_table.html +9 -9
  26. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/atx_heading.html +1 -1
  27. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/atx_heading.md +1 -1
  28. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/block-level_html.html +8 -9
  29. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/block-level_html.md +8 -9
  30. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/escaping.html +3 -1
  31. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/escaping.md +5 -1
  32. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_reference.html +2 -1
  33. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_reference.md +2 -0
  34. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_title.html +2 -1
  35. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_title.md +3 -1
  36. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link.html +5 -3
  37. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link.md +5 -1
  38. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link_title.html +6 -1
  39. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link_title.md +11 -1
  40. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/simple_table.html +3 -3
  41. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/special_characters.html +1 -1
  42. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/table_inline_markdown.html +6 -2
  43. includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/table_inline_markdown.md +2 -1
  44. includes/libraries/bxslider-4/package.json +1 -2
  45. languages/testimonials-widget.pot +364 -248
  46. readme.txt +6 -2
  47. templates/testimonial-cite.php +12 -12
  48. templates/testimonial-content.php +15 -7
  49. templates/testimonial-open.php +1 -1
  50. templates/testimonials-archives.php +4 -4
  51. templates/testimonials-categories.php +1 -1
  52. templates/testimonials-open.php +1 -1
  53. templates/testimonials-paging.php +4 -4
  54. templates/testimonials-recent.php +1 -1
  55. testimonials-widget.php +53 -29
CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
 
3
  ## master
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  ## 3.2.0
6
  * Add filter tw_testimonial_query to alter WP_Query in get_testimonials
7
  * Require Aihrus Framework 1.2.2
2
 
3
  ## master
4
 
5
+ ## 3.3.0
6
+ * Change support email address to support@axelerant.com
7
+ * Confirm WordPress 4.4 compatibility
8
+ * Fix aggregate rating count
9
+ * Fix coding standards for CI
10
+ * Remove option to disable the license not saved notice rather set sslverify to false.
11
+ * Remove the use of deprecated function `wp_htmledit_pre()` and use `format_for_editor()` instead.
12
+ * Require Aihrus Framework 1.2.4
13
+ * RESOLVE #178 Provide ways to display the testimonial title on top of the testimonial content
14
+ * RESOLVE #180 Add missing required `ratingValue` for AggregateRating schema property
15
+ * RESOLVE #183 Rename core class name to prevent fatal errors
16
+ * RESOLVE #193 Warning in Google's structured data testing tool for `aggregateRating` in testimonials
17
+ * RESOLVE Replace deprecated 'post_permalink' with 'get_permalink'
18
+ * Update Gamajo-Template-Loader
19
+
20
  ## 3.2.0
21
  * Add filter tw_testimonial_query to alter WP_Query in get_testimonials
22
  * Require Aihrus Framework 1.2.2
README.md CHANGED
@@ -1,7 +1,6 @@
1
  # Developer Readme - Testimonials Widget
2
 
3
  [![Codeship status](https://www.codeship.io/projects/b5524630-43f6-0131-3b4d-76a8e32a74d4/status)](https://www.codeship.io/projects/10739)
4
- [![ProjectStatus](http://stillmaintained.com/michael-cannon/testimonials-widget.png)](http://stillmaintained.com/michael-cannon/testimonials-widget)
5
 
6
  ## Welcome to the Testimonials Widget Github repository
7
 
1
  # Developer Readme - Testimonials Widget
2
 
3
  [![Codeship status](https://www.codeship.io/projects/b5524630-43f6-0131-3b4d-76a8e32a74d4/status)](https://www.codeship.io/projects/10739)
 
4
 
5
  ## Welcome to the Testimonials Widget Github repository
6
 
UPGRADING.md CHANGED
@@ -1,5 +1,34 @@
1
  # Upgrade Notices - Testimonials Widget
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ## 3.0.0
4
 
5
  This is a major overhaul *without* backwards compliance of over 80 changes. Please read the [Testimonials Widget 3.0 and Testimonials Widget Premium 2.0 Upgrade Notice](https://nodedesk.zendesk.com/hc/en-us/articles/202476552) for more help.
@@ -78,7 +107,7 @@ The changes and helpers below are intended to help you update your customization
78
  ## 2.14.0
79
 
80
  * **60 modifications** See [Changelog](https://github.com/michael-cannon/testimonials-widget/blob/master/CHANGELOG.md)
81
- * CSS wp_register_style and wp_enqueue_style slug changed from 'testimonials-widget' to 'Testimonials_Widget'
82
  * Gravatar image size now based upon Thumbnail size in Media Settings
83
  * Scripts `ksort` removed. Use `array_unshift` in your `tw_testimonials_js` filters instead.
84
  * Testimonials > Settings, General tab, option Enable Review Schema? is enabled by default.
1
  # Upgrade Notices - Testimonials Widget
2
 
3
+ ## 3.3.0
4
+
5
+ This is an overhaul **without** backwards compliance.
6
+
7
+ If you use the template system, class, methods, global variables of the plugin to modify Testimonials Widget and Testimonials Widget Premium output, this upgrade will not be compatible with those modifications until corrections are made.
8
+
9
+ The changes and helpers below are intended to help you update your customizations quickly. If further help is required, please request it via the support forum.
10
+
11
+ ### Changes
12
+
13
+ * Class names below and all the references to these inside the plugin have been prepended with `Axl_`.
14
+ * `Testimonials_Widget` > `Axl_Testimonials_Widget`
15
+ * `Testimonials_Widget_Slider_Widget` > `Axl_Testimonials_Widget_Slider_Widget`
16
+ * `Testimonials_Widget_Archives_Widget` > `Axl_Testimonials_Widget_Archives_Widget`
17
+ * `Testimonials_Widget_Tag_Cloud_Widget` > `Axl_Testimonials_Widget_Tag_Cloud_Widget`
18
+ * `Testimonials_Widget_Categories_Widget` > `Axl_Testimonials_Widget_Categories_Widget`
19
+ * `Testimonials_Widget_Recent_Testimonials_Widget` > `Axl_Testimonials_Widget_Recent_Testimonials_Widget`
20
+ * `Testimonials_Widget_Settings` > `Axl_Testimonials_Widget_Settings`
21
+ * `Testimonials_Widget_Template_Loader` > `Axl_Testimonials_Widget_Template_Loader`
22
+ * Global variables below have been prepended with `Axl_`.
23
+ * `$Testimonials_Widget_Settings` > `$Axl_Testimonials_Widget_Settings`
24
+ * `$Testimonials_Widget` > `$Axl_Testimonials_Widget`
25
+
26
+ ### Helpers
27
+
28
+ *Replace `Testimonials_Widget` with `Axl_Testimonials_Widget` through out all your custom plugins and themes which customize Testimonials Widget's output. Please take backup measures beforehand.*
29
+
30
+ * `find . -type f \( -name "*.php" -o -name "*.txt" -o -name "*.md" \) -exec perl -pi -e "s#\b(Testimonials_Widget)#Axl_\1#g" {} \;`
31
+
32
  ## 3.0.0
33
 
34
  This is a major overhaul *without* backwards compliance of over 80 changes. Please read the [Testimonials Widget 3.0 and Testimonials Widget Premium 2.0 Upgrade Notice](https://nodedesk.zendesk.com/hc/en-us/articles/202476552) for more help.
107
  ## 2.14.0
108
 
109
  * **60 modifications** See [Changelog](https://github.com/michael-cannon/testimonials-widget/blob/master/CHANGELOG.md)
110
+ * CSS wp_register_style and wp_enqueue_style slug changed from 'testimonials-widget' to 'Axl_Testimonials_Widget'
111
  * Gravatar image size now based upon Thumbnail size in Media Settings
112
  * Scripts `ksort` removed. Use `array_unshift` in your `tw_testimonials_js` filters instead.
113
  * Testimonials > Settings, General tab, option Enable Review Schema? is enabled by default.
assets/css/testimonials-widget.css CHANGED
@@ -46,6 +46,10 @@
46
  float: none;
47
  }
48
 
 
 
 
 
49
  .testimonials-widget-testimonial q,
50
  .testimonials-widget-testimonial blockquote {
51
  /* the testimonial itself */
46
  float: none;
47
  }
48
 
49
+ .testimonials-widget-testimonial .list-title {
50
+ font-weight: bold;
51
+ }
52
+
53
  .testimonials-widget-testimonial q,
54
  .testimonials-widget-testimonial blockquote {
55
  /* the testimonial itself */
includes/class-testimonials-widget-archives-widget.php CHANGED
@@ -20,12 +20,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
- if ( class_exists( 'Testimonials_Widget_Archives_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
- class Testimonials_Widget_Archives_Widget extends Aihrus_Widget {
29
  const ID = 'tw_archives_widget';
30
 
31
  public static $title;
@@ -45,7 +45,7 @@ class Testimonials_Widget_Archives_Widget extends Aihrus_Widget {
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
- return Testimonials_Widget::testimonials_archives( $instance, $widget_number );
49
  }
50
 
51
 
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
+ if ( class_exists( 'Axl_Testimonials_Widget_Archives_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
+ class Axl_Testimonials_Widget_Archives_Widget extends Aihrus_Widget {
29
  const ID = 'tw_archives_widget';
30
 
31
  public static $title;
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
+ return Axl_Testimonials_Widget::testimonials_archives( $instance, $widget_number );
49
  }
50
 
51
 
includes/class-testimonials-widget-categories-widget.php CHANGED
@@ -20,12 +20,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
- if ( class_exists( 'Testimonials_Widget_Categories_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
- class Testimonials_Widget_Categories_Widget extends Aihrus_Widget {
29
  const ID = 'tw_categories_widget';
30
 
31
  public static $title;
@@ -45,7 +45,7 @@ class Testimonials_Widget_Categories_Widget extends Aihrus_Widget {
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
- return Testimonials_Widget::testimonials_categories( $instance, $widget_number );
49
  }
50
 
51
 
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
+ if ( class_exists( 'Axl_Testimonials_Widget_Categories_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
+ class Axl_Testimonials_Widget_Categories_Widget extends Aihrus_Widget {
29
  const ID = 'tw_categories_widget';
30
 
31
  public static $title;
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
+ return Axl_Testimonials_Widget::testimonials_categories( $instance, $widget_number );
49
  }
50
 
51
 
includes/class-testimonials-widget-recent-testimonials-widget.php CHANGED
@@ -20,12 +20,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
- if ( class_exists( 'Testimonials_Widget_Recent_Testimonials_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
- class Testimonials_Widget_Recent_Testimonials_Widget extends Aihrus_Widget {
29
  const ID = 'tw_recent_testimonials_widget';
30
 
31
  public static $title;
@@ -45,7 +45,7 @@ class Testimonials_Widget_Recent_Testimonials_Widget extends Aihrus_Widget {
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
- return Testimonials_Widget::testimonials_recent( $instance, $widget_number );
49
  }
50
 
51
 
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
+ if ( class_exists( 'Axl_Testimonials_Widget_Recent_Testimonials_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
+ class Axl_Testimonials_Widget_Recent_Testimonials_Widget extends Aihrus_Widget {
29
  const ID = 'tw_recent_testimonials_widget';
30
 
31
  public static $title;
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
+ return Axl_Testimonials_Widget::testimonials_recent( $instance, $widget_number );
49
  }
50
 
51
 
includes/class-testimonials-widget-settings.php CHANGED
@@ -26,12 +26,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
26
 
27
  require_once AIHR_DIR_INC . 'class-aihrus-settings.php';
28
 
29
- if ( class_exists( 'Testimonials_Widget_Settings' ) ) {
30
  return;
31
  }
32
 
33
 
34
- class Testimonials_Widget_Settings extends Aihrus_Settings {
35
  const ID = 'testimonialswidget_settings';
36
  const NAME = 'Testimonials Widget Settings';
37
 
@@ -77,14 +77,14 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
77
  add_filter( 'wp_unique_post_slug_is_bad_flat_slug', array( __CLASS__, 'is_bad_flat_slug' ), 10, 3 );
78
 
79
  $version = tw_get_option( 'version' );
80
- self::$version = Testimonials_Widget::VERSION;
81
  self::$version = apply_filters( 'tw_version', self::$version );
82
 
83
  if ( $version != self::$version ) {
84
  self::initialize_settings();
85
  }
86
 
87
- if ( ! Testimonials_Widget::do_load() ) {
88
  return;
89
  }
90
 
@@ -94,7 +94,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
94
 
95
 
96
  public static function admin_menu() {
97
- self::$admin_page = add_submenu_page( 'edit.php?post_type=' . Testimonials_Widget::PT, esc_html__( 'Testimonials Settings', 'testimonials-widget' ), esc_html__( 'Settings', 'testimonials-widget' ), 'manage_options', self::ID, array( __CLASS__, 'display_page' ) );
98
 
99
  add_action( 'admin_print_scripts-' . self::$admin_page, array( __CLASS__, 'scripts' ) );
100
  add_action( 'admin_print_styles-' . self::$admin_page, array( __CLASS__, 'styles' ) );
@@ -105,7 +105,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
105
  public static function init() {
106
  load_plugin_textdomain( 'testimonials-widget', false, '/testimonials-widget/languages/' );
107
 
108
- self::$plugin_assets = Testimonials_Widget::$plugin_assets;
109
  }
110
 
111
 
@@ -348,6 +348,15 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
348
  'type' => 'expand_begin',
349
  );
350
 
 
 
 
 
 
 
 
 
 
351
  self::$settings['hide_source'] = array(
352
  'section' => 'fields',
353
  'title' => esc_html__( 'Hide Author?', 'testimonials-widget' ),
@@ -725,7 +734,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
725
  // Examples
726
  self::$settings['examples'] = array(
727
  'section' => 'examples',
728
- 'desc' => Testimonials_Widget::testimonials_examples(),
729
  'type' => 'content',
730
  'widget' => 0,
731
  );
@@ -735,7 +744,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
735
  self::$settings['options'] = array(
736
  'section' => 'options',
737
  'type' => 'content',
738
- 'desc' => Testimonials_Widget::testimonials_options(),
739
  'widget' => 0,
740
  );
741
  self::$settings['options'] = wp_parse_args( self::$settings['options'], self::$default );
@@ -845,7 +854,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
845
  }
846
 
847
  $input['version'] = self::$version;
848
- $input['donate_version'] = Testimonials_Widget::VERSION;
849
 
850
  $input = apply_filters( 'tw_validate_settings', $input, $errors );
851
  if ( empty( $do_errors ) ) {
@@ -943,7 +952,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
943
  array(
944
  'id' => 'tw-general',
945
  'title' => esc_html__( 'General', 'testimonials-widget' ),
946
- 'content' => '<p>' . esc_html__( 'General options.', 'testimonials-widget' ) . '</p>'
947
  )
948
  );
949
 
@@ -951,7 +960,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
951
  array(
952
  'id' => 'tw-fields',
953
  'title' => esc_html__( 'Fields', 'testimonials-widget' ),
954
- 'content' => '<p>' . esc_html__( 'Show or hide fields.', 'testimonials-widget' ) . '</p>'
955
  )
956
  );
957
 
@@ -959,7 +968,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
959
  array(
960
  'id' => 'tw-selection',
961
  'title' => esc_html__( 'Selection', 'testimonials-widget' ),
962
- 'content' => '<p>' . esc_html__( 'Options used to select testimonials.', 'testimonials-widget' ) . '</p>'
963
  )
964
  );
965
 
@@ -967,7 +976,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
967
  array(
968
  'id' => 'tw-ordering',
969
  'title' => esc_html__( 'Ordering', 'testimonials-widget' ),
970
- 'content' => '<p>' . esc_html__( 'Options used to determine displayed testimonials ordering.', 'testimonials-widget' ) . '</p>'
971
  )
972
  );
973
 
@@ -975,7 +984,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
975
  array(
976
  'id' => 'tw-columns',
977
  'title' => esc_html__( 'Columns', 'testimonials-widget' ),
978
- 'content' => '<p>' . esc_html__( 'Allowed columns to display on edit page.', 'testimonials-widget' ) . '</p>'
979
  )
980
  );
981
 
@@ -983,7 +992,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
983
  array(
984
  'id' => 'tw-post_type',
985
  'title' => esc_html__( 'Post Type', 'testimonials-widget' ),
986
- 'content' => '<p>' . esc_html__( 'Archive and singular page URL related testimonials options.', 'testimonials-widget' ) . '</p>'
987
  )
988
  );
989
 
@@ -991,7 +1000,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
991
  array(
992
  'id' => 'tw-widget',
993
  'title' => esc_html__( 'Slider Widget', 'testimonials-widget' ),
994
- 'content' => '<p>' . esc_html__( 'Options related to showing testimonials in widgets.', 'testimonials-widget' ) . '</p>'
995
  )
996
  );
997
 
@@ -999,7 +1008,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
999
  array(
1000
  'id' => 'tw-reset',
1001
  'title' => esc_html__( 'Reset', 'testimonials-widget' ),
1002
- 'content' => '<p>' . esc_html__( 'Backwards compatibility, import/export options, and reset options.', 'testimonials-widget' ) . '</p>'
1003
  )
1004
  );
1005
 
@@ -1017,7 +1026,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
1017
  if ( ! $use_cpt_taxonomy ) {
1018
  $taxonomy = 'category';
1019
  } else {
1020
- $taxonomy = Testimonials_Widget::$cpt_category;
1021
  }
1022
 
1023
  break;
@@ -1026,7 +1035,7 @@ class Testimonials_Widget_Settings extends Aihrus_Settings {
1026
  if ( ! $use_cpt_taxonomy ) {
1027
  $taxonomy = 'post_tag';
1028
  } else {
1029
- $taxonomy = Testimonials_Widget::$cpt_tags;
1030
  }
1031
 
1032
  break;
@@ -1045,17 +1054,15 @@ EOD;
1045
 
1046
  return $scripts;
1047
  }
1048
-
1049
-
1050
  }
1051
 
1052
 
1053
  function tw_get_options() {
1054
- $options = get_option( Testimonials_Widget_Settings::ID );
1055
 
1056
  if ( false === $options ) {
1057
- $options = Testimonials_Widget_Settings::get_defaults();
1058
- update_option( Testimonials_Widget_Settings::ID, $options );
1059
  }
1060
 
1061
  return $options;
@@ -1063,7 +1070,7 @@ function tw_get_options() {
1063
 
1064
 
1065
  function tw_get_option( $option, $default = null ) {
1066
- $options = get_option( Testimonials_Widget_Settings::ID, null );
1067
 
1068
  if ( isset( $options[ $option ] ) ) {
1069
  return $options[ $option ];
@@ -1074,22 +1081,22 @@ function tw_get_option( $option, $default = null ) {
1074
 
1075
 
1076
  function tw_set_option( $option, $value = null ) {
1077
- $options = get_option( Testimonials_Widget_Settings::ID );
1078
 
1079
  if ( ! is_array( $options ) ) {
1080
  $options = array();
1081
  }
1082
 
1083
  $options[ $option ] = $value;
1084
- update_option( Testimonials_Widget_Settings::ID, $options );
1085
  }
1086
 
1087
 
1088
  function tw_init_options() {
1089
  $options = tw_get_options();
1090
- $options = wp_parse_args( $options, Testimonials_Widget::get_defaults() );
1091
- $options = Testimonials_Widget_Settings::validate_settings( $options );
1092
- update_option( Testimonials_Widget_Settings::ID, $options );
1093
  }
1094
 
1095
  ?>
26
 
27
  require_once AIHR_DIR_INC . 'class-aihrus-settings.php';
28
 
29
+ if ( class_exists( 'Axl_Testimonials_Widget_Settings' ) ) {
30
  return;
31
  }
32
 
33
 
34
+ class Axl_Testimonials_Widget_Settings extends Aihrus_Settings {
35
  const ID = 'testimonialswidget_settings';
36
  const NAME = 'Testimonials Widget Settings';
37
 
77
  add_filter( 'wp_unique_post_slug_is_bad_flat_slug', array( __CLASS__, 'is_bad_flat_slug' ), 10, 3 );
78
 
79
  $version = tw_get_option( 'version' );
80
+ self::$version = Axl_Testimonials_Widget::VERSION;
81
  self::$version = apply_filters( 'tw_version', self::$version );
82
 
83
  if ( $version != self::$version ) {
84
  self::initialize_settings();
85
  }
86
 
87
+ if ( ! Axl_Testimonials_Widget::do_load() ) {
88
  return;
89
  }
90
 
94
 
95
 
96
  public static function admin_menu() {
97
+ self::$admin_page = add_submenu_page( 'edit.php?post_type=' . Axl_Testimonials_Widget::PT, esc_html__( 'Testimonials Settings', 'testimonials-widget' ), esc_html__( 'Settings', 'testimonials-widget' ), 'manage_options', self::ID, array( __CLASS__, 'display_page' ) );
98
 
99
  add_action( 'admin_print_scripts-' . self::$admin_page, array( __CLASS__, 'scripts' ) );
100
  add_action( 'admin_print_styles-' . self::$admin_page, array( __CLASS__, 'styles' ) );
105
  public static function init() {
106
  load_plugin_textdomain( 'testimonials-widget', false, '/testimonials-widget/languages/' );
107
 
108
+ self::$plugin_assets = Axl_Testimonials_Widget::$plugin_assets;
109
  }
110
 
111
 
348
  'type' => 'expand_begin',
349
  );
350
 
351
+ self::$settings['hide_source_title'] = array(
352
+ 'section' => 'fields',
353
+ 'title' => esc_html__( 'Hide Title Above Content?', 'testimonials-widget' ),
354
+ 'type' => 'checkbox',
355
+ 'validate' => 'is_true',
356
+ 'std' => 1,
357
+ 'desc' => esc_html__( 'Don\'t display testimonial title above testimonial content.', 'testimonials-widget' ),
358
+ );
359
+
360
  self::$settings['hide_source'] = array(
361
  'section' => 'fields',
362
  'title' => esc_html__( 'Hide Author?', 'testimonials-widget' ),
734
  // Examples
735
  self::$settings['examples'] = array(
736
  'section' => 'examples',
737
+ 'desc' => Axl_Testimonials_Widget::testimonials_examples(),
738
  'type' => 'content',
739
  'widget' => 0,
740
  );
744
  self::$settings['options'] = array(
745
  'section' => 'options',
746
  'type' => 'content',
747
+ 'desc' => Axl_Testimonials_Widget::testimonials_options(),
748
  'widget' => 0,
749
  );
750
  self::$settings['options'] = wp_parse_args( self::$settings['options'], self::$default );
854
  }
855
 
856
  $input['version'] = self::$version;
857
+ $input['donate_version'] = Axl_Testimonials_Widget::VERSION;
858
 
859
  $input = apply_filters( 'tw_validate_settings', $input, $errors );
860
  if ( empty( $do_errors ) ) {
952
  array(
953
  'id' => 'tw-general',
954
  'title' => esc_html__( 'General', 'testimonials-widget' ),
955
+ 'content' => '<p>' . esc_html__( 'General options.', 'testimonials-widget' ) . '</p>',
956
  )
957
  );
958
 
960
  array(
961
  'id' => 'tw-fields',
962
  'title' => esc_html__( 'Fields', 'testimonials-widget' ),
963
+ 'content' => '<p>' . esc_html__( 'Show or hide fields.', 'testimonials-widget' ) . '</p>',
964
  )
965
  );
966
 
968
  array(
969
  'id' => 'tw-selection',
970
  'title' => esc_html__( 'Selection', 'testimonials-widget' ),
971
+ 'content' => '<p>' . esc_html__( 'Options used to select testimonials.', 'testimonials-widget' ) . '</p>',
972
  )
973
  );
974
 
976
  array(
977
  'id' => 'tw-ordering',
978
  'title' => esc_html__( 'Ordering', 'testimonials-widget' ),
979
+ 'content' => '<p>' . esc_html__( 'Options used to determine displayed testimonials ordering.', 'testimonials-widget' ) . '</p>',
980
  )
981
  );
982
 
984
  array(
985
  'id' => 'tw-columns',
986
  'title' => esc_html__( 'Columns', 'testimonials-widget' ),
987
+ 'content' => '<p>' . esc_html__( 'Allowed columns to display on edit page.', 'testimonials-widget' ) . '</p>',
988
  )
989
  );
990
 
992
  array(
993
  'id' => 'tw-post_type',
994
  'title' => esc_html__( 'Post Type', 'testimonials-widget' ),
995
+ 'content' => '<p>' . esc_html__( 'Archive and singular page URL related testimonials options.', 'testimonials-widget' ) . '</p>',
996
  )
997
  );
998
 
1000
  array(
1001
  'id' => 'tw-widget',
1002
  'title' => esc_html__( 'Slider Widget', 'testimonials-widget' ),
1003
+ 'content' => '<p>' . esc_html__( 'Options related to showing testimonials in widgets.', 'testimonials-widget' ) . '</p>',
1004
  )
1005
  );
1006
 
1008
  array(
1009
  'id' => 'tw-reset',
1010
  'title' => esc_html__( 'Reset', 'testimonials-widget' ),
1011
+ 'content' => '<p>' . esc_html__( 'Backwards compatibility, import/export options, and reset options.', 'testimonials-widget' ) . '</p>',
1012
  )
1013
  );
1014
 
1026
  if ( ! $use_cpt_taxonomy ) {
1027
  $taxonomy = 'category';
1028
  } else {
1029
+ $taxonomy = Axl_Testimonials_Widget::$cpt_category;
1030
  }
1031
 
1032
  break;
1035
  if ( ! $use_cpt_taxonomy ) {
1036
  $taxonomy = 'post_tag';
1037
  } else {
1038
+ $taxonomy = Axl_Testimonials_Widget::$cpt_tags;
1039
  }
1040
 
1041
  break;
1054
 
1055
  return $scripts;
1056
  }
 
 
1057
  }
1058
 
1059
 
1060
  function tw_get_options() {
1061
+ $options = get_option( Axl_Testimonials_Widget_Settings::ID );
1062
 
1063
  if ( false === $options ) {
1064
+ $options = Axl_Testimonials_Widget_Settings::get_defaults();
1065
+ update_option( Axl_Testimonials_Widget_Settings::ID, $options );
1066
  }
1067
 
1068
  return $options;
1070
 
1071
 
1072
  function tw_get_option( $option, $default = null ) {
1073
+ $options = get_option( Axl_Testimonials_Widget_Settings::ID, null );
1074
 
1075
  if ( isset( $options[ $option ] ) ) {
1076
  return $options[ $option ];
1081
 
1082
 
1083
  function tw_set_option( $option, $value = null ) {
1084
+ $options = get_option( Axl_Testimonials_Widget_Settings::ID );
1085
 
1086
  if ( ! is_array( $options ) ) {
1087
  $options = array();
1088
  }
1089
 
1090
  $options[ $option ] = $value;
1091
+ update_option( Axl_Testimonials_Widget_Settings::ID, $options );
1092
  }
1093
 
1094
 
1095
  function tw_init_options() {
1096
  $options = tw_get_options();
1097
+ $options = wp_parse_args( $options, Axl_Testimonials_Widget::get_defaults() );
1098
+ $options = Axl_Testimonials_Widget_Settings::validate_settings( $options );
1099
+ update_option( Axl_Testimonials_Widget_Settings::ID, $options );
1100
  }
1101
 
1102
  ?>
includes/class-testimonials-widget-slider-widget.php CHANGED
@@ -20,12 +20,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
- if ( class_exists( 'Testimonials_Widget_Slider_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
- class Testimonials_Widget_Slider_Widget extends Aihrus_Widget {
29
  // should be tw_slider_widget, but for backwards compliance left alone
30
  const ID = 'testimonials_widget';
31
 
@@ -41,22 +41,22 @@ class Testimonials_Widget_Slider_Widget extends Aihrus_Widget {
41
 
42
 
43
  public static function get_testimonials_css() {
44
- Testimonials_Widget::get_testimonials_css();
45
  }
46
 
47
 
48
  public static function get_testimonials_scripts() {
49
- Testimonials_Widget::get_testimonials_scripts();
50
  }
51
 
52
 
53
  public static function get_defaults() {
54
- return Testimonials_Widget::get_defaults();
55
  }
56
 
57
 
58
  public static function get_content( $instance = null, $widget_number = null ) {
59
- return Testimonials_Widget::testimonials_slider( $instance, $widget_number );
60
  }
61
 
62
 
@@ -84,10 +84,10 @@ class Testimonials_Widget_Slider_Widget extends Aihrus_Widget {
84
 
85
 
86
  public static function form_parts( $instance = null, $number = null ) {
87
- $form_parts = Testimonials_Widget_Settings::get_settings();
88
 
89
  if ( ! empty( $instance['do_number'] ) ) {
90
- $std = ' .' . Testimonials_Widget::ID . $number;
91
 
92
  $form_parts['css_class'] = array(
93
  'section' => 'widget',
@@ -106,11 +106,8 @@ class Testimonials_Widget_Slider_Widget extends Aihrus_Widget {
106
 
107
 
108
  public static function get_suggest( $id, $suggest_id ) {
109
- return Testimonials_Widget_Settings::get_suggest( $id, $suggest_id );
110
  }
111
-
112
-
113
  }
114
 
115
-
116
  ?>
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
+ if ( class_exists( 'Axl_Testimonials_Widget_Slider_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
+ class Axl_Testimonials_Widget_Slider_Widget extends Aihrus_Widget {
29
  // should be tw_slider_widget, but for backwards compliance left alone
30
  const ID = 'testimonials_widget';
31
 
41
 
42
 
43
  public static function get_testimonials_css() {
44
+ Axl_Testimonials_Widget::get_testimonials_css();
45
  }
46
 
47
 
48
  public static function get_testimonials_scripts() {
49
+ Axl_Testimonials_Widget::get_testimonials_scripts();
50
  }
51
 
52
 
53
  public static function get_defaults() {
54
+ return Axl_Testimonials_Widget::get_defaults();
55
  }
56
 
57
 
58
  public static function get_content( $instance = null, $widget_number = null ) {
59
+ return Axl_Testimonials_Widget::testimonials_slider( $instance, $widget_number );
60
  }
61
 
62
 
84
 
85
 
86
  public static function form_parts( $instance = null, $number = null ) {
87
+ $form_parts = Axl_Testimonials_Widget_Settings::get_settings();
88
 
89
  if ( ! empty( $instance['do_number'] ) ) {
90
+ $std = ' .' . Axl_Testimonials_Widget::ID . $number;
91
 
92
  $form_parts['css_class'] = array(
93
  'section' => 'widget',
106
 
107
 
108
  public static function get_suggest( $id, $suggest_id ) {
109
+ return Axl_Testimonials_Widget_Settings::get_suggest( $id, $suggest_id );
110
  }
 
 
111
  }
112
 
 
113
  ?>
includes/class-testimonials-widget-tag-cloud-widget.php CHANGED
@@ -20,12 +20,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
- if ( class_exists( 'Testimonials_Widget_Tag_Cloud_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
- class Testimonials_Widget_Tag_Cloud_Widget extends Aihrus_Widget {
29
  const ID = 'tw_tag_cloud_widget';
30
 
31
  public static $title;
@@ -45,7 +45,7 @@ class Testimonials_Widget_Tag_Cloud_Widget extends Aihrus_Widget {
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
- return Testimonials_Widget::testimonials_tag_cloud( $instance, $widget_number );
49
  }
50
 
51
 
@@ -67,11 +67,11 @@ class Testimonials_Widget_Tag_Cloud_Widget extends Aihrus_Widget {
67
  $std = 'post_tag';
68
  } else {
69
  $options = array(
70
- Testimonials_Widget::$cpt_category => esc_html__( 'Category', 'testimonials-widget' ),
71
- Testimonials_Widget::$cpt_tags => esc_html__( 'Tags', 'testimonials-widget' ),
72
  );
73
 
74
- $std = Testimonials_Widget::$cpt_tags;
75
  }
76
 
77
  $form_parts['taxonomy'] = array(
20
 
21
  require_once AIHR_DIR_INC . 'class-aihrus-widget.php';
22
 
23
+ if ( class_exists( 'Axl_Testimonials_Widget_Tag_Cloud_Widget' ) ) {
24
  return;
25
  }
26
 
27
 
28
+ class Axl_Testimonials_Widget_Tag_Cloud_Widget extends Aihrus_Widget {
29
  const ID = 'tw_tag_cloud_widget';
30
 
31
  public static $title;
45
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
46
  */
47
  public static function get_content( $instance = null, $widget_number = null ) {
48
+ return Axl_Testimonials_Widget::testimonials_tag_cloud( $instance, $widget_number );
49
  }
50
 
51
 
67
  $std = 'post_tag';
68
  } else {
69
  $options = array(
70
+ Axl_Testimonials_Widget::$cpt_category => esc_html__( 'Category', 'testimonials-widget' ),
71
+ Axl_Testimonials_Widget::$cpt_tags => esc_html__( 'Tags', 'testimonials-widget' ),
72
  );
73
 
74
+ $std = Axl_Testimonials_Widget::$cpt_tags;
75
  }
76
 
77
  $form_parts['taxonomy'] = array(
includes/class-testimonials-widget-template-loader.php CHANGED
@@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
26
 
27
  require_once TW_DIR_LIB . 'Gamajo-Template-Loader/class-gamajo-template-loader.php';
28
 
29
- if ( class_exists( 'Testimonials_Widget_Template_Loader' ) ) {
30
  return;
31
  }
32
 
@@ -36,7 +36,7 @@ if ( class_exists( 'Testimonials_Widget_Template_Loader' ) ) {
36
  *
37
  * @SuppressWarnings(PHPMD.LongVariable)
38
  */
39
- class Testimonials_Widget_Template_Loader extends Gamajo_Template_Loader {
40
  protected $filter_prefix = 'testimonials_widget';
41
  protected $theme_template_directory = 'testimonials-widget';
42
  protected $plugin_directory = TW_DIR;
26
 
27
  require_once TW_DIR_LIB . 'Gamajo-Template-Loader/class-gamajo-template-loader.php';
28
 
29
+ if ( class_exists( 'Axl_Testimonials_Widget_Template_Loader' ) ) {
30
  return;
31
  }
32
 
36
  *
37
  * @SuppressWarnings(PHPMD.LongVariable)
38
  */
39
+ class Axl_Testimonials_Widget_Template_Loader extends Gamajo_Template_Loader {
40
  protected $filter_prefix = 'testimonials_widget';
41
  protected $theme_template_directory = 'testimonials-widget';
42
  protected $plugin_directory = TW_DIR;
includes/class-testimonials-widget.php CHANGED
@@ -28,12 +28,12 @@ require_once TW_DIR_INC . 'class-testimonials-widget-slider-widget.php';
28
  require_once TW_DIR_INC . 'class-testimonials-widget-tag-cloud-widget.php';
29
  require_once TW_DIR_INC . 'class-testimonials-widget-template-loader.php';
30
 
31
- if ( class_exists( 'Testimonials_Widget' ) ) {
32
  return;
33
  }
34
 
35
 
36
- class Testimonials_Widget extends Aihrus_Common {
37
  const BASE = TW_BASE;
38
  const ID = 'testimonials-widget-testimonials';
39
  const SLUG = 'tw_';
@@ -71,6 +71,9 @@ class Testimonials_Widget extends Aihrus_Common {
71
  public static $aggregate_review = 'reviewCount';
72
  public static $aggregate_schema = 'http://schema.org/AggregateRating';
73
 
 
 
 
74
  public static $cw_author = 'author';
75
  public static $cw_date = 'datePublished';
76
  public static $cw_date_mod = 'dateModified';
@@ -133,7 +136,7 @@ class Testimonials_Widget extends Aihrus_Common {
133
  public static function admin_init() {
134
  self::support_thumbnails();
135
 
136
- self::$settings_link = '<a href="' . get_admin_url() . 'edit.php?post_type=' . self::PT . '&page=' . Testimonials_Widget_Settings::ID . '">' . esc_html__( 'Settings', 'testimonials-widget' ) . '</a>';
137
 
138
  self::add_meta_box_testimonials_widget();
139
  self::update();
@@ -297,7 +300,7 @@ class Testimonials_Widget extends Aihrus_Common {
297
 
298
  $delete_data = tw_get_option( 'delete_data', false );
299
  if ( $delete_data ) {
300
- delete_option( Testimonials_Widget_Settings::ID );
301
  $wpdb->query( 'OPTIMIZE TABLE `' . $wpdb->options . '`' );
302
 
303
  self::delete_testimonials();
@@ -395,6 +398,7 @@ class Testimonials_Widget extends Aihrus_Common {
395
  if ( $prior_version < self::VERSION ) {
396
  tw_requirements_check( true );
397
  tw_init_options();
 
398
  flush_rewrite_rules();
399
  do_action( 'tw_update' );
400
  }
@@ -404,7 +408,7 @@ class Testimonials_Widget extends Aihrus_Common {
404
 
405
  // display donate on major/minor version release
406
  $donate_version = tw_get_option( 'donate_version', false );
407
- if ( ! $donate_version || ( $donate_version != self::VERSION && preg_match( '#\.0$#', self::VERSION ) ) ) {
408
  self::set_notice( 'notice_donate' );
409
  tw_set_option( 'donate_version', self::VERSION );
410
  }
@@ -678,7 +682,7 @@ class Testimonials_Widget extends Aihrus_Common {
678
 
679
  public static function testimonials( $atts ) {
680
  $atts = wp_parse_args( $atts, self::get_defaults() );
681
- $atts = Testimonials_Widget_Settings::validate_settings( $atts );
682
 
683
  if ( get_query_var( 'paged' ) ) {
684
  $atts['paged'] = get_query_var( 'paged' );
@@ -722,7 +726,7 @@ class Testimonials_Widget extends Aihrus_Common {
722
  }
723
 
724
  $atts = wp_parse_args( $atts, self::get_defaults() );
725
- $atts = Testimonials_Widget_Settings::validate_settings( $atts );
726
 
727
  $atts['paging'] = false;
728
  $atts['type'] = 'testimonials_slider';
@@ -817,14 +821,14 @@ class Testimonials_Widget extends Aihrus_Common {
817
  $adaptive_height = $atts['adaptive_height'] ? 'true' : 'false';
818
  $enable_video = $atts['enable_video'];
819
  $show_start_stop = $atts['show_start_stop'];
820
- $slide_width = empty( $slide_width ) ? 0 : $atts['slide_width'];
821
  $transition_mode = $atts['transition_mode'];
822
 
823
  $auto = $refresh_interval ? 'true' : 'false';
824
  $pause = $refresh_interval * 1000;
825
  $video = $enable_video ? "video: true,\nuseCSS: false" : 'video: false';
826
 
827
- $autoControls = $show_start_stop ? 'autoControls: true,' : '';
828
 
829
  $slider_var = self::SLUG . $widget_number;
830
  $javascript .= <<<EOF
@@ -834,7 +838,7 @@ jQuery(document).ready(function() {
834
  {$slider_var} = jQuery('.{$id_base}').bxSlider({
835
  adaptiveHeight: {$adaptive_height},
836
  auto: {$auto},
837
- {$autoControls}
838
  autoHover: true,
839
  controls: false,
840
  mode: '{$transition_mode}',
@@ -869,7 +873,7 @@ EOF;
869
 
870
  $div_open = self::get_template_part( 'testimonials', 'open' );
871
 
872
- $paging = Testimonials_Widget_Settings::is_true( $atts['paging'] );
873
  $pre_paging = '';
874
  if ( $paging || 'before' === strtolower( $atts['paging'] ) ) {
875
  $pre_paging = self::get_testimonials_paging( $atts );
@@ -1355,11 +1359,11 @@ EOF;
1355
 
1356
 
1357
  public static function widgets_init() {
1358
- register_widget( 'Testimonials_Widget_Archives_Widget' );
1359
- register_widget( 'Testimonials_Widget_Categories_Widget' );
1360
- register_widget( 'Testimonials_Widget_Recent_Testimonials_Widget' );
1361
- register_widget( 'Testimonials_Widget_Slider_Widget' );
1362
- register_widget( 'Testimonials_Widget_Tag_Cloud_Widget' );
1363
  }
1364
 
1365
 
@@ -1447,7 +1451,7 @@ EOF;
1447
  7 => esc_html__( 'Testimonial saved.', 'testimonials-widget' ),
1448
  8 => sprintf( __( 'Testimonial submitted. <a target="_blank" href="%s">Preview testimonial</a>', 'testimonials-widget' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
1449
  9 => sprintf( __( 'Testimonial scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview testimonial</a>', 'testimonials-widget' ), date_i18n( 'M j, Y @ G:i', strtotime( $post->post_date ) ), esc_url( get_permalink( $post->ID ) ) ),
1450
- 10 => sprintf( __( 'Testimonial draft updated. <a target="_blank" href="%s">Preview testimonial</a>', 'testimonials-widget' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) )
1451
  );
1452
 
1453
  return $m;
@@ -1581,7 +1585,7 @@ EOF;
1581
 
1582
  $review_meta[ self::$cw_date ] = $the_date;
1583
  $review_meta[ self::$cw_date_mod ] = $the_date_mod;
1584
- $review_meta[ self::$thing_url ] = post_permalink( $post->ID );
1585
  if ( empty( $review_meta[ self::$thing_name ] ) ) {
1586
  $review_meta[ self::$thing_name ] = self::testimonials_truncate( $testimonial_content, $review_name_length );
1587
  }
@@ -1592,13 +1596,6 @@ EOF;
1592
  $review_meta[ self::$thing_image ] = $src;
1593
  }
1594
 
1595
- $aggregate_meta = array(
1596
- self::$aggregate_review => self::get_review_count( $testimonial ),
1597
- );
1598
-
1599
- $aggregate_meta[ self::$aggregate_count ] = $aggregate_meta[ self::$aggregate_review ];
1600
- $review_meta[ self::$aggregate_rating ] = array( self::$aggregate_schema, $aggregate_meta );
1601
-
1602
  $review_meta = apply_filters( 'tw_schema_review', $review_meta, $testimonial, $atts );
1603
  $review = self::create_schema_meta( $review_meta );
1604
  $schema .= $review;
@@ -1765,7 +1762,7 @@ EOF;
1765
  } elseif ( ! empty( $_REQUEST['post_type'] ) && self::PT == $_REQUEST['post_type'] ) {
1766
  if ( ! empty( $GLOBALS['pagenow'] ) && in_array( $GLOBALS['pagenow'], array( 'edit.php', 'edit-tags.php' ) ) ) {
1767
  $do_load = true;
1768
- } elseif ( ! empty( $_REQUEST['option_page'] ) && Testimonials_Widget_Settings::ID == $_REQUEST['option_page'] ) {
1769
  $do_load = true;
1770
  }
1771
  }
@@ -1858,7 +1855,7 @@ EOF;
1858
 
1859
  public static function get_template_part( $slug, $name = null ) {
1860
  if ( is_null( self::$template_loader ) ) {
1861
- self::$template_loader = new Testimonials_Widget_Template_Loader();
1862
  }
1863
 
1864
  ob_start();
@@ -1885,8 +1882,8 @@ EOF;
1885
 
1886
 
1887
  public static function testimonials_archives( $atts, $widget_number = null ) {
1888
- $atts = wp_parse_args( $atts, Testimonials_Widget_Archives_Widget::get_defaults() );
1889
- $atts = Testimonials_Widget_Archives_Widget::validate_settings( $atts );
1890
 
1891
  $atts['type'] = 'testimonials_archives';
1892
 
@@ -1940,13 +1937,13 @@ EOF;
1940
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
1941
  */
1942
  public static function getarchives_where( $where, $args ) {
1943
- return "WHERE post_type = '" . Testimonials_Widget::PT . "' AND post_status = 'publish'";
1944
  }
1945
 
1946
 
1947
  public static function testimonials_categories( $atts, $widget_number = null ) {
1948
- $atts = wp_parse_args( $atts, Testimonials_Widget_Categories_Widget::get_defaults() );
1949
- $atts = Testimonials_Widget_Categories_Widget::validate_settings( $atts );
1950
 
1951
  $atts['type'] = 'testimonials_categories';
1952
 
@@ -1980,8 +1977,8 @@ EOF;
1980
 
1981
 
1982
  public static function testimonials_recent( $atts, $widget_number = null ) {
1983
- $atts = wp_parse_args( $atts, Testimonials_Widget_Recent_Testimonials_Widget::get_defaults() );
1984
- $atts = Testimonials_Widget_Recent_Testimonials_Widget::validate_settings( $atts );
1985
 
1986
  $atts['type'] = 'testimonials_recent';
1987
 
@@ -2015,8 +2012,8 @@ EOF;
2015
 
2016
 
2017
  public static function testimonials_tag_cloud( $atts, $widget_number = null ) {
2018
- $atts = wp_parse_args( $atts, Testimonials_Widget_Tag_Cloud_Widget::get_defaults() );
2019
- $atts = Testimonials_Widget_Tag_Cloud_Widget::validate_settings( $atts );
2020
 
2021
  $atts['type'] = 'testimonials_tag_cloud';
2022
 
@@ -2057,14 +2054,14 @@ EOF;
2057
  if ( self::$aggregate_no_item != $testimonial_item ) {
2058
  // @codingStandardsIgnoreStart
2059
  $query_args = array(
2060
- 'post_type' => Testimonials_Widget::PT,
2061
  'posts_per_page' => -1,
2062
  'meta_query' => array(
2063
  'relation' => 'AND',
2064
  array(
2065
  'key' => 'testimonials-widget-item',
2066
  'value' => $testimonial_item,
2067
- 'compare' => 'LIKE',
2068
  ),
2069
  ),
2070
  );
@@ -2072,14 +2069,14 @@ EOF;
2072
  } else {
2073
  // @codingStandardsIgnoreStart
2074
  $query_args = array(
2075
- 'post_type' => Testimonials_Widget::PT,
2076
  'posts_per_page' => -1,
2077
  'meta_query' => array(
2078
  'relation' => 'AND',
2079
  array(
2080
  'key' => 'testimonials-widget-item',
2081
  'value' => '',
2082
- 'compare' => 'LIKE',
2083
  ),
2084
  ),
2085
  );
@@ -2160,10 +2157,10 @@ EOF;
2160
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
2161
  */
2162
  public static function get_testimonials_options( $atts = null ) {
2163
- $sections = Testimonials_Widget_Settings::get_sections();
2164
- $settings = Testimonials_Widget_Settings::get_settings();
2165
 
2166
- $ignored_types = array( 'expand_begin', 'expand_end', 'expand_all', 'content', );
2167
 
2168
  $do_continue = false;
2169
  $do_used_with = false;
@@ -2261,10 +2258,10 @@ EOF;
2261
 
2262
  // remaining widgets
2263
  $widgets = array(
2264
- 'Testimonials_Widget_Archives_Widget' => 'testimonials_archives',
2265
- 'Testimonials_Widget_Categories_Widget' => 'testimonials_categories',
2266
- 'Testimonials_Widget_Recent_Testimonials_Widget' => 'testimonials_recent',
2267
- 'Testimonials_Widget_Tag_Cloud_Widget' => 'testimonials_tag_cloud',
2268
  );
2269
 
2270
  $widgets = apply_filters( 'tw_options_widgets', $widgets );
@@ -2354,7 +2351,6 @@ EOF;
2354
 
2355
  return $used_with_codes;
2356
  }
2357
-
2358
  }
2359
 
2360
  ?>
28
  require_once TW_DIR_INC . 'class-testimonials-widget-tag-cloud-widget.php';
29
  require_once TW_DIR_INC . 'class-testimonials-widget-template-loader.php';
30
 
31
+ if ( class_exists( 'Axl_Testimonials_Widget' ) ) {
32
  return;
33
  }
34
 
35
 
36
+ class Axl_Testimonials_Widget extends Aihrus_Common {
37
  const BASE = TW_BASE;
38
  const ID = 'testimonials-widget-testimonials';
39
  const SLUG = 'tw_';
71
  public static $aggregate_review = 'reviewCount';
72
  public static $aggregate_schema = 'http://schema.org/AggregateRating';
73
 
74
+ public static $rating_max = 5;
75
+ public static $rating_value = 'ratingValue';
76
+
77
  public static $cw_author = 'author';
78
  public static $cw_date = 'datePublished';
79
  public static $cw_date_mod = 'dateModified';
136
  public static function admin_init() {
137
  self::support_thumbnails();
138
 
139
+ self::$settings_link = '<a href="' . get_admin_url() . 'edit.php?post_type=' . self::PT . '&page=' . Axl_Testimonials_Widget_Settings::ID . '">' . esc_html__( 'Settings', 'testimonials-widget' ) . '</a>';
140
 
141
  self::add_meta_box_testimonials_widget();
142
  self::update();
300
 
301
  $delete_data = tw_get_option( 'delete_data', false );
302
  if ( $delete_data ) {
303
+ delete_option( Axl_Testimonials_Widget_Settings::ID );
304
  $wpdb->query( 'OPTIMIZE TABLE `' . $wpdb->options . '`' );
305
 
306
  self::delete_testimonials();
398
  if ( $prior_version < self::VERSION ) {
399
  tw_requirements_check( true );
400
  tw_init_options();
401
+ self::init_post_type();
402
  flush_rewrite_rules();
403
  do_action( 'tw_update' );
404
  }
408
 
409
  // display donate on major/minor version release
410
  $donate_version = tw_get_option( 'donate_version', false );
411
+ if ( ! $donate_version || ( self::VERSION != $donate_version && preg_match( '#\.0$#', self::VERSION ) ) ) {
412
  self::set_notice( 'notice_donate' );
413
  tw_set_option( 'donate_version', self::VERSION );
414
  }
682
 
683
  public static function testimonials( $atts ) {
684
  $atts = wp_parse_args( $atts, self::get_defaults() );
685
+ $atts = Axl_Testimonials_Widget_Settings::validate_settings( $atts );
686
 
687
  if ( get_query_var( 'paged' ) ) {
688
  $atts['paged'] = get_query_var( 'paged' );
726
  }
727
 
728
  $atts = wp_parse_args( $atts, self::get_defaults() );
729
+ $atts = Axl_Testimonials_Widget_Settings::validate_settings( $atts );
730
 
731
  $atts['paging'] = false;
732
  $atts['type'] = 'testimonials_slider';
821
  $adaptive_height = $atts['adaptive_height'] ? 'true' : 'false';
822
  $enable_video = $atts['enable_video'];
823
  $show_start_stop = $atts['show_start_stop'];
824
+ $slide_width = empty( $atts['slide_width'] ) ? 0 : $atts['slide_width'];
825
  $transition_mode = $atts['transition_mode'];
826
 
827
  $auto = $refresh_interval ? 'true' : 'false';
828
  $pause = $refresh_interval * 1000;
829
  $video = $enable_video ? "video: true,\nuseCSS: false" : 'video: false';
830
 
831
+ $auto_controls = $show_start_stop ? 'autoControls: true,' : '';
832
 
833
  $slider_var = self::SLUG . $widget_number;
834
  $javascript .= <<<EOF
838
  {$slider_var} = jQuery('.{$id_base}').bxSlider({
839
  adaptiveHeight: {$adaptive_height},
840
  auto: {$auto},
841
+ {$auto_controls}
842
  autoHover: true,
843
  controls: false,
844
  mode: '{$transition_mode}',
873
 
874
  $div_open = self::get_template_part( 'testimonials', 'open' );
875
 
876
+ $paging = Axl_Testimonials_Widget_Settings::is_true( $atts['paging'] );
877
  $pre_paging = '';
878
  if ( $paging || 'before' === strtolower( $atts['paging'] ) ) {
879
  $pre_paging = self::get_testimonials_paging( $atts );
1359
 
1360
 
1361
  public static function widgets_init() {
1362
+ register_widget( 'Axl_Testimonials_Widget_Archives_Widget' );
1363
+ register_widget( 'Axl_Testimonials_Widget_Categories_Widget' );
1364
+ register_widget( 'Axl_Testimonials_Widget_Recent_Testimonials_Widget' );
1365
+ register_widget( 'Axl_Testimonials_Widget_Slider_Widget' );
1366
+ register_widget( 'Axl_Testimonials_Widget_Tag_Cloud_Widget' );
1367
  }
1368
 
1369
 
1451
  7 => esc_html__( 'Testimonial saved.', 'testimonials-widget' ),
1452
  8 => sprintf( __( 'Testimonial submitted. <a target="_blank" href="%s">Preview testimonial</a>', 'testimonials-widget' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
1453
  9 => sprintf( __( 'Testimonial scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview testimonial</a>', 'testimonials-widget' ), date_i18n( 'M j, Y @ G:i', strtotime( $post->post_date ) ), esc_url( get_permalink( $post->ID ) ) ),
1454
+ 10 => sprintf( __( 'Testimonial draft updated. <a target="_blank" href="%s">Preview testimonial</a>', 'testimonials-widget' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
1455
  );
1456
 
1457
  return $m;
1585
 
1586
  $review_meta[ self::$cw_date ] = $the_date;
1587
  $review_meta[ self::$cw_date_mod ] = $the_date_mod;
1588
+ $review_meta[ self::$thing_url ] = get_permalink( $post->ID );
1589
  if ( empty( $review_meta[ self::$thing_name ] ) ) {
1590
  $review_meta[ self::$thing_name ] = self::testimonials_truncate( $testimonial_content, $review_name_length );
1591
  }
1596
  $review_meta[ self::$thing_image ] = $src;
1597
  }
1598
 
 
 
 
 
 
 
 
1599
  $review_meta = apply_filters( 'tw_schema_review', $review_meta, $testimonial, $atts );
1600
  $review = self::create_schema_meta( $review_meta );
1601
  $schema .= $review;
1762
  } elseif ( ! empty( $_REQUEST['post_type'] ) && self::PT == $_REQUEST['post_type'] ) {
1763
  if ( ! empty( $GLOBALS['pagenow'] ) && in_array( $GLOBALS['pagenow'], array( 'edit.php', 'edit-tags.php' ) ) ) {
1764
  $do_load = true;
1765
+ } elseif ( ! empty( $_REQUEST['option_page'] ) && Axl_Testimonials_Widget_Settings::ID == $_REQUEST['option_page'] ) {
1766
  $do_load = true;
1767
  }
1768
  }
1855
 
1856
  public static function get_template_part( $slug, $name = null ) {
1857
  if ( is_null( self::$template_loader ) ) {
1858
+ self::$template_loader = new Axl_Testimonials_Widget_Template_Loader();
1859
  }
1860
 
1861
  ob_start();
1882
 
1883
 
1884
  public static function testimonials_archives( $atts, $widget_number = null ) {
1885
+ $atts = wp_parse_args( $atts, Axl_Testimonials_Widget_Archives_Widget::get_defaults() );
1886
+ $atts = Axl_Testimonials_Widget_Archives_Widget::validate_settings( $atts );
1887
 
1888
  $atts['type'] = 'testimonials_archives';
1889
 
1937
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
1938
  */
1939
  public static function getarchives_where( $where, $args ) {
1940
+ return "WHERE post_type = '" . Axl_Testimonials_Widget::PT . "' AND post_status = 'publish'";
1941
  }
1942
 
1943
 
1944
  public static function testimonials_categories( $atts, $widget_number = null ) {
1945
+ $atts = wp_parse_args( $atts, Axl_Testimonials_Widget_Categories_Widget::get_defaults() );
1946
+ $atts = Axl_Testimonials_Widget_Categories_Widget::validate_settings( $atts );
1947
 
1948
  $atts['type'] = 'testimonials_categories';
1949
 
1977
 
1978
 
1979
  public static function testimonials_recent( $atts, $widget_number = null ) {
1980
+ $atts = wp_parse_args( $atts, Axl_Testimonials_Widget_Recent_Testimonials_Widget::get_defaults() );
1981
+ $atts = Axl_Testimonials_Widget_Recent_Testimonials_Widget::validate_settings( $atts );
1982
 
1983
  $atts['type'] = 'testimonials_recent';
1984
 
2012
 
2013
 
2014
  public static function testimonials_tag_cloud( $atts, $widget_number = null ) {
2015
+ $atts = wp_parse_args( $atts, Axl_Testimonials_Widget_Tag_Cloud_Widget::get_defaults() );
2016
+ $atts = Axl_Testimonials_Widget_Tag_Cloud_Widget::validate_settings( $atts );
2017
 
2018
  $atts['type'] = 'testimonials_tag_cloud';
2019
 
2054
  if ( self::$aggregate_no_item != $testimonial_item ) {
2055
  // @codingStandardsIgnoreStart
2056
  $query_args = array(
2057
+ 'post_type' => Axl_Testimonials_Widget::PT,
2058
  'posts_per_page' => -1,
2059
  'meta_query' => array(
2060
  'relation' => 'AND',
2061
  array(
2062
  'key' => 'testimonials-widget-item',
2063
  'value' => $testimonial_item,
2064
+ 'compare' => '=',
2065
  ),
2066
  ),
2067
  );
2069
  } else {
2070
  // @codingStandardsIgnoreStart
2071
  $query_args = array(
2072
+ 'post_type' => Axl_Testimonials_Widget::PT,
2073
  'posts_per_page' => -1,
2074
  'meta_query' => array(
2075
  'relation' => 'AND',
2076
  array(
2077
  'key' => 'testimonials-widget-item',
2078
  'value' => '',
2079
+ 'compare' => '=',
2080
  ),
2081
  ),
2082
  );
2157
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
2158
  */
2159
  public static function get_testimonials_options( $atts = null ) {
2160
+ $sections = Axl_Testimonials_Widget_Settings::get_sections();
2161
+ $settings = Axl_Testimonials_Widget_Settings::get_settings();
2162
 
2163
+ $ignored_types = array( 'expand_begin', 'expand_end', 'expand_all', 'content' );
2164
 
2165
  $do_continue = false;
2166
  $do_used_with = false;
2258
 
2259
  // remaining widgets
2260
  $widgets = array(
2261
+ 'Axl_Testimonials_Widget_Archives_Widget' => 'testimonials_archives',
2262
+ 'Axl_Testimonials_Widget_Categories_Widget' => 'testimonials_categories',
2263
+ 'Axl_Testimonials_Widget_Recent_Testimonials_Widget' => 'testimonials_recent',
2264
+ 'Axl_Testimonials_Widget_Tag_Cloud_Widget' => 'testimonials_tag_cloud',
2265
  );
2266
 
2267
  $widgets = apply_filters( 'tw_options_widgets', $widgets );
2351
 
2352
  return $used_with_codes;
2353
  }
 
2354
  }
2355
 
2356
  ?>
includes/libraries/Gamajo-Template-Loader/README.md CHANGED
@@ -15,38 +15,25 @@ The `get_template_part()` function in WordPress was never really designed with p
15
  This isn't a WordPress plugin on its own, so the usual instructions don't apply. Instead:
16
 
17
  1. Copy [`class-gamajo-template-loader.php`](class-gamajo-template-loader.php) into your plugin. It can be into a file in the plugin root, or better, an `includes` directory.
18
- * Create a new file, such as `class-your-plugin-template-loader.php`, in the same directory.
19
- * Create a class in that file that extends `Gamajo_Tech_Loader`. You can copy the [meal planner](class-meal-planner-template-loader.php) example class as a starting point if it helps.
20
- * Override the class properties to suit your plugin. You could also override the `get_templates_dir()` method if it isn't right for you.
21
- * You can now instantiate your custom template loader class.
 
22
 
23
- ~~~php
24
  // Template loader instantiated elsewhere, such as the main plugin file
25
  $meal_planner_template_loader = new Meal_Planner_Template_Loader;
26
- ~~~
27
- * Use it to call the `get_template_part()` method. This could be within a shortcode callback, or something you want theme developers to include in their files.
28
 
29
- ~~~php
30
- $meal_planner_template_loader->get_template_part( 'recipe' );
31
- ~~~
32
- * If you want to pass data to the template, call the `add_template_data()` method with an array before calling `get_template_part()`.
33
-
34
- ~~~php
35
- $data = array( 'foo' => 'bar', 'baz' => 'boom' );
36
- $meal_planner_template_loader->add_template_data( $data );
37
- $meal_planner_template_loader->get_template_part( 'recipe' );
38
- ~~~
39
- The value of `bar` is now available inside the recipe template as `$template['foo']`.
40
- * Optionally, you can wrap the reference to the object in a functions e.g.
41
 
42
- ~~~php
43
  // This function can live wherever is suitable in your plugin
44
  function meal_planner_get_template_part( $slug, $name = null, $load = true ) {
45
  global $meal_planner_template_loader;
46
  $meal_planner_template_loader->get_template_part( $slug, $name, $load );
47
  }
48
  ~~~
49
- An example using this helper function would be:
50
 
51
  ~~~
52
  add_filter( 'the_content', 'meal_planner_single_recipe_content' );
@@ -55,6 +42,7 @@ An example using this helper function would be:
55
  return $content;
56
  }
57
  meal_planner_get_template_part( 'recipe', 'ingredients' );
 
58
  }
59
  ~~~
60
  This will try to load up `wp-content/themes/my-theme/meal-planner/recipe-ingredients.php`, or `wp-content/themes/my-theme/meal-planner/recipe.php`, then fallback to `wp-content/plugins/meal-planner/templates/recipe-ingredients.php` or `wp-content/plugins/meal-planner/templates/recipe.php`.
15
  This isn't a WordPress plugin on its own, so the usual instructions don't apply. Instead:
16
 
17
  1. Copy [`class-gamajo-template-loader.php`](class-gamajo-template-loader.php) into your plugin. It can be into a file in the plugin root, or better, an `includes` directory.
18
+ 2. Create a new file, such as `class-your-plugin-template-loader.php`, in the same directory.
19
+ 3. Create a class in that file that extends `Gamajo_Template_Loader`. You can copy the [meal planner](class-meal-planner-template-loader.php) example class as a starting point if it helps.
20
+ 4. Override the class properties to suit your plugin. You could also override the `get_templates_dir()` method if it isn't right for you.
21
+ 5. You can now instantiate your custom template loader class, and use it to call the `get_template_part()` method. This could be within a shortcode callback, or something you want theme developers to include in their files.
22
+ 6. Optionally, you can wrap the reference to the object in a functions e.g.
23
 
24
+ ~~~
25
  // Template loader instantiated elsewhere, such as the main plugin file
26
  $meal_planner_template_loader = new Meal_Planner_Template_Loader;
 
 
27
 
28
+ // ...
 
 
 
 
 
 
 
 
 
 
 
29
 
 
30
  // This function can live wherever is suitable in your plugin
31
  function meal_planner_get_template_part( $slug, $name = null, $load = true ) {
32
  global $meal_planner_template_loader;
33
  $meal_planner_template_loader->get_template_part( $slug, $name, $load );
34
  }
35
  ~~~
36
+ 7. An example using the helper function (or class method) would be:
37
 
38
  ~~~
39
  add_filter( 'the_content', 'meal_planner_single_recipe_content' );
42
  return $content;
43
  }
44
  meal_planner_get_template_part( 'recipe', 'ingredients' );
45
+ meal_planner_get_template_part( 'recipe', 'instructions' );
46
  }
47
  ~~~
48
  This will try to load up `wp-content/themes/my-theme/meal-planner/recipe-ingredients.php`, or `wp-content/themes/my-theme/meal-planner/recipe.php`, then fallback to `wp-content/plugins/meal-planner/templates/recipe-ingredients.php` or `wp-content/plugins/meal-planner/templates/recipe.php`.
includes/libraries/Gamajo-Template-Loader/class-gamajo-template-loader.php CHANGED
@@ -7,7 +7,7 @@
7
  * @link http://github.com/GaryJones/Gamajo-Template-Loader
8
  * @copyright 2013 Gary Jones
9
  * @license GPL-2.0+
10
- * @version 1.2.0-dev
11
  */
12
 
13
  if ( ! class_exists( 'Gamajo_Template_Loader' ) ) {
@@ -62,15 +62,6 @@ if ( ! class_exists( 'Gamajo_Template_Loader' ) ) {
62
  */
63
  protected $plugin_template_directory = 'templates'; // or includes/templates, etc.
64
 
65
- /**
66
- * Clean up template data.
67
- *
68
- * @since 1.2.0
69
- */
70
- public function __destruct() {
71
- $this->unset_template_data();
72
- }
73
-
74
  /**
75
  * Retrieve a template part.
76
  *
@@ -97,37 +88,6 @@ if ( ! class_exists( 'Gamajo_Template_Loader' ) ) {
97
  return $this->locate_template( $templates, $load, false );
98
  }
99
 
100
- /**
101
- * Make custom data available to template.
102
- *
103
- * Data is available to the template as properties under the `$data` variable.
104
- * i.e. A value provided here under `$data['foo']` is available as `$data->foo`.
105
- *
106
- * When an input key has a hyphen, you can use `$data->{foo-bar}` in the template.
107
- *
108
- * @since 1.2.0
109
- *
110
- * @param array $data Custom data for the
111
- */
112
- public function set_template_data( array $data ) {
113
- global $wp_query;
114
- $wp_query->query_vars['data'] = (object) $data;
115
- }
116
-
117
- /**
118
- * Remove access to custom data in template.
119
- *
120
- * Good to use once the final template part has been requested.
121
- *
122
- * @since 1.2.0
123
- */
124
- public function unset_template_data() {
125
- global $wp_query;
126
- if ( isset( $wp_query->query_vars['data'] ) ) {
127
- unset( $wp_query->query_vars['data'] );
128
- }
129
- }
130
-
131
  /**
132
  * Given a slug and optional name, create the file names of templates.
133
  *
@@ -174,7 +134,7 @@ if ( ! class_exists( 'Gamajo_Template_Loader' ) ) {
174
  * @param string|array $template_names Template file(s) to search for, in order.
175
  * @param bool $load If true the template file will be loaded if it is found.
176
  * @param bool $require_once Whether to require_once or require. Default true.
177
- * Has no effect if $load is false.
178
  *
179
  * @return string The template filename if one is located.
180
  */
7
  * @link http://github.com/GaryJones/Gamajo-Template-Loader
8
  * @copyright 2013 Gary Jones
9
  * @license GPL-2.0+
10
+ * @version 1.1.0
11
  */
12
 
13
  if ( ! class_exists( 'Gamajo_Template_Loader' ) ) {
62
  */
63
  protected $plugin_template_directory = 'templates'; // or includes/templates, etc.
64
 
 
 
 
 
 
 
 
 
 
65
  /**
66
  * Retrieve a template part.
67
  *
88
  return $this->locate_template( $templates, $load, false );
89
  }
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  /**
92
  * Given a slug and optional name, create the file names of templates.
93
  *
134
  * @param string|array $template_names Template file(s) to search for, in order.
135
  * @param bool $load If true the template file will be loaded if it is found.
136
  * @param bool $require_once Whether to require_once or require. Default true.
137
+ * Has no effect if $load is false.
138
  *
139
  * @return string The template filename if one is located.
140
  */
includes/libraries/aihrus-framework/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
 
3
  ## master
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  ## 1.2.2
6
  * Add Inside Axelerant link
7
  * Store branding updates
2
 
3
  ## master
4
 
5
+ ## 1.2.4
6
+ * Change support email address to `support@axelerant.com`
7
+ * Fix coding standards for CI
8
+ * Remove option to disable the license not saved notice rather set sslverify to false
9
+ * Remove the use of deprecated function `wp_htmledit_pre()` and use `format_for_editor()` instead
10
+
11
+ ## 1.2.3
12
+ * RELATES #7 Add option to disable the license not saved notice
13
+ * RESOLVE #8 Remove activation helpers
14
+ * RESOLVE michael-cannon/testimonials-widget#184 Remove deprecated constructor calls for WP_Widget
15
+ * Tested with WordPress 4.4
16
+ * Update Parsedown 1.5.4 library
17
+
18
  ## 1.2.2
19
  * Add Inside Axelerant link
20
  * Store branding updates
includes/libraries/aihrus-framework/README.md CHANGED
@@ -1,7 +1,7 @@
1
  # Aihrus Framework
2
 
3
- Tested up to: 4.1.0
4
- Stable tag: 1.2.2
5
 
6
  A helper library for WordPress plugins by Aihrus and maintained by [Axelerant](//axelerant.com).
7
 
1
  # Aihrus Framework
2
 
3
+ Tested up to: 4.4.0
4
+ Stable tag: 1.2.4
5
 
6
  A helper library for WordPress plugins by Aihrus and maintained by [Axelerant](//axelerant.com).
7
 
includes/libraries/aihrus-framework/aihrus-framework.php CHANGED
@@ -35,7 +35,7 @@ if ( ! defined( 'AIHR_DIR_LIB' ) ) {
35
  }
36
 
37
  if ( ! defined( 'AIHR_VERSION' ) ) {
38
- define( 'AIHR_VERSION', '1.2.2' );
39
  }
40
 
41
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
@@ -232,22 +232,8 @@ if ( ! function_exists( 'aihr_notice_updated' ) ) {
232
  }
233
 
234
  if ( ! function_exists( 'aihr_notice_version' ) ) {
235
- function aihr_notice_version( $required_base, $required_name, $required_slug, $required_version, $item_name ) {
236
- $is_active = is_plugin_active( $required_base );
237
- if ( $is_active ) {
238
- $link = sprintf( __( '<a href="%1$s">update to</a>' ), self_admin_url( 'update-core.php' ) );
239
- } else {
240
- $plugins = get_plugins();
241
- if ( empty( $plugins[ $required_base ] ) ) {
242
- $install = esc_url( wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $required_slug ), 'install-plugin_' . $required_slug ) );
243
- $link = sprintf( __( '<a href="%1$s">install</a>' ), $install );
244
- } else {
245
- $activate = esc_url( wp_nonce_url( admin_url( 'plugins.php?action=activate&plugin=' . $required_base ), 'activate-plugin_' . $required_base ) );
246
- $link = sprintf( __( '<a href="%1$s">activate</a>' ), $activate );
247
- }
248
- }
249
-
250
- $text = sprintf( __( 'Plugin "%3$s" has been deactivated. Please %1$s "%4$s" version %2$s or newer before activating "%3$s".' ), $link, $required_version, $item_name, $required_name );
251
 
252
  aihr_notice_error( $text );
253
  }
@@ -344,7 +330,7 @@ if ( ! function_exists( 'aihr_notice_deactivate' ) ) {
344
  $plugin_slug = dirname( plugin_basename( $file ) );
345
  $url = 'https://wordpress.org/plugins/' . $plugin_slug . '/developers/';
346
 
347
- $text = sprintf( __( 'Plugin "%1$s" has been deactivated due to "%2$s". Once corrected, "%1$s" can be activated.</p><p>If you want to revert "%1$s", look for <a href="%3$s">older versions on WordPress</a> or <a href="mailto:support@nodedesk.com?subject=Old+Plugin+Version+Request">email Axelerant support</a> if this is a premium plugin.' ), $name, $reason, $url );
348
 
349
  aihr_notice_error( $text );
350
 
35
  }
36
 
37
  if ( ! defined( 'AIHR_VERSION' ) ) {
38
+ define( 'AIHR_VERSION', '1.2.4' );
39
  }
40
 
41
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
232
  }
233
 
234
  if ( ! function_exists( 'aihr_notice_version' ) ) {
235
+ function aihr_notice_version( $required_name, $required_version, $item_name ) {
236
+ $text = sprintf( __( 'Plugin "%2$s" has been deactivated. Please install and activate "%3$s" version %1$s or newer before activating "%2$s".' ), $required_version, $item_name, $required_name );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
 
238
  aihr_notice_error( $text );
239
  }
330
  $plugin_slug = dirname( plugin_basename( $file ) );
331
  $url = 'https://wordpress.org/plugins/' . $plugin_slug . '/developers/';
332
 
333
+ $text = sprintf( __( 'Plugin "%1$s" has been deactivated due to "%2$s". Once corrected, "%1$s" can be activated.</p><p>If you want to revert "%1$s", look for <a href="%3$s">older versions on WordPress</a> or <a href="mailto:support@axelerant.com?subject=Old+Plugin+Version+Request">email Axelerant support</a> if this is a premium plugin.' ), $name, $reason, $url );
334
 
335
  aihr_notice_error( $text );
336
 
includes/libraries/aihrus-framework/includes/class-aihrus-common.php CHANGED
@@ -440,14 +440,14 @@ EOD;
440
  $output .= $text;
441
  $output_length += $func_strlen( $text );
442
 
443
- if ( $tag[0] == '&' ) {
444
  // Handle HTML entity by copying straight through
445
  $output .= $tag;
446
  $output_length++; // only counted as one character
447
  } else {
448
  // Handle HTML tag
449
  $tag_inner = $match[1][0];
450
- if ( $tag[1] == '/' ) {
451
  // This is a closing tag.
452
  $output .= $tag;
453
  // If input tags aren't balanced, we leave the popped tag
@@ -593,13 +593,16 @@ EOD;
593
  $dates = array(
594
  array(
595
  'rule' => '([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})',
596
- 'vars' => array( 'year', 'monthnum', 'day' ) ),
 
597
  array(
598
  'rule' => '([0-9]{4})/([0-9]{1,2})',
599
- 'vars' => array( 'year', 'monthnum' ) ),
 
600
  array(
601
  'rule' => '([0-9]{4})',
602
- 'vars' => array( 'year' ) ),
 
603
  );
604
 
605
  foreach ( $dates as $data ) {
@@ -773,8 +776,6 @@ EOD;
773
 
774
  return $value;
775
  }
776
-
777
-
778
  }
779
 
780
 
440
  $output .= $text;
441
  $output_length += $func_strlen( $text );
442
 
443
+ if ( '&' == $tag[0] ) {
444
  // Handle HTML entity by copying straight through
445
  $output .= $tag;
446
  $output_length++; // only counted as one character
447
  } else {
448
  // Handle HTML tag
449
  $tag_inner = $match[1][0];
450
+ if ( '/' == $tag[1] ) {
451
  // This is a closing tag.
452
  $output .= $tag;
453
  // If input tags aren't balanced, we leave the popped tag
593
  $dates = array(
594
  array(
595
  'rule' => '([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})',
596
+ 'vars' => array( 'year', 'monthnum', 'day' ),
597
+ ),
598
  array(
599
  'rule' => '([0-9]{4})/([0-9]{1,2})',
600
+ 'vars' => array( 'year', 'monthnum' ),
601
+ ),
602
  array(
603
  'rule' => '([0-9]{4})',
604
+ 'vars' => array( 'year' ),
605
+ ),
606
  );
607
 
608
  foreach ( $dates as $data ) {
776
 
777
  return $value;
778
  }
 
 
779
  }
780
 
781
 
includes/libraries/aihrus-framework/includes/class-aihrus-licensing.php CHANGED
@@ -133,7 +133,7 @@ abstract class Aihrus_Licensing {
133
 
134
 
135
  public function get_remote_get( $api_call ) {
136
- $response = wp_remote_get( $api_call );
137
 
138
  return $response;
139
  }
@@ -158,7 +158,7 @@ abstract class Aihrus_Licensing {
158
  public function get_license_data( $action = 'check_license' ) {
159
  $api_call = $this->get_api_call( $action );
160
  $response = $this->get_remote_get( $api_call );
161
- if ( is_wp_error( $response ) ) {
162
  return false;
163
  }
164
 
133
 
134
 
135
  public function get_remote_get( $api_call ) {
136
+ $response = wp_remote_get( $api_call, array( 'sslverify' => false ) );
137
 
138
  return $response;
139
  }
158
  public function get_license_data( $action = 'check_license' ) {
159
  $api_call = $this->get_api_call( $action );
160
  $response = $this->get_remote_get( $api_call );
161
+ if ( empty( $response ) || is_wp_error( $response ) ) {
162
  return false;
163
  }
164
 
includes/libraries/aihrus-framework/includes/class-aihrus-settings.php CHANGED
@@ -559,8 +559,8 @@ abstract class Aihrus_Settings {
559
  $errors = array();
560
 
561
  foreach ( $options as $id => $parts ) {
562
- $default = $parts['std'];
563
- $type = $parts['type'];
564
  $validations = ! empty( $parts['validate'] ) ? $parts['validate'] : array();
565
  if ( ! empty( $validations ) ) {
566
  $validations = explode( ',', $validations );
@@ -889,8 +889,6 @@ EOD;
889
 
890
  return static::$sections;
891
  }
892
-
893
-
894
  }
895
 
896
 
559
  $errors = array();
560
 
561
  foreach ( $options as $id => $parts ) {
562
+ $default = isset( $parts['std'] ) ? $parts['std'] : '';
563
+ $type = isset( $parts['type'] ) ? $parts['type'] : '';
564
  $validations = ! empty( $parts['validate'] ) ? $parts['validate'] : array();
565
  if ( ! empty( $validations ) ) {
566
  $validations = explode( ',', $validations );
889
 
890
  return static::$sections;
891
  }
 
 
892
  }
893
 
894
 
includes/libraries/aihrus-framework/includes/class-aihrus-widget.php CHANGED
@@ -52,7 +52,7 @@ abstract class Aihrus_Widget extends WP_Widget {
52
  );
53
 
54
  // Create the widget
55
- $this->WP_Widget(
56
  static::ID,
57
  $title,
58
  $widget_ops,
@@ -251,7 +251,11 @@ abstract class Aihrus_Widget extends WP_Widget {
251
  case 'textarea':
252
  echo '<label for="' . $this->get_field_id( $id ) . '">' . $title . '</label>';
253
 
254
- echo '<textarea class="widefat' . $field_class . '" id="' . $this->get_field_id( $id ) . '" name="' . $this->get_field_name( $id ) . '" placeholder="' . $std . '" rows="5" cols="30">' . wp_htmledit_pre( $options[ $id ] ) . '</textarea>';
 
 
 
 
255
  break;
256
 
257
  case 'password':
@@ -318,7 +322,7 @@ abstract class Aihrus_Widget extends WP_Widget {
318
  $defaults = array();
319
  $options = static::form_parts();
320
  foreach ( $options as $option => $value ) {
321
- $defaults[ $option ] = $value['std'];
322
  }
323
 
324
  return $defaults;
@@ -355,8 +359,6 @@ abstract class Aihrus_Widget extends WP_Widget {
355
  public static function get_content( $instance = null, $widget_number = null ) {
356
  return;
357
  }
358
-
359
-
360
  }
361
 
362
 
52
  );
53
 
54
  // Create the widget
55
+ parent::__construct(
56
  static::ID,
57
  $title,
58
  $widget_ops,
251
  case 'textarea':
252
  echo '<label for="' . $this->get_field_id( $id ) . '">' . $title . '</label>';
253
 
254
+ if ( function_exists( 'format_for_editor' ) ) {
255
+ echo '<textarea class="widefat' . $field_class . '" id="' . $this->get_field_id( $id ) . '" name="' . $this->get_field_name( $id ) . '" placeholder="' . $std . '" rows="5" cols="30">' . format_for_editor( $options[ $id ] ) . '</textarea>';
256
+ } else {
257
+ echo '<textarea class="widefat' . $field_class . '" id="' . $this->get_field_id( $id ) . '" name="' . $this->get_field_name( $id ) . '" placeholder="' . $std . '" rows="5" cols="30">' . wp_htmledit_pre( $options[ $id ] ) . '</textarea>';
258
+ }
259
  break;
260
 
261
  case 'password':
322
  $defaults = array();
323
  $options = static::form_parts();
324
  foreach ( $options as $option => $value ) {
325
+ $defaults[ $option ] = isset( $value['std'] ) ? $value['std'] : '';
326
  }
327
 
328
  return $defaults;
359
  public static function get_content( $instance = null, $widget_number = null ) {
360
  return;
361
  }
 
 
362
  }
363
 
364
 
includes/libraries/aihrus-framework/includes/libraries/parsedown/Parsedown.php CHANGED
@@ -15,28 +15,19 @@
15
 
16
  class Parsedown
17
  {
18
- #
19
- # Philosophy
20
 
21
- # Parsedown recognises that the Markdown syntax is optimised for humans so
22
- # it tries to read like one. It goes through text line by line. It looks at
23
- # how lines start to identify blocks. It looks for special characters to
24
- # identify inline elements.
25
 
26
- #
27
  # ~
28
 
29
  function text($text)
30
  {
31
  # make sure no definitions are set
32
- $this->Definitions = array();
33
 
34
  # standardize line breaks
35
- $text = str_replace("\r\n", "\n", $text);
36
- $text = str_replace("\r", "\n", $text);
37
-
38
- # replace tabs with spaces
39
- $text = str_replace("\t", ' ', $text);
40
 
41
  # remove surrounding line breaks
42
  $text = trim($text, "\n");
@@ -57,8 +48,6 @@ class Parsedown
57
  # Setters
58
  #
59
 
60
- private $breaksEnabled;
61
-
62
  function setBreaksEnabled($breaksEnabled)
63
  {
64
  $this->breaksEnabled = $breaksEnabled;
@@ -66,15 +55,35 @@ class Parsedown
66
  return $this;
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  #
70
  # Lines
71
  #
72
 
73
  protected $BlockTypes = array(
74
- '#' => array('Atx'),
75
  '*' => array('Rule', 'List'),
76
  '+' => array('List'),
77
- '-' => array('Setext', 'Table', 'Rule', 'List'),
78
  '0' => array('List'),
79
  '1' => array('List'),
80
  '2' => array('List'),
@@ -87,8 +96,9 @@ class Parsedown
87
  '9' => array('List'),
88
  ':' => array('Table'),
89
  '<' => array('Comment', 'Markup'),
90
- '=' => array('Setext'),
91
  '>' => array('Quote'),
 
92
  '_' => array('Rule'),
93
  '`' => array('FencedCode'),
94
  '|' => array('Table'),
@@ -97,14 +107,8 @@ class Parsedown
97
 
98
  # ~
99
 
100
- protected $DefinitionTypes = array(
101
- '[' => array('Reference'),
102
- );
103
-
104
- # ~
105
-
106
  protected $unmarkedBlockTypes = array(
107
- 'CodeBlock',
108
  );
109
 
110
  #
@@ -127,6 +131,23 @@ class Parsedown
127
  continue;
128
  }
129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  $indent = 0;
131
 
132
  while (isset($line[$indent]) and $line[$indent] === ' ')
@@ -142,9 +163,9 @@ class Parsedown
142
 
143
  # ~
144
 
145
- if (isset($CurrentBlock['incomplete']))
146
  {
147
- $Block = $this->{'addTo'.$CurrentBlock['type']}($Line, $CurrentBlock);
148
 
149
  if (isset($Block))
150
  {
@@ -154,12 +175,10 @@ class Parsedown
154
  }
155
  else
156
  {
157
- if (method_exists($this, 'complete'.$CurrentBlock['type']))
158
  {
159
- $CurrentBlock = $this->{'complete'.$CurrentBlock['type']}($CurrentBlock);
160
  }
161
-
162
- unset($CurrentBlock['incomplete']);
163
  }
164
  }
165
 
@@ -167,21 +186,6 @@ class Parsedown
167
 
168
  $marker = $text[0];
169
 
170
- if (isset($this->DefinitionTypes[$marker]))
171
- {
172
- foreach ($this->DefinitionTypes[$marker] as $definitionType)
173
- {
174
- $Definition = $this->{'identify'.$definitionType}($Line, $CurrentBlock);
175
-
176
- if (isset($Definition))
177
- {
178
- $this->Definitions[$definitionType][$Definition['id']] = $Definition['data'];
179
-
180
- continue 2;
181
- }
182
- }
183
- }
184
-
185
  # ~
186
 
187
  $blockTypes = $this->unmarkedBlockTypes;
@@ -199,7 +203,7 @@ class Parsedown
199
 
200
  foreach ($blockTypes as $blockType)
201
  {
202
- $Block = $this->{'identify'.$blockType}($Line, $CurrentBlock);
203
 
204
  if (isset($Block))
205
  {
@@ -207,14 +211,14 @@ class Parsedown
207
 
208
  if ( ! isset($Block['identified']))
209
  {
210
- $Elements []= $CurrentBlock['element'];
211
 
212
  $Block['identified'] = true;
213
  }
214
 
215
- if (method_exists($this, 'addTo'.$blockType))
216
  {
217
- $Block['incomplete'] = true;
218
  }
219
 
220
  $CurrentBlock = $Block;
@@ -231,9 +235,9 @@ class Parsedown
231
  }
232
  else
233
  {
234
- $Elements []= $CurrentBlock['element'];
235
 
236
- $CurrentBlock = $this->buildParagraph($Line);
237
 
238
  $CurrentBlock['identified'] = true;
239
  }
@@ -241,59 +245,49 @@ class Parsedown
241
 
242
  # ~
243
 
244
- if (isset($CurrentBlock['incomplete']) and method_exists($this, 'complete'.$CurrentBlock['type']))
245
  {
246
- $CurrentBlock = $this->{'complete'.$CurrentBlock['type']}($CurrentBlock);
247
  }
248
 
249
  # ~
250
 
251
- $Elements []= $CurrentBlock['element'];
252
-
253
- unset($Elements[0]);
254
 
255
- # ~
256
-
257
- $markup = $this->elements($Elements);
258
 
259
  # ~
260
 
261
- return $markup;
262
- }
263
-
264
- #
265
- # Atx
266
 
267
- protected function identifyAtx($Line)
268
- {
269
- if (isset($Line['text'][1]))
270
  {
271
- $level = 1;
272
-
273
- while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
274
  {
275
- $level ++;
276
  }
277
 
278
- $text = trim($Line['text'], '# ');
 
 
279
 
280
- $Block = array(
281
- 'element' => array(
282
- 'name' => 'h' . min(6, $level),
283
- 'text' => $text,
284
- 'handler' => 'line',
285
- ),
286
- );
287
 
288
- return $Block;
289
- }
 
290
  }
291
 
292
  #
293
  # Code
294
 
295
- protected function identifyCodeBlock($Line)
296
  {
 
 
 
 
 
297
  if ($Line['indent'] >= 4)
298
  {
299
  $text = substr($Line['body'], 4);
@@ -313,7 +307,7 @@ class Parsedown
313
  }
314
  }
315
 
316
- protected function addToCodeBlock($Line, $Block)
317
  {
318
  if ($Line['indent'] >= 4)
319
  {
@@ -334,7 +328,7 @@ class Parsedown
334
  }
335
  }
336
 
337
- protected function completeCodeBlock($Block)
338
  {
339
  $text = $Block['element']['text']['text'];
340
 
@@ -348,12 +342,17 @@ class Parsedown
348
  #
349
  # Comment
350
 
351
- protected function identifyComment($Line)
352
  {
 
 
 
 
 
353
  if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
354
  {
355
  $Block = array(
356
- 'element' => $Line['body'],
357
  );
358
 
359
  if (preg_match('/-->$/', $Line['text']))
@@ -365,14 +364,14 @@ class Parsedown
365
  }
366
  }
367
 
368
- protected function addToComment($Line, array $Block)
369
  {
370
  if (isset($Block['closed']))
371
  {
372
  return;
373
  }
374
 
375
- $Block['element'] .= "\n" . $Line['body'];
376
 
377
  if (preg_match('/-->$/', $Line['text']))
378
  {
@@ -385,18 +384,18 @@ class Parsedown
385
  #
386
  # Fenced Code
387
 
388
- protected function identifyFencedCode($Line)
389
  {
390
- if (preg_match('/^(['.$Line['text'][0].']{3,})[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
391
  {
392
  $Element = array(
393
  'name' => 'code',
394
  'text' => '',
395
  );
396
 
397
- if (isset($matches[2]))
398
  {
399
- $class = 'language-'.$matches[2];
400
 
401
  $Element['attributes'] = array(
402
  'class' => $class,
@@ -416,7 +415,7 @@ class Parsedown
416
  }
417
  }
418
 
419
- protected function addToFencedCode($Line, $Block)
420
  {
421
  if (isset($Block['complete']))
422
  {
@@ -444,7 +443,7 @@ class Parsedown
444
  return $Block;
445
  }
446
 
447
- protected function completeFencedCode($Block)
448
  {
449
  $text = $Block['element']['text']['text'];
450
 
@@ -455,10 +454,43 @@ class Parsedown
455
  return $Block;
456
  }
457
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
458
  #
459
  # List
460
 
461
- protected function identifyList($Line)
462
  {
463
  list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
464
 
@@ -487,9 +519,9 @@ class Parsedown
487
  }
488
  }
489
 
490
- protected function addToList($Line, array $Block)
491
  {
492
- if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'[ ]+(.*)/', $Line['text'], $matches))
493
  {
494
  if (isset($Block['interrupted']))
495
  {
@@ -500,11 +532,13 @@ class Parsedown
500
 
501
  unset($Block['li']);
502
 
 
 
503
  $Block['li'] = array(
504
  'name' => 'li',
505
  'handler' => 'li',
506
  'text' => array(
507
- $matches[1],
508
  ),
509
  );
510
 
@@ -513,6 +547,11 @@ class Parsedown
513
  return $Block;
514
  }
515
 
 
 
 
 
 
516
  if ( ! isset($Block['interrupted']))
517
  {
518
  $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
@@ -539,7 +578,7 @@ class Parsedown
539
  #
540
  # Quote
541
 
542
- protected function identifyQuote($Line)
543
  {
544
  if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
545
  {
@@ -555,7 +594,7 @@ class Parsedown
555
  }
556
  }
557
 
558
- protected function addToQuote($Line, array $Block)
559
  {
560
  if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
561
  {
@@ -582,9 +621,9 @@ class Parsedown
582
  #
583
  # Rule
584
 
585
- protected function identifyRule($Line)
586
  {
587
- if (preg_match('/^(['.$Line['text'][0].'])([ ]{0,2}\1){2,}[ ]*$/', $Line['text']))
588
  {
589
  $Block = array(
590
  'element' => array(
@@ -599,7 +638,7 @@ class Parsedown
599
  #
600
  # Setext
601
 
602
- protected function identifySetext($Line, array $Block = null)
603
  {
604
  if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
605
  {
@@ -617,46 +656,71 @@ class Parsedown
617
  #
618
  # Markup
619
 
620
- protected function identifyMarkup($Line)
621
  {
622
- if (preg_match('/^<(\w[\w\d]*)(?:[ ][^>]*)?(\/?)[ ]*>/', $Line['text'], $matches))
 
 
 
 
 
623
  {
624
- if (in_array($matches[1], $this->textLevelElements))
 
 
625
  {
626
  return;
627
  }
628
 
629
  $Block = array(
630
- 'element' => $Line['body'],
 
 
631
  );
632
 
633
- if ($matches[2] or $matches[1] === 'hr' or preg_match('/<\/'.$matches[1].'>[ ]*$/', $Line['text']))
 
 
 
 
634
  {
635
- $Block['closed'] = true;
 
 
 
 
 
636
  }
637
  else
638
  {
639
- $Block['depth'] = 0;
640
- $Block['name'] = $matches[1];
 
 
 
 
 
 
 
641
  }
642
 
643
  return $Block;
644
  }
645
  }
646
 
647
- protected function addToMarkup($Line, array $Block)
648
  {
649
  if (isset($Block['closed']))
650
  {
651
  return;
652
  }
653
 
654
- if (preg_match('/<'.$Block['name'].'([ ][^\/]+)?>/', $Line['text'])) # opening tag
655
  {
656
  $Block['depth'] ++;
657
  }
658
 
659
- if (stripos($Line['text'], '</'.$Block['name'].'>') !== false) # closing tag
660
  {
661
  if ($Block['depth'] > 0)
662
  {
@@ -668,15 +732,51 @@ class Parsedown
668
  }
669
  }
670
 
671
- $Block['element'] .= "\n".$Line['body'];
 
 
 
 
 
 
 
672
 
673
  return $Block;
674
  }
675
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
676
  #
677
  # Table
678
 
679
- protected function identifyTable($Line, array $Block = null)
680
  {
681
  if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
682
  {
@@ -710,7 +810,7 @@ class Parsedown
710
  $alignment = 'left';
711
  }
712
 
713
- if (substr($dividerCell, -1) === ':')
714
  {
715
  $alignment = $alignment === 'left' ? 'center' : 'right';
716
  }
@@ -744,7 +844,7 @@ class Parsedown
744
  $alignment = $alignments[$index];
745
 
746
  $HeaderElement['attributes'] = array(
747
- 'align' => $alignment,
748
  );
749
  }
750
 
@@ -783,8 +883,13 @@ class Parsedown
783
  }
784
  }
785
 
786
- protected function addToTable($Line, array $Block)
787
  {
 
 
 
 
 
788
  if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
789
  {
790
  $Elements = array();
@@ -794,9 +899,9 @@ class Parsedown
794
  $row = trim($row);
795
  $row = trim($row, '|');
796
 
797
- $cells = explode('|', $row);
798
 
799
- foreach ($cells as $index => $cell)
800
  {
801
  $cell = trim($cell);
802
 
@@ -809,7 +914,7 @@ class Parsedown
809
  if (isset($Block['alignments'][$index]))
810
  {
811
  $Element['attributes'] = array(
812
- 'align' => $Block['alignments'][$index],
813
  );
814
  }
815
 
@@ -828,35 +933,11 @@ class Parsedown
828
  }
829
  }
830
 
831
- #
832
- # Definitions
833
- #
834
-
835
- protected function identifyReference($Line)
836
- {
837
- if (preg_match('/^\[(.+?)\]:[ ]*<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
838
- {
839
- $Definition = array(
840
- 'id' => strtolower($matches[1]),
841
- 'data' => array(
842
- 'url' => $matches[2],
843
- ),
844
- );
845
-
846
- if (isset($matches[3]))
847
- {
848
- $Definition['data']['title'] = $matches[3];
849
- }
850
-
851
- return $Definition;
852
- }
853
- }
854
-
855
  #
856
  # ~
857
  #
858
 
859
- protected function buildParagraph($Line)
860
  {
861
  $Block = array(
862
  'element' => array(
@@ -870,92 +951,27 @@ class Parsedown
870
  }
871
 
872
  #
873
- # ~
874
- #
875
-
876
- protected function element(array $Element)
877
- {
878
- $markup = '<'.$Element['name'];
879
-
880
- if (isset($Element['attributes']))
881
- {
882
- foreach ($Element['attributes'] as $name => $value)
883
- {
884
- $markup .= ' '.$name.'="'.$value.'"';
885
- }
886
- }
887
-
888
- if (isset($Element['text']))
889
- {
890
- $markup .= '>';
891
-
892
- if (isset($Element['handler']))
893
- {
894
- $markup .= $this->$Element['handler']($Element['text']);
895
- }
896
- else
897
- {
898
- $markup .= $Element['text'];
899
- }
900
-
901
- $markup .= '</'.$Element['name'].'>';
902
- }
903
- else
904
- {
905
- $markup .= ' />';
906
- }
907
-
908
- return $markup;
909
- }
910
-
911
- protected function elements(array $Elements)
912
- {
913
- $markup = '';
914
-
915
- foreach ($Elements as $Element)
916
- {
917
- if ($Element === null)
918
- {
919
- continue;
920
- }
921
-
922
- $markup .= "\n";
923
-
924
- if (is_string($Element)) # because of Markup
925
- {
926
- $markup .= $Element;
927
-
928
- continue;
929
- }
930
-
931
- $markup .= $this->element($Element);
932
- }
933
-
934
- $markup .= "\n";
935
-
936
- return $markup;
937
- }
938
-
939
- #
940
- # Spans
941
  #
942
 
943
- protected $SpanTypes = array(
944
- '!' => array('Link'), # ?
945
- '&' => array('Ampersand'),
 
946
  '*' => array('Emphasis'),
947
- '/' => array('Url'),
948
- '<' => array('UrlTag', 'EmailTag', 'Tag', 'LessThan'),
 
949
  '[' => array('Link'),
950
  '_' => array('Emphasis'),
951
- '`' => array('InlineCode'),
952
  '~' => array('Strikethrough'),
953
  '\\' => array('EscapeSequence'),
954
  );
955
 
956
  # ~
957
 
958
- protected $spanMarkerList = '*_!&[</`~\\';
959
 
960
  #
961
  # ~
@@ -965,64 +981,64 @@ class Parsedown
965
  {
966
  $markup = '';
967
 
968
- $remainder = $text;
969
 
970
- $markerPosition = 0;
971
-
972
- while ($excerpt = strpbrk($remainder, $this->spanMarkerList))
973
  {
974
  $marker = $excerpt[0];
975
 
976
- $markerPosition += strpos($remainder, $marker);
977
 
978
  $Excerpt = array('text' => $excerpt, 'context' => $text);
979
 
980
- foreach ($this->SpanTypes[$marker] as $spanType)
981
  {
982
- $handler = 'identify'.$spanType;
983
-
984
- $Span = $this->$handler($Excerpt);
985
 
986
- if ( ! isset($Span))
987
  {
988
  continue;
989
  }
990
 
991
- # The identified span can be ahead of the marker.
992
 
993
- if (isset($Span['position']) and $Span['position'] > $markerPosition)
994
  {
995
  continue;
996
  }
997
 
998
- # Spans that start at the position of their marker don't have to set a position.
999
 
1000
- if ( ! isset($Span['position']))
1001
  {
1002
- $Span['position'] = $markerPosition;
1003
  }
1004
 
1005
- $plainText = substr($text, 0, $Span['position']);
1006
-
1007
- $markup .= $this->readPlainText($plainText);
1008
-
1009
- $markup .= isset($Span['markup']) ? $Span['markup'] : $this->element($Span['element']);
1010
 
1011
- $text = substr($text, $Span['position'] + $Span['extent']);
 
1012
 
1013
- $remainder = $text;
 
1014
 
1015
- $markerPosition = 0;
 
1016
 
1017
  continue 2;
1018
  }
1019
 
1020
- $remainder = substr($excerpt, 1);
1021
 
1022
- $markerPosition ++;
 
 
 
 
1023
  }
1024
 
1025
- $markup .= $this->readPlainText($text);
1026
 
1027
  return $markup;
1028
  }
@@ -1031,63 +1047,83 @@ class Parsedown
1031
  # ~
1032
  #
1033
 
1034
- protected function identifyUrl($Excerpt)
1035
  {
1036
- if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '/')
1037
- {
1038
- return;
1039
- }
1040
 
1041
- if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE))
1042
  {
1043
- $url = str_replace(array('&', '<'), array('&amp;', '&lt;'), $matches[0][0]);
1044
-
 
 
1045
  return array(
1046
- 'extent' => strlen($matches[0][0]),
1047
- 'position' => $matches[0][1],
1048
  'element' => array(
1049
- 'name' => 'a',
1050
- 'text' => $url,
1051
- 'attributes' => array(
1052
- 'href' => $url,
1053
- ),
1054
  ),
1055
  );
1056
  }
1057
  }
1058
 
1059
- protected function identifyAmpersand($Excerpt)
1060
  {
1061
- if ( ! preg_match('/^&#?\w+;/', $Excerpt['text']))
1062
  {
 
 
 
 
 
 
 
1063
  return array(
1064
- 'markup' => '&amp;',
1065
- 'extent' => 1,
 
 
 
 
 
 
1066
  );
1067
  }
1068
  }
1069
 
1070
- protected function identifyStrikethrough($Excerpt)
1071
  {
1072
  if ( ! isset($Excerpt['text'][1]))
1073
  {
1074
  return;
1075
  }
1076
 
1077
- if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches))
 
 
1078
  {
1079
- return array(
1080
- 'extent' => strlen($matches[0]),
1081
- 'element' => array(
1082
- 'name' => 'del',
1083
- 'text' => $matches[1],
1084
- 'handler' => 'line',
1085
- ),
1086
- );
 
1087
  }
 
 
 
 
 
 
 
 
 
1088
  }
1089
 
1090
- protected function identifyEscapeSequence($Excerpt)
1091
  {
1092
  if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
1093
  {
@@ -1098,53 +1134,137 @@ class Parsedown
1098
  }
1099
  }
1100
 
1101
- protected function identifyLessThan()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1102
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1103
  return array(
1104
- 'markup' => '&lt;',
1105
- 'extent' => 1,
1106
  );
1107
  }
1108
 
1109
- protected function identifyUrlTag($Excerpt)
1110
  {
1111
- if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(https?:[\/]{2}[^\s]+?)>/i', $Excerpt['text'], $matches))
1112
  {
1113
- $url = str_replace(array('&', '<'), array('&amp;', '&lt;'), $matches[1]);
 
1114
 
 
 
1115
  return array(
 
1116
  'extent' => strlen($matches[0]),
1117
- 'element' => array(
1118
- 'name' => 'a',
1119
- 'text' => $url,
1120
- 'attributes' => array(
1121
- 'href' => $url,
1122
- ),
1123
- ),
1124
  );
1125
  }
1126
- }
1127
 
1128
- protected function identifyEmailTag($Excerpt)
1129
- {
1130
- if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\S+?@\S+?)>/', $Excerpt['text'], $matches))
1131
  {
1132
  return array(
 
1133
  'extent' => strlen($matches[0]),
1134
- 'element' => array(
1135
- 'name' => 'a',
1136
- 'text' => $matches[1],
1137
- 'attributes' => array(
1138
- 'href' => 'mailto:'.$matches[1],
1139
- ),
1140
- ),
1141
  );
1142
  }
1143
- }
1144
 
1145
- protected function identifyTag($Excerpt)
1146
- {
1147
- if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<\/?\w.*?>/', $Excerpt['text'], $matches))
1148
  {
1149
  return array(
1150
  'markup' => $matches[0],
@@ -1153,164 +1273,167 @@ class Parsedown
1153
  }
1154
  }
1155
 
1156
- protected function identifyInlineCode($Excerpt)
1157
  {
1158
- $marker = $Excerpt['text'][0];
 
 
 
 
 
 
 
 
1159
 
1160
- if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(?<!'.$marker.')\1(?!'.$marker.')/', $Excerpt['text'], $matches))
1161
  {
1162
- $text = $matches[2];
1163
- $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
 
 
 
 
 
 
 
 
 
 
 
1164
 
 
 
1165
  return array(
1166
  'extent' => strlen($matches[0]),
1167
  'element' => array(
1168
- 'name' => 'code',
1169
- 'text' => $text,
 
1170
  ),
1171
  );
1172
  }
1173
  }
1174
 
1175
- protected function identifyLink($Excerpt)
1176
  {
1177
- $extent = $Excerpt['text'][0] === '!' ? 1 : 0;
1178
-
1179
- if (strpos($Excerpt['text'], ']') and preg_match('/\[((?:[^][]|(?R))*)\]/', $Excerpt['text'], $matches))
1180
- {
1181
- $Link = array('text' => $matches[1], 'label' => strtolower($matches[1]));
1182
-
1183
- $extent += strlen($matches[0]);
1184
-
1185
- $substring = substr($Excerpt['text'], $extent);
1186
-
1187
- if (preg_match('/^\s*\[([^][]+)\]/', $substring, $matches))
1188
- {
1189
- $Link['label'] = strtolower($matches[1]);
1190
-
1191
- if (isset($this->Definitions['Reference'][$Link['label']]))
1192
- {
1193
- $Link += $this->Definitions['Reference'][$Link['label']];
1194
-
1195
- $extent += strlen($matches[0]);
1196
- }
1197
- else
1198
- {
1199
- return;
1200
- }
1201
- }
1202
- elseif (isset($this->Definitions['Reference'][$Link['label']]))
1203
- {
1204
- $Link += $this->Definitions['Reference'][$Link['label']];
1205
-
1206
- if (preg_match('/^[ ]*\[\]/', $substring, $matches))
1207
- {
1208
- $extent += strlen($matches[0]);
1209
- }
1210
- }
1211
- elseif (preg_match('/^\([ ]*(.*?)(?:[ ]+[\'"](.+?)[\'"])?[ ]*\)/', $substring, $matches))
1212
- {
1213
- $Link['url'] = $matches[1];
1214
-
1215
- if (isset($matches[2]))
1216
- {
1217
- $Link['title'] = $matches[2];
1218
- }
1219
-
1220
- $extent += strlen($matches[0]);
1221
- }
1222
- else
1223
- {
1224
- return;
1225
- }
1226
- }
1227
- else
1228
  {
1229
  return;
1230
  }
1231
 
1232
- $url = str_replace(array('&', '<'), array('&amp;', '&lt;'), $Link['url']);
1233
-
1234
- if ($Excerpt['text'][0] === '!')
1235
  {
1236
- $Element = array(
1237
- 'name' => 'img',
1238
- 'attributes' => array(
1239
- 'alt' => $Link['text'],
1240
- 'src' => $url,
 
 
 
 
1241
  ),
1242
  );
 
 
1243
  }
1244
- else
 
 
 
 
1245
  {
1246
- $Element = array(
1247
- 'name' => 'a',
1248
- 'handler' => 'line',
1249
- 'text' => $Link['text'],
1250
- 'attributes' => array(
1251
- 'href' => $url,
 
 
 
 
1252
  ),
1253
  );
1254
  }
 
1255
 
1256
- if (isset($Link['title']))
 
 
 
 
1257
  {
1258
- $Element['attributes']['title'] = $Link['title'];
 
 
 
 
 
1259
  }
1260
 
1261
- return array(
1262
- 'extent' => $extent,
1263
- 'element' => $Element,
1264
- );
1265
  }
1266
 
1267
- protected function identifyEmphasis($Excerpt)
1268
- {
1269
- if ( ! isset($Excerpt['text'][1]))
1270
- {
1271
- return;
1272
- }
1273
 
1274
- $marker = $Excerpt['text'][0];
 
 
1275
 
1276
- if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
1277
  {
1278
- $emphasis = 'strong';
 
 
 
 
 
 
 
 
1279
  }
1280
- elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
 
1281
  {
1282
- $emphasis = 'em';
 
 
 
 
 
 
 
 
 
 
 
1283
  }
1284
  else
1285
  {
1286
- return;
1287
  }
1288
 
1289
- return array(
1290
- 'extent' => strlen($matches[0]),
1291
- 'element' => array(
1292
- 'name' => $emphasis,
1293
- 'handler' => 'line',
1294
- 'text' => $matches[1],
1295
- ),
1296
- );
1297
  }
1298
 
1299
- #
1300
- # ~
1301
-
1302
- protected function readPlainText($text)
1303
  {
1304
- $breakMarker = $this->breaksEnabled ? "\n" : " \n";
1305
 
1306
- $text = str_replace($breakMarker, "<br />\n", $text);
 
 
 
1307
 
1308
- return $text;
 
 
1309
  }
1310
 
1311
- #
1312
  # ~
1313
- #
1314
 
1315
  protected function li($lines)
1316
  {
@@ -1332,7 +1455,18 @@ class Parsedown
1332
  }
1333
 
1334
  #
1335
- # Multiton
 
 
 
 
 
 
 
 
 
 
 
1336
  #
1337
 
1338
  static function instance($name = 'default')
@@ -1342,7 +1476,7 @@ class Parsedown
1342
  return self::$instances[$name];
1343
  }
1344
 
1345
- $instance = new self();
1346
 
1347
  self::$instances[$name] = $instance;
1348
 
@@ -1351,41 +1485,33 @@ class Parsedown
1351
 
1352
  private static $instances = array();
1353
 
1354
- #
1355
- # Deprecated Methods
1356
- #
1357
-
1358
- /**
1359
- * @deprecated in favor of "text"
1360
- */
1361
- function parse($text)
1362
- {
1363
- $markup = $this->text($text);
1364
-
1365
- return $markup;
1366
- }
1367
-
1368
  #
1369
  # Fields
1370
  #
1371
 
1372
- protected $Definitions;
1373
 
1374
  #
1375
- # Read-only
1376
 
1377
  protected $specialCharacters = array(
1378
- '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!',
1379
  );
1380
 
1381
  protected $StrongRegex = array(
1382
- '*' => '/^[*]{2}((?:[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
1383
- '_' => '/^__((?:[^_]|_[^_]*_)+?)__(?!_)/us',
1384
  );
1385
 
1386
  protected $EmRegex = array(
1387
- '*' => '/^[*]((?:[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s',
1388
- '_' => '/^_((?:[^_]|__[^_]*__)+?)_(?!_)\b/us',
 
 
 
 
 
 
1389
  );
1390
 
1391
  protected $textLevelElements = array(
15
 
16
  class Parsedown
17
  {
18
+ # ~
 
19
 
20
+ const version = '1.5.4';
 
 
 
21
 
 
22
  # ~
23
 
24
  function text($text)
25
  {
26
  # make sure no definitions are set
27
+ $this->DefinitionData = array();
28
 
29
  # standardize line breaks
30
+ $text = str_replace(array("\r\n", "\r"), "\n", $text);
 
 
 
 
31
 
32
  # remove surrounding line breaks
33
  $text = trim($text, "\n");
48
  # Setters
49
  #
50
 
 
 
51
  function setBreaksEnabled($breaksEnabled)
52
  {
53
  $this->breaksEnabled = $breaksEnabled;
55
  return $this;
56
  }
57
 
58
+ protected $breaksEnabled;
59
+
60
+ function setMarkupEscaped($markupEscaped)
61
+ {
62
+ $this->markupEscaped = $markupEscaped;
63
+
64
+ return $this;
65
+ }
66
+
67
+ protected $markupEscaped;
68
+
69
+ function setUrlsLinked($urlsLinked)
70
+ {
71
+ $this->urlsLinked = $urlsLinked;
72
+
73
+ return $this;
74
+ }
75
+
76
+ protected $urlsLinked = true;
77
+
78
  #
79
  # Lines
80
  #
81
 
82
  protected $BlockTypes = array(
83
+ '#' => array('Header'),
84
  '*' => array('Rule', 'List'),
85
  '+' => array('List'),
86
+ '-' => array('SetextHeader', 'Table', 'Rule', 'List'),
87
  '0' => array('List'),
88
  '1' => array('List'),
89
  '2' => array('List'),
96
  '9' => array('List'),
97
  ':' => array('Table'),
98
  '<' => array('Comment', 'Markup'),
99
+ '=' => array('SetextHeader'),
100
  '>' => array('Quote'),
101
+ '[' => array('Reference'),
102
  '_' => array('Rule'),
103
  '`' => array('FencedCode'),
104
  '|' => array('Table'),
107
 
108
  # ~
109
 
 
 
 
 
 
 
110
  protected $unmarkedBlockTypes = array(
111
+ 'Code',
112
  );
113
 
114
  #
131
  continue;
132
  }
133
 
134
+ if (strpos($line, "\t") !== false)
135
+ {
136
+ $parts = explode("\t", $line);
137
+
138
+ $line = $parts[0];
139
+
140
+ unset($parts[0]);
141
+
142
+ foreach ($parts as $part)
143
+ {
144
+ $shortage = 4 - mb_strlen($line, 'utf-8') % 4;
145
+
146
+ $line .= str_repeat(' ', $shortage);
147
+ $line .= $part;
148
+ }
149
+ }
150
+
151
  $indent = 0;
152
 
153
  while (isset($line[$indent]) and $line[$indent] === ' ')
163
 
164
  # ~
165
 
166
+ if (isset($CurrentBlock['continuable']))
167
  {
168
+ $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
169
 
170
  if (isset($Block))
171
  {
175
  }
176
  else
177
  {
178
+ if (method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
179
  {
180
+ $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
181
  }
 
 
182
  }
183
  }
184
 
186
 
187
  $marker = $text[0];
188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  # ~
190
 
191
  $blockTypes = $this->unmarkedBlockTypes;
203
 
204
  foreach ($blockTypes as $blockType)
205
  {
206
+ $Block = $this->{'block'.$blockType}($Line, $CurrentBlock);
207
 
208
  if (isset($Block))
209
  {
211
 
212
  if ( ! isset($Block['identified']))
213
  {
214
+ $Blocks []= $CurrentBlock;
215
 
216
  $Block['identified'] = true;
217
  }
218
 
219
+ if (method_exists($this, 'block'.$blockType.'Continue'))
220
  {
221
+ $Block['continuable'] = true;
222
  }
223
 
224
  $CurrentBlock = $Block;
235
  }
236
  else
237
  {
238
+ $Blocks []= $CurrentBlock;
239
 
240
+ $CurrentBlock = $this->paragraph($Line);
241
 
242
  $CurrentBlock['identified'] = true;
243
  }
245
 
246
  # ~
247
 
248
+ if (isset($CurrentBlock['continuable']) and method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
249
  {
250
+ $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
251
  }
252
 
253
  # ~
254
 
255
+ $Blocks []= $CurrentBlock;
 
 
256
 
257
+ unset($Blocks[0]);
 
 
258
 
259
  # ~
260
 
261
+ $markup = '';
 
 
 
 
262
 
263
+ foreach ($Blocks as $Block)
 
 
264
  {
265
+ if (isset($Block['hidden']))
 
 
266
  {
267
+ continue;
268
  }
269
 
270
+ $markup .= "\n";
271
+ $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']);
272
+ }
273
 
274
+ $markup .= "\n";
 
 
 
 
 
 
275
 
276
+ # ~
277
+
278
+ return $markup;
279
  }
280
 
281
  #
282
  # Code
283
 
284
+ protected function blockCode($Line, $Block = null)
285
  {
286
+ if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted']))
287
+ {
288
+ return;
289
+ }
290
+
291
  if ($Line['indent'] >= 4)
292
  {
293
  $text = substr($Line['body'], 4);
307
  }
308
  }
309
 
310
+ protected function blockCodeContinue($Line, $Block)
311
  {
312
  if ($Line['indent'] >= 4)
313
  {
328
  }
329
  }
330
 
331
+ protected function blockCodeComplete($Block)
332
  {
333
  $text = $Block['element']['text']['text'];
334
 
342
  #
343
  # Comment
344
 
345
+ protected function blockComment($Line)
346
  {
347
+ if ($this->markupEscaped)
348
+ {
349
+ return;
350
+ }
351
+
352
  if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
353
  {
354
  $Block = array(
355
+ 'markup' => $Line['body'],
356
  );
357
 
358
  if (preg_match('/-->$/', $Line['text']))
364
  }
365
  }
366
 
367
+ protected function blockCommentContinue($Line, array $Block)
368
  {
369
  if (isset($Block['closed']))
370
  {
371
  return;
372
  }
373
 
374
+ $Block['markup'] .= "\n" . $Line['body'];
375
 
376
  if (preg_match('/-->$/', $Line['text']))
377
  {
384
  #
385
  # Fenced Code
386
 
387
+ protected function blockFencedCode($Line)
388
  {
389
+ if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
390
  {
391
  $Element = array(
392
  'name' => 'code',
393
  'text' => '',
394
  );
395
 
396
+ if (isset($matches[1]))
397
  {
398
+ $class = 'language-'.$matches[1];
399
 
400
  $Element['attributes'] = array(
401
  'class' => $class,
415
  }
416
  }
417
 
418
+ protected function blockFencedCodeContinue($Line, $Block)
419
  {
420
  if (isset($Block['complete']))
421
  {
443
  return $Block;
444
  }
445
 
446
+ protected function blockFencedCodeComplete($Block)
447
  {
448
  $text = $Block['element']['text']['text'];
449
 
454
  return $Block;
455
  }
456
 
457
+ #
458
+ # Header
459
+
460
+ protected function blockHeader($Line)
461
+ {
462
+ if (isset($Line['text'][1]))
463
+ {
464
+ $level = 1;
465
+
466
+ while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
467
+ {
468
+ $level ++;
469
+ }
470
+
471
+ if ($level > 6)
472
+ {
473
+ return;
474
+ }
475
+
476
+ $text = trim($Line['text'], '# ');
477
+
478
+ $Block = array(
479
+ 'element' => array(
480
+ 'name' => 'h' . min(6, $level),
481
+ 'text' => $text,
482
+ 'handler' => 'line',
483
+ ),
484
+ );
485
+
486
+ return $Block;
487
+ }
488
+ }
489
+
490
  #
491
  # List
492
 
493
+ protected function blockList($Line)
494
  {
495
  list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
496
 
519
  }
520
  }
521
 
522
+ protected function blockListContinue($Line, array $Block)
523
  {
524
+ if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches))
525
  {
526
  if (isset($Block['interrupted']))
527
  {
532
 
533
  unset($Block['li']);
534
 
535
+ $text = isset($matches[1]) ? $matches[1] : '';
536
+
537
  $Block['li'] = array(
538
  'name' => 'li',
539
  'handler' => 'li',
540
  'text' => array(
541
+ $text,
542
  ),
543
  );
544
 
547
  return $Block;
548
  }
549
 
550
+ if ($Line['text'][0] === '[' and $this->blockReference($Line))
551
+ {
552
+ return $Block;
553
+ }
554
+
555
  if ( ! isset($Block['interrupted']))
556
  {
557
  $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
578
  #
579
  # Quote
580
 
581
+ protected function blockQuote($Line)
582
  {
583
  if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
584
  {
594
  }
595
  }
596
 
597
+ protected function blockQuoteContinue($Line, array $Block)
598
  {
599
  if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
600
  {
621
  #
622
  # Rule
623
 
624
+ protected function blockRule($Line)
625
  {
626
+ if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text']))
627
  {
628
  $Block = array(
629
  'element' => array(
638
  #
639
  # Setext
640
 
641
+ protected function blockSetextHeader($Line, array $Block = null)
642
  {
643
  if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
644
  {
656
  #
657
  # Markup
658
 
659
+ protected function blockMarkup($Line)
660
  {
661
+ if ($this->markupEscaped)
662
+ {
663
+ return;
664
+ }
665
+
666
+ if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
667
  {
668
+ $element = strtolower($matches[1]);
669
+
670
+ if (in_array($element, $this->textLevelElements))
671
  {
672
  return;
673
  }
674
 
675
  $Block = array(
676
+ 'name' => $matches[1],
677
+ 'depth' => 0,
678
+ 'markup' => $Line['text'],
679
  );
680
 
681
+ $length = strlen($matches[0]);
682
+
683
+ $remainder = substr($Line['text'], $length);
684
+
685
+ if (trim($remainder) === '')
686
  {
687
+ if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
688
+ {
689
+ $Block['closed'] = true;
690
+
691
+ $Block['void'] = true;
692
+ }
693
  }
694
  else
695
  {
696
+ if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
697
+ {
698
+ return;
699
+ }
700
+
701
+ if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder))
702
+ {
703
+ $Block['closed'] = true;
704
+ }
705
  }
706
 
707
  return $Block;
708
  }
709
  }
710
 
711
+ protected function blockMarkupContinue($Line, array $Block)
712
  {
713
  if (isset($Block['closed']))
714
  {
715
  return;
716
  }
717
 
718
+ if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open
719
  {
720
  $Block['depth'] ++;
721
  }
722
 
723
+ if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close
724
  {
725
  if ($Block['depth'] > 0)
726
  {
732
  }
733
  }
734
 
735
+ if (isset($Block['interrupted']))
736
+ {
737
+ $Block['markup'] .= "\n";
738
+
739
+ unset($Block['interrupted']);
740
+ }
741
+
742
+ $Block['markup'] .= "\n".$Line['body'];
743
 
744
  return $Block;
745
  }
746
 
747
+ #
748
+ # Reference
749
+
750
+ protected function blockReference($Line)
751
+ {
752
+ if (preg_match('/^\[(.+?)\]:[ ]*<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
753
+ {
754
+ $id = strtolower($matches[1]);
755
+
756
+ $Data = array(
757
+ 'url' => $matches[2],
758
+ 'title' => null,
759
+ );
760
+
761
+ if (isset($matches[3]))
762
+ {
763
+ $Data['title'] = $matches[3];
764
+ }
765
+
766
+ $this->DefinitionData['Reference'][$id] = $Data;
767
+
768
+ $Block = array(
769
+ 'hidden' => true,
770
+ );
771
+
772
+ return $Block;
773
+ }
774
+ }
775
+
776
  #
777
  # Table
778
 
779
+ protected function blockTable($Line, array $Block = null)
780
  {
781
  if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
782
  {
810
  $alignment = 'left';
811
  }
812
 
813
+ if (substr($dividerCell, - 1) === ':')
814
  {
815
  $alignment = $alignment === 'left' ? 'center' : 'right';
816
  }
844
  $alignment = $alignments[$index];
845
 
846
  $HeaderElement['attributes'] = array(
847
+ 'style' => 'text-align: '.$alignment.';',
848
  );
849
  }
850
 
883
  }
884
  }
885
 
886
+ protected function blockTableContinue($Line, array $Block)
887
  {
888
+ if (isset($Block['interrupted']))
889
+ {
890
+ return;
891
+ }
892
+
893
  if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
894
  {
895
  $Elements = array();
899
  $row = trim($row);
900
  $row = trim($row, '|');
901
 
902
+ preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
903
 
904
+ foreach ($matches[0] as $index => $cell)
905
  {
906
  $cell = trim($cell);
907
 
914
  if (isset($Block['alignments'][$index]))
915
  {
916
  $Element['attributes'] = array(
917
+ 'style' => 'text-align: '.$Block['alignments'][$index].';',
918
  );
919
  }
920
 
933
  }
934
  }
935
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
936
  #
937
  # ~
938
  #
939
 
940
+ protected function paragraph($Line)
941
  {
942
  $Block = array(
943
  'element' => array(
951
  }
952
 
953
  #
954
+ # Inline Elements
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
955
  #
956
 
957
+ protected $InlineTypes = array(
958
+ '"' => array('SpecialCharacter'),
959
+ '!' => array('Image'),
960
+ '&' => array('SpecialCharacter'),
961
  '*' => array('Emphasis'),
962
+ ':' => array('Url'),
963
+ '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'),
964
+ '>' => array('SpecialCharacter'),
965
  '[' => array('Link'),
966
  '_' => array('Emphasis'),
967
+ '`' => array('Code'),
968
  '~' => array('Strikethrough'),
969
  '\\' => array('EscapeSequence'),
970
  );
971
 
972
  # ~
973
 
974
+ protected $inlineMarkerList = '!"*_&[:<>`~\\';
975
 
976
  #
977
  # ~
981
  {
982
  $markup = '';
983
 
984
+ # $excerpt is based on the first occurrence of a marker
985
 
986
+ while ($excerpt = strpbrk($text, $this->inlineMarkerList))
 
 
987
  {
988
  $marker = $excerpt[0];
989
 
990
+ $markerPosition = strpos($text, $marker);
991
 
992
  $Excerpt = array('text' => $excerpt, 'context' => $text);
993
 
994
+ foreach ($this->InlineTypes[$marker] as $inlineType)
995
  {
996
+ $Inline = $this->{'inline'.$inlineType}($Excerpt);
 
 
997
 
998
+ if ( ! isset($Inline))
999
  {
1000
  continue;
1001
  }
1002
 
1003
+ # makes sure that the inline belongs to "our" marker
1004
 
1005
+ if (isset($Inline['position']) and $Inline['position'] > $markerPosition)
1006
  {
1007
  continue;
1008
  }
1009
 
1010
+ # sets a default inline position
1011
 
1012
+ if ( ! isset($Inline['position']))
1013
  {
1014
+ $Inline['position'] = $markerPosition;
1015
  }
1016
 
1017
+ # the text that comes before the inline
1018
+ $unmarkedText = substr($text, 0, $Inline['position']);
 
 
 
1019
 
1020
+ # compile the unmarked text
1021
+ $markup .= $this->unmarkedText($unmarkedText);
1022
 
1023
+ # compile the inline
1024
+ $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
1025
 
1026
+ # remove the examined text
1027
+ $text = substr($text, $Inline['position'] + $Inline['extent']);
1028
 
1029
  continue 2;
1030
  }
1031
 
1032
+ # the marker does not belong to an inline
1033
 
1034
+ $unmarkedText = substr($text, 0, $markerPosition + 1);
1035
+
1036
+ $markup .= $this->unmarkedText($unmarkedText);
1037
+
1038
+ $text = substr($text, $markerPosition + 1);
1039
  }
1040
 
1041
+ $markup .= $this->unmarkedText($text);
1042
 
1043
  return $markup;
1044
  }
1047
  # ~
1048
  #
1049
 
1050
+ protected function inlineCode($Excerpt)
1051
  {
1052
+ $marker = $Excerpt['text'][0];
 
 
 
1053
 
1054
+ if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(?<!'.$marker.')\1(?!'.$marker.')/s', $Excerpt['text'], $matches))
1055
  {
1056
+ $text = $matches[2];
1057
+ $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
1058
+ $text = preg_replace("/[ ]*\n/", ' ', $text);
1059
+
1060
  return array(
1061
+ 'extent' => strlen($matches[0]),
 
1062
  'element' => array(
1063
+ 'name' => 'code',
1064
+ 'text' => $text,
 
 
 
1065
  ),
1066
  );
1067
  }
1068
  }
1069
 
1070
+ protected function inlineEmailTag($Excerpt)
1071
  {
1072
+ if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches))
1073
  {
1074
+ $url = $matches[1];
1075
+
1076
+ if ( ! isset($matches[2]))
1077
+ {
1078
+ $url = 'mailto:' . $url;
1079
+ }
1080
+
1081
  return array(
1082
+ 'extent' => strlen($matches[0]),
1083
+ 'element' => array(
1084
+ 'name' => 'a',
1085
+ 'text' => $matches[1],
1086
+ 'attributes' => array(
1087
+ 'href' => $url,
1088
+ ),
1089
+ ),
1090
  );
1091
  }
1092
  }
1093
 
1094
+ protected function inlineEmphasis($Excerpt)
1095
  {
1096
  if ( ! isset($Excerpt['text'][1]))
1097
  {
1098
  return;
1099
  }
1100
 
1101
+ $marker = $Excerpt['text'][0];
1102
+
1103
+ if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
1104
  {
1105
+ $emphasis = 'strong';
1106
+ }
1107
+ elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
1108
+ {
1109
+ $emphasis = 'em';
1110
+ }
1111
+ else
1112
+ {
1113
+ return;
1114
  }
1115
+
1116
+ return array(
1117
+ 'extent' => strlen($matches[0]),
1118
+ 'element' => array(
1119
+ 'name' => $emphasis,
1120
+ 'handler' => 'line',
1121
+ 'text' => $matches[1],
1122
+ ),
1123
+ );
1124
  }
1125
 
1126
+ protected function inlineEscapeSequence($Excerpt)
1127
  {
1128
  if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
1129
  {
1134
  }
1135
  }
1136
 
1137
+ protected function inlineImage($Excerpt)
1138
+ {
1139
+ if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
1140
+ {
1141
+ return;
1142
+ }
1143
+
1144
+ $Excerpt['text']= substr($Excerpt['text'], 1);
1145
+
1146
+ $Link = $this->inlineLink($Excerpt);
1147
+
1148
+ if ($Link === null)
1149
+ {
1150
+ return;
1151
+ }
1152
+
1153
+ $Inline = array(
1154
+ 'extent' => $Link['extent'] + 1,
1155
+ 'element' => array(
1156
+ 'name' => 'img',
1157
+ 'attributes' => array(
1158
+ 'src' => $Link['element']['attributes']['href'],
1159
+ 'alt' => $Link['element']['text'],
1160
+ ),
1161
+ ),
1162
+ );
1163
+
1164
+ $Inline['element']['attributes'] += $Link['element']['attributes'];
1165
+
1166
+ unset($Inline['element']['attributes']['href']);
1167
+
1168
+ return $Inline;
1169
+ }
1170
+
1171
+ protected function inlineLink($Excerpt)
1172
  {
1173
+ $Element = array(
1174
+ 'name' => 'a',
1175
+ 'handler' => 'line',
1176
+ 'text' => null,
1177
+ 'attributes' => array(
1178
+ 'href' => null,
1179
+ 'title' => null,
1180
+ ),
1181
+ );
1182
+
1183
+ $extent = 0;
1184
+
1185
+ $remainder = $Excerpt['text'];
1186
+
1187
+ if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
1188
+ {
1189
+ $Element['text'] = $matches[1];
1190
+
1191
+ $extent += strlen($matches[0]);
1192
+
1193
+ $remainder = substr($remainder, $extent);
1194
+ }
1195
+ else
1196
+ {
1197
+ return;
1198
+ }
1199
+
1200
+ if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches))
1201
+ {
1202
+ $Element['attributes']['href'] = $matches[1];
1203
+
1204
+ if (isset($matches[2]))
1205
+ {
1206
+ $Element['attributes']['title'] = substr($matches[2], 1, - 1);
1207
+ }
1208
+
1209
+ $extent += strlen($matches[0]);
1210
+ }
1211
+ else
1212
+ {
1213
+ if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
1214
+ {
1215
+ $definition = strlen($matches[1]) ? $matches[1] : $Element['text'];
1216
+ $definition = strtolower($definition);
1217
+
1218
+ $extent += strlen($matches[0]);
1219
+ }
1220
+ else
1221
+ {
1222
+ $definition = strtolower($Element['text']);
1223
+ }
1224
+
1225
+ if ( ! isset($this->DefinitionData['Reference'][$definition]))
1226
+ {
1227
+ return;
1228
+ }
1229
+
1230
+ $Definition = $this->DefinitionData['Reference'][$definition];
1231
+
1232
+ $Element['attributes']['href'] = $Definition['url'];
1233
+ $Element['attributes']['title'] = $Definition['title'];
1234
+ }
1235
+
1236
+ $Element['attributes']['href'] = str_replace(array('&', '<'), array('&amp;', '&lt;'), $Element['attributes']['href']);
1237
+
1238
  return array(
1239
+ 'extent' => $extent,
1240
+ 'element' => $Element,
1241
  );
1242
  }
1243
 
1244
+ protected function inlineMarkup($Excerpt)
1245
  {
1246
+ if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false)
1247
  {
1248
+ return;
1249
+ }
1250
 
1251
+ if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches))
1252
+ {
1253
  return array(
1254
+ 'markup' => $matches[0],
1255
  'extent' => strlen($matches[0]),
 
 
 
 
 
 
 
1256
  );
1257
  }
 
1258
 
1259
+ if ($Excerpt['text'][1] === '!' and preg_match('/^<!---?[^>-](?:-?[^-])*-->/s', $Excerpt['text'], $matches))
 
 
1260
  {
1261
  return array(
1262
+ 'markup' => $matches[0],
1263
  'extent' => strlen($matches[0]),
 
 
 
 
 
 
 
1264
  );
1265
  }
 
1266
 
1267
+ if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches))
 
 
1268
  {
1269
  return array(
1270
  'markup' => $matches[0],
1273
  }
1274
  }
1275
 
1276
+ protected function inlineSpecialCharacter($Excerpt)
1277
  {
1278
+ if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text']))
1279
+ {
1280
+ return array(
1281
+ 'markup' => '&amp;',
1282
+ 'extent' => 1,
1283
+ );
1284
+ }
1285
+
1286
+ $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot');
1287
 
1288
+ if (isset($SpecialCharacter[$Excerpt['text'][0]]))
1289
  {
1290
+ return array(
1291
+ 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';',
1292
+ 'extent' => 1,
1293
+ );
1294
+ }
1295
+ }
1296
+
1297
+ protected function inlineStrikethrough($Excerpt)
1298
+ {
1299
+ if ( ! isset($Excerpt['text'][1]))
1300
+ {
1301
+ return;
1302
+ }
1303
 
1304
+ if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches))
1305
+ {
1306
  return array(
1307
  'extent' => strlen($matches[0]),
1308
  'element' => array(
1309
+ 'name' => 'del',
1310
+ 'text' => $matches[1],
1311
+ 'handler' => 'line',
1312
  ),
1313
  );
1314
  }
1315
  }
1316
 
1317
+ protected function inlineUrl($Excerpt)
1318
  {
1319
+ if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1320
  {
1321
  return;
1322
  }
1323
 
1324
+ if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE))
 
 
1325
  {
1326
+ $Inline = array(
1327
+ 'extent' => strlen($matches[0][0]),
1328
+ 'position' => $matches[0][1],
1329
+ 'element' => array(
1330
+ 'name' => 'a',
1331
+ 'text' => $matches[0][0],
1332
+ 'attributes' => array(
1333
+ 'href' => $matches[0][0],
1334
+ ),
1335
  ),
1336
  );
1337
+
1338
+ return $Inline;
1339
  }
1340
+ }
1341
+
1342
+ protected function inlineUrlTag($Excerpt)
1343
+ {
1344
+ if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches))
1345
  {
1346
+ $url = str_replace(array('&', '<'), array('&amp;', '&lt;'), $matches[1]);
1347
+
1348
+ return array(
1349
+ 'extent' => strlen($matches[0]),
1350
+ 'element' => array(
1351
+ 'name' => 'a',
1352
+ 'text' => $url,
1353
+ 'attributes' => array(
1354
+ 'href' => $url,
1355
+ ),
1356
  ),
1357
  );
1358
  }
1359
+ }
1360
 
1361
+ # ~
1362
+
1363
+ protected function unmarkedText($text)
1364
+ {
1365
+ if ($this->breaksEnabled)
1366
  {
1367
+ $text = preg_replace('/[ ]*\n/', "<br />\n", $text);
1368
+ }
1369
+ else
1370
+ {
1371
+ $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "<br />\n", $text);
1372
+ $text = str_replace(" \n", "\n", $text);
1373
  }
1374
 
1375
+ return $text;
 
 
 
1376
  }
1377
 
1378
+ #
1379
+ # Handlers
1380
+ #
 
 
 
1381
 
1382
+ protected function element(array $Element)
1383
+ {
1384
+ $markup = '<'.$Element['name'];
1385
 
1386
+ if (isset($Element['attributes']))
1387
  {
1388
+ foreach ($Element['attributes'] as $name => $value)
1389
+ {
1390
+ if ($value === null)
1391
+ {
1392
+ continue;
1393
+ }
1394
+
1395
+ $markup .= ' '.$name.'="'.$value.'"';
1396
+ }
1397
  }
1398
+
1399
+ if (isset($Element['text']))
1400
  {
1401
+ $markup .= '>';
1402
+
1403
+ if (isset($Element['handler']))
1404
+ {
1405
+ $markup .= $this->{$Element['handler']}($Element['text']);
1406
+ }
1407
+ else
1408
+ {
1409
+ $markup .= $Element['text'];
1410
+ }
1411
+
1412
+ $markup .= '</'.$Element['name'].'>';
1413
  }
1414
  else
1415
  {
1416
+ $markup .= ' />';
1417
  }
1418
 
1419
+ return $markup;
 
 
 
 
 
 
 
1420
  }
1421
 
1422
+ protected function elements(array $Elements)
 
 
 
1423
  {
1424
+ $markup = '';
1425
 
1426
+ foreach ($Elements as $Element)
1427
+ {
1428
+ $markup .= "\n" . $this->element($Element);
1429
+ }
1430
 
1431
+ $markup .= "\n";
1432
+
1433
+ return $markup;
1434
  }
1435
 
 
1436
  # ~
 
1437
 
1438
  protected function li($lines)
1439
  {
1455
  }
1456
 
1457
  #
1458
+ # Deprecated Methods
1459
+ #
1460
+
1461
+ function parse($text)
1462
+ {
1463
+ $markup = $this->text($text);
1464
+
1465
+ return $markup;
1466
+ }
1467
+
1468
+ #
1469
+ # Static Methods
1470
  #
1471
 
1472
  static function instance($name = 'default')
1476
  return self::$instances[$name];
1477
  }
1478
 
1479
+ $instance = new static();
1480
 
1481
  self::$instances[$name] = $instance;
1482
 
1485
 
1486
  private static $instances = array();
1487
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1488
  #
1489
  # Fields
1490
  #
1491
 
1492
+ protected $DefinitionData;
1493
 
1494
  #
1495
+ # Read-Only
1496
 
1497
  protected $specialCharacters = array(
1498
+ '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|',
1499
  );
1500
 
1501
  protected $StrongRegex = array(
1502
+ '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
1503
+ '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us',
1504
  );
1505
 
1506
  protected $EmRegex = array(
1507
+ '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s',
1508
+ '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us',
1509
+ );
1510
+
1511
+ protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?';
1512
+
1513
+ protected $voidElements = array(
1514
+ 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source',
1515
  );
1516
 
1517
  protected $textLevelElements = array(
includes/libraries/aihrus-framework/includes/libraries/parsedown/README.md CHANGED
@@ -1,18 +1,22 @@
1
  ## Parsedown
2
 
3
- Better [Markdown](http://en.wikipedia.org/wiki/Markdown) parser for PHP.
 
4
 
5
- [[ demo ]](http://parsedown.org/demo)
 
 
 
 
 
6
 
7
  ### Features
8
 
9
- * [Fast](http://parsedown.org/speed)
10
- * [Consistent](http://parsedown.org/consistency)
11
- * [GitHub Flavored](https://help.github.com/articles/github-flavored-markdown)
12
- * [Tested](http://parsedown.org/tests/) in PHP 5.2, 5.3, 5.4, 5.5, 5.6 and [hhvm](http://www.hhvm.com/)
13
  * Extensible
14
- * [Markdown Extra extension](https://github.com/erusev/parsedown-extra) <sup>new</sup>
15
- * [JavaScript port](https://github.com/hkdobrev/parsedown.js) under development <sup>new</sup>
16
 
17
  ### Installation
18
 
@@ -26,18 +30,24 @@ $Parsedown = new Parsedown();
26
  echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p>
27
  ```
28
 
29
- More examples in [the wiki](https://github.com/erusev/parsedown/wiki/Usage) and in [this video tutorial](http://youtu.be/wYZBY8DEikI).
30
 
31
  ### Questions
32
 
33
- **How does Parsedown work?**<br/>
34
- Parsedown recognises that the Markdown syntax is optimised for humans so it tries to read like one. It goes through text line by line. It looks at how lines start to identify blocks. It looks for special characters to identify inline elements.
 
 
 
 
 
 
 
 
 
35
 
36
- **Why doesn’t Parsedown use namespaces?**<br/>
37
- Using namespaces would mean dropping support for PHP 5.2. We believe that since Parsedown is a single class with an uncommon name, making this trade wouldn't be worth it.
38
 
39
- **Is Parsedown compliant with CommonMark?**<br/>
40
- We are [working on it](https://github.com/erusev/parsedown/tree/commonmark).
41
 
42
- **Who uses Parsedown?**<br/>
43
- [phpDocumentor](http://www.phpdoc.org/), [Bolt CMS](http://bolt.cm/), [RaspberryPi.org](http://www.raspberrypi.org/) and [more](https://www.versioneye.com/php/erusev:parsedown/references).
1
  ## Parsedown
2
 
3
+ [![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown)
4
+ <!--[![Total Downloads](http://img.shields.io/packagist/dt/erusev/parsedown.svg?style=flat-square)](https://packagist.org/packages/erusev/parsedown)-->
5
 
6
+ Better Markdown Parser in PHP
7
+
8
+ [Demo](http://parsedown.org/demo) |
9
+ [Benchmarks](http://parsedown.org/speed) |
10
+ [Tests](http://parsedown.org/tests/) |
11
+ [Documentation](https://github.com/erusev/parsedown/wiki/)
12
 
13
  ### Features
14
 
15
+ * Super Fast
16
+ * [GitHub flavored](https://help.github.com/articles/github-flavored-markdown)
 
 
17
  * Extensible
18
+ * Tested in 5.3 to 5.6
19
+ * [Markdown Extra extension](https://github.com/erusev/parsedown-extra)
20
 
21
  ### Installation
22
 
30
  echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p>
31
  ```
32
 
33
+ More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI).
34
 
35
  ### Questions
36
 
37
+ **How does Parsedown work?**
38
+
39
+ It tries to read Markdown like a human. First, it looks at the lines. It’s interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line start with a `-` then it perhaps belong to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines).
40
+
41
+ We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages.
42
+
43
+ **Is it compliant with CommonMark?**
44
+
45
+ It passes most of the CommonMark tests. Most of the tests that don't pass deal with cases that are quite uncommon. Still, as CommonMark matures, compliance should improve.
46
+
47
+ **Who uses it?**
48
 
49
+ [phpDocumentor](http://www.phpdoc.org/), [October CMS](http://octobercms.com/), [Bolt CMS](http://bolt.cm/), [Kirby CMS](http://getkirby.com/), [Grav CMS](http://getgrav.org/), [Statamic CMS](http://www.statamic.com/), [RaspberryPi.org](http://www.raspberrypi.org/) and [more](https://www.versioneye.com/php/erusev:parsedown/references).
 
50
 
51
+ **How can I help?**
 
52
 
53
+ Use it, star it, share it and if you feel generous, [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2).
 
includes/libraries/aihrus-framework/includes/libraries/parsedown/phpunit.xml.dist CHANGED
@@ -2,7 +2,7 @@
2
  <phpunit bootstrap="test/bootstrap.php" colors="true">
3
  <testsuites>
4
  <testsuite>
5
- <file>test/Test.php</file>
6
  </testsuite>
7
  </testsuites>
8
  </phpunit>
2
  <phpunit bootstrap="test/bootstrap.php" colors="true">
3
  <testsuites>
4
  <testsuite>
5
+ <file>test/ParsedownTest.php</file>
6
  </testsuite>
7
  </testsuites>
8
  </phpunit>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/aligned_table.html CHANGED
@@ -1,21 +1,21 @@
1
  <table>
2
  <thead>
3
  <tr>
4
- <th align="left">header 1</th>
5
- <th align="center">header 2</th>
6
- <th align="right">header 2</th>
7
  </tr>
8
  </thead>
9
  <tbody>
10
  <tr>
11
- <td align="left">cell 1.1</td>
12
- <td align="center">cell 1.2</td>
13
- <td align="right">cell 1.3</td>
14
  </tr>
15
  <tr>
16
- <td align="left">cell 2.1</td>
17
- <td align="center">cell 2.2</td>
18
- <td align="right">cell 2.3</td>
19
  </tr>
20
  </tbody>
21
  </table>
1
  <table>
2
  <thead>
3
  <tr>
4
+ <th style="text-align: left;">header 1</th>
5
+ <th style="text-align: center;">header 2</th>
6
+ <th style="text-align: right;">header 2</th>
7
  </tr>
8
  </thead>
9
  <tbody>
10
  <tr>
11
+ <td style="text-align: left;">cell 1.1</td>
12
+ <td style="text-align: center;">cell 1.2</td>
13
+ <td style="text-align: right;">cell 1.3</td>
14
  </tr>
15
  <tr>
16
+ <td style="text-align: left;">cell 2.1</td>
17
+ <td style="text-align: center;">cell 2.2</td>
18
+ <td style="text-align: right;">cell 2.3</td>
19
  </tr>
20
  </tbody>
21
  </table>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/atx_heading.html CHANGED
@@ -4,6 +4,6 @@
4
  <h4>h4</h4>
5
  <h5>h5</h5>
6
  <h6>h6</h6>
7
- <h6>h6</h6>
8
  <h1>closed h1</h1>
9
  <p>#</p>
4
  <h4>h4</h4>
5
  <h5>h5</h5>
6
  <h6>h6</h6>
7
+ <p>####### not a heading</p>
8
  <h1>closed h1</h1>
9
  <p>#</p>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/atx_heading.md CHANGED
@@ -10,7 +10,7 @@
10
 
11
  ###### h6
12
 
13
- ####### h6
14
 
15
  # closed h1 #
16
 
10
 
11
  ###### h6
12
 
13
+ ####### not a heading
14
 
15
  # closed h1 #
16
 
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/block-level_html.html CHANGED
@@ -1,13 +1,12 @@
1
  <div>_content_</div>
2
- <p>sparse:</p>
3
  <div>
4
- <div class="inner">
5
- _content_
6
- </div>
7
  </div>
8
- <p>paragraph</p>
9
  <style type="text/css">
10
- p {
11
- color: red;
12
- }
13
- </style>
1
  <div>_content_</div>
2
+ <p>paragraph</p>
3
  <div>
4
+ <div class="inner">
5
+ _content_
6
+ </div>
7
  </div>
 
8
  <style type="text/css">
9
+ p {color: #789;}
10
+ </style>
11
+ <div>
12
+ <a href="/">home</a></div>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/block-level_html.md CHANGED
@@ -1,17 +1,16 @@
1
  <div>_content_</div>
2
 
3
- sparse:
4
 
5
  <div>
6
- <div class="inner">
7
- _content_
8
- </div>
9
  </div>
10
 
11
- paragraph
12
-
13
  <style type="text/css">
14
- p {
15
- color: red;
16
- }
17
  </style>
 
 
 
1
  <div>_content_</div>
2
 
3
+ paragraph
4
 
5
  <div>
6
+ <div class="inner">
7
+ _content_
8
+ </div>
9
  </div>
10
 
 
 
11
  <style type="text/css">
12
+ p {color: #789;}
 
 
13
  </style>
14
+
15
+ <div>
16
+ <a href="/">home</a></div>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/escaping.html CHANGED
@@ -1,4 +1,6 @@
1
  <p>escaped *emphasis*.</p>
2
  <p><code>escaped \*emphasis\* in a code span</code></p>
3
  <pre><code>escaped \*emphasis\* in a code block</code></pre>
4
- <p>\ ` * _ { } [ ] ( ) > # + - . !</p>
 
 
1
  <p>escaped *emphasis*.</p>
2
  <p><code>escaped \*emphasis\* in a code span</code></p>
3
  <pre><code>escaped \*emphasis\* in a code block</code></pre>
4
+ <p>\ ` * _ { } [ ] ( ) > # + - . !</p>
5
+ <p><em>one_two</em> <strong>one_two</strong></p>
6
+ <p><em>one*two</em> <strong>one*two</strong></p>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/escaping.md CHANGED
@@ -4,4 +4,8 @@ escaped \*emphasis\*.
4
 
5
  escaped \*emphasis\* in a code block
6
 
7
- \\ \` \* \_ \{ \} \[ \] \( \) \> \# \+ \- \. \!
 
 
 
 
4
 
5
  escaped \*emphasis\* in a code block
6
 
7
+ \\ \` \* \_ \{ \} \[ \] \( \) \> \# \+ \- \. \!
8
+
9
+ _one\_two_ __one\_two__
10
+
11
+ *one\*two* **one\*two**
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_reference.html CHANGED
@@ -1 +1,2 @@
1
- <p><img alt="Markdown Logo" src="/md.png" /></p>
 
1
+ <p><img src="/md.png" alt="Markdown Logo" /></p>
2
+ <p>![missing reference]</p>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_reference.md CHANGED
@@ -1,3 +1,5 @@
1
  ![Markdown Logo][image]
2
 
3
  [image]: /md.png
 
 
1
  ![Markdown Logo][image]
2
 
3
  [image]: /md.png
4
+
5
+ ![missing reference]
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_title.html CHANGED
@@ -1 +1,2 @@
1
- <p><img alt="alt" src="/md.png" title="title" /></p>
 
1
+ <p><img src="/md.png" alt="alt" title="title" /></p>
2
+ <p><img src="/md.png" alt="blank title" title="" /></p>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/image_title.md CHANGED
@@ -1 +1,3 @@
1
- ![alt](/md.png "title")
 
 
1
+ ![alt](/md.png "title")
2
+
3
+ ![blank title](/md.png "")
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link.html CHANGED
@@ -1,4 +1,6 @@
1
- <p><a href="http://example.com">link</a> and <a href="/tests/">another link</a></p>
 
 
2
  <p><a href="http://example.com"><code>link</code></a></p>
3
- <p><a href="http://example.com"><img alt="MD Logo" src="http://parsedown.org/md.png" /></a></p>
4
- <p><a href="http://example.com"><img alt="MD Logo" src="http://parsedown.org/md.png" /> and text</a></p>
1
+ <p><a href="http://example.com">link</a></p>
2
+ <p><a href="/url-(parentheses)">link</a> with parentheses in URL </p>
3
+ <p>(<a href="/index.php">link</a>) in parentheses</p>
4
  <p><a href="http://example.com"><code>link</code></a></p>
5
+ <p><a href="http://example.com"><img src="http://parsedown.org/md.png" alt="MD Logo" /></a></p>
6
+ <p><a href="http://example.com"><img src="http://parsedown.org/md.png" alt="MD Logo" /> and text</a></p>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link.md CHANGED
@@ -1,4 +1,8 @@
1
- [link](http://example.com) and [another link](/tests/)
 
 
 
 
2
 
3
  [`link`](http://example.com)
4
 
1
+ [link](http://example.com)
2
+
3
+ [link](/url-(parentheses)) with parentheses in URL
4
+
5
+ ([link](/index.php)) in parentheses
6
 
7
  [`link`](http://example.com)
8
 
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link_title.html CHANGED
@@ -1 +1,6 @@
1
- <p><a href="http://example.com" title="Title">single quotes</a> and <a href="http://example.com" title="Title">double quotes</a></p>
 
 
 
 
 
1
+ <p><a href="http://example.com" title="Title">single quotes</a></p>
2
+ <p><a href="http://example.com" title="Title">double quotes</a></p>
3
+ <p><a href="http://example.com" title="">single quotes blank</a></p>
4
+ <p><a href="http://example.com" title="">double quotes blank</a></p>
5
+ <p><a href="http://example.com" title="2 Words">space</a></p>
6
+ <p><a href="http://example.com/url-(parentheses)" title="Title">parentheses</a></p>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/inline_link_title.md CHANGED
@@ -1 +1,11 @@
1
- [single quotes](http://example.com 'Title') and [double quotes](http://example.com "Title")
 
 
 
 
 
 
 
 
 
 
1
+ [single quotes](http://example.com 'Title')
2
+
3
+ [double quotes](http://example.com "Title")
4
+
5
+ [single quotes blank](http://example.com '')
6
+
7
+ [double quotes blank](http://example.com "")
8
+
9
+ [space](http://example.com "2 Words")
10
+
11
+ [parentheses](http://example.com/url-(parentheses) "Title")
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/simple_table.html CHANGED
@@ -20,17 +20,17 @@
20
  <table>
21
  <thead>
22
  <tr>
23
- <th align="left">header 1</th>
24
  <th>header 2</th>
25
  </tr>
26
  </thead>
27
  <tbody>
28
  <tr>
29
- <td align="left">cell 1.1</td>
30
  <td>cell 1.2</td>
31
  </tr>
32
  <tr>
33
- <td align="left">cell 2.1</td>
34
  <td>cell 2.2</td>
35
  </tr>
36
  </tbody>
20
  <table>
21
  <thead>
22
  <tr>
23
+ <th style="text-align: left;">header 1</th>
24
  <th>header 2</th>
25
  </tr>
26
  </thead>
27
  <tbody>
28
  <tr>
29
+ <td style="text-align: left;">cell 1.1</td>
30
  <td>cell 1.2</td>
31
  </tr>
32
  <tr>
33
+ <td style="text-align: left;">cell 2.1</td>
34
  <td>cell 2.2</td>
35
  </tr>
36
  </tbody>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/special_characters.html CHANGED
@@ -1,6 +1,6 @@
1
  <p>AT&amp;T has an ampersand in their name</p>
2
  <p>this &amp; that</p>
3
- <p>4 &lt; 5 and 6 > 5</p>
4
  <p><a href="http://example.com/autolink?a=1&amp;b=2">http://example.com/autolink?a=1&amp;b=2</a></p>
5
  <p><a href="/script?a=1&amp;b=2">inline link</a></p>
6
  <p><a href="http://example.com/?a=1&amp;b=2">reference link</a></p>
1
  <p>AT&amp;T has an ampersand in their name</p>
2
  <p>this &amp; that</p>
3
+ <p>4 &lt; 5 and 6 &gt; 5</p>
4
  <p><a href="http://example.com/autolink?a=1&amp;b=2">http://example.com/autolink?a=1&amp;b=2</a></p>
5
  <p><a href="/script?a=1&amp;b=2">inline link</a></p>
6
  <p><a href="http://example.com/?a=1&amp;b=2">reference link</a></p>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/table_inline_markdown.html CHANGED
@@ -11,8 +11,12 @@
11
  <td><del>cell</del> 1.2</td>
12
  </tr>
13
  <tr>
14
- <td><code>cell</code> 2.1</td>
15
- <td>cell 2.2</td>
 
 
 
 
16
  </tr>
17
  </tbody>
18
  </table>
11
  <td><del>cell</del> 1.2</td>
12
  </tr>
13
  <tr>
14
+ <td><code>|</code> 2.1</td>
15
+ <td>| 2.2</td>
16
+ </tr>
17
+ <tr>
18
+ <td><code>\|</code> 2.1</td>
19
+ <td><a href="/">link</a></td>
20
  </tr>
21
  </tbody>
22
  </table>
includes/libraries/aihrus-framework/includes/libraries/parsedown/test/data/table_inline_markdown.md CHANGED
@@ -1,4 +1,5 @@
1
  | _header_ 1 | header 2 |
2
  | ------------ | ------------ |
3
  | _cell_ 1.1 | ~~cell~~ 1.2 |
4
- | `cell` 2.1 | cell 2.2 |
 
1
  | _header_ 1 | header 2 |
2
  | ------------ | ------------ |
3
  | _cell_ 1.1 | ~~cell~~ 1.2 |
4
+ | `|` 2.1 | \| 2.2 |
5
+ | `\|` 2.1 | [link](/) |
includes/libraries/bxslider-4/package.json CHANGED
@@ -46,6 +46,5 @@
46
  "bxslider",
47
  "jQuery",
48
  "plugin"
49
- ],
50
- "private": true
51
  }
46
  "bxslider",
47
  "jQuery",
48
  "plugin"
49
+ ]
 
50
  }
languages/testimonials-widget.pot CHANGED
@@ -1,14 +1,15 @@
1
- # Copyright (C) 2015 Testimonials Widget
2
  # This file is distributed under the same license as the Testimonials Widget package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Testimonials Widget 3.2.0\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/testimonials-widget\n"
7
- "POT-Creation-Date: 2015-06-26 08:51:20+00:00\n"
 
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
@@ -63,42 +64,42 @@ msgid "Testimonials Settings"
63
  msgstr ""
64
 
65
  #: includes/class-testimonials-widget-settings.php:97
66
- #: includes/class-testimonials-widget.php:136
67
  msgid "Settings"
68
  msgstr ""
69
 
70
  #: includes/class-testimonials-widget-settings.php:113
71
- #: includes/class-testimonials-widget-settings.php:945
72
  msgid "General"
73
  msgstr ""
74
 
75
  #: includes/class-testimonials-widget-settings.php:114
76
- #: includes/class-testimonials-widget-settings.php:953
77
  msgid "Fields"
78
  msgstr ""
79
 
80
  #: includes/class-testimonials-widget-settings.php:115
81
- #: includes/class-testimonials-widget-settings.php:961
82
  msgid "Selection"
83
  msgstr ""
84
 
85
  #: includes/class-testimonials-widget-settings.php:116
86
- #: includes/class-testimonials-widget-settings.php:969
87
  msgid "Ordering"
88
  msgstr ""
89
 
90
  #: includes/class-testimonials-widget-settings.php:117
91
- #: includes/class-testimonials-widget-settings.php:977
92
  msgid "Columns"
93
  msgstr ""
94
 
95
  #: includes/class-testimonials-widget-settings.php:118
96
- #: includes/class-testimonials-widget-settings.php:985
97
  msgid "Post Type"
98
  msgstr ""
99
 
100
  #: includes/class-testimonials-widget-settings.php:119
101
- #: includes/class-testimonials-widget-settings.php:993
102
  msgid "Slider Widget"
103
  msgstr ""
104
 
@@ -111,24 +112,26 @@ msgid "Shortcode Examples"
111
  msgstr ""
112
 
113
  #: includes/class-testimonials-widget-settings.php:139
114
- #: includes/libraries/aihrus-framework/includes/class-aihrus-widget.php:336
115
  msgid "Title"
116
  msgstr ""
117
 
118
  #: includes/class-testimonials-widget-settings.php:140
119
- #: includes/class-testimonials-widget.php:576
120
- #: includes/class-testimonials-widget.php:624
121
  msgid "Testimonials"
122
  msgstr ""
123
 
124
  #: includes/class-testimonials-widget-settings.php:146
125
- #: includes/libraries/aihrus-framework/includes/class-aihrus-widget.php:340
126
  msgid "Title Link"
127
  msgstr ""
128
 
129
  #: includes/class-testimonials-widget-settings.php:147
130
- #: includes/libraries/aihrus-framework/includes/class-aihrus-widget.php:341
131
- msgid "URL, path, or post ID to link widget title to. Ex: http://example.com/stuff, /testimonials, or 123"
 
 
132
  msgstr ""
133
 
134
  #: includes/class-testimonials-widget-settings.php:153
@@ -168,7 +171,9 @@ msgid "Rotation Speed"
168
  msgstr ""
169
 
170
  #: includes/class-testimonials-widget-settings.php:186
171
- msgid "Number of seconds between testimonial rotations or 0 for no rotation at all refresh."
 
 
172
  msgstr ""
173
 
174
  #: includes/class-testimonials-widget-settings.php:193
@@ -184,7 +189,9 @@ msgid "Slide Width?"
184
  msgstr ""
185
 
186
  #: includes/class-testimonials-widget-settings.php:203
187
- msgid "Width of each testimonial. Increase to thumbnail width or greater for improved looks. Requried for horizontal transitions."
 
 
188
  msgstr ""
189
 
190
  #: includes/class-testimonials-widget-settings.php:210
@@ -240,7 +247,9 @@ msgid "Disable \"Testimonials Not Found\"?"
240
  msgstr ""
241
 
242
  #: includes/class-testimonials-widget-settings.php:257
243
- msgid "Remove \"Testimonials Not Found\" content when no testimonials are found to be displayed."
 
 
244
  msgstr ""
245
 
246
  #: includes/class-testimonials-widget-settings.php:263
@@ -268,7 +277,10 @@ msgid "After testimonials"
268
  msgstr ""
269
 
270
  #: includes/class-testimonials-widget-settings.php:276
271
- msgid "Adds HTML tag markup per the <a href=\"%s\">Review schema</a> to testimonials. Search engines including Bing, Google, Yahoo! and Yandex rely on this markup to improve the display of search results."
 
 
 
272
  msgstr ""
273
 
274
  #: includes/class-testimonials-widget-settings.php:279
@@ -312,7 +324,8 @@ msgid "Remove `.hentry` CSS?"
312
  msgstr ""
313
 
314
  #: includes/class-testimonials-widget-settings.php:321
315
- msgid "Some themes use class `.hentry` in a manner that breaks Testimonials' CSS."
 
316
  msgstr ""
317
 
318
  #: includes/class-testimonials-widget-settings.php:328
@@ -336,331 +349,354 @@ msgid "Field Options"
336
  msgstr ""
337
 
338
  #: includes/class-testimonials-widget-settings.php:353
339
- #: includes/class-testimonials-widget-settings.php:619
 
 
 
 
 
 
 
 
340
  msgid "Hide Author?"
341
  msgstr ""
342
 
343
- #: includes/class-testimonials-widget-settings.php:356
344
  msgid "Don't display testimonial title in cite."
345
  msgstr ""
346
 
347
- #: includes/class-testimonials-widget-settings.php:361
348
- #: includes/class-testimonials-widget-settings.php:629
349
  msgid "Hide Company?"
350
  msgstr ""
351
 
352
- #: includes/class-testimonials-widget-settings.php:364
353
  msgid "Don't display testimonial company in cite."
354
  msgstr ""
355
 
356
- #: includes/class-testimonials-widget-settings.php:369
357
  msgid "Hide Content?"
358
  msgstr ""
359
 
360
- #: includes/class-testimonials-widget-settings.php:372
361
  msgid "Don't display testimonial content in a view."
362
  msgstr ""
363
 
364
- #: includes/class-testimonials-widget-settings.php:377
365
- #: includes/class-testimonials-widget-settings.php:639
366
  msgid "Hide Email?"
367
  msgstr ""
368
 
369
- #: includes/class-testimonials-widget-settings.php:381
370
  msgid "Don't display or link to testimonial email in cite."
371
  msgstr ""
372
 
373
- #: includes/class-testimonials-widget-settings.php:386
374
  msgid "Hide Gravatar?"
375
  msgstr ""
376
 
377
- #: includes/class-testimonials-widget-settings.php:389
378
  msgid "Don't display Gravatar image with testimonial."
379
  msgstr ""
380
 
381
- #: includes/class-testimonials-widget-settings.php:394
382
- #: includes/class-testimonials-widget-settings.php:659
383
  msgid "Hide Image?"
384
  msgstr ""
385
 
386
- #: includes/class-testimonials-widget-settings.php:397
387
  msgid "Don't display featured image with testimonial."
388
  msgstr ""
389
 
390
- #: includes/class-testimonials-widget-settings.php:402
391
  msgid "Hide Image in Single View?"
392
  msgstr ""
393
 
394
- #: includes/class-testimonials-widget-settings.php:410
395
- #: includes/class-testimonials-widget-settings.php:668
396
  msgid "Hide Job Title?"
397
  msgstr ""
398
 
399
- #: includes/class-testimonials-widget-settings.php:413
400
  msgid "Don't display testimonial job title in cite."
401
  msgstr ""
402
 
403
- #: includes/class-testimonials-widget-settings.php:418
404
- #: includes/class-testimonials-widget-settings.php:678
405
  msgid "Hide Location?"
406
  msgstr ""
407
 
408
- #: includes/class-testimonials-widget-settings.php:421
409
  msgid "Don't display testimonial location in cite."
410
  msgstr ""
411
 
412
- #: includes/class-testimonials-widget-settings.php:426
413
- #: includes/class-testimonials-widget-settings.php:697
414
  msgid "Hide URL?"
415
  msgstr ""
416
 
417
- #: includes/class-testimonials-widget-settings.php:429
418
  msgid "Don't display or link to testimonial URL in cite."
419
  msgstr ""
420
 
421
- #: includes/class-testimonials-widget-settings.php:439
422
  msgid "Selection Options"
423
  msgstr ""
424
 
425
- #: includes/class-testimonials-widget-settings.php:445
426
  msgid "Category Filter"
427
  msgstr ""
428
 
429
- #: includes/class-testimonials-widget-settings.php:446
430
  msgid "Comma separated category names or IDs."
431
  msgstr ""
432
 
433
- #: includes/class-testimonials-widget-settings.php:453
434
  msgid "Exclude IDs Filter"
435
  msgstr ""
436
 
437
- #: includes/class-testimonials-widget-settings.php:454
438
- #: includes/class-testimonials-widget-settings.php:461
439
  msgid "Comma separated testimonial IDs."
440
  msgstr ""
441
 
442
- #: includes/class-testimonials-widget-settings.php:460
443
  msgid "Include IDs Filter"
444
  msgstr ""
445
 
446
- #: includes/class-testimonials-widget-settings.php:467
447
  msgid "Limit"
448
  msgstr ""
449
 
450
- #: includes/class-testimonials-widget-settings.php:468
451
  msgid "Number of testimonials to select per instance."
452
  msgstr ""
453
 
454
- #: includes/class-testimonials-widget-settings.php:475
455
  msgid "Require All Tags?"
456
  msgstr ""
457
 
458
- #: includes/class-testimonials-widget-settings.php:476
459
  msgid "Select only testimonials with all of the given tags."
460
  msgstr ""
461
 
462
- #: includes/class-testimonials-widget-settings.php:483
463
  msgid "Tags Filter"
464
  msgstr ""
465
 
466
- #: includes/class-testimonials-widget-settings.php:484
467
  msgid "Comma separated tag slugs or IDs."
468
  msgstr ""
469
 
470
- #: includes/class-testimonials-widget-settings.php:497
471
  msgid "Ordering Options"
472
  msgstr ""
473
 
474
- #: includes/class-testimonials-widget-settings.php:503
475
  msgid "ORDER BY"
476
  msgstr ""
477
 
478
- #: includes/class-testimonials-widget-settings.php:504
479
  msgid "Used when \"Random Order\" is disabled."
480
  msgstr ""
481
 
482
- #: includes/class-testimonials-widget-settings.php:507
483
  msgid "Testimonial ID"
484
  msgstr ""
485
 
486
- #: includes/class-testimonials-widget-settings.php:508
487
- #: includes/class-testimonials-widget-settings.php:511
488
- #: includes/class-testimonials-widget.php:506
489
- #: includes/class-testimonials-widget.php:537
490
- #: includes/class-testimonials-widget.php:1374
491
  msgid "Author"
492
  msgstr ""
493
 
494
- #: includes/class-testimonials-widget-settings.php:509
495
- #: includes/class-testimonials-widget.php:508
496
  msgid "Date"
497
  msgstr ""
498
 
499
- #: includes/class-testimonials-widget-settings.php:510
500
  msgid "Menu Order"
501
  msgstr ""
502
 
503
- #: includes/class-testimonials-widget-settings.php:512
504
  msgid "No order"
505
  msgstr ""
506
 
507
- #: includes/class-testimonials-widget-settings.php:520
508
  msgid "ORDER BY meta_key"
509
  msgstr ""
510
 
511
- #: includes/class-testimonials-widget-settings.php:521
512
- msgid "Used when \"Random Order\" is disabled and sorting by a testimonials meta key is needed. Overrides ORDER BY."
 
 
513
  msgstr ""
514
 
515
- #: includes/class-testimonials-widget-settings.php:524
516
  msgid "None"
517
  msgstr ""
518
 
519
- #: includes/class-testimonials-widget-settings.php:525
520
- #: includes/class-testimonials-widget.php:542
521
- #: includes/class-testimonials-widget.php:1380
522
  msgid "Job Title"
523
  msgstr ""
524
 
525
- #: includes/class-testimonials-widget-settings.php:526
526
- #: includes/class-testimonials-widget.php:557
527
- #: includes/class-testimonials-widget.php:1398
528
  msgid "Email"
529
  msgstr ""
530
 
531
- #: includes/class-testimonials-widget-settings.php:527
532
- #: includes/class-testimonials-widget.php:547
533
- #: includes/class-testimonials-widget.php:1386
534
  msgid "Location"
535
  msgstr ""
536
 
537
- #: includes/class-testimonials-widget-settings.php:528
538
- #: includes/class-testimonials-widget.php:552
539
- #: includes/class-testimonials-widget.php:1392
540
  msgid "Company"
541
  msgstr ""
542
 
543
- #: includes/class-testimonials-widget-settings.php:529
544
- #: includes/class-testimonials-widget.php:562
545
- #: includes/class-testimonials-widget.php:1404
546
  msgid "URL"
547
  msgstr ""
548
 
549
- #: includes/class-testimonials-widget-settings.php:536
550
  msgid "ORDER BY Order"
551
  msgstr ""
552
 
553
- #: includes/class-testimonials-widget-settings.php:539
554
  msgid "Descending"
555
  msgstr ""
556
 
557
- #: includes/class-testimonials-widget-settings.php:540
558
  msgid "Ascending"
559
  msgstr ""
560
 
561
- #: includes/class-testimonials-widget-settings.php:548
562
  msgid "Random Order?"
563
  msgstr ""
564
 
565
- #: includes/class-testimonials-widget-settings.php:549
566
- msgid "If checked, ignores ORDER BY, ORDER BY meta_key, and ORDER BY Order. Widgets are random by default automatically."
 
 
567
  msgstr ""
568
 
569
- #: includes/class-testimonials-widget-settings.php:562
570
  msgid "Allow Comments?"
571
  msgstr ""
572
 
573
- #: includes/class-testimonials-widget-settings.php:563
574
- msgid "Only affects the Testimonials post edit page. Your theme controls the front-end view."
 
 
575
  msgstr ""
576
 
577
- #: includes/class-testimonials-widget-settings.php:570
578
  msgid "URL slug-name for <a href=\"%1s\">testimonials archive</a> page."
579
  msgstr ""
580
 
581
- #: includes/class-testimonials-widget-settings.php:576
582
  msgid "Archive Page URL"
583
  msgstr ""
584
 
585
- #: includes/class-testimonials-widget-settings.php:586
586
  msgid "Disable Default Taxonomies?"
587
  msgstr ""
588
 
589
- #: includes/class-testimonials-widget-settings.php:589
590
- msgid "If checked, use Testimonials' own category and tag taxonomies than WordPress' defaults."
 
 
591
  msgstr ""
592
 
593
- #: includes/class-testimonials-widget-settings.php:595
594
  msgid "Include testimonials in archive and category views."
595
  msgstr ""
596
 
597
- #: includes/class-testimonials-widget-settings.php:598
598
  msgid "Enable archives view?"
599
  msgstr ""
600
 
601
- #: includes/class-testimonials-widget-settings.php:604
602
- msgid "URL slug-name for testimonial view pages. Shouldn't be the same as the Archive Page URL nor should it match a page URL slug."
 
 
603
  msgstr ""
604
 
605
- #: includes/class-testimonials-widget-settings.php:608
606
  msgid "Testimonial Page URL"
607
  msgstr ""
608
 
609
- #: includes/class-testimonials-widget-settings.php:649
610
  msgid "Hide ID?"
611
  msgstr ""
612
 
613
- #: includes/class-testimonials-widget-settings.php:688
614
  msgid "Hide Shortcode?"
615
  msgstr ""
616
 
617
- #: includes/class-testimonials-widget-settings.php:708
618
- #: includes/class-testimonials-widget-settings.php:1001
619
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:65
620
  msgid "Reset"
621
  msgstr ""
622
 
623
- #: includes/class-testimonials-widget-settings.php:931
624
- msgid "These Testimonials Settings establish the default option values for shortcodes, theme functions, and widget instances. Widgets, once created no longer inherit these global settings. Therefore, you'll need to update each widget with the new settings. It might be easier to delete the widget and then recreate it."
 
 
 
 
 
625
  msgstr ""
626
 
627
- #: includes/class-testimonials-widget-settings.php:933
628
  msgid "Shortcode option names are listed below each entry."
629
  msgstr ""
630
 
631
- #: includes/class-testimonials-widget-settings.php:936
632
  msgid "View the <a href=\"%s\">Testimonials documentation</a>."
633
  msgstr ""
634
 
635
- #: includes/class-testimonials-widget-settings.php:946
636
  msgid "General options."
637
  msgstr ""
638
 
639
- #: includes/class-testimonials-widget-settings.php:954
640
  msgid "Show or hide fields."
641
  msgstr ""
642
 
643
- #: includes/class-testimonials-widget-settings.php:962
644
  msgid "Options used to select testimonials."
645
  msgstr ""
646
 
647
- #: includes/class-testimonials-widget-settings.php:970
648
  msgid "Options used to determine displayed testimonials ordering."
649
  msgstr ""
650
 
651
- #: includes/class-testimonials-widget-settings.php:978
652
  msgid "Allowed columns to display on edit page."
653
  msgstr ""
654
 
655
- #: includes/class-testimonials-widget-settings.php:986
656
  msgid "Archive and singular page URL related testimonials options."
657
  msgstr ""
658
 
659
- #: includes/class-testimonials-widget-settings.php:994
660
  msgid "Options related to showing testimonials in widgets."
661
  msgstr ""
662
 
663
- #: includes/class-testimonials-widget-settings.php:1002
664
  msgid "Backwards compatibility, import/export options, and reset options."
665
  msgstr ""
666
 
@@ -690,15 +726,15 @@ msgstr ""
690
 
691
  #: includes/class-testimonials-widget-tag-cloud-widget.php:63
692
  #: includes/class-testimonials-widget-tag-cloud-widget.php:70
693
- #: includes/class-testimonials-widget.php:513
694
- #: includes/class-testimonials-widget.php:516
695
  msgid "Category"
696
  msgstr ""
697
 
698
  #: includes/class-testimonials-widget-tag-cloud-widget.php:64
699
  #: includes/class-testimonials-widget-tag-cloud-widget.php:71
700
- #: includes/class-testimonials-widget.php:514
701
- #: includes/class-testimonials-widget.php:517
702
  msgid "Tags"
703
  msgstr ""
704
 
@@ -706,140 +742,151 @@ msgstr ""
706
  msgid "Taxonomy"
707
  msgstr ""
708
 
709
- #: includes/class-testimonials-widget.php:368
710
- msgid "If your Testimonials display has gone to funky town, please <a href=\"%s\">read the FAQ</a> about possible CSS fixes."
 
 
711
  msgstr ""
712
 
713
- #: includes/class-testimonials-widget.php:507
714
  msgid "Published by"
715
  msgstr ""
716
 
717
- #: includes/class-testimonials-widget.php:522
718
  msgid "ID"
719
  msgstr ""
720
 
721
- #: includes/class-testimonials-widget.php:527
722
  msgid "Image"
723
  msgstr ""
724
 
725
- #: includes/class-testimonials-widget.php:532
726
  msgid "Shortcodes"
727
  msgstr ""
728
 
729
- #: includes/class-testimonials-widget.php:573
730
  msgid "Add New"
731
  msgstr ""
732
 
733
- #: includes/class-testimonials-widget.php:574
734
- #: includes/class-testimonials-widget.php:577
735
  msgid "Add New Testimonial"
736
  msgstr ""
737
 
738
- #: includes/class-testimonials-widget.php:575
739
  msgid "Edit Testimonial"
740
  msgstr ""
741
 
742
- #: includes/class-testimonials-widget.php:578
743
- #: includes/class-testimonials-widget.php:880
744
  msgid "No testimonials found"
745
  msgstr ""
746
 
747
- #: includes/class-testimonials-widget.php:579
748
  msgid "No testimonials found in Trash"
749
  msgstr ""
750
 
751
- #: includes/class-testimonials-widget.php:581
752
  msgid "Search Testimonials"
753
  msgstr ""
754
 
755
- #: includes/class-testimonials-widget.php:582
756
- #: includes/class-testimonials-widget.php:1465
757
- #: includes/class-testimonials-widget.php:1833
758
  msgid "Testimonial"
759
  msgstr ""
760
 
761
- #: includes/class-testimonials-widget.php:583
762
  msgid "View Testimonial"
763
  msgstr ""
764
 
765
- #: includes/class-testimonials-widget.php:1377
766
  msgid "Use when the testimonial title is not the authors' name."
767
  msgstr ""
768
 
769
- #: includes/class-testimonials-widget.php:1401
770
- msgid "If an email is provided, but not an image, a Gravatar icon will be attempted to be loaded."
 
 
771
  msgstr ""
772
 
773
- #: includes/class-testimonials-widget.php:1416
774
  msgid "Testimonial Data"
775
  msgstr ""
776
 
777
- #: includes/class-testimonials-widget.php:1440
778
  msgid "Testimonial updated. <a href=\"%s\">View testimonial</a>"
779
  msgstr ""
780
 
781
- #: includes/class-testimonials-widget.php:1441
782
  msgid "Custom field updated."
783
  msgstr ""
784
 
785
- #: includes/class-testimonials-widget.php:1442
786
  msgid "Custom field deleted."
787
  msgstr ""
788
 
789
- #: includes/class-testimonials-widget.php:1443
790
  msgid "Testimonial updated."
791
  msgstr ""
792
 
793
  #. translators: %s: date and time of the revision
794
-
795
- #: includes/class-testimonials-widget.php:1445
796
  msgid "Testimonial restored to revision from %s"
797
  msgstr ""
798
 
799
- #: includes/class-testimonials-widget.php:1446
800
  msgid "Testimonial published. <a href=\"%s\">View testimonial</a>"
801
  msgstr ""
802
 
803
- #: includes/class-testimonials-widget.php:1447
804
  msgid "Testimonial saved."
805
  msgstr ""
806
 
807
- #: includes/class-testimonials-widget.php:1448
808
- msgid "Testimonial submitted. <a target=\"_blank\" href=\"%s\">Preview testimonial</a>"
 
 
809
  msgstr ""
810
 
811
- #: includes/class-testimonials-widget.php:1449
812
- msgid "Testimonial scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview testimonial</a>"
 
 
813
  msgstr ""
814
 
815
- #: includes/class-testimonials-widget.php:1450
816
- msgid "Testimonial draft updated. <a target=\"_blank\" href=\"%s\">Preview testimonial</a>"
 
 
817
  msgstr ""
818
 
819
- #: includes/class-testimonials-widget.php:1728
820
- msgid "If your Testimonials display has gone to funky town, please <a href=\"%s\">read the FAQ</a> about possible fixes."
 
 
821
  msgstr ""
822
 
823
- #: includes/class-testimonials-widget.php:1747
824
  msgid "Failed version check"
825
  msgstr ""
826
 
827
- #: includes/class-testimonials-widget.php:1778
828
  msgid "Shortcode"
829
  msgstr ""
830
 
831
- #: includes/class-testimonials-widget.php:2216
832
- #: includes/class-testimonials-widget.php:2289
833
  msgid "Used with: "
834
  msgstr ""
835
 
836
- #: includes/class-testimonials-widget.php:2253
837
- #: includes/class-testimonials-widget.php:2317
838
  msgid "Options: "
839
  msgstr ""
840
 
841
- #: includes/class-testimonials-widget.php:2258
842
- #: includes/class-testimonials-widget.php:2322
843
  msgid "Usage: "
844
  msgstr ""
845
 
@@ -849,7 +896,8 @@ msgstr ""
849
 
850
  #: includes/libraries/aihrus-framework/aihrus-framework.php:90
851
  #: includes/requirements.php:62
852
- msgid "<a href=\"%1$s\">Update plugins</a>. <a href=\"%2$s\">More information</a>."
 
853
  msgstr ""
854
 
855
  #: includes/libraries/aihrus-framework/aihrus-framework.php:101
@@ -857,7 +905,10 @@ msgid "Plugin \"%1$s\" is causing the out of date issue."
857
  msgstr ""
858
 
859
  #: includes/libraries/aihrus-framework/aihrus-framework.php:106
860
- msgid "Plugin \"%1$s\" has been deactivated as it requires Aihrus Framework %2$s or newer. You're running Aihrus Framework %4$s. Once corrected, \"%1$s\" can be activated. %5$s %3$s"
 
 
 
861
  msgstr ""
862
 
863
  #: includes/libraries/aihrus-framework/aihrus-framework.php:115
@@ -865,7 +916,10 @@ msgid "`aihr_check_php` requires $file argument"
865
  msgstr ""
866
 
867
  #: includes/libraries/aihrus-framework/aihrus-framework.php:154
868
- msgid "Plugin \"%1$s\" has been deactivated as it requires PHP %2$s or newer. You're running PHP %4$s. Once corrected, \"%1$s\" can be activated. <a href=\"%3$s\">More information</a>."
 
 
 
869
  msgstr ""
870
 
871
  #: includes/libraries/aihrus-framework/aihrus-framework.php:163
@@ -873,154 +927,182 @@ msgid "`aihr_check_wp` requires $file argument"
873
  msgstr ""
874
 
875
  #: includes/libraries/aihrus-framework/aihrus-framework.php:206
876
- msgid "Plugin \"%1$s\" has been deactivated as it requires WordPress %2$s or newer. You're running WordPress %4$s. Once corrected, \"%1$s\" can be activated. <a href=\"%3$s\">Update WordPress</a>."
877
- msgstr ""
878
-
879
- #: includes/libraries/aihrus-framework/aihrus-framework.php:238
880
- msgid "<a href=\"%1$s\">update to</a>"
881
- msgstr ""
882
-
883
- #: includes/libraries/aihrus-framework/aihrus-framework.php:243
884
- msgid "<a href=\"%1$s\">install</a>"
885
  msgstr ""
886
 
887
- #: includes/libraries/aihrus-framework/aihrus-framework.php:246
888
- msgid "<a href=\"%1$s\">activate</a>"
 
 
889
  msgstr ""
890
 
891
  #: includes/libraries/aihrus-framework/aihrus-framework.php:250
892
- msgid "Plugin \"%3$s\" has been deactivated. Please %1$s \"%4$s\" version %2$s or newer before activating \"%3$s\"."
893
- msgstr ""
894
-
895
- #: includes/libraries/aihrus-framework/aihrus-framework.php:264
896
- msgid "<a href=\"%1$s\">%2$s &gt; Settings</a>, <em>Premium</em> tab, <em>License Key</em>"
897
  msgstr ""
898
 
899
- #: includes/libraries/aihrus-framework/aihrus-framework.php:269
900
  msgid "<a href=\"%s\">Where's my license key?</a>"
901
  msgstr ""
902
 
903
- #: includes/libraries/aihrus-framework/aihrus-framework.php:274
904
  msgid "<a href=\"%1$s\">Purchase</a>"
905
  msgstr ""
906
 
907
- #: includes/libraries/aihrus-framework/aihrus-framework.php:282
908
  msgid "%1$s/checkout/?edd_license_key=%2$s&download_id=%3$s"
909
  msgstr ""
910
 
911
- #: includes/libraries/aihrus-framework/aihrus-framework.php:286
912
  msgid "<a href=\"%1$s\">Renew</a> or "
913
  msgstr ""
914
 
915
- #: includes/libraries/aihrus-framework/aihrus-framework.php:291
916
- msgid "Plugin \"%1$s\" requires license activation for software updates and support. Please activate the license via %2$s. See %3$s for help. Alternately, %5$s%4$s a %1$s license."
 
 
 
917
  msgstr ""
918
 
919
- #: includes/libraries/aihrus-framework/aihrus-framework.php:301
920
  msgid "`aihr_deactivate_plugin` requires $file argument"
921
  msgstr ""
922
 
923
- #: includes/libraries/aihrus-framework/aihrus-framework.php:340
924
  msgid "Unknown"
925
  msgstr ""
926
 
927
- #: includes/libraries/aihrus-framework/aihrus-framework.php:347
928
- msgid "Plugin \"%1$s\" has been deactivated due to \"%2$s\". Once corrected, \"%1$s\" can be activated.</p><p>If you want to revert \"%1$s\", look for <a href=\"%3$s\">older versions on WordPress</a> or <a href=\"mailto:support@nodedesk.com?subject=Old+Plugin+Version+Request\">email Axelerant support</a> if this is a premium plugin."
 
 
 
 
 
929
  msgstr ""
930
 
931
- #: includes/libraries/aihrus-framework/aihrus-framework.php:358
932
  msgid "`aihr_deactivate_plugin_do` requires $file argument"
933
  msgstr ""
934
 
935
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:160
936
- msgid "Please donate $5 towards ongoing free support and development of the \"%1$s\" plugin. %2$s"
 
 
937
  msgstr ""
938
 
939
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:341
940
- msgid "cURL is not installed and file_get_contents is not accessible. Unable to retrieve URL %1$s."
941
- msgstr ""
942
-
943
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:661
944
- msgid "<a href=\"http://codex.wordpress.org/Function_Reference/absint\">absint</a>."
945
- msgstr ""
946
-
947
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:662
948
- msgid "Digit-only characters to make a multiple or single entries. Regex <code>#^\\d+(,\\s?\\d+)*$#</code>."
949
- msgstr ""
950
-
951
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:663
952
- msgid "<a href=\"php.net/manual/en/function.intval.php\">intval</a>."
953
  msgstr ""
954
 
955
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:664
956
- msgid "Values like true, 'true', 1, 'on', and 'yes' are <strong>true</strong>; otherwise <strong>false</strong>."
 
957
  msgstr ""
958
 
959
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:665
960
- msgid "An <a href=\"php.net/manual/en/function.intval.php\">intval</a> greater than zero."
 
 
961
  msgstr ""
962
 
963
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:666
964
- msgid "A non-zero <a href=\"php.net/manual/en/function.intval.php\">intval</a>."
965
  msgstr ""
966
 
967
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:667
968
- msgid "SQL ordering \"ASC\" or \"DESC\". Regex <code>#^desc|asc$#i</code>."
 
 
969
  msgstr ""
970
 
971
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:668
972
- msgid "<a href=\"http://codex.wordpress.org/Function_Reference/sanitize_title\">sanitize_title</a>."
 
 
973
  msgstr ""
974
 
975
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:669
976
- msgid "Word-only characters including a hyphen to make a single term. Regex <code>#^[\\w-]+$#</code>."
 
977
  msgstr ""
978
 
979
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:670
980
- msgid "Word-only characters to make a single term. Regex <code>#^\\w+$#</code>."
981
  msgstr ""
982
 
983
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:671
984
- msgid "Word-only characters including hyphens and spaces to make a multiple or single terms. Regex <code>#^(([\\w- ]+)(,\\s?)?)+$#</code>."
 
 
985
  msgstr ""
986
 
987
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:672
988
- msgid "Current license."
 
 
989
  msgstr ""
990
 
991
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:673
992
- msgid "<a href=\"http://php.net/manual/en/filter.filters.validate.php\">filter_var( $url, FILTER_VALIDATE_URL )</a>."
 
993
  msgstr ""
994
 
995
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:674
996
- msgid "<a href=\"http://codex.wordpress.org/Function_Reference/wp_kses_data\">wp_kses_data</a>."
 
 
997
  msgstr ""
998
 
999
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:675
1000
- msgid "<a href=\"http://codex.wordpress.org/Function_Reference/wp_kses_post\">wp_kses_post</a>."
1001
  msgstr ""
1002
 
1003
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:680
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1004
  msgid "Validatation: "
1005
  msgstr ""
1006
 
1007
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:729
1008
  msgid "TBD empty "
1009
  msgstr ""
1010
 
1011
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:735
1012
  msgid "Pick an option"
1013
  msgstr ""
1014
 
1015
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:758
1016
  msgid "Category A, Another category, 123"
1017
  msgstr ""
1018
 
1019
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:760
1020
  msgid "Tag A, Another tag, 123"
1021
  msgstr ""
1022
 
1023
- #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:763
1024
  msgid "You decide…"
1025
  msgstr ""
1026
 
@@ -1045,7 +1127,9 @@ msgid "Export Settings"
1045
  msgstr ""
1046
 
1047
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:86
1048
- msgid "These are your current settings in a serialized format. Copy the contents to make a backup of your settings."
 
 
1049
  msgstr ""
1050
 
1051
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:95
@@ -1053,11 +1137,14 @@ msgid "Import Settings"
1053
  msgstr ""
1054
 
1055
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:97
1056
- msgid "Paste new serialized settings here to overwrite your current configuration."
 
1057
  msgstr ""
1058
 
1059
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:102
1060
- msgid "Delete all %s data and options from database on plugin deletion. Even if this option isn't checked, WordPress will still give a data deletion warning."
 
 
1061
  msgstr ""
1062
 
1063
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:106
@@ -1073,7 +1160,26 @@ msgid "Check this box to reset options to their defaults."
1073
  msgstr ""
1074
 
1075
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:251
1076
- msgid "<img class=\"size-medium\" src=\"%5$s\" alt=\"Axelerant 2015 Retreat in Goa\" width=\"640\" height=\"327\" /><p>Axelerant is a full-service software development company that focuses on open-source technologies. Top technical talent who are passionate, giving, and communicative demonstrates our backbone. We provide high-end Strategy, Implementation, and Support services for our clients and agencies with whom we partner.</p><p>Our team members span the world, and we follow agile delivery and working processes. Further, we’re actively giving back to many open-source communities and have fostered an innovative, incubator culture to give ideas a chance to succeed.</p><h2>Foundations of Axelerant</h2><ul><li><b>Passion</b> – Our passion is so strong, we’re self­directed to make the difficult easy.</li><li><b>Openness</b> – We’re so honest and painstaking in our discussions that there are no questions left, and standards are created.</li><li><b>Giving</b> – We’re excited to share our results to inspire all to surpass them.</li></ul><h3>Learn More About Axelerant</h3><ul><li><a href=\"%1$s\">Axelerant Team</a></li><li><a href=\"%2$s\">Giving Back</a></li><li><a href=\"%7$s\">Inside Axelerant</a></li><li><a href=\"%3$s\">Our Services</a></li><li><a href=\"%4$s\">Testimonials</a></li><li><a href=\"%6$s\">Careers</a></li></ul>"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1077
  msgstr ""
1078
 
1079
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:290
@@ -1081,7 +1187,12 @@ msgid "Save Changes"
1081
  msgstr ""
1082
 
1083
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:298
1084
- msgid "If you like this plugin, please <a href=\"%1$s\" title=\"Donate for Good Karma\"><img src=\"%2$s\" border=\"0\" alt=\"Donate for Good Karma\" /></a> or <a href=\"%3$s\" title=\"purchase premium WordPress plugins from Axelerant \">purchase the Premium version</a> to help fund further development and <a href=\"%4$s\" title=\"Support forums\">support</a>."
 
 
 
 
 
1085
  msgstr ""
1086
 
1087
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:309
@@ -1129,7 +1240,9 @@ msgid "Old WordPress version detected"
1129
  msgstr ""
1130
 
1131
  #: includes/requirements.php:64
1132
- msgid "Plugin \"%1$s\" has been deactivated as it requires a current Aihrus Framework. Once corrected, \"%1$s\" can be activated. %2$s"
 
 
1133
  msgstr ""
1134
 
1135
  #: templates/testimonial-content.php:9
@@ -1151,6 +1264,7 @@ msgstr ""
1151
  #: templates/testimonials-paging.php:25
1152
  msgid "&raquo;"
1153
  msgstr ""
 
1154
  #. Plugin Name of the plugin/theme
1155
  msgid "Testimonials Widget"
1156
  msgstr ""
@@ -1160,7 +1274,9 @@ msgid "http://wordpress.org/plugins/testimonials-widget/"
1160
  msgstr ""
1161
 
1162
  #. Description of the plugin/theme
1163
- msgid "Easily add social proofing to your website with Testimonials Widget. List or slide reviews via functions, shortcodes, or widgets."
 
 
1164
  msgstr ""
1165
 
1166
  #. Author of the plugin/theme
1
+ # Copyright (C) 2016 Testimonials Widget
2
  # This file is distributed under the same license as the Testimonials Widget package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Testimonials Widget 3.3.0\n"
6
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/testimonials-"
7
+ "widget\n"
8
+ "POT-Creation-Date: 2016-03-28 11:36:07+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
15
 
64
  msgstr ""
65
 
66
  #: includes/class-testimonials-widget-settings.php:97
67
+ #: includes/class-testimonials-widget.php:139
68
  msgid "Settings"
69
  msgstr ""
70
 
71
  #: includes/class-testimonials-widget-settings.php:113
72
+ #: includes/class-testimonials-widget-settings.php:954
73
  msgid "General"
74
  msgstr ""
75
 
76
  #: includes/class-testimonials-widget-settings.php:114
77
+ #: includes/class-testimonials-widget-settings.php:962
78
  msgid "Fields"
79
  msgstr ""
80
 
81
  #: includes/class-testimonials-widget-settings.php:115
82
+ #: includes/class-testimonials-widget-settings.php:970
83
  msgid "Selection"
84
  msgstr ""
85
 
86
  #: includes/class-testimonials-widget-settings.php:116
87
+ #: includes/class-testimonials-widget-settings.php:978
88
  msgid "Ordering"
89
  msgstr ""
90
 
91
  #: includes/class-testimonials-widget-settings.php:117
92
+ #: includes/class-testimonials-widget-settings.php:986
93
  msgid "Columns"
94
  msgstr ""
95
 
96
  #: includes/class-testimonials-widget-settings.php:118
97
+ #: includes/class-testimonials-widget-settings.php:994
98
  msgid "Post Type"
99
  msgstr ""
100
 
101
  #: includes/class-testimonials-widget-settings.php:119
102
+ #: includes/class-testimonials-widget-settings.php:1002
103
  msgid "Slider Widget"
104
  msgstr ""
105
 
112
  msgstr ""
113
 
114
  #: includes/class-testimonials-widget-settings.php:139
115
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-widget.php:340
116
  msgid "Title"
117
  msgstr ""
118
 
119
  #: includes/class-testimonials-widget-settings.php:140
120
+ #: includes/class-testimonials-widget.php:580
121
+ #: includes/class-testimonials-widget.php:628
122
  msgid "Testimonials"
123
  msgstr ""
124
 
125
  #: includes/class-testimonials-widget-settings.php:146
126
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-widget.php:344
127
  msgid "Title Link"
128
  msgstr ""
129
 
130
  #: includes/class-testimonials-widget-settings.php:147
131
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-widget.php:345
132
+ msgid ""
133
+ "URL, path, or post ID to link widget title to. Ex: http://example.com/"
134
+ "stuff, /testimonials, or 123"
135
  msgstr ""
136
 
137
  #: includes/class-testimonials-widget-settings.php:153
171
  msgstr ""
172
 
173
  #: includes/class-testimonials-widget-settings.php:186
174
+ msgid ""
175
+ "Number of seconds between testimonial rotations or 0 for no rotation at all "
176
+ "refresh."
177
  msgstr ""
178
 
179
  #: includes/class-testimonials-widget-settings.php:193
189
  msgstr ""
190
 
191
  #: includes/class-testimonials-widget-settings.php:203
192
+ msgid ""
193
+ "Width of each testimonial. Increase to thumbnail width or greater for "
194
+ "improved looks. Requried for horizontal transitions."
195
  msgstr ""
196
 
197
  #: includes/class-testimonials-widget-settings.php:210
247
  msgstr ""
248
 
249
  #: includes/class-testimonials-widget-settings.php:257
250
+ msgid ""
251
+ "Remove \"Testimonials Not Found\" content when no testimonials are found to "
252
+ "be displayed."
253
  msgstr ""
254
 
255
  #: includes/class-testimonials-widget-settings.php:263
277
  msgstr ""
278
 
279
  #: includes/class-testimonials-widget-settings.php:276
280
+ msgid ""
281
+ "Adds HTML tag markup per the <a href=\"%s\">Review schema</a> to "
282
+ "testimonials. Search engines including Bing, Google, Yahoo! and Yandex rely "
283
+ "on this markup to improve the display of search results."
284
  msgstr ""
285
 
286
  #: includes/class-testimonials-widget-settings.php:279
324
  msgstr ""
325
 
326
  #: includes/class-testimonials-widget-settings.php:321
327
+ msgid ""
328
+ "Some themes use class `.hentry` in a manner that breaks Testimonials' CSS."
329
  msgstr ""
330
 
331
  #: includes/class-testimonials-widget-settings.php:328
349
  msgstr ""
350
 
351
  #: includes/class-testimonials-widget-settings.php:353
352
+ msgid "Hide Title Above Content?"
353
+ msgstr ""
354
+
355
+ #: includes/class-testimonials-widget-settings.php:357
356
+ msgid "Don't display testimonial title above testimonial content."
357
+ msgstr ""
358
+
359
+ #: includes/class-testimonials-widget-settings.php:362
360
+ #: includes/class-testimonials-widget-settings.php:628
361
  msgid "Hide Author?"
362
  msgstr ""
363
 
364
+ #: includes/class-testimonials-widget-settings.php:365
365
  msgid "Don't display testimonial title in cite."
366
  msgstr ""
367
 
368
+ #: includes/class-testimonials-widget-settings.php:370
369
+ #: includes/class-testimonials-widget-settings.php:638
370
  msgid "Hide Company?"
371
  msgstr ""
372
 
373
+ #: includes/class-testimonials-widget-settings.php:373
374
  msgid "Don't display testimonial company in cite."
375
  msgstr ""
376
 
377
+ #: includes/class-testimonials-widget-settings.php:378
378
  msgid "Hide Content?"
379
  msgstr ""
380
 
381
+ #: includes/class-testimonials-widget-settings.php:381
382
  msgid "Don't display testimonial content in a view."
383
  msgstr ""
384
 
385
+ #: includes/class-testimonials-widget-settings.php:386
386
+ #: includes/class-testimonials-widget-settings.php:648
387
  msgid "Hide Email?"
388
  msgstr ""
389
 
390
+ #: includes/class-testimonials-widget-settings.php:390
391
  msgid "Don't display or link to testimonial email in cite."
392
  msgstr ""
393
 
394
+ #: includes/class-testimonials-widget-settings.php:395
395
  msgid "Hide Gravatar?"
396
  msgstr ""
397
 
398
+ #: includes/class-testimonials-widget-settings.php:398
399
  msgid "Don't display Gravatar image with testimonial."
400
  msgstr ""
401
 
402
+ #: includes/class-testimonials-widget-settings.php:403
403
+ #: includes/class-testimonials-widget-settings.php:668
404
  msgid "Hide Image?"
405
  msgstr ""
406
 
407
+ #: includes/class-testimonials-widget-settings.php:406
408
  msgid "Don't display featured image with testimonial."
409
  msgstr ""
410
 
411
+ #: includes/class-testimonials-widget-settings.php:411
412
  msgid "Hide Image in Single View?"
413
  msgstr ""
414
 
415
+ #: includes/class-testimonials-widget-settings.php:419
416
+ #: includes/class-testimonials-widget-settings.php:677
417
  msgid "Hide Job Title?"
418
  msgstr ""
419
 
420
+ #: includes/class-testimonials-widget-settings.php:422
421
  msgid "Don't display testimonial job title in cite."
422
  msgstr ""
423
 
424
+ #: includes/class-testimonials-widget-settings.php:427
425
+ #: includes/class-testimonials-widget-settings.php:687
426
  msgid "Hide Location?"
427
  msgstr ""
428
 
429
+ #: includes/class-testimonials-widget-settings.php:430
430
  msgid "Don't display testimonial location in cite."
431
  msgstr ""
432
 
433
+ #: includes/class-testimonials-widget-settings.php:435
434
+ #: includes/class-testimonials-widget-settings.php:706
435
  msgid "Hide URL?"
436
  msgstr ""
437
 
438
+ #: includes/class-testimonials-widget-settings.php:438
439
  msgid "Don't display or link to testimonial URL in cite."
440
  msgstr ""
441
 
442
+ #: includes/class-testimonials-widget-settings.php:448
443
  msgid "Selection Options"
444
  msgstr ""
445
 
446
+ #: includes/class-testimonials-widget-settings.php:454
447
  msgid "Category Filter"
448
  msgstr ""
449
 
450
+ #: includes/class-testimonials-widget-settings.php:455
451
  msgid "Comma separated category names or IDs."
452
  msgstr ""
453
 
454
+ #: includes/class-testimonials-widget-settings.php:462
455
  msgid "Exclude IDs Filter"
456
  msgstr ""
457
 
458
+ #: includes/class-testimonials-widget-settings.php:463
459
+ #: includes/class-testimonials-widget-settings.php:470
460
  msgid "Comma separated testimonial IDs."
461
  msgstr ""
462
 
463
+ #: includes/class-testimonials-widget-settings.php:469
464
  msgid "Include IDs Filter"
465
  msgstr ""
466
 
467
+ #: includes/class-testimonials-widget-settings.php:476
468
  msgid "Limit"
469
  msgstr ""
470
 
471
+ #: includes/class-testimonials-widget-settings.php:477
472
  msgid "Number of testimonials to select per instance."
473
  msgstr ""
474
 
475
+ #: includes/class-testimonials-widget-settings.php:484
476
  msgid "Require All Tags?"
477
  msgstr ""
478
 
479
+ #: includes/class-testimonials-widget-settings.php:485
480
  msgid "Select only testimonials with all of the given tags."
481
  msgstr ""
482
 
483
+ #: includes/class-testimonials-widget-settings.php:492
484
  msgid "Tags Filter"
485
  msgstr ""
486
 
487
+ #: includes/class-testimonials-widget-settings.php:493
488
  msgid "Comma separated tag slugs or IDs."
489
  msgstr ""
490
 
491
+ #: includes/class-testimonials-widget-settings.php:506
492
  msgid "Ordering Options"
493
  msgstr ""
494
 
495
+ #: includes/class-testimonials-widget-settings.php:512
496
  msgid "ORDER BY"
497
  msgstr ""
498
 
499
+ #: includes/class-testimonials-widget-settings.php:513
500
  msgid "Used when \"Random Order\" is disabled."
501
  msgstr ""
502
 
503
+ #: includes/class-testimonials-widget-settings.php:516
504
  msgid "Testimonial ID"
505
  msgstr ""
506
 
507
+ #: includes/class-testimonials-widget-settings.php:517
508
+ #: includes/class-testimonials-widget-settings.php:520
509
+ #: includes/class-testimonials-widget.php:510
510
+ #: includes/class-testimonials-widget.php:541
511
+ #: includes/class-testimonials-widget.php:1378
512
  msgid "Author"
513
  msgstr ""
514
 
515
+ #: includes/class-testimonials-widget-settings.php:518
516
+ #: includes/class-testimonials-widget.php:512
517
  msgid "Date"
518
  msgstr ""
519
 
520
+ #: includes/class-testimonials-widget-settings.php:519
521
  msgid "Menu Order"
522
  msgstr ""
523
 
524
+ #: includes/class-testimonials-widget-settings.php:521
525
  msgid "No order"
526
  msgstr ""
527
 
528
+ #: includes/class-testimonials-widget-settings.php:529
529
  msgid "ORDER BY meta_key"
530
  msgstr ""
531
 
532
+ #: includes/class-testimonials-widget-settings.php:530
533
+ msgid ""
534
+ "Used when \"Random Order\" is disabled and sorting by a testimonials meta "
535
+ "key is needed. Overrides ORDER BY."
536
  msgstr ""
537
 
538
+ #: includes/class-testimonials-widget-settings.php:533
539
  msgid "None"
540
  msgstr ""
541
 
542
+ #: includes/class-testimonials-widget-settings.php:534
543
+ #: includes/class-testimonials-widget.php:546
544
+ #: includes/class-testimonials-widget.php:1384
545
  msgid "Job Title"
546
  msgstr ""
547
 
548
+ #: includes/class-testimonials-widget-settings.php:535
549
+ #: includes/class-testimonials-widget.php:561
550
+ #: includes/class-testimonials-widget.php:1402
551
  msgid "Email"
552
  msgstr ""
553
 
554
+ #: includes/class-testimonials-widget-settings.php:536
555
+ #: includes/class-testimonials-widget.php:551
556
+ #: includes/class-testimonials-widget.php:1390
557
  msgid "Location"
558
  msgstr ""
559
 
560
+ #: includes/class-testimonials-widget-settings.php:537
561
+ #: includes/class-testimonials-widget.php:556
562
+ #: includes/class-testimonials-widget.php:1396
563
  msgid "Company"
564
  msgstr ""
565
 
566
+ #: includes/class-testimonials-widget-settings.php:538
567
+ #: includes/class-testimonials-widget.php:566
568
+ #: includes/class-testimonials-widget.php:1408
569
  msgid "URL"
570
  msgstr ""
571
 
572
+ #: includes/class-testimonials-widget-settings.php:545
573
  msgid "ORDER BY Order"
574
  msgstr ""
575
 
576
+ #: includes/class-testimonials-widget-settings.php:548
577
  msgid "Descending"
578
  msgstr ""
579
 
580
+ #: includes/class-testimonials-widget-settings.php:549
581
  msgid "Ascending"
582
  msgstr ""
583
 
584
+ #: includes/class-testimonials-widget-settings.php:557
585
  msgid "Random Order?"
586
  msgstr ""
587
 
588
+ #: includes/class-testimonials-widget-settings.php:558
589
+ msgid ""
590
+ "If checked, ignores ORDER BY, ORDER BY meta_key, and ORDER BY Order. Widgets "
591
+ "are random by default automatically."
592
  msgstr ""
593
 
594
+ #: includes/class-testimonials-widget-settings.php:571
595
  msgid "Allow Comments?"
596
  msgstr ""
597
 
598
+ #: includes/class-testimonials-widget-settings.php:572
599
+ msgid ""
600
+ "Only affects the Testimonials post edit page. Your theme controls the front-"
601
+ "end view."
602
  msgstr ""
603
 
604
+ #: includes/class-testimonials-widget-settings.php:579
605
  msgid "URL slug-name for <a href=\"%1s\">testimonials archive</a> page."
606
  msgstr ""
607
 
608
+ #: includes/class-testimonials-widget-settings.php:585
609
  msgid "Archive Page URL"
610
  msgstr ""
611
 
612
+ #: includes/class-testimonials-widget-settings.php:595
613
  msgid "Disable Default Taxonomies?"
614
  msgstr ""
615
 
616
+ #: includes/class-testimonials-widget-settings.php:598
617
+ msgid ""
618
+ "If checked, use Testimonials' own category and tag taxonomies than "
619
+ "WordPress' defaults."
620
  msgstr ""
621
 
622
+ #: includes/class-testimonials-widget-settings.php:604
623
  msgid "Include testimonials in archive and category views."
624
  msgstr ""
625
 
626
+ #: includes/class-testimonials-widget-settings.php:607
627
  msgid "Enable archives view?"
628
  msgstr ""
629
 
630
+ #: includes/class-testimonials-widget-settings.php:613
631
+ msgid ""
632
+ "URL slug-name for testimonial view pages. Shouldn't be the same as the "
633
+ "Archive Page URL nor should it match a page URL slug."
634
  msgstr ""
635
 
636
+ #: includes/class-testimonials-widget-settings.php:617
637
  msgid "Testimonial Page URL"
638
  msgstr ""
639
 
640
+ #: includes/class-testimonials-widget-settings.php:658
641
  msgid "Hide ID?"
642
  msgstr ""
643
 
644
+ #: includes/class-testimonials-widget-settings.php:697
645
  msgid "Hide Shortcode?"
646
  msgstr ""
647
 
648
+ #: includes/class-testimonials-widget-settings.php:717
649
+ #: includes/class-testimonials-widget-settings.php:1010
650
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:65
651
  msgid "Reset"
652
  msgstr ""
653
 
654
+ #: includes/class-testimonials-widget-settings.php:940
655
+ msgid ""
656
+ "These Testimonials Settings establish the default option values for "
657
+ "shortcodes, theme functions, and widget instances. Widgets, once created no "
658
+ "longer inherit these global settings. Therefore, you'll need to update each "
659
+ "widget with the new settings. It might be easier to delete the widget and "
660
+ "then recreate it."
661
  msgstr ""
662
 
663
+ #: includes/class-testimonials-widget-settings.php:942
664
  msgid "Shortcode option names are listed below each entry."
665
  msgstr ""
666
 
667
+ #: includes/class-testimonials-widget-settings.php:945
668
  msgid "View the <a href=\"%s\">Testimonials documentation</a>."
669
  msgstr ""
670
 
671
+ #: includes/class-testimonials-widget-settings.php:955
672
  msgid "General options."
673
  msgstr ""
674
 
675
+ #: includes/class-testimonials-widget-settings.php:963
676
  msgid "Show or hide fields."
677
  msgstr ""
678
 
679
+ #: includes/class-testimonials-widget-settings.php:971
680
  msgid "Options used to select testimonials."
681
  msgstr ""
682
 
683
+ #: includes/class-testimonials-widget-settings.php:979
684
  msgid "Options used to determine displayed testimonials ordering."
685
  msgstr ""
686
 
687
+ #: includes/class-testimonials-widget-settings.php:987
688
  msgid "Allowed columns to display on edit page."
689
  msgstr ""
690
 
691
+ #: includes/class-testimonials-widget-settings.php:995
692
  msgid "Archive and singular page URL related testimonials options."
693
  msgstr ""
694
 
695
+ #: includes/class-testimonials-widget-settings.php:1003
696
  msgid "Options related to showing testimonials in widgets."
697
  msgstr ""
698
 
699
+ #: includes/class-testimonials-widget-settings.php:1011
700
  msgid "Backwards compatibility, import/export options, and reset options."
701
  msgstr ""
702
 
726
 
727
  #: includes/class-testimonials-widget-tag-cloud-widget.php:63
728
  #: includes/class-testimonials-widget-tag-cloud-widget.php:70
729
+ #: includes/class-testimonials-widget.php:517
730
+ #: includes/class-testimonials-widget.php:520
731
  msgid "Category"
732
  msgstr ""
733
 
734
  #: includes/class-testimonials-widget-tag-cloud-widget.php:64
735
  #: includes/class-testimonials-widget-tag-cloud-widget.php:71
736
+ #: includes/class-testimonials-widget.php:518
737
+ #: includes/class-testimonials-widget.php:521
738
  msgid "Tags"
739
  msgstr ""
740
 
742
  msgid "Taxonomy"
743
  msgstr ""
744
 
745
+ #: includes/class-testimonials-widget.php:371
746
+ msgid ""
747
+ "If your Testimonials display has gone to funky town, please <a href=\"%s"
748
+ "\">read the FAQ</a> about possible CSS fixes."
749
  msgstr ""
750
 
751
+ #: includes/class-testimonials-widget.php:511
752
  msgid "Published by"
753
  msgstr ""
754
 
755
+ #: includes/class-testimonials-widget.php:526
756
  msgid "ID"
757
  msgstr ""
758
 
759
+ #: includes/class-testimonials-widget.php:531
760
  msgid "Image"
761
  msgstr ""
762
 
763
+ #: includes/class-testimonials-widget.php:536
764
  msgid "Shortcodes"
765
  msgstr ""
766
 
767
+ #: includes/class-testimonials-widget.php:577
768
  msgid "Add New"
769
  msgstr ""
770
 
771
+ #: includes/class-testimonials-widget.php:578
772
+ #: includes/class-testimonials-widget.php:581
773
  msgid "Add New Testimonial"
774
  msgstr ""
775
 
776
+ #: includes/class-testimonials-widget.php:579
777
  msgid "Edit Testimonial"
778
  msgstr ""
779
 
780
+ #: includes/class-testimonials-widget.php:582
781
+ #: includes/class-testimonials-widget.php:884
782
  msgid "No testimonials found"
783
  msgstr ""
784
 
785
+ #: includes/class-testimonials-widget.php:583
786
  msgid "No testimonials found in Trash"
787
  msgstr ""
788
 
789
+ #: includes/class-testimonials-widget.php:585
790
  msgid "Search Testimonials"
791
  msgstr ""
792
 
793
+ #: includes/class-testimonials-widget.php:586
794
+ #: includes/class-testimonials-widget.php:1469
795
+ #: includes/class-testimonials-widget.php:1830
796
  msgid "Testimonial"
797
  msgstr ""
798
 
799
+ #: includes/class-testimonials-widget.php:587
800
  msgid "View Testimonial"
801
  msgstr ""
802
 
803
+ #: includes/class-testimonials-widget.php:1381
804
  msgid "Use when the testimonial title is not the authors' name."
805
  msgstr ""
806
 
807
+ #: includes/class-testimonials-widget.php:1405
808
+ msgid ""
809
+ "If an email is provided, but not an image, a Gravatar icon will be attempted "
810
+ "to be loaded."
811
  msgstr ""
812
 
813
+ #: includes/class-testimonials-widget.php:1420
814
  msgid "Testimonial Data"
815
  msgstr ""
816
 
817
+ #: includes/class-testimonials-widget.php:1444
818
  msgid "Testimonial updated. <a href=\"%s\">View testimonial</a>"
819
  msgstr ""
820
 
821
+ #: includes/class-testimonials-widget.php:1445
822
  msgid "Custom field updated."
823
  msgstr ""
824
 
825
+ #: includes/class-testimonials-widget.php:1446
826
  msgid "Custom field deleted."
827
  msgstr ""
828
 
829
+ #: includes/class-testimonials-widget.php:1447
830
  msgid "Testimonial updated."
831
  msgstr ""
832
 
833
  #. translators: %s: date and time of the revision
834
+ #: includes/class-testimonials-widget.php:1449
 
835
  msgid "Testimonial restored to revision from %s"
836
  msgstr ""
837
 
838
+ #: includes/class-testimonials-widget.php:1450
839
  msgid "Testimonial published. <a href=\"%s\">View testimonial</a>"
840
  msgstr ""
841
 
842
+ #: includes/class-testimonials-widget.php:1451
843
  msgid "Testimonial saved."
844
  msgstr ""
845
 
846
+ #: includes/class-testimonials-widget.php:1452
847
+ msgid ""
848
+ "Testimonial submitted. <a target=\"_blank\" href=\"%s\">Preview testimonial</"
849
+ "a>"
850
  msgstr ""
851
 
852
+ #: includes/class-testimonials-widget.php:1453
853
+ msgid ""
854
+ "Testimonial scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
855
+ "\"%2$s\">Preview testimonial</a>"
856
  msgstr ""
857
 
858
+ #: includes/class-testimonials-widget.php:1454
859
+ msgid ""
860
+ "Testimonial draft updated. <a target=\"_blank\" href=\"%s\">Preview "
861
+ "testimonial</a>"
862
  msgstr ""
863
 
864
+ #: includes/class-testimonials-widget.php:1725
865
+ msgid ""
866
+ "If your Testimonials display has gone to funky town, please <a href=\"%s"
867
+ "\">read the FAQ</a> about possible fixes."
868
  msgstr ""
869
 
870
+ #: includes/class-testimonials-widget.php:1744
871
  msgid "Failed version check"
872
  msgstr ""
873
 
874
+ #: includes/class-testimonials-widget.php:1775
875
  msgid "Shortcode"
876
  msgstr ""
877
 
878
+ #: includes/class-testimonials-widget.php:2213
879
+ #: includes/class-testimonials-widget.php:2286
880
  msgid "Used with: "
881
  msgstr ""
882
 
883
+ #: includes/class-testimonials-widget.php:2250
884
+ #: includes/class-testimonials-widget.php:2314
885
  msgid "Options: "
886
  msgstr ""
887
 
888
+ #: includes/class-testimonials-widget.php:2255
889
+ #: includes/class-testimonials-widget.php:2319
890
  msgid "Usage: "
891
  msgstr ""
892
 
896
 
897
  #: includes/libraries/aihrus-framework/aihrus-framework.php:90
898
  #: includes/requirements.php:62
899
+ msgid ""
900
+ "<a href=\"%1$s\">Update plugins</a>. <a href=\"%2$s\">More information</a>."
901
  msgstr ""
902
 
903
  #: includes/libraries/aihrus-framework/aihrus-framework.php:101
905
  msgstr ""
906
 
907
  #: includes/libraries/aihrus-framework/aihrus-framework.php:106
908
+ msgid ""
909
+ "Plugin \"%1$s\" has been deactivated as it requires Aihrus Framework %2$s or "
910
+ "newer. You're running Aihrus Framework %4$s. Once corrected, \"%1$s\" can be "
911
+ "activated. %5$s %3$s"
912
  msgstr ""
913
 
914
  #: includes/libraries/aihrus-framework/aihrus-framework.php:115
916
  msgstr ""
917
 
918
  #: includes/libraries/aihrus-framework/aihrus-framework.php:154
919
+ msgid ""
920
+ "Plugin \"%1$s\" has been deactivated as it requires PHP %2$s or newer. "
921
+ "You're running PHP %4$s. Once corrected, \"%1$s\" can be activated. <a href="
922
+ "\"%3$s\">More information</a>."
923
  msgstr ""
924
 
925
  #: includes/libraries/aihrus-framework/aihrus-framework.php:163
927
  msgstr ""
928
 
929
  #: includes/libraries/aihrus-framework/aihrus-framework.php:206
930
+ msgid ""
931
+ "Plugin \"%1$s\" has been deactivated as it requires WordPress %2$s or newer. "
932
+ "You're running WordPress %4$s. Once corrected, \"%1$s\" can be activated. <a "
933
+ "href=\"%3$s\">Update WordPress</a>."
 
 
 
 
 
934
  msgstr ""
935
 
936
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:236
937
+ msgid ""
938
+ "Plugin \"%2$s\" has been deactivated. Please install and activate \"%3$s\" "
939
+ "version %1$s or newer before activating \"%2$s\"."
940
  msgstr ""
941
 
942
  #: includes/libraries/aihrus-framework/aihrus-framework.php:250
943
+ msgid ""
944
+ "<a href=\"%1$s\">%2$s &gt; Settings</a>, <em>Premium</em> tab, <em>License "
945
+ "Key</em>"
 
 
946
  msgstr ""
947
 
948
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:255
949
  msgid "<a href=\"%s\">Where's my license key?</a>"
950
  msgstr ""
951
 
952
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:260
953
  msgid "<a href=\"%1$s\">Purchase</a>"
954
  msgstr ""
955
 
956
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:268
957
  msgid "%1$s/checkout/?edd_license_key=%2$s&download_id=%3$s"
958
  msgstr ""
959
 
960
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:272
961
  msgid "<a href=\"%1$s\">Renew</a> or "
962
  msgstr ""
963
 
964
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:277
965
+ msgid ""
966
+ "Plugin \"%1$s\" requires license activation for software updates and "
967
+ "support. Please activate the license via %2$s. See %3$s for help. "
968
+ "Alternately, %5$s%4$s a %1$s license."
969
  msgstr ""
970
 
971
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:287
972
  msgid "`aihr_deactivate_plugin` requires $file argument"
973
  msgstr ""
974
 
975
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:326
976
  msgid "Unknown"
977
  msgstr ""
978
 
979
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:333
980
+ msgid ""
981
+ "Plugin \"%1$s\" has been deactivated due to \"%2$s\". Once corrected, \"%1$s"
982
+ "\" can be activated.</p><p>If you want to revert \"%1$s\", look for <a href="
983
+ "\"%3$s\">older versions on WordPress</a> or <a href=\"mailto:"
984
+ "support@axelerant.com?subject=Old+Plugin+Version+Request\">email Axelerant "
985
+ "support</a> if this is a premium plugin."
986
  msgstr ""
987
 
988
+ #: includes/libraries/aihrus-framework/aihrus-framework.php:344
989
  msgid "`aihr_deactivate_plugin_do` requires $file argument"
990
  msgstr ""
991
 
992
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:160
993
+ msgid ""
994
+ "Please donate $5 towards ongoing free support and development of the \"%1$s"
995
+ "\" plugin. %2$s"
996
  msgstr ""
997
 
998
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:341
999
+ msgid ""
1000
+ "cURL is not installed and file_get_contents is not accessible. Unable to "
1001
+ "retrieve URL %1$s."
 
 
 
 
 
 
 
 
 
 
1002
  msgstr ""
1003
 
1004
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:664
1005
+ msgid ""
1006
+ "<a href=\"http://codex.wordpress.org/Function_Reference/absint\">absint</a>."
1007
  msgstr ""
1008
 
1009
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:665
1010
+ msgid ""
1011
+ "Digit-only characters to make a multiple or single entries. Regex <code>#^\\d"
1012
+ "+(,\\s?\\d+)*$#</code>."
1013
  msgstr ""
1014
 
1015
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:666
1016
+ msgid "<a href=\"php.net/manual/en/function.intval.php\">intval</a>."
1017
  msgstr ""
1018
 
1019
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:667
1020
+ msgid ""
1021
+ "Values like true, 'true', 1, 'on', and 'yes' are <strong>true</strong>; "
1022
+ "otherwise <strong>false</strong>."
1023
  msgstr ""
1024
 
1025
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:668
1026
+ msgid ""
1027
+ "An <a href=\"php.net/manual/en/function.intval.php\">intval</a> greater than "
1028
+ "zero."
1029
  msgstr ""
1030
 
1031
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:669
1032
+ msgid ""
1033
+ "A non-zero <a href=\"php.net/manual/en/function.intval.php\">intval</a>."
1034
  msgstr ""
1035
 
1036
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:670
1037
+ msgid "SQL ordering \"ASC\" or \"DESC\". Regex <code>#^desc|asc$#i</code>."
1038
  msgstr ""
1039
 
1040
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:671
1041
+ msgid ""
1042
+ "<a href=\"http://codex.wordpress.org/Function_Reference/sanitize_title"
1043
+ "\">sanitize_title</a>."
1044
  msgstr ""
1045
 
1046
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:672
1047
+ msgid ""
1048
+ "Word-only characters including a hyphen to make a single term. Regex <code>#^"
1049
+ "[\\w-]+$#</code>."
1050
  msgstr ""
1051
 
1052
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:673
1053
+ msgid ""
1054
+ "Word-only characters to make a single term. Regex <code>#^\\w+$#</code>."
1055
  msgstr ""
1056
 
1057
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:674
1058
+ msgid ""
1059
+ "Word-only characters including hyphens and spaces to make a multiple or "
1060
+ "single terms. Regex <code>#^(([\\w- ]+)(,\\s?)?)+$#</code>."
1061
  msgstr ""
1062
 
1063
  #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:675
1064
+ msgid "Current license."
1065
  msgstr ""
1066
 
1067
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:676
1068
+ msgid ""
1069
+ "<a href=\"http://php.net/manual/en/filter.filters.validate.php\">filter_var"
1070
+ "( $url, FILTER_VALIDATE_URL )</a>."
1071
+ msgstr ""
1072
+
1073
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:677
1074
+ msgid ""
1075
+ "<a href=\"http://codex.wordpress.org/Function_Reference/wp_kses_data"
1076
+ "\">wp_kses_data</a>."
1077
+ msgstr ""
1078
+
1079
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:678
1080
+ msgid ""
1081
+ "<a href=\"http://codex.wordpress.org/Function_Reference/wp_kses_post"
1082
+ "\">wp_kses_post</a>."
1083
+ msgstr ""
1084
+
1085
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:683
1086
  msgid "Validatation: "
1087
  msgstr ""
1088
 
1089
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:732
1090
  msgid "TBD empty "
1091
  msgstr ""
1092
 
1093
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:738
1094
  msgid "Pick an option"
1095
  msgstr ""
1096
 
1097
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:761
1098
  msgid "Category A, Another category, 123"
1099
  msgstr ""
1100
 
1101
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:763
1102
  msgid "Tag A, Another tag, 123"
1103
  msgstr ""
1104
 
1105
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-common.php:766
1106
  msgid "You decide…"
1107
  msgstr ""
1108
 
1127
  msgstr ""
1128
 
1129
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:86
1130
+ msgid ""
1131
+ "These are your current settings in a serialized format. Copy the contents to "
1132
+ "make a backup of your settings."
1133
  msgstr ""
1134
 
1135
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:95
1137
  msgstr ""
1138
 
1139
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:97
1140
+ msgid ""
1141
+ "Paste new serialized settings here to overwrite your current configuration."
1142
  msgstr ""
1143
 
1144
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:102
1145
+ msgid ""
1146
+ "Delete all %s data and options from database on plugin deletion. Even if "
1147
+ "this option isn't checked, WordPress will still give a data deletion warning."
1148
  msgstr ""
1149
 
1150
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:106
1160
  msgstr ""
1161
 
1162
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:251
1163
+ msgid ""
1164
+ "<img class=\"size-medium\" src=\"%5$s\" alt=\"Axelerant 2015 Retreat in Goa"
1165
+ "\" width=\"640\" height=\"327\" /><p>Axelerant is a full-service software "
1166
+ "development company that focuses on open-source technologies. Top technical "
1167
+ "talent who are passionate, giving, and communicative demonstrates our "
1168
+ "backbone. We provide high-end Strategy, Implementation, and Support services "
1169
+ "for our clients and agencies with whom we partner.</p><p>Our team members "
1170
+ "span the world, and we follow agile delivery and working processes. Further, "
1171
+ "we’re actively giving back to many open-source communities and have fostered "
1172
+ "an innovative, incubator culture to give ideas a chance to succeed.</"
1173
+ "p><h2>Foundations of Axelerant</h2><ul><li><b>Passion</b> – Our passion is "
1174
+ "so strong, we’re self­directed to make the difficult easy.</"
1175
+ "li><li><b>Openness</b> – We’re so honest and painstaking in our discussions "
1176
+ "that there are no questions left, and standards are created.</"
1177
+ "li><li><b>Giving</b> – We’re excited to share our results to inspire all to "
1178
+ "surpass them.</li></ul><h3>Learn More About Axelerant</h3><ul><li><a href="
1179
+ "\"%1$s\">Axelerant Team</a></li><li><a href=\"%2$s\">Giving Back</a></"
1180
+ "li><li><a href=\"%7$s\">Inside Axelerant</a></li><li><a href=\"%3$s\">Our "
1181
+ "Services</a></li><li><a href=\"%4$s\">Testimonials</a></li><li><a href=\"%6$s"
1182
+ "\">Careers</a></li></ul>"
1183
  msgstr ""
1184
 
1185
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:290
1187
  msgstr ""
1188
 
1189
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:298
1190
+ msgid ""
1191
+ "If you like this plugin, please <a href=\"%1$s\" title=\"Donate for Good "
1192
+ "Karma\"><img src=\"%2$s\" border=\"0\" alt=\"Donate for Good Karma\" /></a> "
1193
+ "or <a href=\"%3$s\" title=\"purchase premium WordPress plugins from "
1194
+ "Axelerant \">purchase the Premium version</a> to help fund further "
1195
+ "development and <a href=\"%4$s\" title=\"Support forums\">support</a>."
1196
  msgstr ""
1197
 
1198
  #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:309
1240
  msgstr ""
1241
 
1242
  #: includes/requirements.php:64
1243
+ msgid ""
1244
+ "Plugin \"%1$s\" has been deactivated as it requires a current Aihrus "
1245
+ "Framework. Once corrected, \"%1$s\" can be activated. %2$s"
1246
  msgstr ""
1247
 
1248
  #: templates/testimonial-content.php:9
1264
  #: templates/testimonials-paging.php:25
1265
  msgid "&raquo;"
1266
  msgstr ""
1267
+
1268
  #. Plugin Name of the plugin/theme
1269
  msgid "Testimonials Widget"
1270
  msgstr ""
1274
  msgstr ""
1275
 
1276
  #. Description of the plugin/theme
1277
+ msgid ""
1278
+ "Easily add social proofing to your website with Testimonials Widget. List or "
1279
+ "slide reviews via functions, shortcodes, or widgets."
1280
  msgstr ""
1281
 
1282
  #. Author of the plugin/theme
readme.txt CHANGED
@@ -4,8 +4,8 @@ Contributors: comprock,saurabhd,subharanjan
4
  Donate link: https://axelerant.com/about-axelerant/donate/
5
  Tags: axelerant, client, customer, portfolio, quote, quotes, random, recommendation, reference, review, reviews, slider, testimonial, testimonials, wpml
6
  Requires at least: 3.9.2
7
- Tested up to: 4.3.0
8
- Stable tag: 3.2.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -70,6 +70,10 @@ Widgets display content sans `wpautop` formatting. This means there's no forced
70
 
71
  The single testimonial view supports image, author, title, location, email, company and URL details with optional Review schema.
72
 
 
 
 
 
73
  = Shortcodes =
74
 
75
  * `[testimonials]` - Testimonials listings with paging
4
  Donate link: https://axelerant.com/about-axelerant/donate/
5
  Tags: axelerant, client, customer, portfolio, quote, quotes, random, recommendation, reference, review, reviews, slider, testimonial, testimonials, wpml
6
  Requires at least: 3.9.2
7
+ Tested up to: 4.4.2
8
+ Stable tag: 3.3.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
70
 
71
  The single testimonial view supports image, author, title, location, email, company and URL details with optional Review schema.
72
 
73
+ As per Google's quality guidelines, marking up irrelevant or misleading content, such as fake reviews or content unrelated to the focus of a page may lead to review stars removed.
74
+
75
+ As per John Mueller, Webmaster Trends Analyst at Google, testimonials are not reviews, and it doesn't make sense to use review schema for them. Please use "Enable Review Schema" option wisely to stay "compliant" with Google's recommendations.
76
+
77
  = Shortcodes =
78
 
79
  * `[testimonials]` - Testimonials listings with paging
templates/testimonial-cite.php CHANGED
@@ -17,43 +17,43 @@ $cite = '';
17
  $done_url = false;
18
 
19
  if ( $do_source && $do_email ) {
20
- $cite .= Testimonials_Widget::get_template_part( 'span', 'author-email' );
21
  } elseif ( $do_source && ! $do_company && $do_url ) {
22
  $done_url = true;
23
 
24
- $cite .= Testimonials_Widget::get_template_part( 'span', 'author-url' );
25
  } elseif ( $do_source ) {
26
- $cite .= Testimonials_Widget::get_template_part( 'span', 'author' );
27
  } elseif ( $do_email ) {
28
- $cite .= Testimonials_Widget::get_template_part( 'span', 'email' );
29
  }
30
 
31
  if ( $do_title && $cite ) {
32
- $cite .= Testimonials_Widget::get_template_part( 'span', 'join-title' );
33
  }
34
 
35
  if ( $do_title ) {
36
- $cite .= Testimonials_Widget::get_template_part( 'span', 'job-title' );
37
  }
38
 
39
  if ( ( $do_company || ( $do_url && ! $done_url ) ) && $cite ) {
40
- $cite .= Testimonials_Widget::get_template_part( 'span', 'join-company' );
41
  }
42
 
43
  if ( $do_company && $do_url ) {
44
- $cite .= Testimonials_Widget::get_template_part( 'span', 'company-url' );
45
  } elseif ( $do_company ) {
46
- $cite .= Testimonials_Widget::get_template_part( 'span', 'company' );
47
  } elseif ( $do_url && ! $done_url ) {
48
- $cite .= Testimonials_Widget::get_template_part( 'span', 'url' );
49
  }
50
 
51
  if ( $do_location && $cite ) {
52
- $cite .= Testimonials_Widget::get_template_part( 'span', 'join-location' );
53
  }
54
 
55
  if ( $do_location ) {
56
- $cite .= Testimonials_Widget::get_template_part( 'span', 'location' );
57
  }
58
 
59
  if ( ! empty( $cite ) ) {
17
  $done_url = false;
18
 
19
  if ( $do_source && $do_email ) {
20
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'author-email' );
21
  } elseif ( $do_source && ! $do_company && $do_url ) {
22
  $done_url = true;
23
 
24
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'author-url' );
25
  } elseif ( $do_source ) {
26
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'author' );
27
  } elseif ( $do_email ) {
28
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'email' );
29
  }
30
 
31
  if ( $do_title && $cite ) {
32
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'join-title' );
33
  }
34
 
35
  if ( $do_title ) {
36
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'job-title' );
37
  }
38
 
39
  if ( ( $do_company || ( $do_url && ! $done_url ) ) && $cite ) {
40
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'join-company' );
41
  }
42
 
43
  if ( $do_company && $do_url ) {
44
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'company-url' );
45
  } elseif ( $do_company ) {
46
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'company' );
47
  } elseif ( $do_url && ! $done_url ) {
48
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'url' );
49
  }
50
 
51
  if ( $do_location && $cite ) {
52
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'join-location' );
53
  }
54
 
55
  if ( $do_location ) {
56
+ $cite .= Axl_Testimonials_Widget::get_template_part( 'span', 'location' );
57
  }
58
 
59
  if ( ! empty( $cite ) ) {
templates/testimonial-content.php CHANGED
@@ -5,23 +5,31 @@ $atts = $tw_template_args['atts'];
5
  $testimonial = $tw_template_args['testimonial'];
6
  $widget_number = $tw_template_args['widget_number'];
7
 
8
- $char_limit = $atts['char_limit'];
9
- $content_more = apply_filters( 'tw_content_more', esc_html__( '…', 'testimonials-widget' ) );
10
- $content_more .= Testimonials_Widget::$tag_close_quote;
11
- $do_content = ! $atts['hide_content'] && ! empty( $testimonial['testimonial_content'] );
12
- $use_quote_tag = $atts['use_quote_tag'];
 
13
 
14
  if ( $do_content ) {
15
  $content = $testimonial['testimonial_content'];
16
- $content = Testimonials_Widget::format_content( $content, $widget_number, $atts );
17
  if ( $char_limit ) {
18
- $content = Testimonials_Widget::testimonials_truncate( $content, $char_limit, $content_more );
19
  $content = force_balance_tags( $content );
20
  }
21
 
22
  $content = apply_filters( 'tw_content', $content, $widget_number, $testimonial, $atts );
23
  $content = make_clickable( $content );
24
 
 
 
 
 
 
 
 
25
  if ( ! $use_quote_tag ) {
26
  ?>
27
  <blockquote><?php echo $content; ?></blockquote>
5
  $testimonial = $tw_template_args['testimonial'];
6
  $widget_number = $tw_template_args['widget_number'];
7
 
8
+ $char_limit = $atts['char_limit'];
9
+ $content_more = apply_filters( 'tw_content_more', esc_html__( '…', 'testimonials-widget' ) );
10
+ $content_more .= Axl_Testimonials_Widget::$tag_close_quote;
11
+ $do_content = ! $atts['hide_content'] && ! empty( $testimonial['testimonial_content'] );
12
+ $do_title = ! $atts['hide_source_title'] && ! empty( $testimonial['testimonial_source'] );
13
+ $use_quote_tag = $atts['use_quote_tag'];
14
 
15
  if ( $do_content ) {
16
  $content = $testimonial['testimonial_content'];
17
+ $content = Axl_Testimonials_Widget::format_content( $content, $widget_number, $atts );
18
  if ( $char_limit ) {
19
+ $content = Axl_Testimonials_Widget::testimonials_truncate( $content, $char_limit, $content_more );
20
  $content = force_balance_tags( $content );
21
  }
22
 
23
  $content = apply_filters( 'tw_content', $content, $widget_number, $testimonial, $atts );
24
  $content = make_clickable( $content );
25
 
26
+ //Prepand Title to content if "Hide Title Above Content?" is active from Testimonials Widget settings.
27
+ if ( $do_title && ! is_single() ) {
28
+ $testimonial_title = $testimonial['testimonial_source'];
29
+ $testimonial_title_html = '<span class="list-title">' . $testimonial_title . '</span><br/>';
30
+ $content = $testimonial_title_html . $content;
31
+ }
32
+
33
  if ( ! $use_quote_tag ) {
34
  ?>
35
  <blockquote><?php echo $content; ?></blockquote>
templates/testimonial-open.php CHANGED
@@ -43,4 +43,4 @@ if ( $atts['remove_hentry'] ) {
43
  $class = apply_filters( 'tw_get_testimonial_html_class', $class, $testimonial, $atts, $is_list, $is_first, $widget_number );
44
  ?>
45
  <div class="<?php echo $class; ?>" style="<?php echo $style; ?>">
46
- <!-- <?php echo Testimonials_Widget::ID; ?>:<?php echo $post_id; ?>: -->
43
  $class = apply_filters( 'tw_get_testimonial_html_class', $class, $testimonial, $atts, $is_list, $is_first, $widget_number );
44
  ?>
45
  <div class="<?php echo $class; ?>" style="<?php echo $style; ?>">
46
+ <!-- <?php echo Axl_Testimonials_Widget::ID; ?>:<?php echo $post_id; ?>: -->
templates/testimonials-archives.php CHANGED
@@ -6,8 +6,8 @@ $atts = $tw_template_args['atts'];
6
  $c = ! empty( $atts['count'] ) ? '1' : '0';
7
  $d = ! empty( $atts['dropdown'] ) ? '1' : '0';
8
 
9
- add_filter( 'getarchives_where', array( 'Testimonials_Widget', 'getarchives_where' ), 10, 2 );
10
- add_filter( 'get_archives_link', array( 'Testimonials_Widget', 'get_archives_link' ), 10, 1 );
11
 
12
  if ( $d ) {
13
  ?>
@@ -37,6 +37,6 @@ if ( $d ) {
37
  <?php
38
  }
39
 
40
- remove_filter( 'get_archives_link', array( 'Testimonials_Widget', 'get_archives_link' ), 10, 1 );
41
- remove_filter( 'getarchives_where', array( 'Testimonials_Widget', 'getarchives_where' ), 10, 2 );
42
  ?>
6
  $c = ! empty( $atts['count'] ) ? '1' : '0';
7
  $d = ! empty( $atts['dropdown'] ) ? '1' : '0';
8
 
9
+ add_filter( 'getarchives_where', array( 'Axl_Testimonials_Widget', 'getarchives_where' ), 10, 2 );
10
+ add_filter( 'get_archives_link', array( 'Axl_Testimonials_Widget', 'get_archives_link' ), 10, 1 );
11
 
12
  if ( $d ) {
13
  ?>
37
  <?php
38
  }
39
 
40
+ remove_filter( 'get_archives_link', array( 'Axl_Testimonials_Widget', 'get_archives_link' ), 10, 1 );
41
+ remove_filter( 'getarchives_where', array( 'Axl_Testimonials_Widget', 'getarchives_where' ), 10, 2 );
42
  ?>
templates/testimonials-categories.php CHANGED
@@ -15,7 +15,7 @@ $cat_args = array(
15
 
16
  $use_cpt_taxonomy = tw_get_option( 'use_cpt_taxonomy', false );
17
  if ( $use_cpt_taxonomy ) {
18
- $cat_args['taxonomy'] = Testimonials_Widget::$cpt_category;
19
  }
20
 
21
  if ( $d ) {
15
 
16
  $use_cpt_taxonomy = tw_get_option( 'use_cpt_taxonomy', false );
17
  if ( $use_cpt_taxonomy ) {
18
+ $cat_args['taxonomy'] = Axl_Testimonials_Widget::$cpt_category;
19
  }
20
 
21
  if ( $d ) {
templates/testimonials-open.php CHANGED
@@ -4,7 +4,7 @@ global $tw_template_args;
4
  $is_list = $tw_template_args['is_list'];
5
  $widget_number = $tw_template_args['widget_number'];
6
 
7
- $id = Testimonials_Widget::ID;
8
  if ( is_null( $widget_number ) ) {
9
  $class = $id;
10
  if ( $is_list ) {
4
  $is_list = $tw_template_args['is_list'];
5
  $widget_number = $tw_template_args['widget_number'];
6
 
7
+ $id = Axl_Testimonials_Widget::ID;
8
  if ( is_null( $widget_number ) ) {
9
  $class = $id;
10
  if ( $is_list ) {
templates/testimonials-paging.php CHANGED
@@ -4,7 +4,7 @@ global $tw_template_args;
4
  $atts = $tw_template_args['atts'];
5
  $prepend = $tw_template_args['prepend'];
6
 
7
- if ( is_home() || 1 === Testimonials_Widget::$max_num_pages ) {
8
  return;
9
  }
10
 
@@ -21,16 +21,16 @@ if ( ! function_exists( 'wp_pagenavi' ) ) {
21
 
22
  $paging .= '</div>';
23
  $paging .= '<div class="alignright">';
24
- if ( $paged != Testimonials_Widget::$max_num_pages ) {
25
  $raquo = apply_filters( 'tw_next_posts_link_text', esc_html__( '&raquo;', 'testimonials-widget' ) );
26
- $paging .= get_next_posts_link( $raquo, Testimonials_Widget::$max_num_pages );
27
  }
28
 
29
  $paging .= '</div>';
30
  } else {
31
  $args = array(
32
  'echo' => false,
33
- 'query' => Testimonials_Widget::$wp_query,
34
  );
35
  $args = apply_filters( 'tw_wp_pagenavi', $args );
36
 
4
  $atts = $tw_template_args['atts'];
5
  $prepend = $tw_template_args['prepend'];
6
 
7
+ if ( is_home() || 1 === Axl_Testimonials_Widget::$max_num_pages ) {
8
  return;
9
  }
10
 
21
 
22
  $paging .= '</div>';
23
  $paging .= '<div class="alignright">';
24
+ if ( Axl_Testimonials_Widget::$max_num_pages != $paged ) {
25
  $raquo = apply_filters( 'tw_next_posts_link_text', esc_html__( '&raquo;', 'testimonials-widget' ) );
26
+ $paging .= get_next_posts_link( $raquo, Axl_Testimonials_Widget::$max_num_pages );
27
  }
28
 
29
  $paging .= '</div>';
30
  } else {
31
  $args = array(
32
  'echo' => false,
33
+ 'query' => Axl_Testimonials_Widget::$wp_query,
34
  );
35
  $args = apply_filters( 'tw_wp_pagenavi', $args );
36
 
templates/testimonials-recent.php CHANGED
@@ -11,7 +11,7 @@ $args = array(
11
  'no_found_rows' => true,
12
  'post_status' => 'publish',
13
  'ignore_sticky_posts' => true,
14
- 'post_type' => Testimonials_Widget::PT,
15
  );
16
  $args = apply_filters( 'tw_recent_testimonials_args', $args );
17
 
11
  'no_found_rows' => true,
12
  'post_status' => 'publish',
13
  'ignore_sticky_posts' => true,
14
+ 'post_type' => Axl_Testimonials_Widget::PT,
15
  );
16
  $args = apply_filters( 'tw_recent_testimonials_args', $args );
17
 
testimonials-widget.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin URI: http://wordpress.org/plugins/testimonials-widget/
5
  * Description: Easily add social proofing to your website with Testimonials Widget. List or slide reviews via functions, shortcodes, or widgets.
6
  * lets you socially randomly slide or list selected portfolios, quotes, reviews, or text with images or videos on your WordPress site.
7
- * Version: 3.2.0
8
  * Author: Axelerant
9
  * Author URI: https://axelerant.com/
10
  * License: GPLv2 or later
@@ -36,7 +36,7 @@ if ( ! defined( 'ABSPATH' ) ) {
36
  }
37
 
38
  if ( ! defined( 'TW_AIHR_VERSION' ) ) {
39
- define( 'TW_AIHR_VERSION', '1.2.2' );
40
  }
41
 
42
  if ( ! defined( 'TW_BASE' ) ) {
@@ -64,7 +64,7 @@ if ( ! defined( 'TW_PREMIUM_LINK' ) ) {
64
  }
65
 
66
  if ( ! defined( 'TW_VERSION' ) ) {
67
- define( 'TW_VERSION', '3.2.0' );
68
  }
69
 
70
  require_once TW_DIR_INC . 'requirements.php';
@@ -91,94 +91,118 @@ add_action( 'plugins_loaded', 'testimonialswidget_init', 99 );
91
  */
92
  if ( ! function_exists( 'testimonialswidget_init' ) ) {
93
  function testimonialswidget_init() {
94
- if ( Testimonials_Widget::version_check() ) {
95
- global $Testimonials_Widget_Settings;
96
- if ( is_null( $Testimonials_Widget_Settings ) ) {
97
- $Testimonials_Widget_Settings = new Testimonials_Widget_Settings();
98
  }
99
 
100
- global $Testimonials_Widget;
101
- if ( is_null( $Testimonials_Widget ) ) {
102
- $Testimonials_Widget = new Testimonials_Widget();
103
  }
104
  }
105
  }
106
  }
107
 
108
 
109
- register_activation_hook( __FILE__, array( 'Testimonials_Widget', 'activation' ) );
110
- register_deactivation_hook( __FILE__, array( 'Testimonials_Widget', 'deactivation' ) );
111
- register_uninstall_hook( __FILE__, array( 'Testimonials_Widget', 'uninstall' ) );
112
 
113
 
 
 
 
114
  if ( ! function_exists( 'testimonials' ) ) {
115
  function testimonials( $atts = array() ) {
116
- global $Testimonials_Widget;
117
 
118
- return $Testimonials_Widget->testimonials( $atts );
119
  }
120
  }
121
 
122
 
 
 
 
123
  if ( ! function_exists( 'testimonials_archives' ) ) {
124
  function testimonials_archives( $atts = array() ) {
125
- global $Testimonials_Widget;
126
 
127
- return $Testimonials_Widget->testimonials_archives( $atts );
128
  }
129
  }
130
 
131
 
 
 
 
132
  if ( ! function_exists( 'testimonials_categories' ) ) {
133
  function testimonials_categories( $atts = array() ) {
134
- global $Testimonials_Widget;
135
 
136
- return $Testimonials_Widget->testimonials_categories( $atts );
137
  }
138
  }
139
 
140
 
 
 
 
141
  if ( ! function_exists( 'testimonials_recent' ) ) {
142
  function testimonials_recent( $atts = array() ) {
143
- global $Testimonials_Widget;
144
 
145
- return $Testimonials_Widget->testimonials_recent( $atts );
146
  }
147
  }
148
 
149
 
 
 
 
150
  if ( ! function_exists( 'testimonials_slider' ) ) {
151
  function testimonials_slider( $atts = array(), $widget_number = null ) {
152
- global $Testimonials_Widget;
153
 
154
- return $Testimonials_Widget->testimonials_slider( $atts, $widget_number );
155
  }
156
  }
157
 
158
 
 
 
 
159
  if ( ! function_exists( 'testimonials_tag_cloud' ) ) {
160
  function testimonials_tag_cloud( $atts = array() ) {
161
- global $Testimonials_Widget;
162
 
163
- return $Testimonials_Widget->testimonials_tag_cloud( $atts );
164
  }
165
  }
166
 
167
 
 
 
 
168
  if ( ! function_exists( 'testimonials_examples' ) ) {
169
  function testimonials_examples( $atts = array() ) {
170
- global $Testimonials_Widget;
171
 
172
- return $Testimonials_Widget->testimonials_examples( $atts );
173
  }
174
  }
175
 
176
 
 
 
 
177
  if ( ! function_exists( 'testimonials_options' ) ) {
178
  function testimonials_options( $atts = array() ) {
179
- global $Testimonials_Widget;
180
 
181
- return $Testimonials_Widget->testimonials_options( $atts );
182
  }
183
  }
184
 
4
  * Plugin URI: http://wordpress.org/plugins/testimonials-widget/
5
  * Description: Easily add social proofing to your website with Testimonials Widget. List or slide reviews via functions, shortcodes, or widgets.
6
  * lets you socially randomly slide or list selected portfolios, quotes, reviews, or text with images or videos on your WordPress site.
7
+ * Version: 3.3.0
8
  * Author: Axelerant
9
  * Author URI: https://axelerant.com/
10
  * License: GPLv2 or later
36
  }
37
 
38
  if ( ! defined( 'TW_AIHR_VERSION' ) ) {
39
+ define( 'TW_AIHR_VERSION', '1.2.4' );
40
  }
41
 
42
  if ( ! defined( 'TW_BASE' ) ) {
64
  }
65
 
66
  if ( ! defined( 'TW_VERSION' ) ) {
67
+ define( 'TW_VERSION', '3.3.0' );
68
  }
69
 
70
  require_once TW_DIR_INC . 'requirements.php';
91
  */
92
  if ( ! function_exists( 'testimonialswidget_init' ) ) {
93
  function testimonialswidget_init() {
94
+ if ( Axl_Testimonials_Widget::version_check() ) {
95
+ global $Axl_Testimonials_Widget_Settings;
96
+ if ( is_null( $Axl_Testimonials_Widget_Settings ) ) {
97
+ $Axl_Testimonials_Widget_Settings = new Axl_Testimonials_Widget_Settings();
98
  }
99
 
100
+ global $Axl_Testimonials_Widget;
101
+ if ( is_null( $Axl_Testimonials_Widget ) ) {
102
+ $Axl_Testimonials_Widget = new Axl_Testimonials_Widget();
103
  }
104
  }
105
  }
106
  }
107
 
108
 
109
+ register_activation_hook( __FILE__, array( 'Axl_Testimonials_Widget', 'activation' ) );
110
+ register_deactivation_hook( __FILE__, array( 'Axl_Testimonials_Widget', 'deactivation' ) );
111
+ register_uninstall_hook( __FILE__, array( 'Axl_Testimonials_Widget', 'uninstall' ) );
112
 
113
 
114
+ /**
115
+ * @SuppressWarnings(PHPMD.LongVariable)
116
+ */
117
  if ( ! function_exists( 'testimonials' ) ) {
118
  function testimonials( $atts = array() ) {
119
+ global $Axl_Testimonials_Widget;
120
 
121
+ return $Axl_Testimonials_Widget->testimonials( $atts );
122
  }
123
  }
124
 
125
 
126
+ /**
127
+ * @SuppressWarnings(PHPMD.LongVariable)
128
+ */
129
  if ( ! function_exists( 'testimonials_archives' ) ) {
130
  function testimonials_archives( $atts = array() ) {
131
+ global $Axl_Testimonials_Widget;
132
 
133
+ return $Axl_Testimonials_Widget->testimonials_archives( $atts );
134
  }
135
  }
136
 
137
 
138
+ /**
139
+ * @SuppressWarnings(PHPMD.LongVariable)
140
+ */
141
  if ( ! function_exists( 'testimonials_categories' ) ) {
142
  function testimonials_categories( $atts = array() ) {
143
+ global $Axl_Testimonials_Widget;
144
 
145
+ return $Axl_Testimonials_Widget->testimonials_categories( $atts );
146
  }
147
  }
148
 
149
 
150
+ /**
151
+ * @SuppressWarnings(PHPMD.LongVariable)
152
+ */
153
  if ( ! function_exists( 'testimonials_recent' ) ) {
154
  function testimonials_recent( $atts = array() ) {
155
+ global $Axl_Testimonials_Widget;
156
 
157
+ return $Axl_Testimonials_Widget->testimonials_recent( $atts );
158
  }
159
  }
160
 
161
 
162
+ /**
163
+ * @SuppressWarnings(PHPMD.LongVariable)
164
+ */
165
  if ( ! function_exists( 'testimonials_slider' ) ) {
166
  function testimonials_slider( $atts = array(), $widget_number = null ) {
167
+ global $Axl_Testimonials_Widget;
168
 
169
+ return $Axl_Testimonials_Widget->testimonials_slider( $atts, $widget_number );
170
  }
171
  }
172
 
173
 
174
+ /**
175
+ * @SuppressWarnings(PHPMD.LongVariable)
176
+ */
177
  if ( ! function_exists( 'testimonials_tag_cloud' ) ) {
178
  function testimonials_tag_cloud( $atts = array() ) {
179
+ global $Axl_Testimonials_Widget;
180
 
181
+ return $Axl_Testimonials_Widget->testimonials_tag_cloud( $atts );
182
  }
183
  }
184
 
185
 
186
+ /**
187
+ * @SuppressWarnings(PHPMD.LongVariable)
188
+ */
189
  if ( ! function_exists( 'testimonials_examples' ) ) {
190
  function testimonials_examples( $atts = array() ) {
191
+ global $Axl_Testimonials_Widget;
192
 
193
+ return $Axl_Testimonials_Widget->testimonials_examples( $atts );
194
  }
195
  }
196
 
197
 
198
+ /**
199
+ * @SuppressWarnings(PHPMD.LongVariable)
200
+ */
201
  if ( ! function_exists( 'testimonials_options' ) ) {
202
  function testimonials_options( $atts = array() ) {
203
+ global $Axl_Testimonials_Widget;
204
 
205
+ return $Axl_Testimonials_Widget->testimonials_options( $atts );
206
  }
207
  }
208