Orbit Fox by ThemeIsle - Version 2.2.6

Version Description

  • 2017-12-19
Download this release

Release Info

Developer codeinwp
Plugin Icon 128x128 Orbit Fox by ThemeIsle
Version 2.2.6
Comparing to
See all releases

Code changes from version 2.2.5 to 2.2.6

Files changed (44) hide show
  1. CHANGELOG.md +10 -0
  2. core/app/class-orbit-fox-global-settings.php +1 -1
  3. core/assets/css/orbit-fox-admin.css +1 -1
  4. core/includes/class-orbit-fox.php +1 -1
  5. obfx_modules/beaver-widgets/custom-fields/number-field/number.js +9 -0
  6. obfx_modules/beaver-widgets/custom-fields/number-field/number_field.php +30 -0
  7. obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle.css +84 -0
  8. obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle.js +9 -0
  9. obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle_field.php +44 -0
  10. obfx_modules/beaver-widgets/inc/common-functions.php +117 -0
  11. obfx_modules/beaver-widgets/init.php +107 -0
  12. obfx_modules/beaver-widgets/modules/post-grid/css/frontend.css +64 -0
  13. obfx_modules/beaver-widgets/modules/post-grid/includes/frontend.css.php +173 -0
  14. obfx_modules/beaver-widgets/modules/post-grid/includes/frontend.php +283 -0
  15. obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php +287 -0
  16. obfx_modules/beaver-widgets/modules/post-grid/post-grid.php +348 -0
  17. obfx_modules/beaver-widgets/modules/pricing-table/css/frontend.css +66 -0
  18. obfx_modules/beaver-widgets/modules/pricing-table/includes/frontend.css.php +271 -0
  19. obfx_modules/beaver-widgets/modules/pricing-table/includes/frontend.php +61 -0
  20. obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php +587 -0
  21. obfx_modules/beaver-widgets/modules/services/css/frontend.css +40 -0
  22. obfx_modules/beaver-widgets/modules/services/includes/frontend.css.php +124 -0
  23. obfx_modules/beaver-widgets/modules/services/includes/frontend.php +48 -0
  24. obfx_modules/beaver-widgets/modules/services/services.php +255 -0
  25. obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php +19 -13
  26. obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php +6 -3
  27. obfx_modules/stats/css/stats.css +0 -8
  28. obfx_modules/stats/init.php +0 -314
  29. obfx_modules/stats/js/stats.js +0 -71
  30. obfx_modules/stats/js/vendor/chart.min.js +0 -14
  31. obfx_modules/stats/views/dashboard-widget-tpl.php +0 -37
  32. obfx_modules/template-directory/css/admin.css +130 -40
  33. obfx_modules/template-directory/inc/class-obfx-template-directory-customizer-section.php +0 -122
  34. obfx_modules/template-directory/init.php +71 -124
  35. obfx_modules/template-directory/js/customizer.js +0 -71
  36. obfx_modules/template-directory/js/plugin-install-helper.js +0 -55
  37. obfx_modules/template-directory/js/script.js +181 -25
  38. obfx_modules/template-directory/views/template-directory-page-tpl.php +90 -19
  39. obfx_modules/template-directory/views/template-plugin-install-tpl.php +0 -23
  40. readme.md +43 -1
  41. readme.txt +43 -1
  42. themeisle-companion.php +1 -1
  43. vendor/autoload.php +1 -1
  44. vendor/composer/autoload_real.php +5 -5
CHANGELOG.md CHANGED
@@ -1,4 +1,14 @@
1
 
 
 
 
 
 
 
 
 
 
 
2
  ### v2.2.5 - 2017-12-11
3
  **Changes:**
4
  * Better UX for CC0 images import module.
1
 
2
+ ### v2.2.6 - 2017-12-19
3
+ **Changes:**
4
+ * Added new Beaver Builder Widgets Module - Pricing table widget, Services widget, Posts Grid widget.
5
+ * Better user experience for the template directory.
6
+ * More native design for the template directory.
7
+ * Added three free new templates to the template directory - Path, Mocha and Ascend.
8
+ * Fixed bug with the Elementor Pricing Table widget button link.
9
+ * Fixed php notice given by the Elementor Posts Grid widget.
10
+ * Removed the useless Stats module.
11
+
12
  ### v2.2.5 - 2017-12-11
13
  **Changes:**
14
  * Better UX for CC0 images import module.
core/app/class-orbit-fox-global-settings.php CHANGED
@@ -61,13 +61,13 @@ class Orbit_Fox_Global_Settings {
61
  self::$instance->modules = apply_filters(
62
  'obfx_modules',
63
  array(
64
- 'stats',
65
  'social-sharing',
66
  'companion-legacy',
67
  'elementor-widgets',
68
  'template-directory',
69
  'menu-icons',
70
  'mystock-import',
 
71
  )
72
  );
73
  }// End if().
61
  self::$instance->modules = apply_filters(
62
  'obfx_modules',
63
  array(
 
64
  'social-sharing',
65
  'companion-legacy',
66
  'elementor-widgets',
67
  'template-directory',
68
  'menu-icons',
69
  'mystock-import',
70
+ 'beaver-widgets',
71
  )
72
  );
73
  }// End if().
core/assets/css/orbit-fox-admin.css CHANGED
@@ -8,7 +8,7 @@
8
  * Extends Spectre.css Library
9
  */
10
  /*
11
- Version: 2.2.5
12
  */
13
 
14
  /* Document
8
  * Extends Spectre.css Library
9
  */
10
  /*
11
+ Version: 2.2.6
12
  */
13
 
14
  /* Document
core/includes/class-orbit-fox.php CHANGED
@@ -69,7 +69,7 @@ class Orbit_Fox {
69
 
70
  $this->plugin_name = 'orbit-fox';
71
 
72
- $this->version = '2.2.5';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
69
 
70
  $this->plugin_name = 'orbit-fox';
71
 
72
+ $this->version = '2.2.6';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
obfx_modules/beaver-widgets/custom-fields/number-field/number.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ /* global FLBuilder */
2
+
3
+ ( function ( $ ) {
4
+ $( 'body' ).delegate(
5
+ '.obfx-number-field', 'change', function ( e ) {
6
+ $.proxy( FLBuilder.preview.delayPreview( e ), FLBuilder.preview );
7
+ }
8
+ );
9
+ } )( jQuery );
obfx_modules/beaver-widgets/custom-fields/number-field/number_field.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Beaver builder number custom field
4
+ *
5
+ * @package themeisle-companion
6
+ */
7
+
8
+ /**
9
+ * Render the Number Field to the browser
10
+ */
11
+ function obfx_number_field( $name, $value, $field ) {
12
+ $min = ! empty( $field['min'] ) ? 'min="' . esc_attr( $field['min'] ) . '"' : '';
13
+ $max = ! empty( $field['max'] ) ? 'max="' . esc_attr( $field['max'] ) . '"' : ''; ?>
14
+ <input type="number" value="<?php echo esc_attr( $value ); ?>" name="<?php echo esc_attr( $name ); ?>" class="obfx-number-field" <?php echo $min; ?> <?php echo $max; ?> />
15
+ <?php
16
+ }
17
+
18
+ add_action( 'fl_builder_control_obfx_number', 'obfx_number_field', 1, 3 );
19
+
20
+ /**
21
+ * Enqueue number field stylesheet
22
+ *
23
+ * @return void
24
+ */
25
+ function obfx_enqueue_field() {
26
+ if ( class_exists( 'FLBuilderModel' ) && FLBuilderModel::is_builder_active() ) {
27
+ wp_enqueue_script( 'obfx-number-js', BEAVER_WIDGETS_URL . 'custom-fields/number-field/number.js', array(), THEMEISLE_COMPANION_VERSION, true );
28
+ }
29
+ }
30
+ add_action( 'wp_enqueue_scripts', 'obfx_enqueue_field' );
obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle.css ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .fl-lightbox .btn-switch {
2
+ font-size: 0.5em;
3
+ position: relative;
4
+ display: inline-block;
5
+ -webkit-user-select: none;
6
+ -moz-user-select: none;
7
+ -ms-user-select: none;
8
+ user-select: none;
9
+ }
10
+ .fl-lightbox .btn-switch__radio {
11
+ display: none;
12
+ }
13
+ .fl-lightbox .btn-switch__label {
14
+ display: inline-block;
15
+ vertical-align: top;
16
+ font-size: 10px;
17
+ font-weight: 700;
18
+ line-height: 30px;
19
+ margin: 0;
20
+ color: #666;
21
+ cursor: pointer;
22
+ transition: color .2s ease-in-out;
23
+ }
24
+
25
+ .fl-lightbox .btn-switch__txt {
26
+ position: relative;
27
+ z-index: 2;
28
+ display: inline-block;
29
+ min-width: 1.5em;
30
+ opacity: 1;
31
+ pointer-events: none;
32
+ transition: opacity .2s ease-in-out;
33
+ color: inherit;
34
+ }
35
+ .fl-lightbox .btn-switch__radio_no:checked ~ .btn-switch__label_yes .btn-switch__txt,
36
+ .fl-lightbox .btn-switch__radio_yes:checked ~ .btn-switch__label_no .btn-switch__txt {
37
+ opacity: 0;
38
+ }
39
+ .fl-lightbox .btn-switch__label:before {
40
+ content: "";
41
+ position: absolute;
42
+ z-index: -1;
43
+ top: 0;
44
+ right: 0;
45
+ bottom: 0;
46
+ left: 0;
47
+ background: #f0f0f0;
48
+ border-radius: 1.5em;
49
+ box-shadow: inset 0 .0715em .3572em rgba(43,43,43,.05);
50
+ transition: background .2s ease-in-out;
51
+ }
52
+ .fl-lightbox .btn-switch__radio_yes:checked ~ .btn-switch__label:before {
53
+ background: #6ad500;
54
+ }
55
+ .fl-lightbox .btn-switch__label_no:after {
56
+ content: "";
57
+ position: absolute;
58
+ z-index: 2;
59
+ top: .5em;
60
+ bottom: .5em;
61
+ left: .5em;
62
+ width: 2em;
63
+ background: #fff;
64
+ border-radius: 1em;
65
+ pointer-events: none;
66
+ box-shadow: 0 .1429em .2143em rgba(43,43,43,.2), 0 .3572em .3572em rgba(43,43,43,.1);
67
+ transition: left .2s ease-in-out, background .2s ease-in-out;
68
+ }
69
+ .fl-lightbox .btn-switch__radio_yes:checked ~ .btn-switch__label_no:after {
70
+ left: calc(100% - 2.5em);
71
+ background: #fff;
72
+ }
73
+ .fl-lightbox .btn-switch__radio_no:checked ~ .btn-switch__label_yes:before,
74
+ .fl-lightbox .btn-switch__radio_yes:checked ~ .btn-switch__label_no:before {
75
+ z-index: 1;
76
+ }
77
+ .fl-lightbox .btn-switch__radio_yes:checked ~ .btn-switch__label_yes {
78
+ color: #fff;
79
+ padding: 0 10px;
80
+ }
81
+
82
+ .fl-lightbox .btn-switch__radio_no:checked ~ .btn-switch__label_no {
83
+ padding: 0 10px;
84
+ }
obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ /* global FLBuilder */
2
+
3
+ ( function ( $ ) {
4
+ $( 'body' ).delegate(
5
+ '.btn-switch__label', 'click', function ( e ) {
6
+ $.proxy( FLBuilder.preview.delayPreview( e ), FLBuilder.preview );
7
+ }
8
+ );
9
+ } )( jQuery );
obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle_field.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Beaver builder toggle custom field
4
+ *
5
+ * @package themeisle-companion
6
+ */
7
+
8
+ /**
9
+ * Render the Toggle Field to the browser
10
+ */
11
+ function obfx_toggle_field( $name, $value, $field ) {
12
+ ?>
13
+ <p class="btn-switch">
14
+ <input type="radio"
15
+ <?php
16
+ if ( $value === 'yes' ) {
17
+ echo 'checked';}
18
+ ?>
19
+ value="yes" id="<?php echo esc_attr( $name ); ?>_yes" name="<?php echo esc_attr( $name ); ?>" class="btn-switch__radio btn-switch__radio_yes" />
20
+ <input type="radio"
21
+ <?php
22
+ if ( $value !== 'yes' ) {
23
+ echo 'checked';}
24
+ ?>
25
+ value="no" id="<?php echo esc_attr( $name ); ?>_no" name="<?php echo esc_attr( $name ); ?>" class="btn-switch__radio btn-switch__radio_no" />
26
+ <label for="<?php echo esc_attr( $name ); ?>_yes" class="btn-switch__label btn-switch__label_yes"><span class="btn-switch__txt"><?php echo esc_html__( 'Yes', 'themeisle-companion' ); ?></span></label>
27
+ <label for="<?php echo esc_attr( $name ); ?>_no" class="btn-switch__label btn-switch__label_no"><span class="btn-switch__txt"><?php echo esc_html__( 'No', 'themeisle-companion' ); ?></span></label>
28
+ </p>
29
+ <?php
30
+ }
31
+ add_action( 'fl_builder_control_obfx_toggle', 'obfx_toggle_field', 1, 3 );
32
+
33
+ /**
34
+ * Enqueue toggle field stylesheet
35
+ *
36
+ * @return void
37
+ */
38
+ function obfx_enqueue_toggle_field() {
39
+ if ( class_exists( 'FLBuilderModel' ) && FLBuilderModel::is_builder_active() ) {
40
+ wp_enqueue_style( 'obfx-toggle-css', BEAVER_WIDGETS_URL . 'custom-fields/toggle-field/toggle.css', null, THEMEISLE_COMPANION_VERSION, 'all' );
41
+ wp_enqueue_script( 'obfx-toggle-js', BEAVER_WIDGETS_URL . 'custom-fields/toggle-field/toggle.js', array(), THEMEISLE_COMPANION_VERSION, true );
42
+ }
43
+ }
44
+ add_action( 'wp_enqueue_scripts', 'obfx_enqueue_toggle_field' );
obfx_modules/beaver-widgets/inc/common-functions.php ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file contains common functions that can be used in every Beaver module
4
+ *
5
+ * @package themeisle-companion
6
+ */
7
+
8
+ // Get the module directory.
9
+ $module_directory = $this->get_dir();
10
+
11
+ // Require custom field.
12
+ require_once( $module_directory . '/custom-fields/number-field/number_field.php' );
13
+
14
+ /**
15
+ * Function to return padding controls.
16
+ *
17
+ * @param array $settings Fields settings.
18
+ *
19
+ * @return array
20
+ */
21
+ function themeisle_four_fields_control( $settings ) {
22
+ $default = $settings['default'];
23
+ $prefix = $settings['field_name_prefix'];
24
+ $type = ! empty( $settings['type'] ) ? $settings['type'] : 'padding';
25
+ return array(
26
+ 'title' => $type === 'margin' ? esc_html__( 'Margins', 'themeisle-companion' ) : esc_html__( 'Padding', 'themeisle-companion' ),
27
+ 'fields' => array(
28
+ $prefix . 'top' => array(
29
+ 'type' => 'obfx_number',
30
+ 'label' => esc_html__( 'Top', 'themeisle-companion' ),
31
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
32
+ 'default' => $default['top'],
33
+ ),
34
+ $prefix . 'bottom' => array(
35
+ 'type' => 'obfx_number',
36
+ 'label' => esc_html__( 'Bottom', 'themeisle-companion' ),
37
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
38
+ 'default' => $default['bottom'],
39
+ ),
40
+ $prefix . 'left' => array(
41
+ 'type' => 'obfx_number',
42
+ 'label' => esc_html__( 'Left', 'themeisle-companion' ),
43
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
44
+ 'default' => $default['left'],
45
+ ),
46
+ $prefix . 'right' => array(
47
+ 'type' => 'obfx_number',
48
+ 'label' => esc_html__( 'Right', 'themeisle-companion' ),
49
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
50
+ 'default' => $default['right'],
51
+ ),
52
+ ),
53
+ );
54
+ }
55
+
56
+ /**
57
+ * Typography controls.
58
+ *
59
+ * @param array $settings Typography settings.
60
+ *
61
+ * @return array
62
+ */
63
+ function themeisle_typography_settings( $settings ) {
64
+ $title = ! empty( $settings['title'] ) ? $settings['title'] : esc_html__( 'Typography', 'themeisle-companion' );
65
+ $prefix = $settings['prefix'];
66
+ $font_default = ! empty( $settings['font_size_default'] ) ? $settings['font_size_default'] : '';
67
+ return array(
68
+ 'title' => $title,
69
+ 'fields' => array(
70
+ $prefix . 'font_size' => array(
71
+ 'type' => 'obfx_number',
72
+ 'label' => esc_html__( 'Font size', 'themeisle-companion' ),
73
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
74
+ 'default' => $font_default,
75
+ ),
76
+ $prefix . 'font_family' => array(
77
+ 'type' => 'font',
78
+ 'label' => esc_html__( 'Font family', 'themeisle-companion' ),
79
+ 'default' => array(
80
+ 'family' => 'Roboto',
81
+ 'weight' => 300,
82
+ ),
83
+ ),
84
+ $prefix . 'transform' => array(
85
+ 'type' => 'select',
86
+ 'label' => esc_html__( 'Transform', 'themeisle-companion' ),
87
+ 'default' => 'none',
88
+ 'options' => array(
89
+ 'none' => esc_html__( 'None', 'themeisle-companion' ),
90
+ 'capitalize' => esc_html__( 'Capitalize', 'themeisle-companion' ),
91
+ 'uppercase' => esc_html__( 'Uppercase', 'themeisle-companion' ),
92
+ 'lowercase' => esc_html__( 'Lowercase', 'themeisle-companion' ),
93
+ ),
94
+ ),
95
+ $prefix . 'font_style' => array(
96
+ 'type' => 'select',
97
+ 'label' => esc_html__( 'Font style', 'themeisle-companion' ),
98
+ 'default' => 'normal',
99
+ 'options' => array(
100
+ 'normal' => esc_html__( 'Normal', 'themeisle-companion' ),
101
+ 'italic' => esc_html__( 'Italic', 'themeisle-companion' ),
102
+ 'oblique' => esc_html__( 'Oblique', 'themeisle-companion' ),
103
+ ),
104
+ ),
105
+ $prefix . 'line_height' => array(
106
+ 'type' => 'obfx_number',
107
+ 'label' => esc_html__( 'Line height', 'themeisle-companion' ),
108
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
109
+ ),
110
+ $prefix . 'letter_spacing' => array(
111
+ 'type' => 'obfx_number',
112
+ 'label' => esc_html__( 'Letter spacing', 'themeisle-companion' ),
113
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
114
+ ),
115
+ ),
116
+ );
117
+ }
obfx_modules/beaver-widgets/init.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Beaver Builder modules Orbit Fox Module.
4
+ *
5
+ * @link https://themeisle.com
6
+ * @since 2.2.5
7
+ */
8
+
9
+ define( 'BEAVER_WIDGETS_PATH', plugin_dir_path( __FILE__ ) );
10
+ define( 'BEAVER_WIDGETS_URL', plugins_url( '/', __FILE__ ) );
11
+
12
+ /**
13
+ * Class Beaver_Widgets_OBFX_Module
14
+ */
15
+ class Beaver_Widgets_OBFX_Module extends Orbit_Fox_Module_Abstract {
16
+
17
+ /**
18
+ * Beaver_Widgets_OBFX_Module constructor.
19
+ *
20
+ * @since 2.2.5
21
+ * @access public
22
+ */
23
+ public function __construct() {
24
+ parent::__construct();
25
+ $this->name = __( 'Beaver Builder Widgets', 'themeisle-companion' );
26
+ $this->description = __( 'Custom Beaver Builder Widgets.', 'themeisle-companion' );
27
+ }
28
+
29
+ /**
30
+ * Determine if module should be loaded.
31
+ *
32
+ * @since 2.2.5
33
+ * @access public
34
+ * @return bool
35
+ */
36
+ public function enable_module() {
37
+ return true;
38
+ }
39
+
40
+ /**
41
+ * The loading logic for the module.
42
+ *
43
+ * @since 2.2.5
44
+ * @access public
45
+ */
46
+ public function load() {
47
+ }
48
+
49
+ /**
50
+ * Method to define hooks needed.
51
+ *
52
+ * @since 2.2.5
53
+ * @access public
54
+ */
55
+ public function hooks() {
56
+ $this->loader->add_action( 'init', $this, 'load_widgets_modules' );
57
+ }
58
+
59
+ /**
60
+ * Method that returns an array of scripts and styles to be loaded
61
+ * for the front end part.
62
+ *
63
+ * @since 2.2.5
64
+ * @access public
65
+ * @return array
66
+ */
67
+ public function public_enqueue() {
68
+ return array();
69
+ }
70
+
71
+ /**
72
+ * Method that returns an array of scripts and styles to be loaded
73
+ * for the admin part.
74
+ *
75
+ * @since 2.2.5
76
+ * @access public
77
+ * @return array
78
+ */
79
+ public function admin_enqueue() {
80
+ return array();
81
+ }
82
+
83
+ /**
84
+ * Method to define the options fields for the module
85
+ *
86
+ * @since 2.2.5
87
+ * @access public
88
+ * @return array
89
+ */
90
+ public function options() {
91
+ return array();
92
+ }
93
+
94
+ /**
95
+ * Require Beaver Builder modules
96
+ *
97
+ * @since 2.2.5
98
+ * @access public
99
+ */
100
+ public function load_widgets_modules(){
101
+ if ( class_exists( 'FLBuilder' ) ) {
102
+ require_once 'modules/pricing-table/pricing-table.php';
103
+ require_once 'modules/services/services.php';
104
+ require_once 'modules/post-grid/post-grid.php';
105
+ }
106
+ }
107
+ }
obfx_modules/beaver-widgets/modules/post-grid/css/frontend.css ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .obfx-card{
2
+ display: inline-block;
3
+ position: relative;
4
+ width: 100%;
5
+ margin-bottom: 30px;
6
+ border-radius: 6px;
7
+ color: rgba(0, 0, 0, 0.87);
8
+ background: #fff;
9
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
10
+ }
11
+ .obfx-post-grid-thumbnail.obfx-card{
12
+ width: auto;
13
+ -webkit-box-shadow: 4px 8px 59px -15px rgba(0,0,0,1);
14
+ -moz-box-shadow: 4px 8px 59px -15px rgba(0,0,0,1);
15
+ box-shadow: 4px 8px 59px -15px rgba(0,0,0,1);
16
+ margin: 10px;
17
+ }
18
+
19
+ .obfx-post-grid-wrapper{
20
+ padding: 0 10px;
21
+ display: inline-block;
22
+ vertical-align: top;
23
+ }
24
+
25
+ .obfx-post-grid-meta i {
26
+ padding-right: 5px;
27
+ }
28
+
29
+ .obfx-post-grid-meta > div{
30
+ display: inline;
31
+ word-wrap: initial;
32
+ }
33
+
34
+ .obfx-post-grid-meta > div:not(:last-child),
35
+ .obfx-category a:not(:last-child),
36
+ .obfx-tags a:not(:last-child){
37
+ padding-right: 5px;
38
+ }
39
+ .obfx-post-grid-meta > div:not(:last-child):after,
40
+ .obfx-category a:not(:last-child):after,
41
+ .obfx-tags a:not(:last-child):after{
42
+ content: ',';
43
+ }
44
+ .obfx-category a:not(:last-child):after{
45
+ content: ',';
46
+ }
47
+
48
+ .obfx-post-grid-pagination li{
49
+ vertical-align: bottom;
50
+ padding: 5px;
51
+
52
+ }
53
+
54
+ .obfx-post-grid-pagination li a{
55
+ padding: 0;
56
+ background: none;
57
+ }
58
+ .page-numbers{
59
+ list-style: none;
60
+ padding: 0;
61
+ }
62
+ .page-numbers li{
63
+ display: inline-block;
64
+ }
obfx_modules/beaver-widgets/modules/post-grid/includes/frontend.css.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $post_width = $settings->display_type === 'list' ? 100 : ( ! empty( $settings->columns ) ? 100 / (int) $settings->columns : 33.3333 );
4
+ $card_vertical_align = ! empty( $settings->card_vertical_align ) ? $settings->card_vertical_align : 'top';
5
+ echo '.fl-node-' . $id . ' .obfx-post-grid-wrapper{
6
+ width: ' . $post_width . '%;
7
+ vertical-align: ' . $card_vertical_align . ';
8
+ }';
9
+
10
+
11
+ $post_bg_color = ! empty( $settings->post_bg_color ) ? $settings->post_bg_color : '';
12
+ if ( ! empty( $post_bg_color ) ) {
13
+ $post_bg_color = strpos( $post_bg_color, 'rgba' ) !== false ? 'background-color:' . $post_bg_color : 'background-color:#' . $post_bg_color;
14
+ echo '.fl-node-' . $id . ' .obfx-post-grid{
15
+ ' . $post_bg_color . ';
16
+ }';
17
+ }
18
+
19
+ $post_link_color = ! empty( $settings->post_link_color ) ? $settings->post_link_color : '';
20
+ if ( ! empty( $post_link_color ) ) {
21
+ $post_link_color = strpos( $post_link_color, 'rgba' ) !== false ? 'color:' . $post_link_color : 'color:#' . $post_link_color;
22
+ echo '.fl-node-' . $id . ' .obfx-post-grid a, .fl-node-' . $id . ' .obfx-post-grid-pagination a {
23
+ ' . $post_link_color . ';
24
+ }';
25
+ }
26
+
27
+ $post_text_color = ! empty( $settings->post_text_color ) ? $settings->post_text_color : '';
28
+ if ( ! empty( $post_text_color ) ) {
29
+ $post_text_color = strpos( $post_text_color, 'rgba' ) !== false ? 'color:' . $post_text_color : 'color:#' . $post_text_color;
30
+ echo '.fl-node-' . $id . ' .obfx-post-grid, .fl-node-' . $id . ' .obfx-post-grid-pagination{
31
+ ' . $post_text_color . ';
32
+ }';
33
+ }
34
+
35
+
36
+ $card_margin_top = ! empty( $settings->card_margin_top ) ? $settings->card_margin_top : '0';
37
+ $card_margin_bottom = ! empty( $settings->card_margin_bottom ) ? $settings->card_margin_bottom : '0';
38
+ echo '.fl-node-' . $id . ' .obfx-post-grid{
39
+ margin-top: ' . $card_margin_top . 'px;
40
+ margin-bottom: ' . $card_margin_bottom . 'px;
41
+ }
42
+ ';
43
+
44
+ $thumbnail_margin_top = ! empty( $settings->thumbnail_margin_top ) ? $settings->thumbnail_margin_top : '0';
45
+ $thumbnail_margin_bottom = ! empty( $settings->thumbnail_margin_bottom ) ? $settings->thumbnail_margin_bottom : '0';
46
+ $thumbnail_margin_left = ! empty( $settings->thumbnail_margin_left ) ? $settings->thumbnail_margin_left : '0';
47
+ $thumbnail_margin_right = ! empty( $settings->thumbnail_margin_right ) ? $settings->thumbnail_margin_right : '0';
48
+ $image_alignment = ! empty( $settings->image_alignment ) ? $settings->image_alignment : 'center';
49
+
50
+ echo '.fl-node-' . $id . ' .obfx-post-grid-thumbnail{
51
+ margin-top: ' . $thumbnail_margin_top . 'px;
52
+ margin-bottom: ' . $thumbnail_margin_bottom . 'px;
53
+ margin-left: ' . $thumbnail_margin_left . 'px;
54
+ margin-right: ' . $thumbnail_margin_right . 'px;';
55
+
56
+ switch ( $image_alignment ) {
57
+ case 'center':
58
+ echo 'text-align:center; width:100%;';
59
+ break;
60
+ case 'left':
61
+ echo 'float:left';
62
+ break;
63
+ case 'right':
64
+ echo 'float:right';
65
+ break;
66
+ }
67
+ echo '}';
68
+
69
+
70
+ $title_padding_top = ! empty( $settings->title_padding_top ) ? $settings->title_padding_top : '0';
71
+ $title_padding_bottom = ! empty( $settings->title_padding_bottom ) ? $settings->title_padding_bottom : '0';
72
+ $title_padding_left = ! empty( $settings->title_padding_left ) ? $settings->title_padding_left : '0';
73
+ $title_padding_right = ! empty( $settings->title_padding_right ) ? $settings->title_padding_right : '0';
74
+ $title_alignment = ! empty( $settings->title_alignment ) ? $settings->title_alignment : 'center';
75
+ $title_font_size = ! empty( $settings->title_font_size ) ? $settings->title_font_size : '0';
76
+ $title_font_family = ! empty( $settings->title_font_family['family'] ) ? $settings->title_font_family['family'] : 'Roboto';
77
+ $title_font_weight = ! empty( $settings->title_font_family['weight'] ) ? $settings->title_font_family['weight'] : '400';
78
+ $title_transform = ! empty( $settings->title_transform ) ? $settings->title_transform : 'none';
79
+ $title_font_style = ! empty( $settings->title_font_style ) ? $settings->title_font_style : 'none';
80
+ $title_line_height = ! empty( $settings->title_line_height ) ? $settings->title_line_height : 'inherit';
81
+ $title_letter_spacing = ! empty( $settings->title_letter_spacing ) ? $settings->title_letter_spacing : '0';
82
+ echo '.fl-node-' . $id . ' .obfx-post-grid-title{
83
+ padding-top: ' . $title_padding_top . 'px;
84
+ padding-bottom: ' . $title_padding_bottom . 'px;
85
+ padding-left: ' . $title_padding_left . 'px;
86
+ padding-right: ' . $title_padding_right . 'px;
87
+ text-align: ' . $title_alignment . ';
88
+ font-size:' . $title_font_size . 'px;
89
+ font-family:' . $title_font_family . ';
90
+ font-weight:' . $title_font_weight . ';
91
+ text-transform:' . $title_transform . ';
92
+ font-style:' . $title_font_style . ';
93
+ line-height:' . $title_line_height . 'px;
94
+ letter-spacing:' . $title_letter_spacing . 'px;
95
+ } ';
96
+
97
+ $meta_padding_top = ! empty( $settings->meta_padding_top ) ? $settings->meta_padding_top : '0';
98
+ $meta_padding_bottom = ! empty( $settings->meta_padding_bottom ) ? $settings->meta_padding_bottom : '0';
99
+ $meta_padding_left = ! empty( $settings->meta_padding_left ) ? $settings->meta_padding_left : '0';
100
+ $meta_padding_right = ! empty( $settings->meta_padding_right ) ? $settings->meta_padding_right : '0';
101
+ $meta_alignment = ! empty( $settings->meta_alignment ) ? $settings->meta_alignment : 'center';
102
+ $meta_font_size = ! empty( $settings->meta_font_size ) ? $settings->meta_font_size : '0';
103
+ $meta_font_family = ! empty( $settings->meta_font_family['family'] ) ? $settings->meta_font_family['family'] : 'Roboto';
104
+ $meta_font_weight = ! empty( $settings->meta_font_family['weight'] ) ? $settings->meta_font_family['weight'] : '400';
105
+ $meta_transform = ! empty( $settings->meta_transform ) ? $settings->meta_transform : 'none';
106
+ $meta_font_style = ! empty( $settings->meta_font_style ) ? $settings->meta_font_style : 'none';
107
+ $meta_line_height = ! empty( $settings->meta_line_height ) ? $settings->meta_line_height : 'inherit';
108
+ $meta_letter_spacing = ! empty( $settings->meta_letter_spacing ) ? $settings->meta_letter_spacing : '0';
109
+ echo '.fl-node-' . $id . ' .obfx-post-grid-meta{
110
+ padding-top: ' . $meta_padding_top . 'px;
111
+ padding-bottom: ' . $meta_padding_bottom . 'px;
112
+ padding-left: ' . $meta_padding_left . 'px;
113
+ padding-right: ' . $meta_padding_right . 'px;
114
+ font-size:' . $meta_font_size . 'px;
115
+ font-family:' . $meta_font_family . ';
116
+ font-weight:' . $meta_font_weight . ';
117
+ text-transform:' . $meta_transform . ';
118
+ font-style:' . $meta_font_style . ';
119
+ line-height:' . $meta_line_height . 'px;
120
+ letter-spacing:' . $meta_letter_spacing . 'px;
121
+ text-align: ' . $meta_alignment . ';
122
+ } ';
123
+
124
+
125
+ $content_padding_top = ! empty( $settings->content_padding_top ) ? $settings->content_padding_top : '0';
126
+ $content_padding_bottom = ! empty( $settings->content_padding_bottom ) ? $settings->content_padding_bottom : '0';
127
+ $content_padding_left = ! empty( $settings->content_padding_left ) ? $settings->content_padding_left : '0';
128
+ $content_padding_right = ! empty( $settings->content_padding_right ) ? $settings->content_padding_right : '0';
129
+ $content_alignment = ! empty( $settings->content_alignment ) ? $settings->content_alignment : 'center';
130
+ $content_font_size = ! empty( $settings->content_font_size ) ? $settings->content_font_size : '0';
131
+ $content_font_family = ! empty( $settings->content_font_family['family'] ) ? $settings->content_font_family['family'] : 'Roboto';
132
+ $content_font_weight = ! empty( $settings->content_font_family['weight'] ) ? $settings->content_font_family['weight'] : '400';
133
+ $content_transform = ! empty( $settings->content_transform ) ? $settings->content_transform : 'none';
134
+ $content_font_style = ! empty( $settings->content_font_style ) ? $settings->content_font_style : 'none';
135
+ $content_line_height = ! empty( $settings->content_line_height ) ? $settings->content_line_height : 'inherit';
136
+ $content_letter_spacing = ! empty( $settings->content_letter_spacing ) ? $settings->content_letter_spacing : '0';
137
+
138
+ echo '.fl-node-' . $id . ' .obfx-post-content{
139
+ padding-top: ' . $content_padding_top . 'px;
140
+ padding-bottom: ' . $content_padding_bottom . 'px;
141
+ padding-left: ' . $content_padding_left . 'px;
142
+ padding-right: ' . $content_padding_right . 'px;
143
+ text-align: ' . $content_alignment . ';
144
+ font-size:' . $content_font_size . 'px;
145
+ font-family:' . $content_font_family . ';
146
+ font-weight:' . $content_font_weight . ';
147
+ text-transform:' . $content_transform . ';
148
+ font-style:' . $content_font_style . ';
149
+ line-height:' . $content_line_height . 'px;
150
+ letter-spacing:' . $content_letter_spacing . 'px;
151
+ } ';
152
+
153
+ $pagination_font_size = ! empty( $settings->pagination_font_size ) ? $settings->pagination_font_size : '0';
154
+ $pagination_font_family = ! empty( $settings->pagination_font_family['family'] ) ? $settings->pagination_font_family['family'] : 'Roboto';
155
+ $pagination_font_weight = ! empty( $settings->pagination_font_family['weight'] ) ? $settings->pagination_font_family['weight'] : '400';
156
+ $pagination_transform = ! empty( $settings->pagination_transform ) ? $settings->pagination_transform : 'none';
157
+ $pagination_font_style = ! empty( $settings->pagination_font_style ) ? $settings->pagination_font_style : 'none';
158
+ $pagination_line_height = ! empty( $settings->pagination_line_height ) ? $settings->pagination_line_height : 'inherit';
159
+ $pagination_letter_spacing = ! empty( $settings->pagination_letter_spacing ) ? $settings->pagination_letter_spacing : '0';
160
+ $pagination_alignment = ! empty( $settings->pagination_alignment ) ? $settings->pagination_alignment : 'center';
161
+ echo '.fl-node-' . $id . ' .obfx-post-grid-pagination li a, .fl-node-' . $id . ' .obfx-post-grid-pagination li {
162
+ font-size:' . $pagination_font_size . 'px;
163
+ font-family:' . $pagination_font_family . ';
164
+ font-weight:' . $pagination_font_weight . ';
165
+ text-transform:' . $pagination_transform . ';
166
+ font-style:' . $pagination_font_style . ';
167
+ line-height:' . $pagination_line_height . 'px;
168
+ letter-spacing:' . $pagination_letter_spacing . 'px;
169
+ }';
170
+
171
+ echo '.fl-node-' . $id . ' .obfx-post-grid-pagination{
172
+ text-align: ' . $pagination_alignment . ';
173
+ }';
obfx_modules/beaver-widgets/modules/post-grid/includes/frontend.php ADDED
@@ -0,0 +1,283 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file is used to render each pricing module instance.
4
+ * You have access to two variables in this file:
5
+ *
6
+ * $module An instance of your module class.
7
+ * $settings The module's settings.
8
+ */
9
+
10
+
11
+ if ( ! function_exists( 'obfx_show_post_grid_thumbnail' ) ) {
12
+ /**
13
+ * Display post grid image.
14
+ *
15
+ * @param array $settings Post grid settings.
16
+ */
17
+ function obfx_show_post_grid_thumbnail( $settings ) {
18
+ if ( empty( $settings ) ) {
19
+ return;
20
+ }
21
+
22
+ $show_post_thumbnail = ! empty( $settings->show_post_thumbnail ) ? $settings->show_post_thumbnail : '';
23
+ if ( $show_post_thumbnail === 'no' ) {
24
+ return;
25
+ }
26
+
27
+ $size = ! empty( $settings->image_size ) ? $settings->image_size : 'post-thumbnail';
28
+ $pid = get_the_ID();
29
+ $img = get_the_post_thumbnail_url( $pid, $size );
30
+ if ( ! empty( $img ) ) {
31
+ $thumbnail_shadow = ! empty( $settings->thumbnail_shadow ) && $settings->thumbnail_shadow === 'yes' ? 'obfx-card' : '';
32
+ echo '<div class="obfx-post-grid-thumbnail ' . esc_attr( $thumbnail_shadow ) . '">';
33
+ if ( ! empty( $settings->show_thumbnail_link ) && $settings->show_thumbnail_link === 'yes' ) {
34
+ echo '<a href="' . get_permalink() . '">';
35
+ }
36
+ echo '<img src="' . esc_url( $img ) . '"/></div>';
37
+ if ( ! empty( $settings->show_thumbnail_link ) && $settings->show_thumbnail_link === 'yes' ) {
38
+ echo '</a>';
39
+ }
40
+ }
41
+ }
42
+ }
43
+
44
+ if ( ! function_exists( 'obfx_show_post_grid_title' ) ) {
45
+ /**
46
+ * Display post grid title.
47
+ *
48
+ * @param array $settings Post grid settings.
49
+ */
50
+ function obfx_show_post_grid_title( $settings ) {
51
+ if ( empty( $settings ) ) {
52
+ return;
53
+ }
54
+
55
+ $show_post_title = ! empty( $settings->show_post_title ) ? $settings->show_post_title : '';
56
+ if ( $show_post_title === 'no' ) {
57
+ return;
58
+ }
59
+
60
+ if ( ! empty( $settings->show_title_link ) && $settings->show_title_link === 'yes' ) {
61
+ echo '<a href="' . get_permalink() . '">';
62
+ }
63
+ $tag = ! empty( $settings->title_tag ) ? $settings->title_tag : 'h4';
64
+ the_title( '<' . $tag . ' class="obfx-post-grid-title">', '</' . $tag . '>' );
65
+ if ( ! empty( $settings->show_title_link ) && $settings->show_title_link === 'yes' ) {
66
+ echo '</a>';
67
+ }
68
+ }
69
+ }
70
+
71
+ if ( ! function_exists( 'obfx_show_post_grid_meta' ) ) {
72
+ /**
73
+ * Display post grid meta.
74
+ *
75
+ * @param array $settings Post grid settings.
76
+ */
77
+ function obfx_show_post_grid_meta( $settings ) {
78
+ if ( empty( $settings ) ) {
79
+ return;
80
+ }
81
+
82
+ $show_post_meta = ! empty( $settings->show_post_meta ) ? $settings->show_post_meta : '';
83
+ if ( $show_post_meta === 'no' ) {
84
+ return;
85
+ }
86
+
87
+ $pid = get_the_ID();
88
+ $meta_data = ! empty( $settings->meta_data ) ? ( is_array( $settings->meta_data ) ? $settings->meta_data : array( $settings->meta_data ) ) : array();
89
+ $show_icons = ! empty( $settings->show_icons ) ? $settings->show_icons : '';
90
+ echo '<div class="obfx-post-grid-meta">';
91
+ if ( in_array( 'author', $meta_data ) ) {
92
+ $author = get_the_author( $pid );
93
+ if ( ! empty( $author ) ) {
94
+ echo '<div class="obfx-author">';
95
+ if ( $show_icons === 'yes' ) {
96
+ echo '<i class="fa fa-user"></i>';
97
+ }
98
+ printf(
99
+ /* translators: %1$s is Author name wrapped, %2$s is Time */
100
+ esc_html__( 'By %1$s', 'themeisle-companion' ),
101
+ sprintf(
102
+ /* translators: %1$s is Author name, %2$s is author link */
103
+ '<a href="%2$s" title="%1$s"><b>%1$s</b></a>',
104
+ esc_html( get_the_author() ),
105
+ esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) )
106
+ )
107
+ );
108
+ echo '</div>';
109
+ }
110
+ }
111
+
112
+ if ( in_array( 'date', $meta_data ) ) {
113
+ echo '<div class="obfx-date">';
114
+ if ( $show_icons === 'yes' ) {
115
+ echo '<i class="fa fa-calendar"></i>';
116
+ }
117
+ echo get_the_date();
118
+ echo '</div>';
119
+ }
120
+
121
+ if ( in_array( 'category', $meta_data ) ) {
122
+ $cat = get_the_category();
123
+ if ( ! empty( $cat ) ) {
124
+ echo '<div class="obfx-category">';
125
+ if ( $show_icons === 'yes' ) {
126
+ echo '<i class="fa fa-list"></i>';
127
+ }
128
+ foreach ( $cat as $category ) {
129
+ $cat_id = $category->term_id;
130
+ $link = get_category_link( $cat_id );
131
+ $name = $category->name;
132
+ if ( ! empty( $name ) ) {
133
+ if ( ! empty( $link ) ) {
134
+ echo '<a href="' . esc_url( $link ) . '">';
135
+ }
136
+ echo $name;
137
+ if ( ! empty( $link ) ) {
138
+ echo '</a>';
139
+ }
140
+ }
141
+ }
142
+ echo '</div>';
143
+ }
144
+ }
145
+
146
+ if ( in_array( 'tags', $meta_data ) ) {
147
+ $tags = wp_get_post_tags( $pid );
148
+ if ( ! empty( $tags ) ) {
149
+ echo '<div class="obfx-tags">';
150
+ if ( $show_icons === 'yes' ) {
151
+ echo '<i class="fa fa-tag"></i>';
152
+ }
153
+ foreach ( $tags as $tag ) {
154
+ $tag_id = $tag->term_id;
155
+ $link = get_tag_link( $tag_id );
156
+ $name = $tag->name;
157
+ if ( ! empty( $name ) ) {
158
+ if ( ! empty( $link ) ) {
159
+ echo '<a href="' . esc_url( $link ) . '">';
160
+ }
161
+ echo $name;
162
+ if ( ! empty( $link ) ) {
163
+ echo '</a>';
164
+ }
165
+ }
166
+ }
167
+ echo '</div>';
168
+ }
169
+ }
170
+
171
+ if ( in_array( 'comments', $meta_data ) ) {
172
+ echo '<div class=obfx-comments">';
173
+ if ( $show_icons === 'yes' ) {
174
+ echo '<i class="fa fa-comment"></i>';
175
+ }
176
+ $comments_number = get_comments_number();
177
+ if ( 0 == ! $comments_number ) {
178
+ if ( 1 === $comments_number ) {
179
+ /* translators: %s: post title */
180
+ _x( 'One comment', 'comments title', 'themeisle-companion' );
181
+ } else {
182
+ printf(
183
+ /* translators: 1: number of comments, 2: post title */
184
+ _nx(
185
+ '%1$s Comment',
186
+ '%1$s Comments',
187
+ $comments_number,
188
+ 'comments title',
189
+ 'themeisle-companion'
190
+ ),
191
+ number_format_i18n( $comments_number )
192
+ );
193
+ }
194
+ }
195
+ echo '</div>';
196
+ }
197
+ echo '</div>';
198
+ }
199
+ }
200
+
201
+ if ( ! function_exists( 'obfx_show_post_grid_content' ) ) {
202
+ /**
203
+ * Display post grid content.
204
+ *
205
+ * @param array $settings Post grid settings.
206
+ */
207
+ function obfx_show_post_grid_content( $settings ) {
208
+ if ( empty( $settings ) ) {
209
+ return;
210
+ }
211
+
212
+ $show_post_content = ! empty( $settings->show_post_content ) ? $settings->show_post_content : '';
213
+ if ( $show_post_content === 'no' ) {
214
+ return;
215
+ }
216
+
217
+ $number_of_words = ! empty( $settings->content_length ) ? $settings->content_length : '';
218
+ echo '<div class="obfx-post-content">';
219
+ if ( ! empty( $number_of_words ) ) {
220
+ $content = obfx_get_limited_content( $number_of_words, $settings );
221
+ echo '<p>' . wp_kses_post( $content ) . '</p>';
222
+ }
223
+ echo '</div>';
224
+ }
225
+ }
226
+
227
+ if ( ! function_exists( 'obfx_get_limited_content' ) ) {
228
+ /**
229
+ * Get content with limited number of words.
230
+ *
231
+ * @param int $limit Words limit.
232
+ *
233
+ * @return string
234
+ */
235
+ function obfx_get_limited_content( $limit, $settings ) {
236
+ $content = explode( ' ', get_the_content(), $limit );
237
+
238
+ $show_read_more = ! empty( $settings->show_read_more ) ? $settings->show_read_more : '';
239
+ $read_more = $show_read_more === 'yes' ? ( ! empty( $settings->read_more_text ) ? '<a class="obfx-post-grid-read-more" href="' . get_the_permalink() . '">' . $settings->read_more_text . '</a>' : '' ) : '';
240
+ if ( count( $content ) >= $limit ) {
241
+ array_pop( $content );
242
+ $content = implode( ' ', $content );
243
+ $content = strip_tags( $content );
244
+ $content = $content . '...' . wp_kses_post( $read_more );
245
+ } else {
246
+ $content = implode( ' ', $content );
247
+ }
248
+
249
+ $content = preg_replace( '/\[.+\]/', '', $content );
250
+ $content = apply_filters( 'the_content', $content );
251
+ $content = str_replace( ']]>', ']]&gt;', $content );
252
+
253
+ return $content;
254
+ }
255
+ }
256
+
257
+
258
+
259
+ $query = FLBuilderLoop::query( $settings );
260
+ if ( $query->have_posts() ) {
261
+
262
+ $class_to_add = ! empty( $settings->card_layout ) && $settings->card_layout === 'yes' ? 'obfx-card' : '';
263
+ while ( $query->have_posts() ) {
264
+ $query->the_post();
265
+
266
+ echo '<div class="obfx-post-grid-wrapper">';
267
+ echo '<div class="obfx-post-grid ' . esc_attr( $class_to_add ) . '">';
268
+ obfx_show_post_grid_thumbnail( $settings );
269
+ obfx_show_post_grid_title( $settings );
270
+ obfx_show_post_grid_meta( $settings );
271
+ obfx_show_post_grid_content( $settings );
272
+ echo '</div>';
273
+ echo '</div>';
274
+ }
275
+
276
+ if ( $settings->show_pagination === 'yes' ) {
277
+ echo '<div class="obfx-post-grid-pagination">';
278
+ FLBuilderLoop::pagination( $query );
279
+ echo '</div>';
280
+ }
281
+ }
282
+
283
+ wp_reset_postdata();
obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php ADDED
@@ -0,0 +1,287 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Default Settings
4
+ $default_posts_per_page = get_option( 'posts_per_page' );
5
+ $defaults = array(
6
+ 'data_source' => 'custom_query',
7
+ 'post_type' => 'post',
8
+ 'order_by' => 'date',
9
+ 'order' => 'DESC',
10
+ 'offset' => 0,
11
+ 'users' => '',
12
+ 'posts_per_page' => $default_posts_per_page,
13
+ );
14
+
15
+ $tab_defaults = isset( $tab['defaults'] ) ? $tab['defaults'] : array();
16
+ $settings = (object) array_merge( $defaults, $tab_defaults, (array) $settings );
17
+ $settings = apply_filters( 'fl_builder_loop_settings', $settings ); // Allow extension of default Values
18
+
19
+ do_action( 'fl_builder_loop_settings_before_form', $settings ); // e.g Add custom FLBuilder::render_settings_field()
20
+
21
+ ?>
22
+ <div class="fl-custom-query fl-loop-data-source" data-source="custom_query">
23
+ <div id="fl-builder-settings-section-general" class="fl-builder-settings-section">
24
+ <h3 class="fl-builder-settings-title"><?php _e( 'Custom Query', 'themeisle-companion' ); ?></h3>
25
+ <table class="fl-form-table">
26
+ <?php
27
+
28
+ // Post type
29
+ FLBuilder::render_settings_field(
30
+ 'post_type', array(
31
+ 'type' => 'post-type',
32
+ 'label' => esc_html__( 'Post Type', 'themeisle-companion' ),
33
+ ), $settings
34
+ );
35
+
36
+ // Order
37
+ FLBuilder::render_settings_field(
38
+ 'order', array(
39
+ 'type' => 'select',
40
+ 'label' => esc_html__( 'Order', 'themeisle-companion' ),
41
+ 'options' => array(
42
+ 'DESC' => esc_html__( 'Descending', 'themeisle-companion' ),
43
+ 'ASC' => esc_html__( 'Ascending', 'themeisle-companion' ),
44
+ ),
45
+ ), $settings
46
+ );
47
+
48
+ // Order by
49
+ FLBuilder::render_settings_field(
50
+ 'order_by', array(
51
+ 'type' => 'select',
52
+ 'label' => esc_html__( 'Order By', 'themeisle-companion' ),
53
+ 'options' => array(
54
+ 'author' => esc_html__( 'Author', 'themeisle-companion' ),
55
+ 'comment_count' => esc_html__( 'Comment Count', 'themeisle-companion' ),
56
+ 'date' => esc_html__( 'Date', 'themeisle-companion' ),
57
+ 'modified' => esc_html__( 'Date Last Modified', 'themeisle-companion' ),
58
+ 'ID' => esc_html__( 'ID', 'themeisle-companion' ),
59
+ 'menu_order' => esc_html__( 'Menu Order', 'themeisle-companion' ),
60
+ 'meta_value' => esc_html__( 'Meta Value (Alphabetical)', 'themeisle-companion' ),
61
+ 'meta_value_num' => esc_html__( 'Meta Value (Numeric)', 'themeisle-companion' ),
62
+ 'rand' => esc_html__( 'Random', 'themeisle-companion' ),
63
+ 'title' => esc_html__( 'Title', 'themeisle-companion' ),
64
+ ),
65
+ 'toggle' => array(
66
+ 'meta_value' => array(
67
+ 'fields' => array( 'order_by_meta_key' ),
68
+ ),
69
+ 'meta_value_num' => array(
70
+ 'fields' => array( 'order_by_meta_key' ),
71
+ ),
72
+ ),
73
+ ), $settings
74
+ );
75
+
76
+ // Meta Key
77
+ FLBuilder::render_settings_field(
78
+ 'order_by_meta_key', array(
79
+ 'type' => 'text',
80
+ 'label' => esc_html__( 'Meta Key', 'themeisle-companion' ),
81
+ ), $settings
82
+ );
83
+
84
+ // Offset
85
+ FLBuilder::render_settings_field(
86
+ 'offset', array(
87
+ 'type' => 'text',
88
+ 'label' => _x( 'Offset', 'How many posts to skip.', 'themeisle-companion' ),
89
+ 'default' => '0',
90
+ 'size' => '4',
91
+ 'help' => esc_html__( 'Skip this many posts that match the specified criteria.', 'themeisle-companion' ),
92
+ ), $settings
93
+ );
94
+
95
+ // Posts per page
96
+ FLBuilder::render_settings_field(
97
+ 'posts_per_page', array(
98
+ 'type' => 'obfx_number',
99
+ 'label' => esc_html__( 'Posts per page', 'themeisle-companion' ),
100
+ 'default' => $default_posts_per_page,
101
+ 'min' => '-1',
102
+ 'help' => esc_html__( '-1 means all posts', 'themeisle-companion' ),
103
+ ), $settings
104
+ );
105
+
106
+ // Columns
107
+ FLBuilder::render_settings_field(
108
+ 'columns', array(
109
+ 'type' => 'obfx_number',
110
+ 'label' => esc_html__( 'Number of columns', 'themeisle-companion' ),
111
+ 'default' => '3',
112
+ 'min' => '1',
113
+ 'max' => '5',
114
+ ), $settings
115
+ );
116
+ ?>
117
+ </table>
118
+ </div>
119
+ <div id="fl-builder-settings-section-filter" class="fl-builder-settings-section">
120
+ <h3 class="fl-builder-settings-title"><?php _e( 'Filter', 'themeisle-companion' ); ?></h3>
121
+ <?php foreach ( FLBuilderLoop::post_types() as $slug => $type ) : ?>
122
+ <table class="fl-form-table fl-custom-query-filter fl-custom-query-<?php echo $slug; ?>-filter"
123
+ <?php
124
+ if ( $slug == $settings->post_type ) {
125
+ echo 'style="display:table;"';}
126
+ ?>
127
+ >
128
+ <?php
129
+
130
+ // Posts
131
+ FLBuilder::render_settings_field(
132
+ 'posts_' . $slug, array(
133
+ 'type' => 'suggest',
134
+ 'action' => 'fl_as_posts',
135
+ 'data' => $slug,
136
+ 'label' => $type->label,
137
+ 'help' => sprintf( esc_html__( 'Enter a list of %1$s.', 'themeisle-companion' ), $type->label ),
138
+ 'matching' => true,
139
+ ), $settings
140
+ );
141
+
142
+ // Taxonomies
143
+ $taxonomies = FLBuilderLoop::taxonomies( $slug );
144
+
145
+ foreach ( $taxonomies as $tax_slug => $tax ) {
146
+
147
+ FLBuilder::render_settings_field(
148
+ 'tax_' . $slug . '_' . $tax_slug, array(
149
+ 'type' => 'suggest',
150
+ 'action' => 'fl_as_terms',
151
+ 'data' => $tax_slug,
152
+ 'label' => $tax->label,
153
+ 'help' => sprintf( esc_html__( 'Enter a list of %1$s.', 'themeisle-companion' ), $tax->label ),
154
+ 'matching' => true,
155
+ ), $settings
156
+ );
157
+ }
158
+
159
+ ?>
160
+ </table>
161
+ <?php endforeach; ?>
162
+ <table class="fl-form-table">
163
+ <?php
164
+
165
+ // Author
166
+ FLBuilder::render_settings_field(
167
+ 'users', array(
168
+ 'type' => 'suggest',
169
+ 'action' => 'fl_as_users',
170
+ 'label' => esc_html__( 'Authors', 'themeisle-companion' ),
171
+ 'help' => esc_html__( 'Enter a list of authors usernames.', 'themeisle-companion' ),
172
+ 'matching' => true,
173
+ ), $settings
174
+ );
175
+
176
+ ?>
177
+ </table>
178
+ </div>
179
+ <div id="fl-builder-settings-section-filter" class="fl-builder-settings-section">
180
+ <h3 class="fl-builder-settings-title"><?php _e( 'Appearance', 'themeisle-companion' ); ?></h3>
181
+ <table class="fl-form-table">
182
+
183
+ <?php
184
+ // Vertical align
185
+ FLBuilder::render_settings_field(
186
+ 'card_vertical_align', array(
187
+ 'type' => 'select',
188
+ 'label' => esc_html__( 'Vertical align', 'themeisle-companion' ),
189
+ 'default' => 'grid',
190
+ 'options' => array(
191
+ 'top' => esc_html__( 'Top', 'themeisle-companion' ),
192
+ 'middle' => esc_html__( 'Middle', 'themeisle-companion' ),
193
+ 'bottom' => esc_html__( 'Bottom', 'themeisle-companion' ),
194
+ ),
195
+ ), $settings
196
+ );
197
+
198
+ // Display type
199
+ FLBuilder::render_settings_field(
200
+ 'display_type', array(
201
+ 'type' => 'select',
202
+ 'label' => esc_html__( 'Display type', 'themeisle-companion' ),
203
+ 'default' => 'grid',
204
+ 'options' => array(
205
+ 'grid' => esc_html__( 'Grid', 'themeisle-companion' ),
206
+ 'list' => esc_html__( 'List', 'themeisle-companion' ),
207
+ ),
208
+ ), $settings
209
+ );
210
+
211
+ // Card layout
212
+ FLBuilder::render_settings_field(
213
+ 'card_layout', array(
214
+ 'type' => 'obfx_toggle',
215
+ 'label' => esc_html__( 'Card layout', 'themeisle-companion' ),
216
+ ), $settings
217
+ );
218
+
219
+ // Padding top
220
+ FLBuilder::render_settings_field(
221
+ 'card_margin_top', array(
222
+ 'type' => 'obfx_number',
223
+ 'label' => esc_html__( 'Margin top', 'themeisle-companion' ),
224
+ 'default' => '0',
225
+ 'min' => '0',
226
+ ), $settings
227
+ );
228
+
229
+ // Padding bottom
230
+ FLBuilder::render_settings_field(
231
+ 'card_margin_bottom', array(
232
+ 'type' => 'obfx_number',
233
+ 'label' => esc_html__( 'Margin bottom', 'themeisle-companion' ),
234
+ 'default' => '30',
235
+ 'min' => '0',
236
+ ), $settings
237
+ );
238
+
239
+ // Background color
240
+ FLBuilder::render_settings_field(
241
+ 'post_bg_color', array(
242
+ 'type' => 'color',
243
+ 'label' => __( 'Background color', 'themeisle-companion' ),
244
+ 'show_reset' => true,
245
+ 'show_alpha' => true,
246
+ 'preview' => array(
247
+ 'type' => 'css',
248
+ 'selector' => '.obfx-post-grid',
249
+ 'property' => 'background-color',
250
+ ),
251
+
252
+ ), $settings
253
+ );
254
+
255
+ // Link color
256
+ FLBuilder::render_settings_field(
257
+ 'post_link_color', array(
258
+ 'type' => 'color',
259
+ 'label' => __( 'Link color', 'themeisle-companion' ),
260
+ 'show_reset' => true,
261
+ 'preview' => array(
262
+ 'type' => 'css',
263
+ 'selector' => '.obfx-post-grid a, .obfx-post-grid-pagination a',
264
+ 'property' => 'color',
265
+ ),
266
+ ), $settings
267
+ );
268
+
269
+ // Link color
270
+ FLBuilder::render_settings_field(
271
+ 'post_text_color', array(
272
+ 'type' => 'color',
273
+ 'label' => __( 'Text color', 'themeisle-companion' ),
274
+ 'show_reset' => true,
275
+ 'preview' => array(
276
+ 'type' => 'css',
277
+ 'selector' => '.obfx-post-grid, .obfx-post-grid-pagination',
278
+ 'property' => 'color',
279
+ ),
280
+ ), $settings
281
+ );
282
+ ?>
283
+ </table>
284
+ </div>
285
+ </div>
286
+ <?php
287
+ do_action( 'fl_builder_loop_settings_after_form', $settings ); // e.g Add custom FLBuilder::render_settings_field()
obfx_modules/beaver-widgets/modules/post-grid/post-grid.php ADDED
@@ -0,0 +1,348 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Get the module directory.
4
+ $module_directory = $this->get_dir();
5
+
6
+ // Include custom fields
7
+ require_once( $module_directory . '/custom-fields/toggle-field/toggle_field.php' );
8
+
9
+ // Include common functions file.
10
+ require_once( $module_directory . '/inc/common-functions.php' );
11
+
12
+ /**
13
+ * Class PostGridModule
14
+ */
15
+ class PostGridModule extends FLBuilderModule {
16
+
17
+ /**
18
+ * Constructor function for the module. You must pass the
19
+ * name, description, dir and url in an array to the parent class.
20
+ *
21
+ * @method __construct
22
+ */
23
+ public function __construct() {
24
+ parent::__construct(
25
+ array(
26
+ 'name' => esc_html__( 'Post Grid', 'themeisle-companion' ),
27
+ 'description' => esc_html__( 'A method to display your posts.', 'themeisle-companion' ),
28
+ 'category' => esc_html__( 'Orbit Fox Modules', 'themeisle-companion' ),
29
+ 'dir' => BEAVER_WIDGETS_PATH . 'modules/post-grid/',
30
+ 'url' => BEAVER_WIDGETS_URL . 'modules/post-grid/',
31
+ )
32
+ );
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Register the module and its form settings.
38
+ */
39
+ $image_sizes = get_intermediate_image_sizes();
40
+ $choices = array();
41
+ if ( ! empty( $image_sizes ) ) {
42
+ foreach ( $image_sizes as $size ) {
43
+ $name = str_replace( '_', ' ', $size );
44
+ $name = str_replace( '-', ' ', $name );
45
+ $choices[ $size ] = ucfirst( $name );
46
+ }
47
+ }
48
+ FLBuilder::register_module(
49
+ 'PostGridModule', array(
50
+ 'loop_settings' => array(
51
+ 'title' => esc_html__( 'Loop Settings', 'themeisle-companion' ),
52
+ 'file' => BEAVER_WIDGETS_PATH . 'modules/post-grid/includes/loop-settings.php',
53
+ ),
54
+ 'image_options' => array(
55
+ 'title' => esc_html__( 'Image options', 'themeisle-companion' ), // Tab title
56
+ 'sections' => array(
57
+ 'general' => array(
58
+ 'title' => '',
59
+ 'fields' => array(
60
+ 'show_post_thumbnail' => array(
61
+ 'type' => 'obfx_toggle',
62
+ 'label' => esc_html__( 'Show post thumbnail', 'themeisle-companion' ),
63
+ 'default' => 'yes',
64
+ ),
65
+ 'show_thumbnail_link' => array(
66
+ 'type' => 'obfx_toggle',
67
+ 'label' => esc_html__( 'Link in thumbnail', 'themeisle-companion' ),
68
+ 'default' => 'no',
69
+ ),
70
+ 'thumbnail_shadow' => array(
71
+ 'type' => 'obfx_toggle',
72
+ 'label' => esc_html__( 'Enable thumbnail shadow', 'themeisle-companion' ),
73
+ 'default' => 'no',
74
+ ),
75
+ 'image_size' => array(
76
+ 'type' => 'select',
77
+ 'label' => esc_html__( 'Image size', 'themeisle-companion' ),
78
+ 'default' => 'medium_large',
79
+ 'options' => $choices,
80
+
81
+ ),
82
+ 'image_alignment' => array(
83
+ 'type' => 'select',
84
+ 'label' => esc_html__( 'Image alignment', 'themeisle-companion' ),
85
+ 'default' => 'center',
86
+ 'options' => array(
87
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
88
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
89
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
90
+ ),
91
+ 'toggle' => array(
92
+ 'left' => array(
93
+ 'fields' => array('thumbnail_margin_left', 'thumbnail_margin_right'),
94
+ ),
95
+ 'right' => array(
96
+ 'fields' => array('thumbnail_margin_left', 'thumbnail_margin_right'),
97
+ ),
98
+ ),
99
+ ),
100
+ ),
101
+ ),
102
+ 'thumbnail_margins' => themeisle_four_fields_control(
103
+ array(
104
+ 'default' => array(
105
+ 'top' => 0,
106
+ 'bottom' => 30,
107
+ 'left' => 0,
108
+ 'right' => 0,
109
+ ),
110
+ 'selector' => '.obfx-post-grid-thumbnail',
111
+ 'field_name_prefix' => 'thumbnail_margin_',
112
+ 'type' => 'margin',
113
+ )
114
+ ),
115
+ ),
116
+ ),
117
+ 'title_options' => array(
118
+ 'title' => esc_html__( 'Title options', 'themeisle-companion' ), // Tab title
119
+ 'sections' => array(
120
+ 'general' => array(
121
+ 'title' => '',
122
+ 'fields' => array(
123
+ 'show_post_title' => array(
124
+ 'type' => 'obfx_toggle',
125
+ 'label' => esc_html__( 'Show post title', 'themeisle-companion' ),
126
+ 'default' => 'yes',
127
+ ),
128
+ 'show_title_link' => array(
129
+ 'type' => 'obfx_toggle',
130
+ 'label' => esc_html__( 'Link on title', 'themeisle-companion' ),
131
+ 'default' => 'yes',
132
+ ),
133
+ 'title_alignment' => array(
134
+ 'type' => 'select',
135
+ 'label' => esc_html__( 'Title alignment', 'themeisle-companion' ),
136
+ 'default' => 'center',
137
+ 'options' => array(
138
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
139
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
140
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
141
+ ),
142
+
143
+ ),
144
+ 'title_tag' => array(
145
+ 'type' => 'select',
146
+ 'label' => esc_html__( 'Title tag', 'themeisle-companion' ),
147
+ 'default' => 'h5',
148
+ 'options' => array(
149
+ 'h1' => esc_html__( 'H1', 'themeisle-companion' ),
150
+ 'h2' => esc_html__( 'H2', 'themeisle-companion' ),
151
+ 'h3' => esc_html__( 'H3', 'themeisle-companion' ),
152
+ 'h4' => esc_html__( 'H4', 'themeisle-companion' ),
153
+ 'h5' => esc_html__( 'H5', 'themeisle-companion' ),
154
+ 'h6' => esc_html__( 'H6', 'themeisle-companion' ),
155
+ 'span' => esc_html__( 'span', 'themeisle-companion' ),
156
+ 'p' => esc_html__( 'p', 'themeisle-companion' ),
157
+ 'div' => esc_html__( 'div', 'themeisle-companion' ),
158
+ ),
159
+ ),
160
+ ),
161
+ ),
162
+ 'title_margins' => themeisle_four_fields_control(
163
+ array(
164
+ 'default' => array(
165
+ 'top' => 0,
166
+ 'bottom' => 0,
167
+ 'left' => 0,
168
+ 'right' => 0,
169
+ ),
170
+ 'selector' => '.obfx-post-grid-title',
171
+ 'field_name_prefix' => 'title_padding_',
172
+ 'type' => 'padding',
173
+ )
174
+ ),
175
+ 'title_typography' => themeisle_typography_settings(
176
+ array(
177
+ 'prefix' => 'title_',
178
+ 'selector' => '.obfx-post-grid-title',
179
+ 'font_size_default' => 25,
180
+ )
181
+ ),
182
+ ),
183
+ ),
184
+ 'meta_options' => array(
185
+ 'title' => esc_html__( 'Meta options', 'themeisle-companion' ), // Tab title
186
+ 'sections' => array(
187
+ 'general' => array(
188
+ 'title' => '',
189
+ 'fields' => array(
190
+ 'show_post_meta' => array(
191
+ 'type' => 'obfx_toggle',
192
+ 'label' => esc_html__( 'Show post meta', 'themeisle-companion' ),
193
+ 'default' => 'yes',
194
+ ),
195
+ 'show_icons' => array(
196
+ 'type' => 'obfx_toggle',
197
+ 'label' => esc_html__( 'Show icons', 'themeisle-companion' ),
198
+ 'default' => 'yes',
199
+ 'help' => esc_html__( 'If icons doesn\'t show you have to enqueue FontAwesome in your theme.', 'themeisle-companion' ),
200
+ ),
201
+ 'meta_data' => array(
202
+ 'type' => 'select',
203
+ 'label' => esc_html__( 'Display', 'themeisle-companion' ),
204
+ 'default' => array('author', 'date'),
205
+ 'options' => array(
206
+ 'author' => esc_html__( 'Author', 'themeisle-companion' ),
207
+ 'date' => esc_html__( 'Date', 'themeisle-companion' ),
208
+ 'category' => esc_html__( 'Category', 'themeisle-companion' ),
209
+ 'tags' => esc_html__( 'Tags', 'themeisle-companion' ),
210
+ 'comments' => esc_html__( 'Comments', 'themeisle-companion' ),
211
+ ),
212
+ 'multi-select' => true,
213
+ ),
214
+ 'meta_alignment' => array(
215
+ 'type' => 'select',
216
+ 'label' => esc_html__( 'Meta alignment', 'themeisle-companion' ),
217
+ 'default' => 'center',
218
+ 'options' => array(
219
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
220
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
221
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
222
+ ),
223
+ ),
224
+ ),
225
+ ),
226
+ 'meta_margins' => themeisle_four_fields_control(
227
+ array(
228
+ 'default' => array(
229
+ 'top' => 0,
230
+ 'bottom' => 0,
231
+ 'left' => 0,
232
+ 'right' => 0,
233
+ ),
234
+ 'selector' => '.obfx-post-grid-meta',
235
+ 'field_name_prefix' => 'meta_padding_',
236
+ 'type' => 'padding',
237
+ )
238
+ ),
239
+ 'meta_typography' => themeisle_typography_settings(
240
+ array(
241
+ 'prefix' => 'meta_',
242
+ 'selector' => '.obfx-post-grid-meta',
243
+ 'font_size_default' => 15,
244
+ )
245
+ ),
246
+ ),
247
+ ),
248
+ 'content_options' => array(
249
+ 'title' => esc_html__( 'Content options', 'themeisle-companion' ), // Tab title
250
+ 'sections' => array(
251
+ 'general' => array(
252
+ 'title' => '',
253
+ 'fields' => array(
254
+ 'show_post_content' => array(
255
+ 'type' => 'obfx_toggle',
256
+ 'label' => esc_html__( 'Show post content', 'themeisle-companion' ),
257
+ 'default' => 'yes',
258
+ ),
259
+ 'show_read_more' => array(
260
+ 'type' => 'obfx_toggle',
261
+ 'label' => esc_html__( 'Show read more', 'themeisle-companion' ),
262
+ 'default' => 'yes',
263
+ ),
264
+ 'content_length' => array(
265
+ 'type' => 'obfx_number',
266
+ 'label' => esc_html__( 'Number of words', 'themeisle-companion' ),
267
+ 'default' => '30',
268
+ 'min' => '1',
269
+ ),
270
+ 'read_more_text' => array(
271
+ 'type' => 'text',
272
+ 'label' => esc_html__( 'Read more text', 'themeisle-companion' ),
273
+ 'default' => esc_html__( 'Read more', 'themeisle-companion' ),
274
+ 'maxlength' => '70',
275
+ 'size' => '30',
276
+ 'preview' => array(
277
+ 'type' => 'text',
278
+ 'selector' => '.obfx-post-grid-read-more',
279
+ ),
280
+ ),
281
+ 'content_alignment' => array(
282
+ 'type' => 'select',
283
+ 'label' => esc_html__( 'Text alignment', 'themeisle-companion' ),
284
+ 'default' => 'left',
285
+ 'options' => array(
286
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
287
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
288
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
289
+ ),
290
+
291
+ ),
292
+ ),
293
+ ),
294
+ 'content_margins' => themeisle_four_fields_control(
295
+ array(
296
+ 'default' => array(
297
+ 'top' => 0,
298
+ 'bottom' => 0,
299
+ 'left' => 15,
300
+ 'right' => 15,
301
+ ),
302
+ 'selector' => '.obfx-post-content',
303
+ 'field_name_prefix' => 'content_padding_',
304
+ 'type' => 'padding',
305
+ )
306
+ ),
307
+ 'content_typography' => themeisle_typography_settings(
308
+ array(
309
+ 'prefix' => 'content_',
310
+ 'selector' => '.obfx-post-content',
311
+ 'font_size_default' => 20,
312
+ )
313
+ ),
314
+ ),
315
+ ),
316
+ 'pagination_options' => array(
317
+ 'title' => esc_html__( 'Pagination options', 'themeisle-companion' ),
318
+ 'sections' => array(
319
+ 'general' => array(
320
+ 'title' => '',
321
+ 'fields' => array(
322
+ 'show_pagination' => array(
323
+ 'type' => 'obfx_toggle',
324
+ 'label' => esc_html__( 'Enable pagination', 'themeisle-companion' ),
325
+ ),
326
+ 'pagination_alignment' => array(
327
+ 'type' => 'select',
328
+ 'label' => esc_html__( 'Pagination alignment', 'themeisle-companion' ),
329
+ 'default' => 'center',
330
+ 'options' => array(
331
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
332
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
333
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
334
+ ),
335
+ ),
336
+ ),
337
+ ),
338
+ 'pagination_typography' => themeisle_typography_settings(
339
+ array(
340
+ 'prefix' => 'pagination_',
341
+ 'selector' => '.obfx-post-grid-pagination',
342
+ 'font_size_default' => 20,
343
+ )
344
+ ),
345
+ ),
346
+ ),
347
+ )
348
+ );
obfx_modules/beaver-widgets/modules/pricing-table/css/frontend.css ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * This file should contain frontend styles that
3
+ * will be applied to all module instances.
4
+ */
5
+
6
+ .obfx-card{
7
+ display: inline-block;
8
+ position: relative;
9
+ width: 100%;
10
+ margin-bottom: 30px;
11
+ border-radius: 6px;
12
+ color: rgba(0, 0, 0, 0.87);
13
+ background: #fff;
14
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
15
+ }
16
+
17
+ .obfx-pricing-header{
18
+ background-position: center;
19
+ background-size: cover;
20
+ }
21
+
22
+ .obfx-pricing-header *{
23
+ padding: 0;
24
+ margin: 0;
25
+ }
26
+
27
+ .blog-post .section-text .obfx-pricing-header p{
28
+ margin: 0;
29
+ }
30
+
31
+
32
+ .obfx-pricing-features{
33
+ list-style-type: none;
34
+ padding: 0;
35
+ margin: 0;
36
+ }
37
+
38
+ .obfx-pricing-features li{
39
+ padding: 0;
40
+ margin: 0;
41
+ }
42
+
43
+ .obfx-pricing-feature-content{
44
+ float: left;
45
+ width: 100%;
46
+ }
47
+
48
+ .obfx-pricing-features hr{
49
+ margin: 0;
50
+ width: 100%;
51
+ float: left;
52
+ }
53
+
54
+ .obfx-pricing-features li i{
55
+ margin-right: 10px;
56
+ }
57
+
58
+ .obfx-plan-bottom{
59
+ float: left;
60
+ width: 100%;
61
+ }
62
+
63
+ a.obfx-plan-button{
64
+ margin: 0;
65
+ text-transform: none;
66
+ }
obfx_modules/beaver-widgets/modules/pricing-table/includes/frontend.css.php ADDED
@@ -0,0 +1,271 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $text_position = ! empty( $settings->text_position ) ? $settings->text_position : '';
3
+ if ( ! empty( $text_position ) ) {
4
+ echo '.fl-node-' . $id . ' .obfx-pricing-plan > div,.fl-node-' . $id . ' .obfx-pricing-plan li{';
5
+ echo 'text-align:' . $text_position . ';';
6
+ echo '}';
7
+ }
8
+
9
+ $padding_top = ! empty( $settings->top ) ? $settings->top : '';
10
+ $padding_bottom = ! empty( $settings->bottom ) ? $settings->bottom : '';
11
+ $padding_left = ! empty( $settings->left ) ? $settings->left : '';
12
+ $padding_right = ! empty( $settings->right ) ? $settings->right : '';
13
+ echo '.fl-node-' . $id . '.obfx-pricing-header{';
14
+ echo ! empty( $padding_top ) ? 'padding-top: ' . $padding_top . 'px;' : '';
15
+ echo ! empty( $padding_bottom ) ? 'padding-bottom: ' . $padding_bottom . 'px;' : '';
16
+ echo ! empty( $padding_left ) ? 'padding-left: ' . $padding_left . 'px;' : '';
17
+ echo ! empty( $padding_right ) ? 'padding-right: ' . $padding_right . 'px;' : '';
18
+
19
+ $type = $settings->bg_type;
20
+ switch ( $type ) {
21
+ case 'color':
22
+ $bg_color = ! empty( $settings->header_bg_color ) ? $settings->header_bg_color : '';
23
+ if ( ! empty( $bg_color ) ) {
24
+ $bg_color = strpos( $bg_color, 'rgba' ) !== false ? 'background-color:' . $bg_color : 'background-color:#' . $bg_color;
25
+ echo $bg_color . ';';
26
+ }
27
+ break;
28
+ case 'image':
29
+ $bg_image = ! empty( $settings->header_bg_image ) ? $settings->header_bg_image : '';
30
+ if ( ! empty( $bg_image ) ) {
31
+ echo 'background-image:url(' . wp_get_attachment_url( $bg_image ) . ');';
32
+ }
33
+ break;
34
+ case 'gradient':
35
+ $gradient_color1 = ! empty( $settings->gradient_color1 ) ? $settings->gradient_color1 : '';
36
+ $gradient_color2 = ! empty( $settings->gradient_color2 ) ? $settings->gradient_color2 : '';
37
+ $gradient_orientation = ! empty( $settings->gradient_orientation ) ? $settings->gradient_orientation : '';
38
+ $pos1 = 'left';
39
+ $pos2 = 'left';
40
+ $pos3 = 'to right';
41
+ switch ( $gradient_orientation ) {
42
+ case 'vertical':
43
+ $pos1 = 'top';
44
+ $pos2 = 'to bottom';
45
+ $type = 'linear-gradient';
46
+ break;
47
+ case 'diagonal_bottom':
48
+ $pos1 = '-45deg';
49
+ $pos2 = '135deg';
50
+ $type = 'linear-gradient';
51
+ break;
52
+ case 'diagonal_top':
53
+ $pos1 = '45deg';
54
+ $pos2 = '45deg';
55
+ $type = 'linear-gradient';
56
+ break;
57
+ case 'radial':
58
+ $pos1 = 'center, ellipse cover';
59
+ $pos2 = 'ellipse at center';
60
+ $type = 'radial-gradient';
61
+ break;
62
+ }
63
+
64
+ if ( ! empty( $gradient_color1 ) ) {
65
+ $gradient_color1 = strpos( $gradient_color1, 'rgba' ) !== false ? $gradient_color1 : '#' . $gradient_color1;
66
+ if ( ! empty( $gradient_color2 ) ) {
67
+ $gradient_color2 = strpos( $gradient_color2, 'rgba' ) !== false ? $gradient_color2 : '#' . $gradient_color2;
68
+ echo '
69
+ background: -moz-' . esc_attr( $type ) . '(' . esc_attr( $pos1 ) . ', ' . esc_attr( $gradient_color1 ) . ' 0%, ' . esc_attr( $gradient_color2 ) . ' 100%);
70
+ background: -webkit-' . esc_attr( $type ) . '(' . esc_attr( $pos1 ) . ', ' . esc_attr( $gradient_color1 ) . ' 0%, ' . esc_attr( $gradient_color2 ) . ' 100%);
71
+ background: ' . esc_attr( $type ) . '(' . esc_attr( $pos2 ) . ', ' . esc_attr( $gradient_color1 ) . ' 0%, ' . esc_attr( $gradient_color2 ) . ' 100%);';
72
+ } else {
73
+ echo 'background-color:' . esc_attr( $gradient_color1 ) . ';';
74
+ }
75
+ }
76
+ break;
77
+ }
78
+ echo '}';
79
+
80
+ $title_color = ! empty( $settings->title_color ) ? $settings->title_color : '';
81
+ if ( ! empty( $title_color ) ) {
82
+ $title_color = strpos( $title_color, 'rgba' ) !== false ? $title_color : '#' . $title_color;
83
+ }
84
+ $title_font_size = ! empty( $settings->title_font_size ) ? $settings->title_font_size : '';
85
+ $title_font_family = ! empty( $settings->title_font_family['family'] ) ? $settings->title_font_family['family'] : '';
86
+ $title_font_weight = ! empty( $settings->title_font_family['weight'] ) ? $settings->title_font_family['weight'] : '';
87
+ $title_transform = ! empty( $settings->title_transform ) ? $settings->title_transform : '';
88
+ $title_font_style = ! empty( $settings->title_font_style ) ? $settings->title_font_style : '';
89
+ $title_line_height = ! empty( $settings->title_line_height ) ? $settings->title_line_height : '';
90
+ $title_letter_spacing = ! empty( $settings->title_letter_spacing ) ? $settings->title_letter_spacing : '';
91
+ echo '.fl-node-' . $id . ' .obfx-pricing-header *:first-child{';
92
+ echo ! empty( $title_color ) ? 'color: ' . $title_color . ';' : '';
93
+ echo ! empty( $title_font_size ) ? 'font-size: ' . $title_font_size . 'px;' : '';
94
+ echo ! empty( $title_font_family ) ? 'font-family: ' . $title_font_family . ';' : '';
95
+ echo ! empty( $title_font_weight ) ? 'font-weight: ' . $title_font_weight . ';' : '';
96
+ echo ! empty( $title_transform ) ? 'text-transform: ' . $title_transform . ';' : '';
97
+ echo ! empty( $title_font_style ) ? 'font-style: ' . $title_font_style . ';' : '';
98
+ echo ! empty( $title_line_height ) ? 'line-height: ' . $title_line_height . 'px;' : '';
99
+ echo ! empty( $title_letter_spacing ) ? 'letter-spacing: ' . $title_letter_spacing . 'px;' : '';
100
+ echo '}';
101
+
102
+
103
+ $subtitle_color = ! empty( $settings->subtitle_color ) ? $settings->subtitle_color : '';
104
+ if ( ! empty( $subtitle_color ) ) {
105
+ $subtitle_color = strpos( $subtitle_color, 'rgba' ) !== false ? $subtitle_color : '#' . $subtitle_color;
106
+ }
107
+ $subtitle_font_size = ! empty( $settings->subtitle_font_size ) ? $settings->subtitle_font_size : '';
108
+ $subtitle_font_family = ! empty( $settings->subtitle_font_family['family'] ) ? $settings->subtitle_font_family : '';
109
+ $subtitle_font_weight = ! empty( $settings->subtitle_font_family['weight'] ) ? $settings->subtitle_font_family : '';
110
+ $subtitle_transform = ! empty( $settings->subtitle_transform ) ? $settings->subtitle_transform : '';
111
+ $subtitle_font_style = ! empty( $settings->subtitle_font_style ) ? $settings->subtitle_font_style : '';
112
+ $subtitle_line_height = ! empty( $settings->subtitle_line_height ) ? $settings->subtitle_line_height : '';
113
+ $subtitle_letter_spacing = ! empty( $settings->subtitle_letter_spacing ) ? $settings->subtitle_letter_spacing : '';
114
+ echo '.fl-node-' . $id . ' .obfx-pricing-header *:last-child{';
115
+ echo ! empty( $subtitle_color ) ? 'color: ' . $subtitle_color . ';' : '';
116
+ echo ! empty( $subtitle_font_size ) ? 'font-size: ' . $subtitle_font_size . 'px;' : '';
117
+ echo ! empty( $subtitle_font_family ) ? 'font-family: ' . $subtitle_font_family . ';' : '';
118
+ echo ! empty( $subtitle_font_weight ) ? 'font-weight: ' . $subtitle_font_weight . ';' : '';
119
+ echo ! empty( $subtitle_transform ) ? 'text-transform: ' . $subtitle_transform . ';' : '';
120
+ echo ! empty( $subtitle_font_style ) ? 'font-style: ' . $subtitle_font_style . ';' : '';
121
+ echo ! empty( $subtitle_line_height ) ? 'line-height: ' . $subtitle_line_height . 'px;' : '';
122
+ echo ! empty( $subtitle_letter_spacing ) ? 'letter-spacing: ' . $subtitle_letter_spacing . 'px;' : '';
123
+ echo '}';
124
+
125
+ $price_top = ! empty( $settings->price_top ) ? $settings->price_top : '';
126
+ $price_bottom = ! empty( $settings->price_bottom ) ? $settings->price_bottom : '';
127
+ $price_left = ! empty( $settings->price_left ) ? $settings->price_left : '';
128
+ $price_right = ! empty( $settings->price_right ) ? $settings->price_right : '';
129
+ $price_font_size = ! empty( $settings->price_font_size ) ? $settings->price_font_size : '';
130
+ $price_font_family = ! empty( $settings->price_font_family['family'] ) ? $settings->price_font_family['family'] : '';
131
+ $price_font_weight = ! empty( $settings->price_font_family['weight'] ) ? $settings->price_font_family['weight'] : '';
132
+ $price_transform = ! empty( $settings->price_transform ) ? $settings->price_transform : '';
133
+ $price_font_style = ! empty( $settings->price_font_style ) ? $settings->price_font_style : '';
134
+ $price_line_height = ! empty( $settings->price_line_height ) ? $settings->price_line_height : '';
135
+ $price_letter_spacing = ! empty( $settings->price_letter_spacing ) ? $settings->price_letter_spacing : '';
136
+ echo '.fl-node-' . $id . ' .obfx-pricing-price{';
137
+ echo ! empty( $price_top ) ? 'padding-top: ' . $price_top . 'px;' : '';
138
+ echo ! empty( $price_bottom ) ? 'padding-bottom: ' . $price_bottom . 'px;' : '';
139
+ echo ! empty( $price_left ) ? 'padding-left: ' . $price_left . 'px;' : '';
140
+ echo ! empty( $price_right ) ? 'padding-right: ' . $price_right . 'px;' : '';
141
+ echo ! empty( $price_font_size ) ? 'font-size: ' . $price_font_size . 'px;' : '';
142
+ echo ! empty( $price_font_family ) ? 'font-family: ' . $price_font_family . ';' : '';
143
+ echo ! empty( $price_font_weight ) ? 'font-weight: ' . $price_font_weight . ';' : '';
144
+ echo ! empty( $price_transform ) ? 'text-transform: ' . $price_transform . ';' : '';
145
+ echo ! empty( $price_font_style ) ? 'font-style: ' . $price_font_style . ';' : '';
146
+ echo ! empty( $price_line_height ) ? 'line-height: ' . $price_line_height . 'px;' : '';
147
+ echo ! empty( $price_letter_spacing ) ? 'letter-spacing: ' . $price_letter_spacing . 'px;' : '';
148
+ echo '}';
149
+
150
+ if ( ! empty( $settings->price_color ) ) {
151
+ $price_color = strpos( $settings->price_color, 'rgba' ) !== false ? $settings->price_color : '#' . $settings->price_color;
152
+ echo '.fl-node-' . $id . ' .obfx-pricing-price{';
153
+ echo 'color: ' . $price_color . ';';
154
+ echo '}';
155
+ }
156
+
157
+ if ( ! empty( $settings->currency_color ) ) {
158
+ $currency_color = strpos( $settings->currency_color, 'rgba' ) !== false ? $settings->currency_color : '#' . $settings->currency_color;
159
+ echo '.fl-node-' . $id . ' .obfx-pricing-price sup{';
160
+ echo 'color: ' . $currency_color . ';';
161
+ echo '}';
162
+ }
163
+
164
+ if ( ! empty( $settings->period_color ) ) {
165
+ $period_color = strpos( $settings->period_color, 'rgba' ) !== false ? $settings->period_color : '#' . $settings->period_color;
166
+ echo '.fl-node-' . $id . ' .obfx-pricing-price .obfx-period{';
167
+ echo 'color: ' . $period_color . ';';
168
+ echo '}';
169
+ }
170
+ $features_top = ! empty( $settings->features_right ) ? $settings->features_right : '';
171
+ $features_bottom = ! empty( $settings->features_right ) ? $settings->features_right : '';
172
+ $features_left = ! empty( $settings->features_right ) ? $settings->features_right : '';
173
+ $features_right = ! empty( $settings->features_right ) ? $settings->features_right : '';
174
+ echo '.fl-node-' . $id . ' .obfx-pricing-features .obfx-pricing-feature-content{';
175
+ echo ! empty( $features_top ) ? 'padding-top: ' . $features_top . 'px;' : '';
176
+ echo ! empty( $features_bottom ) ? 'padding-bottom: ' . $features_bottom . 'px;' : '';
177
+ echo ! empty( $features_left ) ? 'padding-left: ' . $features_left . 'px;' : '';
178
+ echo ! empty( $features_right ) ? 'padding-right: ' . $features_right . 'px;' : '';
179
+ echo '}';
180
+
181
+ $feature_font_size = ! empty( $settings->feature_font_size ) ? $settings->feature_font_size : '';
182
+ $feature_transform = ! empty( $settings->feature_transform ) ? $settings->feature_transform : '';
183
+ $feature_font_style = ! empty( $settings->feature_font_style ) ? $settings->feature_font_style : '';
184
+ $feature_line_height = ! empty( $settings->feature_line_height ) ? $settings->feature_line_height : '';
185
+ $feature_letter_spacing = ! empty( $settings->feature_letter_spacing ) ? $settings->feature_letter_spacing : '';
186
+ echo '.fl-node-' . $id . ' .obfx-pricing-features .obfx-pricing-feature-content * {';
187
+ echo ! empty( $feature_font_size ) ? 'font-size: ' . $feature_font_size . 'px;' : '';
188
+ echo ! empty( $feature_transform ) ? 'text-transform: ' . $feature_transform . ';' : '';
189
+ echo ! empty( $feature_font_style ) ? 'font-style: ' . $feature_font_style . ';' : '';
190
+ echo ! empty( $feature_line_height ) ? 'line-height: ' . $feature_line_height . 'px;' : '';
191
+ echo ! empty( $feature_letter_spacing ) ? 'letter-spacing: ' . $feature_letter_spacing . 'px;' : '';
192
+ echo '}';
193
+
194
+ if ( ! empty( $settings->feature_font_family['family'] ) ) {
195
+ echo '.fl-node-' . $id . ' .obfx-pricing-features .obfx-pricing-feature-content:not(i){';
196
+ echo 'font-family: ' . $settings->feature_font_family['family'] . ';';
197
+ echo '}';
198
+ }
199
+ if ( ! empty( $settings->feature_font_family['weight'] ) ) {
200
+ echo '.fl-node-' . $id . ' .obfx-pricing-features .obfx-pricing-feature-content:not(strong){';
201
+ echo 'font-weight: ' . $settings->feature_font_family['weight'] . ';';
202
+ echo '}';
203
+ }
204
+
205
+ if ( ! empty( $settings->icon_color ) ) {
206
+ $icon_color = strpos( $settings->icon_color, 'rgba' ) !== false ? $settings->icon_color : '#' . $settings->icon_color;
207
+ echo '.fl-node-' . $id . ' .obfx-pricing-feature-content i{';
208
+ echo 'color: ' . $icon_color . ';';
209
+ echo '}';
210
+ }
211
+
212
+ if ( ! empty( $settings->bold_color ) ) {
213
+ $bold_color = strpos( $settings->bold_color, 'rgba' ) !== false ? $settings->bold_color : '#' . $settings->bold_color;
214
+ echo '.fl-node-' . $id . ' .obfx-pricing-feature-content strong{';
215
+ echo 'color: ' . $bold_color . ';';
216
+ echo '}';
217
+ }
218
+
219
+ if ( ! empty( $settings->feature_color ) ) {
220
+ $feature_color = strpos( $settings->feature_color, 'rgba' ) !== false ? $settings->feature_color : '#' . $settings->feature_color;
221
+ echo '.fl-node-' . $id . ' .obfx-pricing-feature-content:not(i):not(strong){';
222
+ echo 'color: ' . $feature_color . ';';
223
+ echo '}';
224
+ }
225
+
226
+ $button_margin_bottom = ! empty( $settings->button_margin_bottom ) ? $settings->button_margin_bottom : '';
227
+ $button_margin_left = ! empty( $settings->button_margin_left ) ? $settings->button_margin_left : '';
228
+ $button_margin_right = ! empty( $settings->button_margin_right ) ? $settings->button_margin_right : '';
229
+ $button_margin_top = ! empty( $settings->button_margin_top ) ? $settings->button_margin_top : '';
230
+ echo '.fl-node-' . $id . ' .obfx-plan-bottom{';
231
+ echo ! empty( $button_margin_bottom ) ? 'margin-bottom: ' . $button_margin_bottom . 'px;' : '';
232
+ echo ! empty( $button_margin_left ) ? 'margin-left: ' . $button_margin_left . 'px;' : '';
233
+ echo ! empty( $button_margin_right ) ? 'margin-right: ' . $button_margin_right . 'px;' : '';
234
+ echo ! empty( $button_margin_top ) ? 'margin-top: ' . $button_margin_top . 'px;' : '';
235
+ echo '}';
236
+
237
+ $button_padding_top = ! empty( $settings->button_padding_top ) ? $settings->button_padding_top : '';
238
+ $button_padding_bottom = ! empty( $settings->button_padding_bottom ) ? $settings->button_padding_bottom : '';
239
+ $button_padding_left = ! empty( $settings->button_padding_left ) ? $settings->button_padding_left : '';
240
+ $button_padding_right = ! empty( $settings->button_padding_right ) ? $settings->button_padding_right : '';
241
+ $button_font_size = ! empty( $settings->button_font_size ) ? $settings->button_font_size : '';
242
+ $button_transform = ! empty( $settings->button_transform ) ? $settings->button_transform : '';
243
+ $button_font_style = ! empty( $settings->button_font_style ) ? $settings->button_font_style : '';
244
+ $button_line_height = ! empty( $settings->button_line_height ) ? $settings->button_line_height : '';
245
+ $button_letter_spacing = ! empty( $settings->button_letter_spacing ) ? $settings->button_letter_spacing : '';
246
+ $button_font_family = ! empty( $settings->button_font_family['family'] ) ? $settings->button_font_family['family'] : '';
247
+ $button_font_weight = ! empty( $settings->button_font_family['weight'] ) ? $settings->button_font_family['weight'] : '';
248
+ $button_text_color = ! empty( $settings->button_text_color ) ? ( strpos( $settings->button_text_color, 'rgba' ) !== false ? $settings->button_text_color : '#' . $settings->button_text_color ) : '';
249
+ $button_bg_color = ! empty( $settings->button_bg_color ) ? ( strpos( $settings->button_bg_color, 'rgba' ) !== false ? $settings->button_bg_color : '#' . $settings->button_bg_color ) : '';
250
+ echo '.fl-node-' . $id . ' .obfx-plan-button{';
251
+ echo ! empty( $button_padding_top ) ? 'padding-top: ' . $button_padding_top . 'px;' : '';
252
+ echo ! empty( $button_padding_bottom ) ? 'padding-bottom: ' . $button_padding_bottom . 'px;' : '';
253
+ echo ! empty( $button_padding_left ) ? 'padding-left: ' . $button_padding_left . 'px;' : '';
254
+ echo ! empty( $button_padding_right ) ? 'padding-right: ' . $button_padding_right . 'px;' : '';
255
+ echo ! empty( $button_text_color ) ? 'color: ' . $button_text_color . ';' : '';
256
+ echo ! empty( $button_bg_color ) ? 'background-color: ' . $button_bg_color . ';' : '';
257
+ echo ! empty( $button_font_size ) ? 'font-size: ' . $button_font_size . 'px;' : '';
258
+ echo ! empty( $button_transform ) ? 'text-transform: ' . $button_transform . ';' : '';
259
+ echo ! empty( $button_font_style ) ? 'font-style: ' . $button_font_style . ';' : '';
260
+ echo ! empty( $button_line_height ) ? 'line-height: ' . $button_line_height . 'px;' : '';
261
+ echo ! empty( $button_letter_spacing ) ? 'letter-spacing: ' . $button_letter_spacing . 'px;' : '';
262
+ echo ! empty( $button_font_family ) ? 'font-family: ' . $button_font_family . ';' : '';
263
+ echo ! empty( $button_font_weight ) ? 'font-weight: ' . $button_font_weight . ';' : '';
264
+ echo '}';
265
+
266
+ $button_text_color_hover = ! empty( $settings->button_text_color_hover ) ? ( strpos( $settings->button_text_color_hover, 'rgba' ) !== false ? $settings->button_text_color_hover : '#' . $settings->button_text_color_hover ) : '';
267
+ $button_bg_color_hover = ! empty( $settings->button_bg_color_hover ) ? ( strpos( $settings->button_bg_color_hover, 'rgba' ) !== false ? $settings->button_bg_color_hover : '#' . $settings->button_bg_color_hover ) : '';
268
+ echo '.fl-node-' . $id . ' .obfx-plan-button:hover{';
269
+ echo ! empty( $button_text_color_hover ) ? 'color: ' . $button_text_color_hover . ';' : '';
270
+ echo ! empty( $button_bg_color_hover ) ? 'background-color: ' . $button_bg_color_hover . ';' : '';
271
+ echo '}';
obfx_modules/beaver-widgets/modules/pricing-table/includes/frontend.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file is used to render each pricing module instance.
4
+ * You have access to two variables in this file:
5
+ *
6
+ * $module An instance of your module class.
7
+ * $settings The module's settings.
8
+ */
9
+
10
+ $class_to_add = $settings->card_layout === 'yes' ? 'obfx-card' : '';
11
+
12
+ echo '<div class="obfx-pricing-plan ' . esc_attr( $class_to_add ) . '">';
13
+ echo '<div class="obfx-pricing-header">';
14
+ echo '<' . $settings->plan_title_tag . ' class="obfx-plan-title text-center">' . wp_kses_post( $settings->plan_title ) . '</' . $settings->plan_title_tag . '>';
15
+ echo '<' . $settings->plan_subtitle_tag . ' class="obfx-plan-subtitle text-center">' . wp_kses_post( $settings->plan_subtitle ) . '</' . $settings->plan_subtitle_tag . '>';
16
+ echo '</div>';
17
+ echo '<div class="obfx-pricing-price text-center">';
18
+ switch ( $settings->currency_position ) {
19
+ case 'after':
20
+ echo '<span class="obfx-price">' . wp_kses_post( $settings->price ) . '</span><sup class="obfx-currency">' . wp_kses_post( $settings->currency ) . '</sup><span class="obfx-period">' . wp_kses_post( $settings->period ) . '</span>';
21
+ break;
22
+ case 'before':
23
+ echo '<sup>' . wp_kses_post( $settings->currency ) . '</sup><span class="obfx-price">' . wp_kses_post( $settings->price ) . '</span><span class="obfx-period">' . wp_kses_post( $settings->period ) . '</span>';
24
+ break;
25
+ }
26
+ echo '</div>';
27
+
28
+ $features = $settings->features;
29
+ if ( ! empty( $features ) ) {
30
+ echo '<ul class="obfx-pricing-features text-center">';
31
+ foreach ( $features as $feature ) {
32
+ $icon = ! empty( $feature->icon ) ? $feature->icon : '';
33
+ $bold_text = ! empty( $feature->bold_text ) ? $feature->bold_text : '';
34
+ $text = ! empty( $feature->text ) ? $feature->text : '';
35
+ $section_is_empty = empty( $icon ) && empty( $bold_text ) && empty( $text );
36
+ if ( ! $section_is_empty ) {
37
+ echo '<li><span class="obfx-pricing-feature-content">';
38
+ if ( ! empty( $icon ) ) {
39
+ echo '<i class="fa ' . esc_attr( $icon ) . '"></i>';
40
+ }
41
+ if ( ! empty( $bold_text ) ) {
42
+ echo '<strong>' . wp_kses_post( $bold_text ) . ' </strong> ';
43
+ }
44
+ if ( ! empty( $text ) ) {
45
+ echo wp_kses_post( $text );
46
+ }
47
+ echo '</span><hr>';
48
+ echo '</li>';
49
+ }
50
+ }
51
+ echo '</ul>';
52
+ }
53
+
54
+ $button_text = ! empty( $settings->text ) ? $settings->text : '';
55
+ $button_link = ! empty( $settings->link ) ? $settings->link : '';
56
+ if ( ! empty( $button_text ) ) {
57
+ echo '<div class="obfx-plan-bottom text-center">';
58
+ echo '<a class="btn obfx-plan-button" href="' . esc_url( $button_link ) . '">' . wp_kses_post( $button_text ) . '</a>';
59
+ echo '</div>';
60
+ }
61
+ echo '</div>';
obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php ADDED
@@ -0,0 +1,587 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Pricing table module.
4
+ *
5
+ * @package themeisle-companion
6
+ */
7
+
8
+ // Get the module directory.
9
+ $module_directory = $this->get_dir();
10
+
11
+ // Include common functions file.
12
+ require_once( $module_directory . '/inc/common-functions.php' );
13
+
14
+ // Include custom fields
15
+ require_once( $module_directory . '/custom-fields/toggle-field/toggle_field.php' );
16
+
17
+ /**
18
+ * Class PricingTableModule
19
+ */
20
+ class PricingTableModule extends FLBuilderModule {
21
+
22
+ /**
23
+ * Constructor function for the module. You must pass the
24
+ * name, description, dir and url in an array to the parent class.
25
+ *
26
+ * @method __construct
27
+ */
28
+ public function __construct() {
29
+ parent::__construct(
30
+ array(
31
+ 'name' => esc_html__( 'Pricing table', 'themeisle-companion' ),
32
+ 'description' => esc_html__( 'Pricing Tables are the perfect option when showcasing services you have on offer.', 'themeisle-companion' ),
33
+ 'category' => esc_html__( 'Orbit Fox Modules', 'themeisle-companion' ),
34
+ 'dir' => BEAVER_WIDGETS_PATH . 'modules/pricing-table/',
35
+ 'url' => BEAVER_WIDGETS_URL . 'modules/pricing-table/',
36
+ 'editor_export' => true, // Defaults to true and can be omitted.
37
+ 'enabled' => true, // Defaults to true and can be omitted.
38
+ )
39
+ );
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Register the module and its form settings.
45
+ */
46
+ FLBuilder::register_module(
47
+ 'PricingTableModule', array(
48
+ 'content' => array(
49
+ 'title' => esc_html__( 'Content', 'themeisle-companion' ), // Tab title
50
+ 'sections' => array(
51
+ 'header' => array(
52
+ 'title' => esc_html__( 'Plan Header', 'themeisle-companion' ),
53
+ 'fields' => array(
54
+ 'plan_title' => array(
55
+ 'type' => 'text',
56
+ 'label' => esc_html__( 'Title', 'themeisle-companion' ),
57
+ 'default' => esc_html__( 'Plan title', 'themeisle-companion' ),
58
+ 'preview' => array(
59
+ 'type' => 'text',
60
+ 'selector' => '.obfx-plan-title',
61
+ ),
62
+ ),
63
+ 'plan_title_tag' => array(
64
+ 'type' => 'select',
65
+ 'label' => esc_html__( 'Title tag', 'themeisle-companion' ),
66
+ 'default' => 'h2',
67
+ 'options' => array(
68
+ 'h1' => esc_html__( 'h1', 'themeisle-companion' ),
69
+ 'h2' => esc_html__( 'h2', 'themeisle-companion' ),
70
+ 'h3' => esc_html__( 'h3', 'themeisle-companion' ),
71
+ 'h4' => esc_html__( 'h4', 'themeisle-companion' ),
72
+ 'h5' => esc_html__( 'h5', 'themeisle-companion' ),
73
+ 'h6' => esc_html__( 'h6', 'themeisle-companion' ),
74
+ 'p' => esc_html__( 'p', 'themeisle-companion' ),
75
+ ),
76
+ ),
77
+ 'plan_subtitle' => array(
78
+ 'type' => 'text',
79
+ 'label' => esc_html__( 'Subtitle', 'themeisle-companion' ),
80
+ 'default' => esc_html__( 'Plan subtitle', 'themeisle-companion' ),
81
+ 'preview' => array(
82
+ 'type' => 'text',
83
+ 'selector' => '.obfx-plan-subtitle',
84
+ ),
85
+ ),
86
+ 'plan_subtitle_tag' => array(
87
+ 'type' => 'select',
88
+ 'label' => esc_html__( 'Subtitle tag', 'themeisle-companion' ),
89
+ 'default' => 'p',
90
+ 'options' => array(
91
+ 'h1' => esc_html__( 'h1', 'themeisle-companion' ),
92
+ 'h2' => esc_html__( 'h2', 'themeisle-companion' ),
93
+ 'h3' => esc_html__( 'h3', 'themeisle-companion' ),
94
+ 'h4' => esc_html__( 'h4', 'themeisle-companion' ),
95
+ 'h5' => esc_html__( 'h5', 'themeisle-companion' ),
96
+ 'h6' => esc_html__( 'h6', 'themeisle-companion' ),
97
+ 'p' => esc_html__( 'p', 'themeisle-companion' ),
98
+ ),
99
+ ),
100
+ ),
101
+ ),
102
+ 'price' => array(
103
+ 'title' => esc_html__( 'Price Tag', 'themeisle-companion' ),
104
+ 'fields' => array(
105
+ 'price' => array(
106
+ 'type' => 'text',
107
+ 'label' => esc_html__( 'Price', 'themeisle-companion' ),
108
+ 'default' => '50',
109
+ 'preview' => array(
110
+ 'type' => 'text',
111
+ 'selector' => '.obfx-price',
112
+ ),
113
+ ),
114
+ 'currency' => array(
115
+ 'type' => 'text',
116
+ 'label' => esc_html__( 'Currency', 'themeisle-companion' ),
117
+ 'default' => '$',
118
+ 'preview' => array(
119
+ 'type' => 'text',
120
+ 'selector' => '.obfx-currency',
121
+ ),
122
+ ),
123
+ 'currency_position' => array(
124
+ 'type' => 'select',
125
+ 'label' => esc_html__( 'Currency position', 'themeisle-companion' ),
126
+ 'default' => 'after',
127
+ 'options' => array(
128
+ 'before' => esc_html__( 'Before', 'themeisle-companion' ),
129
+ 'after' => esc_html__( 'After', 'themeisle-companion' ),
130
+ ),
131
+ ),
132
+ 'period' => array(
133
+ 'type' => 'text',
134
+ 'label' => esc_html__( 'Period', 'themeisle-companion' ),
135
+ 'default' => esc_html__( '/month', 'themeisle-companion' ),
136
+ 'preview' => array(
137
+ 'type' => 'text',
138
+ 'selector' => '.obfx-period',
139
+ ),
140
+ ),
141
+ ),
142
+ ),
143
+ 'features' => array(
144
+ 'title' => esc_html__( 'Features list', 'themeisle-companion' ),
145
+ 'fields' => array(
146
+ 'features' => array(
147
+ 'multiple' => true,
148
+ 'type' => 'form',
149
+ 'label' => esc_html__( 'Feature', 'themeisle-companion' ),
150
+ 'form' => 'feature_field', // ID of a registered form.
151
+ 'preview_text' => 'text', // ID of a field to use for the preview text.
152
+ ),
153
+ ),
154
+ ),
155
+ 'button' => array(
156
+ 'title' => esc_html__( 'Button', 'themeisle-companion' ),
157
+ 'fields' => array(
158
+ 'text' => array(
159
+ 'type' => 'text',
160
+ 'label' => esc_html__( 'Button text', 'themeisle-companion' ),
161
+ 'default' => esc_html__( 'Button', 'themeisle-companion' ),
162
+ 'preview' => array(
163
+ 'type' => 'text',
164
+ 'selector' => '.obfx-plan-button',
165
+ ),
166
+ ),
167
+ 'link' => array(
168
+ 'type' => 'link',
169
+ 'label' => esc_html__( 'Button link', 'themeisle-companion' ),
170
+ ),
171
+ ),
172
+ ),
173
+ 'appearance' => array(
174
+ 'title' => esc_html__( 'Appearance', 'themeisle-companion' ),
175
+ 'fields' => array(
176
+ 'card_layout' => array(
177
+ 'type' => 'obfx_toggle',
178
+ 'label' => esc_html__( 'Card layout', 'themeisle-companion' ),
179
+ 'default' => 'yes',
180
+ ),
181
+ 'text_position' => array(
182
+ 'type' => 'select',
183
+ 'label' => esc_html__( 'Align', 'themeisle-companion' ),
184
+ 'default' => 'center',
185
+ 'options' => array(
186
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
187
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
188
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
189
+ ),
190
+ ),
191
+ ),
192
+ ),
193
+ ),
194
+ ),
195
+ 'header_style' => array(
196
+ 'title' => esc_html__( 'Header Style', 'themeisle-companion' ),
197
+ 'sections' => array(
198
+ 'header_padding' => themeisle_four_fields_control(
199
+ array(
200
+ 'default' => array(
201
+ 'top' => 15,
202
+ 'bottom' => 15,
203
+ 'left' => 0,
204
+ 'right' => 0,
205
+ ),
206
+ 'selector' => '.obfx-pricing-header',
207
+ 'field_name_prefix' => '',
208
+ )
209
+ ),
210
+ 'colors' => array(
211
+ 'title' => esc_html__( 'Colors', 'themeisle-companion' ),
212
+ 'fields' => array(
213
+ 'title_color' => array(
214
+ 'type' => 'color',
215
+ 'label' => esc_html__( 'Title color', 'themeisle-companion' ),
216
+ 'preview' => array(
217
+ 'type' => 'css',
218
+ 'rules' => array(
219
+ array(
220
+ 'selector' => '.obfx-pricing-header *:first-child',
221
+ 'property' => 'color',
222
+ ),
223
+ ),
224
+ ),
225
+ ),
226
+ 'subtitle_color' => array(
227
+ 'type' => 'color',
228
+ 'label' => esc_html__( 'Subtitle color', 'themeisle-companion' ),
229
+ 'preview' => array(
230
+ 'type' => 'css',
231
+ 'rules' => array(
232
+ array(
233
+ 'selector' => '.obfx-pricing-header *:last-child',
234
+ 'property' => 'color',
235
+ ),
236
+ ),
237
+ ),
238
+ ),
239
+ ),
240
+ ),
241
+ 'title_typography' => themeisle_typography_settings(
242
+ array(
243
+ 'title' => esc_html__( 'Title typography', 'themeisle-companion' ),
244
+ 'prefix' => 'title_',
245
+ 'selector' => '.obfx-pricing-header *:first-child',
246
+ )
247
+ ),
248
+ 'subtitle_typography' => themeisle_typography_settings(
249
+ array(
250
+ 'title' => esc_html__( 'Subtitle typography', 'themeisle-companion' ),
251
+ 'prefix' => 'subtitle_',
252
+ 'selector' => '.obfx-pricing-header *:last-child',
253
+ )
254
+ ),
255
+ 'header_background' => array(
256
+ 'title' => esc_html__( 'Background', 'themeisle-companion' ),
257
+ 'fields' => array(
258
+ 'bg_type' => array(
259
+ 'type' => 'select',
260
+ 'label' => esc_html__( 'Type', 'themeisle-companion' ),
261
+ 'default' => 'color',
262
+ 'options' => array(
263
+ 'color' => esc_html__( 'Color', 'themeisle-companion' ),
264
+ 'image' => esc_html__( 'Background', 'themeisle-companion' ),
265
+ 'gradient' => esc_html__( 'Gradient', 'themeisle-companion' ),
266
+ ),
267
+ 'toggle' => array(
268
+ 'color' => array(
269
+ 'fields' => array('header_bg_color'),
270
+ ),
271
+ 'image' => array(
272
+ 'fields' => array('header_bg_image'),
273
+ ),
274
+ 'gradient' => array(
275
+ 'fields' => array('gradient_color1', 'gradient_color2', 'gradient_orientation'),
276
+ ),
277
+ ),
278
+ ),
279
+ 'header_bg_color' => array(
280
+ 'type' => 'color',
281
+ 'label' => esc_html__( 'Background color', 'themeisle-companion' ),
282
+ 'show_reset' => true,
283
+ 'preview' => array(
284
+ 'type' => 'css',
285
+ 'rules' => array(
286
+ array(
287
+ 'selector' => '.obfx-pricing-header',
288
+ 'property' => 'background-color',
289
+ ),
290
+ ),
291
+ ),
292
+ ),
293
+ 'header_bg_image' => array(
294
+ 'type' => 'photo',
295
+ 'label' => esc_html__( 'Photo Field', 'themeisle-companion' ),
296
+ 'show_remove' => true,
297
+ ),
298
+ 'gradient_color1' => array(
299
+ 'type' => 'color',
300
+ 'label' => esc_html__( 'Gradient color 1', 'themeisle-companion' ),
301
+ 'show_reset' => true,
302
+ ),
303
+ 'gradient_color2' => array(
304
+ 'type' => 'color',
305
+ 'label' => esc_html__( 'Gradient color 2', 'themeisle-companion' ),
306
+ 'show_reset' => true,
307
+ ),
308
+ 'gradient_orientation' => array(
309
+ 'type' => 'select',
310
+ 'label' => esc_html__( 'Orientation', 'themeisle-companion' ),
311
+ 'default' => 'horizontal',
312
+ 'options' => array(
313
+ 'horizontal' => esc_html__( 'Horizontal', 'themeisle-companion' ),
314
+ 'vertical' => esc_html__( 'Vertical', 'themeisle-companion' ),
315
+ 'diagonal_bottom' => esc_html__( 'Diagonal bottom', 'themeisle-companion' ),
316
+ 'diagonal_top' => esc_html__( 'Diagonal top', 'themeisle-companion' ),
317
+ 'radial' => esc_html__( 'Radial', 'themeisle-companion' ),
318
+ ),
319
+ ),
320
+ ),
321
+ ),
322
+ ),
323
+ ),
324
+ 'price_style' => array(
325
+ 'title' => esc_html__( 'Price Style', 'themeisle-companion' ),
326
+ 'sections' => array(
327
+ 'price_padding' => themeisle_four_fields_control(
328
+ array(
329
+ 'default' => array(
330
+ 'top' => 15,
331
+ 'bottom' => 15,
332
+ 'left' => 0,
333
+ 'right' => 0,
334
+ ),
335
+ 'selector' => '.obfx-pricing-price',
336
+ 'field_name_prefix' => 'price_',
337
+ )
338
+ ),
339
+ 'price_colors' => array(
340
+ 'title' => esc_html__( 'Colors', 'themeisle-companion' ),
341
+ 'fields' => array(
342
+ 'price_color' => array(
343
+ 'type' => 'color',
344
+ 'label' => esc_html__( 'Price color', 'themeisle-companion' ),
345
+ 'preview' => array(
346
+ 'type' => 'css',
347
+ 'rules' => array(
348
+ array(
349
+ 'selector' => '.obfx-price',
350
+ 'property' => 'color',
351
+ ),
352
+ ),
353
+ ),
354
+ ),
355
+ 'currency_color' => array(
356
+ 'type' => 'color',
357
+ 'label' => esc_html__( 'Currency color', 'themeisle-companion' ),
358
+ 'preview' => array(
359
+ 'type' => 'css',
360
+ 'rules' => array(
361
+ array(
362
+ 'selector' => '.obfx-pricing-price sup',
363
+ 'property' => 'color',
364
+ ),
365
+ ),
366
+ ),
367
+ ),
368
+ 'period_color' => array(
369
+ 'type' => 'color',
370
+ 'label' => esc_html__( 'Period color', 'themeisle-companion' ),
371
+ 'preview' => array(
372
+ 'type' => 'css',
373
+ 'rules' => array(
374
+ array(
375
+ 'selector' => '.obfx-period',
376
+ 'property' => 'color',
377
+ ),
378
+ ),
379
+ ),
380
+ ),
381
+ ),
382
+ ),
383
+ 'price_typography' => themeisle_typography_settings(
384
+ array(
385
+ 'prefix' => 'price_',
386
+ 'selector' => '.obfx-pricing-price',
387
+ 'font_size_default' => 40,
388
+ )
389
+ ),
390
+ ),
391
+ ),
392
+ 'features_style' => array(
393
+ 'title' => esc_html__( 'Features Style', 'themeisle-companion' ),
394
+ 'sections' => array(
395
+ 'features_padding' => themeisle_four_fields_control(
396
+ array(
397
+ 'default' => array(
398
+ 'top' => 15,
399
+ 'bottom' => 15,
400
+ 'left' => 0,
401
+ 'right' => 0,
402
+ ),
403
+ 'selector' => '.obfx-pricing-price',
404
+ 'field_name_prefix' => 'features_',
405
+ )
406
+ ),
407
+ 'features_colors' => array(
408
+ 'title' => esc_html__( 'Colors', 'themeisle-companion' ),
409
+ 'fields' => array(
410
+ 'icon_color' => array(
411
+ 'type' => 'color',
412
+ 'label' => esc_html__( 'Icon color', 'themeisle-companion' ),
413
+ 'preview' => array(
414
+ 'type' => 'css',
415
+ 'rules' => array(
416
+ array(
417
+ 'selector' => '.obfx-pricing-feature-content i',
418
+ 'property' => 'color',
419
+ ),
420
+ ),
421
+ ),
422
+ ),
423
+ 'bold_color' => array(
424
+ 'type' => 'color',
425
+ 'label' => esc_html__( 'Bold text color', 'themeisle-companion' ),
426
+ 'preview' => array(
427
+ 'type' => 'css',
428
+ 'rules' => array(
429
+ array(
430
+ 'selector' => '.obfx-pricing-feature-content strong',
431
+ 'property' => 'color',
432
+ ),
433
+ ),
434
+ ),
435
+ ),
436
+ 'feature_color' => array(
437
+ 'type' => 'color',
438
+ 'label' => esc_html__( 'Text color', 'themeisle-companion' ),
439
+ 'preview' => array(
440
+ 'type' => 'css',
441
+ 'rules' => array(
442
+ array(
443
+ 'selector' => '.obfx-pricing-feature-content:not(i):not(strong)',
444
+ 'property' => 'color',
445
+ ),
446
+ ),
447
+ ),
448
+ ),
449
+ ),
450
+ ),
451
+ 'feature_typography' => themeisle_typography_settings(
452
+ array(
453
+ 'prefix' => 'feature_',
454
+ 'selector' => '.obfx-pricing-feature-content *',
455
+ 'font_size_default' => 17,
456
+ )
457
+ ),
458
+ ),
459
+ ),
460
+ 'button_style' => array(
461
+ 'title' => esc_html__( 'Button Style', 'themeisle-companion' ),
462
+ 'sections' => array(
463
+ 'button_margins' => themeisle_four_fields_control(
464
+ array(
465
+ 'default' => array(
466
+ 'top' => 15,
467
+ 'bottom' => 15,
468
+ 'left' => 0,
469
+ 'right' => 0,
470
+ ),
471
+ 'selector' => '.obfx-plan-bottom',
472
+ 'field_name_prefix' => 'button_margin_',
473
+ 'type' => 'margin',
474
+ )
475
+ ),
476
+ 'button_padding' => themeisle_four_fields_control(
477
+ array(
478
+ 'default' => array(
479
+ 'top' => 6,
480
+ 'bottom' => 6,
481
+ 'left' => 12,
482
+ 'right' => 12,
483
+ ),
484
+ 'selector' => '.obfx-plan-button',
485
+ 'field_name_prefix' => 'button_padding_',
486
+ )
487
+ ),
488
+ 'button_colors' => array(
489
+ 'title' => esc_html__( 'Colors', 'themeisle-companion' ),
490
+ 'fields' => array(
491
+ 'button_text_color' => array(
492
+ 'type' => 'color',
493
+ 'label' => esc_html__( 'Text', 'themeisle-companion' ),
494
+ 'preview' => array(
495
+ 'type' => 'css',
496
+ 'rules' => array(
497
+ array(
498
+ 'selector' => '.obfx-plan-button',
499
+ 'property' => 'color',
500
+ ),
501
+ ),
502
+ ),
503
+ ),
504
+ 'button_text_color_hover' => array(
505
+ 'type' => 'color',
506
+ 'label' => esc_html__( 'Text on hover', 'themeisle-companion' ),
507
+ 'preview' => array(
508
+ 'type' => 'css',
509
+ 'rules' => array(
510
+ array(
511
+ 'selector' => '.obfx-plan-button:hover',
512
+ 'property' => 'color',
513
+ ),
514
+ ),
515
+ ),
516
+ ),
517
+ 'button_bg_color' => array(
518
+ 'type' => 'color',
519
+ 'label' => esc_html__( 'Button background', 'themeisle-companion' ),
520
+ 'preview' => array(
521
+ 'type' => 'css',
522
+ 'rules' => array(
523
+ array(
524
+ 'selector' => '.obfx-plan-button',
525
+ 'property' => 'background-color',
526
+ ),
527
+ ),
528
+ ),
529
+ ),
530
+ 'button_bg_color_hover' => array(
531
+ 'type' => 'color',
532
+ 'label' => esc_html__( 'Button background on hover', 'themeisle-companion' ),
533
+ 'preview' => array(
534
+ 'type' => 'css',
535
+ 'rules' => array(
536
+ array(
537
+ 'selector' => '.obfx-plan-button:hover',
538
+ 'property' => 'background-color',
539
+ ),
540
+ ),
541
+ ),
542
+ ),
543
+ ),
544
+ ),
545
+ 'button_typography' => themeisle_typography_settings(
546
+ array(
547
+ 'prefix' => 'button_',
548
+ 'selector' => '.obfx-plan-button',
549
+ 'font_size_default' => 15,
550
+ )
551
+ ),
552
+ ),
553
+ ),
554
+ )
555
+ );
556
+
557
+
558
+ FLBuilder::register_settings_form(
559
+ 'feature_field', array(
560
+ 'title' => __( 'Feature', 'themeisle-companion' ),
561
+ 'tabs' => array(
562
+ 'general' => array(
563
+ 'title' => esc_html__( 'General', 'themeisle-companion' ),
564
+ 'sections' => array(
565
+ 'general' => array(
566
+ 'title' => '',
567
+ 'fields' => array(
568
+ 'bold_text' => array(
569
+ 'type' => 'text',
570
+ 'label' => esc_html__( 'Bold text', 'themeisle-companion' ),
571
+ ),
572
+ 'text' => array(
573
+ 'type' => 'text',
574
+ 'label' => esc_html__( 'Text', 'themeisle-companion' ),
575
+ ),
576
+ 'icon' => array(
577
+ 'type' => 'icon',
578
+ 'label' => esc_html__( 'Icon', 'themeisle-companion' ),
579
+ 'show_remove' => true,
580
+ ),
581
+ ),
582
+ ),
583
+ ),
584
+ ),
585
+ ),
586
+ )
587
+ );
obfx_modules/beaver-widgets/modules/services/css/frontend.css ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * This file should contain frontend styles that
3
+ * will be applied to all module instances.
4
+ */
5
+ .obfx-services-section{
6
+ text-align: center;
7
+ }
8
+
9
+ .obfx-service-title{
10
+ display: inline-block;
11
+ }
12
+
13
+ .obfx-card{
14
+ display: inline-block;
15
+ position: relative;
16
+ width: 100%;
17
+ margin-bottom: 30px;
18
+ border-radius: 6px;
19
+ color: rgba(0, 0, 0, 0.87);
20
+ background: #fff;
21
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
22
+ }
23
+
24
+ .obfx-service{
25
+ padding: 15px;
26
+ }
27
+
28
+ .obfx-service-icon{
29
+ vertical-align: middle;
30
+ }
31
+
32
+ .obfx-service-icon i{
33
+ vertical-align: inherit;
34
+ }
35
+ .obfx-service-icon .dashicons,.obfx-service-icon .dashicons-before:before{
36
+ width: inherit;
37
+ height: inherit;
38
+ font-size: inherit;
39
+ vertical-align: inherit;
40
+ }
obfx_modules/beaver-widgets/modules/services/includes/frontend.css.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $columns = $settings->column_number;
3
+ $column_width = 100 / (int) $columns;
4
+
5
+ echo '.fl-node-' . $id . ' .obfx-service-wrapper{';
6
+ echo 'display:inline-block;';
7
+ if ( ! empty( $column_width ) ) {
8
+ echo 'width:' . $column_width . '%;';
9
+ }
10
+ echo 'padding: 0 10px;';
11
+ echo '}';
12
+
13
+ $bg_color = $settings->background_color;
14
+ echo '.fl-node-' . $id . ' .obfx-service{';
15
+ if ( ! empty( $bg_color ) ) {
16
+ echo 'background:#' . $bg_color . ';';
17
+ }
18
+ echo '}';
19
+
20
+
21
+ $icon_size = $settings->icon_size;
22
+ $padding_top = $settings->icon_top;
23
+ $padding_bottom = $settings->icon_bottom;
24
+ $padding_left = $settings->icon_left;
25
+ $padding_right = $settings->icon_right;
26
+ $icon_position = $settings->icon_position;
27
+
28
+ echo '.fl-node-' . $id . ' .obfx-service-icon{';
29
+ if ( ! empty( $icon_size ) ) {
30
+ echo 'font-size:' . $icon_size . 'px;';
31
+ }
32
+ if ( ! empty( $padding_top ) ) {
33
+ echo 'padding-top:' . $padding_top . 'px;';
34
+ }
35
+ if ( ! empty( $padding_bottom ) ) {
36
+ echo 'padding-bottom:' . $padding_bottom . 'px;';
37
+ }
38
+ if ( ! empty( $padding_left ) ) {
39
+ echo 'padding-left:' . $padding_left . 'px;';
40
+ }
41
+ if ( ! empty( $padding_right ) ) {
42
+ echo 'padding-right:' . $padding_right . 'px;';
43
+ }
44
+ if ( ! empty( $icon_position ) && $icon_position !== 'center' ) {
45
+ echo 'float:' . $icon_position . ';';
46
+ }
47
+
48
+ echo '}';
49
+
50
+
51
+ $title_color = $settings->title_color;
52
+ $title_size = $settings->title_font_size;
53
+ $font_family = $settings->title_font_family['family'];
54
+ $font_weight = $settings->title_font_family['weight'];
55
+ $font_style = $settings->title_font_style;
56
+ $transform = $settings->title_transform;
57
+ $line_height = $settings->title_line_height;
58
+ $letter_spacing = $settings->title_letter_spacing;
59
+ echo '.fl-node-' . $id . ' .obfx-service-title{';
60
+ if ( ! empty( $title_color ) ) {
61
+ echo 'color: #' . $title_color . ';';
62
+ }
63
+ if ( ! empty( $title_size ) ) {
64
+ echo 'font-size:' . $title_size . 'px;';
65
+ }
66
+ if ( ! empty( $font_family ) ) {
67
+ echo 'font-family:' . $font_family . ';';
68
+ }
69
+ if ( ! empty( $font_weight ) ) {
70
+ echo 'font-weight:' . $font_weight . ';';
71
+ }
72
+ if ( ! empty( $font_style ) ) {
73
+ echo 'font-style:' . $font_style . ';';
74
+ }
75
+ if ( ! empty( $transform ) ) {
76
+ echo 'text-transform:' . $transform . ';';
77
+ }
78
+ if ( ! empty( $line_height ) ) {
79
+ echo 'line-height:' . $line_height . 'px;';
80
+ }
81
+ if ( ! empty( $letter_spacing ) ) {
82
+ echo 'letter-spacing:' . $letter_spacing . 'px;';
83
+ }
84
+ echo '}';
85
+
86
+
87
+ $content_color = $settings->content_color;
88
+ $content_size = $settings->content_font_size;
89
+ $font_family = $settings->content_font_family['family'];
90
+ $font_weight = $settings->content_font_family['weight'];
91
+ $font_style = $settings->content_font_style;
92
+ $transform = $settings->content_transform;
93
+ $line_height = $settings->content_line_height;
94
+ $alignment = $settings->content_alignment;
95
+ $letter_spacing = $settings->content_letter_spacing;
96
+ echo '.fl-node-' . $id . ' .obfx-service-content{';
97
+ if ( ! empty( $content_color ) ) {
98
+ echo 'color: #' . $content_color . ';';
99
+ }
100
+ if ( ! empty( $content_size ) ) {
101
+ echo 'font-size:' . $content_size . 'px;';
102
+ }
103
+ if ( ! empty( $font_family ) ) {
104
+ echo 'font-family:' . $font_family . ';';
105
+ }
106
+ if ( ! empty( $font_weight ) ) {
107
+ echo 'font-weight:' . $font_weight . ';';
108
+ }
109
+ if ( ! empty( $font_style ) ) {
110
+ echo 'font-style:' . $font_style . ';';
111
+ }
112
+ if ( ! empty( $transform ) ) {
113
+ echo 'text-transform:' . $transform . ';';
114
+ }
115
+ if ( ! empty( $line_height ) ) {
116
+ echo 'line-height:' . $line_height . 'px;';
117
+ }
118
+ if ( ! empty( $alignment ) ) {
119
+ echo 'text-align:' . $alignment . ';';
120
+ }
121
+ if ( ! empty( $letter_spacing ) ) {
122
+ echo 'letter-spacing:' . $letter_spacing . 'px;';
123
+ }
124
+ echo '}';
obfx_modules/beaver-widgets/modules/services/includes/frontend.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file is used to render services module.
4
+ * You have access to two variables in this file:
5
+ *
6
+ * $module An instance of your module class.
7
+ * $settings The module's settings.
8
+ */
9
+
10
+ $columns = $settings->column_number;
11
+ $services = $settings->services;
12
+ $services_nb = sizeof( $services );
13
+ $card_layout = $settings->card_layout;
14
+ $container_class = $card_layout === 'yes' ? 'obfx-card obfx-service' : 'obfx-service';
15
+ if ( ! empty( $columns ) ) {
16
+ echo '<div class="obfx-services-section">';
17
+ foreach ( $services as $service ) {
18
+ echo '<div class="obfx-service-wrapper">';
19
+ echo '<div class="' . esc_attr( $container_class ) . '">';
20
+ $title = $service->title;
21
+ $text = $service->text;
22
+ $icon = $service->icon;
23
+ $link = $service->link;
24
+
25
+ if ( ! empty( $icon ) ) {
26
+ $icon_color = ! empty( $service->icon_color ) ? '#' . $service->icon_color : '#d6d6d6';
27
+ echo '<div class="obfx-service-icon" style="color:' . esc_attr( $icon_color ) . '"><i class="' . esc_attr( $icon ) . '"></i></div>';
28
+ }
29
+ if ( ! empty( $title ) ) {
30
+ if ( ! empty( $link ) ) {
31
+ echo '<a class="obfx-service-title" href="' . esc_url( $link ) . '" target="_blank">';
32
+ }
33
+ echo '<h4 class="obfx-service-title">' . wp_kses_post( $title ) . '</h4>';
34
+ if ( ! empty( $link ) ) {
35
+ echo '</a>';
36
+ }
37
+ }
38
+
39
+ if ( ! empty( $text ) ) {
40
+ echo '<p class="obfx-service-content">' . wp_kses_post( $text ) . '</p>';
41
+ }
42
+
43
+ echo '</div>';
44
+ echo '</div>';
45
+ }
46
+ echo '</div>';
47
+
48
+ }
obfx_modules/beaver-widgets/modules/services/services.php ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Services module.
4
+ *
5
+ * @package themeisle-companion
6
+ */
7
+
8
+ // Get the module directory.
9
+ $module_directory = $this->get_dir();
10
+
11
+ // Include common functions file.
12
+ require_once( $module_directory . '/inc/common-functions.php' );
13
+
14
+ // Include custom fields
15
+ require_once( $module_directory . '/custom-fields/toggle-field/toggle_field.php' );
16
+
17
+ /**
18
+ * Class PricingTableModule
19
+ */
20
+ class ServicesModule extends FLBuilderModule {
21
+
22
+ /**
23
+ * Constructor function for the module. You must pass the
24
+ * name, description, dir and url in an array to the parent class.
25
+ *
26
+ * @method __construct
27
+ */
28
+ public function __construct() {
29
+ parent::__construct(
30
+ array(
31
+ 'name' => esc_html__( 'Services', 'themeisle-companion' ),
32
+ 'description' => esc_html__( 'An overview of the products or services.', 'themeisle-companion' ),
33
+ 'category' => esc_html__( 'Orbit Fox Modules', 'themeisle-companion' ),
34
+ 'dir' => BEAVER_WIDGETS_PATH . 'modules/services/',
35
+ 'url' => BEAVER_WIDGETS_URL . 'modules/services/',
36
+ )
37
+ );
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Register the module and its form settings.
43
+ */
44
+ FLBuilder::register_module(
45
+ 'ServicesModule', array(
46
+ 'content' => array(
47
+ 'title' => esc_html__( 'Content', 'themeisle-companion' ), // Tab title
48
+ 'sections' => array(
49
+ 'content' => array(
50
+ 'title' => '',
51
+ 'fields' => array(
52
+ 'services' => array(
53
+ 'multiple' => true,
54
+ 'type' => 'form',
55
+ 'label' => esc_html__( 'Service', 'themeisle-companion' ),
56
+ 'form' => 'service_content', // ID of a registered form.
57
+ 'preview_text' => 'title', // ID of a field to use for the preview text.
58
+ ),
59
+ 'column_number' => array(
60
+ 'type' => 'select',
61
+ 'label' => esc_html__( 'Number of columns', 'themeisle-companion' ),
62
+ 'default' => '3',
63
+ 'options' => array(
64
+ '1' => esc_html__( '1', 'themeisle-companion' ),
65
+ '2' => esc_html__( '2', 'themeisle-companion' ),
66
+ '3' => esc_html__( '3', 'themeisle-companion' ),
67
+ '4' => esc_html__( '4', 'themeisle-companion' ),
68
+ '5' => esc_html__( '5', 'themeisle-companion' ),
69
+ ),
70
+ ),
71
+ 'card_layout' => array(
72
+ 'type' => 'obfx_toggle',
73
+ 'label' => esc_html__( 'Card layout', 'themeisle-companion' ),
74
+ 'default' => 'yes',
75
+ ),
76
+ 'background_color' => array(
77
+ 'type' => 'color',
78
+ 'label' => esc_html__( 'Background color', 'themeisle-companion' ),
79
+ 'default' => 'ffffff',
80
+ 'preview' => array(
81
+ 'type' => 'css',
82
+ 'rules' => array(
83
+ array(
84
+ 'selector' => '.obfx-service',
85
+ 'property' => 'background',
86
+ ),
87
+ ),
88
+ ),
89
+ ),
90
+
91
+ ),
92
+ ),
93
+ ),
94
+ ),
95
+ 'icon_style' => array(
96
+ 'title' => esc_html__( 'Icon style', 'themeisle-companion' ), // Tab title
97
+ 'sections' => array(
98
+ 'font' => array(
99
+ 'title' => esc_html__( 'General', 'themeisle-companion' ),
100
+ 'fields' => array(
101
+ 'icon_position' => array(
102
+ 'type' => 'select',
103
+ 'label' => esc_html__( 'Position', 'themeisle-companion' ),
104
+ 'default' => 'center',
105
+ 'options' => array(
106
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
107
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
108
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
109
+ ),
110
+ ),
111
+ 'icon_size' => array(
112
+ 'type' => 'text',
113
+ 'label' => esc_html__( 'Size', 'themeisle-companion' ),
114
+ 'description' => esc_html__( 'px', 'themeisle-companion' ),
115
+ 'default' => '45',
116
+ 'maxlength' => '3',
117
+ 'size' => '4',
118
+ 'preview' => array(
119
+ 'type' => 'css',
120
+ 'rules' => array(
121
+ array(
122
+ 'selector' => '.obfx-service-icon',
123
+ 'property' => 'font-size',
124
+ 'unit' => 'px',
125
+ ),
126
+ ),
127
+ ),
128
+ ),
129
+ ),
130
+ ),
131
+ 'icon_padding' => themeisle_four_fields_control(
132
+ array(
133
+ 'default' => array(
134
+ 'top' => 30,
135
+ 'bottom' => 15,
136
+ 'left' => 25,
137
+ 'right' => 25,
138
+ ),
139
+ 'selector' => '.obfx-service-icon',
140
+ 'field_name_prefix' => 'icon_',
141
+ )
142
+ ),
143
+ ),
144
+ ),
145
+ 'title_style' => array(
146
+ 'title' => esc_html__( 'Title style', 'themeisle-companion' ),
147
+ 'sections' => array(
148
+ 'general' => array(
149
+ 'title' => esc_html__( 'General', 'themeisle-companion' ),
150
+ 'fields' => array(
151
+ 'title_color' => array(
152
+ 'type' => 'color',
153
+ 'label' => esc_html__( 'Color', 'themeisle-companion' ),
154
+ 'preview' => array(
155
+ 'type' => 'css',
156
+ 'rules' => array(
157
+ array(
158
+ 'selector' => '.obfx-service-title',
159
+ 'property' => 'color',
160
+ ),
161
+ ),
162
+ ),
163
+ ),
164
+ ),
165
+ ),
166
+ 'typography' => themeisle_typography_settings(
167
+ array(
168
+ 'prefix' => 'title_',
169
+ 'selector' => '.obfx-service-title',
170
+ )
171
+ ),
172
+ ),
173
+ ),
174
+ 'content_style' => array(
175
+ 'title' => esc_html__( 'Content style', 'themeisle-companion' ),
176
+ 'sections' => array(
177
+ 'general' => array(
178
+ 'title' => esc_html__( 'General', 'themeisle-companion' ),
179
+ 'fields' => array(
180
+ 'content_alignment' => array(
181
+ 'type' => 'select',
182
+ 'label' => esc_html__( 'Alignment', 'themeisle-companion' ),
183
+ 'default' => 'center',
184
+ 'options' => array(
185
+ 'left' => esc_html__( 'Left', 'themeisle-companion' ),
186
+ 'center' => esc_html__( 'Center', 'themeisle-companion' ),
187
+ 'right' => esc_html__( 'Right', 'themeisle-companion' ),
188
+ ),
189
+ ),
190
+ 'content_color' => array(
191
+ 'type' => 'color',
192
+ 'label' => esc_html__( 'Color', 'themeisle-companion' ),
193
+ 'preview' => array(
194
+ 'type' => 'css',
195
+ 'rules' => array(
196
+ array(
197
+ 'selector' => '.obfx-service-content',
198
+ 'property' => 'color',
199
+ ),
200
+ ),
201
+ ),
202
+ ),
203
+ ),
204
+ ),
205
+ 'typography' => themeisle_typography_settings(
206
+ array(
207
+ 'prefix' => 'content_',
208
+ 'selector' => '.obfx-service-content',
209
+ )
210
+ ),
211
+ ),
212
+ ),
213
+ )
214
+ );
215
+
216
+ FLBuilder::register_settings_form(
217
+ 'service_content', array(
218
+ 'title' => __( 'Service', 'themeisle-companion' ),
219
+ 'tabs' => array(
220
+ 'general' => array(
221
+ 'title' => esc_html__( 'General', 'themeisle-companion' ),
222
+ 'sections' => array(
223
+ 'general' => array(
224
+ 'title' => '',
225
+ 'fields' => array(
226
+ 'title' => array(
227
+ 'type' => 'text',
228
+ 'label' => esc_html__( 'Title', 'themeisle-companion' ),
229
+ ),
230
+ 'text' => array(
231
+ 'type' => 'textarea',
232
+ 'label' => esc_html__( 'Text', 'themeisle-companion' ),
233
+ 'rows' => '6',
234
+ ),
235
+ 'icon' => array(
236
+ 'type' => 'icon',
237
+ 'label' => esc_html__( 'Icon', 'themeisle-companion' ),
238
+ 'show_remove' => true,
239
+ ),
240
+ 'icon_color' => array(
241
+ 'type' => 'color',
242
+ 'label' => esc_html__( 'Icon color', 'themeisle-companion' ),
243
+ 'default' => 'd6d6d6',
244
+ ),
245
+ 'link' => array(
246
+ 'type' => 'link',
247
+ 'label' => esc_html__( 'Link to', 'themeisle-companion' ),
248
+ ),
249
+ ),
250
+ ),
251
+ ),
252
+ ),
253
+ ),
254
+ )
255
+ );
obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php CHANGED
@@ -98,22 +98,28 @@ class OBFX_Elementor_Widget_Posts_Grid extends Widget_Base {
98
 
99
  if ( $post_type == 'post' ) {
100
  $taxonomy = 'category';
101
- } else {
102
  $taxonomy = 'product_cat';
103
  }
104
 
105
- // Get categories for post type.
106
- $terms = get_terms(
107
- array(
108
- 'taxonomy' => $taxonomy,
109
- 'hide_empty' => false,
110
- )
111
- );
112
-
113
- foreach ( $terms as $term ) {
114
- $options[ $term->slug ] = $term->name;
 
 
 
 
 
 
 
115
  }
116
-
117
  return $options;
118
  }
119
 
@@ -349,7 +355,7 @@ class OBFX_Elementor_Widget_Posts_Grid extends Widget_Base {
349
  'h3' => 'H3',
350
  'h4' => 'H4',
351
  'h5' => 'H5',
352
- 'h6' => 'Hh6',
353
  'span' => 'span',
354
  'p' => 'p',
355
  'div' => 'div',
98
 
99
  if ( $post_type == 'post' ) {
100
  $taxonomy = 'category';
101
+ } elseif ( $post_type == 'product' ) {
102
  $taxonomy = 'product_cat';
103
  }
104
 
105
+ if ( ! empty( $taxonomy ) ) {
106
+ // Get categories for post type.
107
+ $terms = get_terms(
108
+ array(
109
+ 'taxonomy' => $taxonomy,
110
+ 'hide_empty' => false,
111
+ )
112
+ );
113
+ if ( ! empty( $terms ) ) {
114
+ foreach ( $terms as $term ) {
115
+ if ( isset( $term ) ) {
116
+ if ( isset( $term->slug ) && isset( $term->name ) ) {
117
+ $options[ $term->slug ] = $term->name;
118
+ }
119
+ }
120
+ }
121
+ }
122
  }
 
123
  return $options;
124
  }
125
 
355
  'h3' => 'H3',
356
  'h4' => 'H4',
357
  'h5' => 'H5',
358
+ 'h6' => 'H6',
359
  'span' => 'span',
360
  'p' => 'p',
361
  'div' => 'div',
obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php CHANGED
@@ -947,12 +947,15 @@ class OBFX_Elementor_Widget_Pricing_Table extends Widget_Base {
947
  $this->add_render_attribute( 'button', 'class', 'obfx-pricing-table-button' );
948
  $this->add_render_attribute( 'button_icon', 'class', $settings['button_icon'] );
949
  $this->add_render_attribute( 'button_icon_align', 'class', 'obfx-button-icon-align-' . $settings['button_icon_align'] );
950
- if ( ! empty( $settings['link']['url'] ) ) {
951
- $this->add_render_attribute( 'button', 'href', $settings['link']['url'] );
952
 
953
- if ( ! empty( $settings['link']['is_external'] ) ) {
954
  $this->add_render_attribute( 'button', 'target', '_blank' );
955
  }
 
 
 
956
  }
957
 
958
  $output = '';
947
  $this->add_render_attribute( 'button', 'class', 'obfx-pricing-table-button' );
948
  $this->add_render_attribute( 'button_icon', 'class', $settings['button_icon'] );
949
  $this->add_render_attribute( 'button_icon_align', 'class', 'obfx-button-icon-align-' . $settings['button_icon_align'] );
950
+ if ( ! empty( $settings['button_link']['url'] ) ) {
951
+ $this->add_render_attribute( 'button', 'href', $settings['button_link']['url'] );
952
 
953
+ if ( ! empty( $settings['button_link']['is_external'] ) ) {
954
  $this->add_render_attribute( 'button', 'target', '_blank' );
955
  }
956
+ if ( ! empty( $settings['button_link']['nofollow'] ) ) {
957
+ $this->add_render_attribute( 'button', 'rel', 'nofollow' );
958
+ }
959
  }
960
 
961
  $output = '';
obfx_modules/stats/css/stats.css DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * Test Module Admin Style
3
- *
4
- * @since 1.0.0
5
- * @package obfx_modules/test/css
6
- *
7
- * @author ThemeIsle
8
- */
 
 
 
 
 
 
 
 
obfx_modules/stats/init.php DELETED
@@ -1,314 +0,0 @@
1
- <?php
2
- /**
3
- * The Mock-up to demonstrate and test module use.
4
- *
5
- * @link https://themeisle.com
6
- * @since 1.0.0
7
- *
8
- * @package Test_OBFX_Module
9
- */
10
-
11
- /**
12
- * The class defines a new module to be used by Orbit Fox plugin.
13
- *
14
- * @package Test_OBFX_Module
15
- * @author Themeisle <friends@themeisle.com>
16
- */
17
- class Stats_OBFX_Module extends Orbit_Fox_Module_Abstract {
18
-
19
- /**
20
- * Test_OBFX_Module constructor.
21
- *
22
- * @since 1.0.0
23
- * @access public
24
- */
25
- public function __construct() {
26
- parent::__construct();
27
- $this->name = __( 'Reports Module', 'themeisle-companion' );
28
- $this->description = __( 'A simple module for your WordPress data.', 'themeisle-companion' );
29
-
30
- }
31
-
32
- /**
33
- * Determine if module should be loaded.
34
- *
35
- * @since 1.0.0
36
- * @access public
37
- * @return bool
38
- */
39
- public function enable_module() {
40
- return true;
41
- }
42
-
43
- /**
44
- * The loading logic for the module.
45
- *
46
- * @since 1.0.0
47
- * @access public
48
- */
49
- public function load() {
50
-
51
- }
52
-
53
- /**
54
- * Method to define hooks needed.
55
- *
56
- * @since 1.0.0
57
- * @access public
58
- */
59
- public function hooks() {
60
- $this->loader->add_action( 'wp_dashboard_setup', $this, 'add_dashboard_widgets' );
61
- }
62
-
63
- /**
64
- * Module method to add a dashboard widget
65
- *
66
- * @since 1.0.0
67
- * @access public
68
- */
69
- public function add_dashboard_widgets() {
70
- wp_add_dashboard_widget(
71
- 'obfx_dashboard_widget', // Widget slug.
72
- 'Site Reports <small><i>by Orbit Fox</i></small>', // Title.
73
- array( $this, 'dashboard_widget_function' ) // Display function.
74
- );
75
- }
76
-
77
- /**
78
- * Display method for the Dashboard widget.
79
- *
80
- * @since 1.0.0
81
- * @access public
82
- */
83
- public function dashboard_widget_function() {
84
- $display_year = $this->get_option( 'display_year' );
85
- $posts_count = $this->get_posts_count( $display_year );
86
- $comments_count = $this->get_comments_count( $display_year );
87
-
88
- $data = array(
89
- 'display_year' => $display_year,
90
- 'title' => $this->get_option( 'dashboard_title' ),
91
- 'desc' => $this->get_option( 'dashboard_desc' ),
92
- 'graph_shows' => $this->get_option( 'graph_shows' ),
93
- 'posts_count' => $posts_count,
94
- 'comments_count' => $comments_count,
95
- );
96
-
97
- echo $this->render_view( 'dashboard-widget', $data );
98
- }
99
-
100
- /**
101
- * Utility method to return posts count,
102
- *
103
- * @since 1.0.0
104
- * @access public
105
- *
106
- * @param string $display_year The year to query for.
107
- *
108
- * @return array
109
- */
110
- public function get_posts_count( $display_year ) {
111
- $posts_count = array();
112
- for ( $cnt = 0; $cnt < 12; $cnt ++ ) {
113
- $posts_count[] = rand( 13, 766 );
114
- }
115
-
116
- if ( ! $this->get_option( 'mock_data' ) ) {
117
- global $wpdb;
118
- $results = $wpdb->get_results( $this->build_graph_query( $display_year, $wpdb->posts, true ), ARRAY_A );
119
- $posts_count = $this->build_graph_array( $results, true );
120
- }
121
-
122
- return $posts_count;
123
- }
124
-
125
- /**
126
- * Creates a query for graph data.
127
- *
128
- * @since 1.0.0
129
- * @access private
130
- *
131
- * @param string $display_year The year to look for.
132
- * @param string $table The table name
133
- * @param bool $posts_or_comments Counts posts if `true` or comments if `false`.
134
- *
135
- * @return string
136
- */
137
- private function build_graph_query( $display_year, $table, $posts_or_comments ) {
138
- $count = "SUM(`comment_count`) as `comment_count`";
139
- if ( $posts_or_comments ) {
140
- $count = "COUNT( `ID` ) AS `post_count`";
141
- }
142
- $query = "
143
- SELECT
144
- MONTH( `post_date` ) AS `post_month`, {$count}
145
- FROM {$table}
146
- WHERE `post_type` = 'post' AND `post_status` = 'publish' AND YEAR( `post_date` ) = '{$display_year}'
147
- GROUP BY `post_month`
148
- ";
149
-
150
- return $query;
151
- }
152
-
153
- /**
154
- * Utility method to build result array.
155
- *
156
- * @since 1.0.0
157
- * @access private
158
- *
159
- * @param array $results Query results as associative array.
160
- * @param bool $posts_or_comments Counts posts if `true` or comments if `false`.
161
- *
162
- * @return array
163
- */
164
- private function build_graph_array( $results, $posts_or_comments ) {
165
- $data_count = array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
166
- foreach ( $results as $posts_published ) {
167
- $pos = $posts_published['post_month'] - 1;
168
- $key = 'comment_count';
169
- if ( $posts_or_comments ) {
170
- $key = 'post_count';
171
- }
172
- $data_count[ $pos ] = (int) $posts_published[ $key ];
173
- }
174
-
175
- return $data_count;
176
- }
177
-
178
- /**
179
- * Utility method to return comments count,
180
- *
181
- * @since 1.0.0
182
- * @access public
183
- *
184
- * @param string $display_year The year to query for.
185
- *
186
- * @return array
187
- */
188
- public function get_comments_count( $display_year ) {
189
- $comments_count = array();
190
- for ( $cnt = 0; $cnt < 12; $cnt ++ ) {
191
- $comments_count[] = rand( 7, 484 );
192
- }
193
-
194
- if ( ! $this->get_option( 'mock_data' ) ) {
195
- global $wpdb;
196
- $results = $wpdb->get_results( $this->build_graph_query( $display_year, $wpdb->posts, false ), ARRAY_A );
197
- $comments_count = $this->build_graph_array( $results, false );
198
- }
199
-
200
- return $comments_count;
201
- }
202
-
203
- /**
204
- * Method that returns an array of scripts and styles to be loaded
205
- * for the front end part.
206
- *
207
- * @since 1.0.0
208
- * @access public
209
- * @return array
210
- */
211
- public function public_enqueue() {
212
- return array();
213
- }
214
-
215
- /**
216
- * Method that returns an array of scripts and styles to be loaded
217
- * for the admin part.
218
- *
219
- * @since 1.0.0
220
- * @access public
221
- * @return array|boolean
222
- */
223
- public function admin_enqueue() {
224
- $current_screen = get_current_screen();
225
-
226
- if ( ! isset( $current_screen->id ) ) {
227
- return array();
228
- }
229
- if ( $current_screen->id != 'dashboard' ) {
230
- return array();
231
- }
232
-
233
- return array(
234
- 'js' => array(
235
- 'vendor/chart.min' => array( 'jquery' ),
236
- 'stats' => array( 'jquery' ),
237
- ),
238
- 'css' => array(
239
- 'stats' => false,
240
- ),
241
- );
242
- }
243
-
244
- /**
245
- * Method to define the options fields for the module
246
- *
247
- * @since 1.0.0
248
- * @access public
249
- * @return array
250
- */
251
- public function options() {
252
- return array(
253
- array(
254
- 'id' => 'dashboard_title',
255
- 'name' => 'dashboard_title',
256
- 'title' => 'Dashboard Title',
257
- 'description' => 'This title is displayed on the Dasboard widget.',
258
- 'type' => 'text',
259
- 'default' => '',
260
- 'placeholder' => 'Add some text',
261
- ),
262
- array(
263
- 'id' => 'dashboard_desc',
264
- 'name' => 'dashboard_desc',
265
- 'title' => 'Dashboard Graph Description (*optional)',
266
- 'description' => 'This will be displayed inside the Dashboard widget.',
267
- 'type' => 'textarea',
268
- 'default' => '',
269
- 'placeholder' => 'Add some text here ...',
270
- ),
271
- array(
272
- 'id' => 'display_year',
273
- 'name' => 'display_year',
274
- 'title' => 'The year to use for graph plotting.',
275
- 'description' => 'Based on the selected year here will update the graph on the Dashboard widget.',
276
- 'type' => 'select',
277
- 'default' => '2017',
278
- 'placeholder' => 'Select an option',
279
- 'options' => array(
280
- '2017' => '2017',
281
- '2016' => '2016',
282
- '2015' => '2015',
283
- '2014' => '2014',
284
- '2013' => '2013',
285
- '2012' => '2012',
286
- '2011' => '2011',
287
- '2010' => '2010',
288
- ),
289
- ),
290
- array(
291
- 'id' => 'graph_shows',
292
- 'name' => 'graph_shows',
293
- 'title' => 'What does the graph display?',
294
- 'description' => 'Select what is displayed on the graph.',
295
- 'type' => 'radio',
296
- 'default' => '2',
297
- 'options' => array(
298
- '0' => 'Posts Count',
299
- '1' => 'Comments Count',
300
- '2' => 'Posts & Comments Count',
301
- ),
302
- ),
303
- array(
304
- 'id' => 'mock_data',
305
- 'name' => 'mock_data',
306
- 'label' => 'Disable/Enable',
307
- 'title' => 'Use mock data for graph?',
308
- 'description' => 'If enabled this plots mock data on graph.',
309
- 'type' => 'toggle',
310
- 'default' => '1',
311
- ),
312
- );
313
- }
314
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
obfx_modules/stats/js/stats.js DELETED
@@ -1,71 +0,0 @@
1
- /**
2
- * Test Module Admin Script
3
- *
4
- * @since 1.0.0
5
- * @package obfx_modules/test/js
6
- *
7
- * @author ThemeIsle
8
- */
9
-
10
- /* jshint unused:vars */
11
- /* global console, Chart, jQuery */
12
- var stats_module = function( $ ) {
13
- 'use strict';
14
- $(
15
- function() {
16
- if ( $( '#obfxChart' ).length ) {
17
- var myChart;
18
- var ctx = document.getElementById( 'obfxChart' ).getContext( '2d' );
19
- var posts_data = $( '#obfxChart' ).data( 'posts' );
20
- var comments_data = $( '#obfxChart' ).data( 'comments' );
21
-
22
- var dataset = [];
23
- if ( typeof posts_data !== 'undefined' ) {
24
- dataset.push(
25
- {
26
- label: '# of Posts',
27
- data: posts_data,
28
- backgroundColor: 'rgba( 3, 169, 244, 0.5 )',
29
- borderColor: 'rgba( 3, 169, 244, 1 )',
30
- borderWidth: 1
31
- }
32
- );
33
- }
34
-
35
- if ( typeof comments_data !== 'undefined' ) {
36
- dataset.push(
37
- {
38
- label: '# of Comments',
39
- data: comments_data,
40
- backgroundColor: 'rgba( 255, 152, 0, 0.5 )',
41
- borderColor: 'rgba( 255, 152, 0, 1 )',
42
- borderWidth: 1
43
- }
44
- );
45
- }
46
-
47
- console.log( ctx );
48
- myChart = new Chart(
49
- ctx, {
50
- type: 'bar',
51
- data: {
52
- labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
53
- datasets: dataset
54
- },
55
- options: {
56
- scales: {
57
- yAxes: [{
58
- ticks: {
59
- beginAtZero: true
60
- }
61
- }]
62
- }
63
- }
64
- }
65
- );
66
- }// End if().
67
- }
68
- );
69
-
70
- };
71
- stats_module( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
obfx_modules/stats/js/vendor/chart.min.js DELETED
@@ -1,14 +0,0 @@
1
- /*!
2
- * Chart.js
3
- * http://chartjs.org/
4
- * Version: 2.6.0
5
- *
6
- * Copyright 2017 Nick Downie
7
- * Released under the MIT license
8
- * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
9
- */
10
- !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Chart=t()}}(function(){return function t(e,n,i){function a(r,l){if(!n[r]){if(!e[r]){var s="function"==typeof require&&require;if(!l&&s)return s(r,!0);if(o)return o(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var d=n[r]={exports:{}};e[r][0].call(d.exports,function(t){var n=e[r][1][t];return a(n?n:t)},d,d.exports,t,e,n,i)}return n[r].exports}for(var o="function"==typeof require&&require,r=0;r<i.length;r++)a(i[r]);return a}({1:[function(t,e,n){},{}],2:[function(t,e,n){function i(t){if(t){var e=/^#([a-fA-F0-9]{3})$/,n=/^#([a-fA-F0-9]{6})$/,i=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,o=/(\w+)/,r=[0,0,0],l=1,s=t.match(e);if(s){s=s[1];for(var u=0;u<r.length;u++)r[u]=parseInt(s[u]+s[u],16)}else if(s=t.match(n)){s=s[1];for(var u=0;u<r.length;u++)r[u]=parseInt(s.slice(2*u,2*u+2),16)}else if(s=t.match(i)){for(var u=0;u<r.length;u++)r[u]=parseInt(s[u+1]);l=parseFloat(s[4])}else if(s=t.match(a)){for(var u=0;u<r.length;u++)r[u]=Math.round(2.55*parseFloat(s[u+1]));l=parseFloat(s[4])}else if(s=t.match(o)){if("transparent"==s[1])return[0,0,0,0];if(r=y[s[1]],!r)return}for(var u=0;u<r.length;u++)r[u]=b(r[u],0,255);return l=l||0==l?b(l,0,1):1,r[3]=l,r}}function a(t){if(t){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),o=b(parseFloat(n[2]),0,100),r=b(parseFloat(n[3]),0,100),l=b(isNaN(i)?1:i,0,1);return[a,o,r,l]}}}function o(t){if(t){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),o=b(parseFloat(n[2]),0,100),r=b(parseFloat(n[3]),0,100),l=b(isNaN(i)?1:i,0,1);return[a,o,r,l]}}}function r(t){var e=i(t);return e&&e.slice(0,3)}function l(t){var e=a(t);return e&&e.slice(0,3)}function s(t){var e=i(t);return e?e[3]:(e=a(t))?e[3]:(e=o(t))?e[3]:void 0}function u(t){return"#"+x(t[0])+x(t[1])+x(t[2])}function d(t,e){return e<1||t[3]&&t[3]<1?c(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"}function c(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function h(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"}function f(t,e){var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgba("+n+"%, "+i+"%, "+a+"%, "+(e||t[3]||1)+")"}function g(t,e){return e<1||t[3]&&t[3]<1?p(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function v(t){return k[t.slice(0,3)]}function b(t,e,n){return Math.min(Math.max(e,t),n)}function x(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var y=t(6);e.exports={getRgba:i,getHsla:a,getRgb:r,getHsl:l,getHwb:o,getAlpha:s,hexString:u,rgbString:d,rgbaString:c,percentString:h,percentaString:f,hslString:g,hslaString:p,hwbString:m,keyword:v};var k={};for(var w in y)k[y[w]]=w},{6:6}],3:[function(t,e,n){var i=t(5),a=t(2),o=function(t){if(t instanceof o)return t;if(!(this instanceof o))return new o(t);this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var e;"string"==typeof t?(e=a.getRgba(t),e?this.setValues("rgb",e):(e=a.getHsla(t))?this.setValues("hsl",e):(e=a.getHwb(t))&&this.setValues("hwb",e)):"object"==typeof t&&(e=t,void 0!==e.r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e))};o.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t%=360,t=t<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return a.hexString(this.values.rgb)},rgbString:function(){return a.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return a.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return a.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return a.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return a.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return a.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return a.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb,e=(299*t[0]+587*t[1]+114*t[2])/1e3;return e<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=this,i=t,a=void 0===e?.5:e,o=2*a-1,r=n.alpha()-i.alpha(),l=((o*r===-1?o:(o+r)/(1+o*r))+1)/2,s=1-l;return this.rgb(l*n.red()+s*i.red(),l*n.green()+s*i.green(),l*n.blue()+s*i.blue()).alpha(n.alpha()*a+i.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new o,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],e={}.toString.call(t),"[object Array]"===e?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},o.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},o.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},o.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},o.prototype.setValues=function(t,e){var n,a=this.values,o=this.spaces,r=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[o[t][0]]){var s=o[t];for(n=0;n<t.length;n++)a[t][n]=e[s[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;var u;for(n=0;n<t.length;n++)u=Math.max(0,Math.min(r[t][n],a[t][n])),a[t][n]=Math.round(u);for(var d in o)d!==t&&(a[d]=i[t][d](a[t]));return!0},o.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},o.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=o),e.exports=o},{2:2,5:5}],4:[function(t,e,n){function i(t){var e,n,i,a=t[0]/255,o=t[1]/255,r=t[2]/255,l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=(l+s)/2,n=s==l?0:i<=.5?u/(s+l):u/(2-s-l),[e,100*n,100*i]}function a(t){var e,n,i,a=t[0],o=t[1],r=t[2],l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return n=0==s?0:u/s*1e3/10,s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=s/255*1e3/10,[e,n,i]}function o(t){var e=t[0],n=t[1],a=t[2],o=i(t)[0],r=1/255*Math.min(e,Math.min(n,a)),a=1-1/255*Math.max(e,Math.max(n,a));return[o,100*r,100*a]}function l(t){var e,n,i,a,o=t[0]/255,r=t[1]/255,l=t[2]/255;return a=Math.min(1-o,1-r,1-l),e=(1-o-a)/(1-a)||0,n=(1-r-a)/(1-a)||0,i=(1-l-a)/(1-a)||0,[100*e,100*n,100*i,100*a]}function s(t){return Z[JSON.stringify(t)]}function u(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92;var a=.4124*e+.3576*n+.1805*i,o=.2126*e+.7152*n+.0722*i,r=.0193*e+.1192*n+.9505*i;return[100*a,100*o,100*r]}function d(t){var e,n,i,a=u(t),o=a[0],r=a[1],l=a[2];return o/=95.047,r/=100,l/=108.883,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,l=l>.008856?Math.pow(l,1/3):7.787*l+16/116,e=116*r-16,n=500*(o-r),i=200*(r-l),[e,n,i]}function c(t){return B(d(t))}function h(t){var e,n,i,a,o,r=t[0]/360,l=t[1]/100,s=t[2]/100;if(0==l)return o=255*s,[o,o,o];n=s<.5?s*(1+l):s+l-s*l,e=2*s-n,a=[0,0,0];for(var u=0;u<3;u++)i=r+1/3*-(u-1),i<0&&i++,i>1&&i--,o=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*o;return a}function f(t){var e,n,i=t[0],a=t[1]/100,o=t[2]/100;return 0===o?[0,0,0]:(o*=2,a*=o<=1?o:2-o,n=(o+a)/2,e=2*a/(o+a),[i,100*e,100*n])}function p(t){return o(h(t))}function m(t){return l(h(t))}function v(t){return s(h(t))}function x(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*i*(1-n),l=255*i*(1-n*o),s=255*i*(1-n*(1-o)),i=255*i;switch(a){case 0:return[i,s,r];case 1:return[l,i,r];case 2:return[r,i,s];case 3:return[r,l,i];case 4:return[s,r,i];case 5:return[i,r,l]}}function y(t){var e,n,i=t[0],a=t[1]/100,o=t[2]/100;return n=(2-a)*o,e=a*o,e/=n<=1?n:2-n,e=e||0,n/=2,[i,100*e,100*n]}function k(t){return o(x(t))}function w(t){return l(x(t))}function M(t){return s(x(t))}function S(t){var e,n,i,a,o=t[0]/360,l=t[1]/100,s=t[2]/100,u=l+s;switch(u>1&&(l/=u,s/=u),e=Math.floor(6*o),n=1-s,i=6*o-e,0!=(1&e)&&(i=1-i),a=l+i*(n-l),e){default:case 6:case 0:r=n,g=a,b=l;break;case 1:r=a,g=n,b=l;break;case 2:r=l,g=n,b=a;break;case 3:r=l,g=a,b=n;break;case 4:r=a,g=l,b=n;break;case 5:r=n,g=l,b=a}return[255*r,255*g,255*b]}function C(t){return i(S(t))}function D(t){return a(S(t))}function I(t){return l(S(t))}function A(t){return s(S(t))}function P(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100,l=t[3]/100;return e=1-Math.min(1,a*(1-l)+l),n=1-Math.min(1,o*(1-l)+l),i=1-Math.min(1,r*(1-l)+l),[255*e,255*n,255*i]}function _(t){return i(P(t))}function T(t){return a(P(t))}function F(t){return o(P(t))}function R(t){return s(P(t))}function L(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100;return e=3.2406*a+o*-1.5372+r*-.4986,n=a*-.9689+1.8758*o+.0415*r,i=.0557*a+o*-.204+1.057*r,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,e=Math.min(Math.max(0,e),1),n=Math.min(Math.max(0,n),1),i=Math.min(Math.max(0,i),1),[255*e,255*n,255*i]}function V(t){var e,n,i,a=t[0],o=t[1],r=t[2];return a/=95.047,o/=100,r/=108.883,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,e=116*o-16,n=500*(a-o),i=200*(o-r),[e,n,i]}function O(t){return B(V(t))}function z(t){var e,n,i,a,o=t[0],r=t[1],l=t[2];return o<=8?(n=100*o/903.3,a=7.787*(n/100)+16/116):(n=100*Math.pow((o+16)/116,3),a=Math.pow(n/100,1/3)),e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i=i/108.883<=.008859?i=108.883*(a-l/200-16/116)/7.787:108.883*Math.pow(a-l/200,3),[e,n,i]}function B(t){var e,n,i,a=t[0],o=t[1],r=t[2];return e=Math.atan2(r,o),n=360*e/2/Math.PI,n<0&&(n+=360),i=Math.sqrt(o*o+r*r),[a,i,n]}function W(t){return L(z(t))}function N(t){var e,n,i,a=t[0],o=t[1],r=t[2];return i=r/360*2*Math.PI,e=o*Math.cos(i),n=o*Math.sin(i),[a,e,n]}function E(t){return z(N(t))}function H(t){return W(N(t))}function q(t){return J[t]}function j(t){return i(q(t))}function Y(t){return a(q(t))}function U(t){return o(q(t))}function X(t){return l(q(t))}function K(t){return d(q(t))}function G(t){return u(q(t))}e.exports={rgb2hsl:i,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:l,rgb2keyword:s,rgb2xyz:u,rgb2lab:d,rgb2lch:c,hsl2rgb:h,hsl2hsv:f,hsl2hwb:p,hsl2cmyk:m,hsl2keyword:v,hsv2rgb:x,hsv2hsl:y,hsv2hwb:k,hsv2cmyk:w,hsv2keyword:M,hwb2rgb:S,hwb2hsl:C,hwb2hsv:D,hwb2cmyk:I,hwb2keyword:A,cmyk2rgb:P,cmyk2hsl:_,cmyk2hsv:T,cmyk2hwb:F,cmyk2keyword:R,keyword2rgb:q,keyword2hsl:j,keyword2hsv:Y,keyword2hwb:U,keyword2cmyk:X,keyword2lab:K,keyword2xyz:G,xyz2rgb:L,xyz2lab:V,xyz2lch:O,lab2xyz:z,lab2rgb:W,lab2lch:B,lch2lab:N,lch2xyz:E,lch2rgb:H};var J={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Z={};for(var Q in J)Z[JSON.stringify(J[Q])]=Q},{}],5:[function(t,e,n){var i=t(4),a=function(){return new u};for(var o in i){a[o+"Raw"]=function(t){return function(e){return"number"==typeof e&&(e=Array.prototype.slice.call(arguments)),i[t](e)}}(o);var r=/(\w+)2(\w+)/.exec(o),l=r[1],s=r[2];a[l]=a[l]||{},a[l][s]=a[o]=function(t){return function(e){"number"==typeof e&&(e=Array.prototype.slice.call(arguments));var n=i[t](e);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(o)}var u=function(){this.convs={}};u.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},u.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},u.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space,i=this.convs[n];e=a[n][t](i),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){u.prototype[t]=function(e){return this.routeSpace(t,arguments)}}),e.exports=a},{4:4}],6:[function(t,e,n){e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],7:[function(t,e,n){var i=t(28)();t(26)(i),t(40)(i),t(22)(i),t(25)(i),t(30)(i),t(21)(i),t(23)(i),t(24)(i),t(29)(i),t(32)(i),t(33)(i),t(31)(i),t(27)(i),t(34)(i),t(35)(i),t(36)(i),t(37)(i),t(38)(i),t(46)(i),t(44)(i),t(45)(i),t(47)(i),t(48)(i),t(49)(i),t(15)(i),t(16)(i),t(17)(i),t(18)(i),t(19)(i),t(20)(i),t(8)(i),t(9)(i),t(10)(i),t(11)(i),t(12)(i),t(13)(i),t(14)(i);var a=[];a.push(t(41)(i),t(42)(i),t(43)(i)),i.plugins.register(a),e.exports=i,"undefined"!=typeof window&&(window.Chart=i)},{10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,34:34,35:35,36:36,37:37,38:38,40:40,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48,49:49,8:8,9:9}],8:[function(t,e,n){"use strict";e.exports=function(t){t.Bar=function(e,n){return n.type="bar",new t(e,n)}}},{}],9:[function(t,e,n){"use strict";e.exports=function(t){t.Bubble=function(e,n){return n.type="bubble",new t(e,n)}}},{}],10:[function(t,e,n){"use strict";e.exports=function(t){t.Doughnut=function(e,n){return n.type="doughnut",new t(e,n)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t){t.Line=function(e,n){return n.type="line",new t(e,n)}}},{}],12:[function(t,e,n){"use strict";e.exports=function(t){t.PolarArea=function(e,n){return n.type="polarArea",new t(e,n)}}},{}],13:[function(t,e,n){"use strict";e.exports=function(t){t.Radar=function(e,n){return n.type="radar",new t(e,n)}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t){var e={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-1"}],yAxes:[{type:"linear",position:"left",id:"y-axis-1"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}};t.defaults.scatter=e,t.controllers.scatter=t.controllers.line,t.Scatter=function(e,n){return n.type="scatter",new t(e,n)}}},{}],15:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bar={hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}},t.controllers.bar=t.DatasetController.extend({dataElementType:t.elements.Rectangle,initialize:function(){var e,n=this;t.DatasetController.prototype.initialize.apply(n,arguments),e=n.getMeta(),e.stack=n.getDataset().stack,e.bar=!0},update:function(t){var e,n,i=this,a=i.getMeta().data;for(i._ruler=i.getRuler(),e=0,n=a.length;e<n;++e)i.updateElement(a[e],e,t)},updateElement:function(t,n,i){var a=this,o=a.chart,r=a.getMeta(),l=a.getDataset(),s=t.custom||{},u=o.options.elements.rectangle;t._xScale=a.getScaleForId(r.xAxisID),t._yScale=a.getScaleForId(r.yAxisID),t._datasetIndex=a.index,t._index=n,t._model={datasetLabel:l.label,label:o.data.labels[n],borderSkipped:s.borderSkipped?s.borderSkipped:u.borderSkipped,backgroundColor:s.backgroundColor?s.backgroundColor:e.getValueAtIndexOrDefault(l.backgroundColor,n,u.backgroundColor),borderColor:s.borderColor?s.borderColor:e.getValueAtIndexOrDefault(l.borderColor,n,u.borderColor),borderWidth:s.borderWidth?s.borderWidth:e.getValueAtIndexOrDefault(l.borderWidth,n,u.borderWidth)},a.updateElementGeometry(t,n,i),t.pivot()},updateElementGeometry:function(t,e,n){var i=this,a=t._model,o=i.getValueScale(),r=o.getBasePixel(),l=o.isHorizontal(),s=i._ruler||i.getRuler(),u=i.calculateBarValuePixels(i.index,e),d=i.calculateBarIndexPixels(i.index,e,s);a.horizontal=l,a.base=n?r:u.base,a.x=l?n?r:u.head:d.center,a.y=l?d.center:n?r:u.head,a.height=l?d.size:void 0,a.width=l?void 0:d.size},getValueScaleId:function(){return this.getMeta().yAxisID},getIndexScaleId:function(){return this.getMeta().xAxisID},getValueScale:function(){return this.getScaleForId(this.getValueScaleId())},getIndexScale:function(){return this.getScaleForId(this.getIndexScaleId())},getStackCount:function(t){var e,n,i=this,a=i.chart,o=i.getIndexScale(),r=o.options.stacked,l=void 0===t?a.data.datasets.length:t+1,s=[];for(e=0;e<l;++e)n=a.getDatasetMeta(e),n.bar&&a.isDatasetVisible(e)&&(r===!1||r===!0&&s.indexOf(n.stack)===-1||void 0===r&&(void 0===n.stack||s.indexOf(n.stack)===-1))&&s.push(n.stack);return s.length},getStackIndex:function(t){return this.getStackCount(t)-1},getRuler:function(){var t=this,n=t.getIndexScale(),i=n.options,a=t.getStackCount(),o=n.isHorizontal()?n.width:n.height,r=o/n.ticks.length,l=r*i.categoryPercentage,s=l/a,u=s*i.barPercentage;return u=Math.min(e.getValueOrDefault(i.barThickness,u),e.getValueOrDefault(i.maxBarThickness,1/0)),{stackCount:a,tickSize:r,categorySize:l,categorySpacing:r-l,fullBarSize:s,barSize:u,barSpacing:s-u,scale:n}},calculateBarValuePixels:function(t,e){var n,i,a,o,r,l,s=this,u=s.chart,d=s.getMeta(),c=s.getValueScale(),h=u.data.datasets,f=Number(h[t].data[e]),g=c.options.stacked,p=d.stack,m=0;if(g||void 0===g&&void 0!==p)for(n=0;n<t;++n)i=u.getDatasetMeta(n),i.bar&&i.stack===p&&i.controller.getValueScaleId()===c.id&&u.isDatasetVisible(n)&&(a=Number(h[n].data[e]),(f<0&&a<0||f>=0&&a>0)&&(m+=a));return o=c.getPixelForValue(m),r=c.getPixelForValue(m+f),l=(r-o)/2,{size:l,base:o,head:r,center:r+l/2}},calculateBarIndexPixels:function(t,e,n){var i=this,a=n.scale,o=i.chart.isCombo,r=i.getStackIndex(t),l=a.getPixelForValue(null,e,t,o),s=n.barSize;return l-=o?n.tickSize/2:0,l+=n.fullBarSize*r,l+=n.categorySpacing/2,l+=n.barSpacing/2,{size:s,base:l,head:l+s,center:l+s/2}},draw:function(){var t,n=this,i=n.chart,a=n.getMeta().data,o=n.getDataset(),r=a.length,l=0;for(e.canvas.clipArea(i.ctx,i.chartArea);l<r;++l)t=o.data[l],null===t||void 0===t||isNaN(t)||a[l].draw();e.canvas.unclipArea(i.ctx)},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},o=t._model;o.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.hoverBackgroundColor,i,e.getHoverColor(o.backgroundColor)),o.borderColor=a.hoverBorderColor?a.hoverBorderColor:e.getValueAtIndexOrDefault(n.hoverBorderColor,i,e.getHoverColor(o.borderColor)),o.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:e.getValueAtIndexOrDefault(n.hoverBorderWidth,i,o.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},o=t._model,r=this.chart.options.elements.rectangle;o.backgroundColor=a.backgroundColor?a.backgroundColor:e.getValueAtIndexOrDefault(n.backgroundColor,i,r.backgroundColor),o.borderColor=a.borderColor?a.borderColor:e.getValueAtIndexOrDefault(n.borderColor,i,r.borderColor),o.borderWidth=a.borderWidth?a.borderWidth:e.getValueAtIndexOrDefault(n.borderWidth,i,r.borderWidth)}}),t.defaults.horizontalBar={hover:{mode:"label"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{position:"left",type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{callbacks:{title:function(t,e){var n="";return t.length>0&&(t[0].yLabel?n=t[0].yLabel:e.labels.length>0&&t[0].index<e.labels.length&&(n=e.labels[t[0].index])),n},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n+": "+t.xLabel}}}},t.controllers.horizontalBar=t.controllers.bar.extend({getValueScaleId:function(){return this.getMeta().xAxisID},getIndexScaleId:function(){return this.getMeta().yAxisID}})}},{}],16:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bubble={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}},t.controllers.bubble=t.DatasetController.extend({dataElementType:t.elements.Point,update:function(t){var n=this,i=n.getMeta(),a=i.data;e.each(a,function(e,i){n.updateElement(e,i,t)})},updateElement:function(n,i,a){var o=this,r=o.getMeta(),l=o.getScaleForId(r.xAxisID),s=o.getScaleForId(r.yAxisID),u=n.custom||{},d=o.getDataset(),c=d.data[i],h=o.chart.options.elements.point,f=o.index;e.extend(n,{_xScale:l,_yScale:s,_datasetIndex:f,_index:i,_model:{x:a?l.getPixelForDecimal(.5):l.getPixelForValue("object"==typeof c?c:NaN,i,f,o.chart.isCombo),y:a?s.getBasePixel():s.getPixelForValue(c,i,f),radius:a?0:u.radius?u.radius:o.getRadius(c),hitRadius:u.hitRadius?u.hitRadius:e.getValueAtIndexOrDefault(d.hitRadius,i,h.hitRadius)}}),t.DatasetController.prototype.removeHoverStyle.call(o,n,h);var g=n._model;g.skip=u.skip?u.skip:isNaN(g.x)||isNaN(g.y),n.pivot()},getRadius:function(t){return t.r||this.chart.options.elements.point.radius},setHoverStyle:function(n){var i=this;t.DatasetController.prototype.setHoverStyle.call(i,n);var a=i.chart.data.datasets[n._datasetIndex],o=n._index,r=n.custom||{},l=n._model;
11
- l.radius=r.hoverRadius?r.hoverRadius:e.getValueAtIndexOrDefault(a.hoverRadius,o,i.chart.options.elements.point.hoverRadius)+i.getRadius(a.data[o])},removeHoverStyle:function(e){var n=this;t.DatasetController.prototype.removeHoverStyle.call(n,e,n.chart.options.elements.point);var i=n.chart.data.datasets[e._datasetIndex].data[e._index],a=e.custom||{},o=e._model;o.radius=a.radius?a.radius:n.getRadius(i)}})}},{}],17:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults;n.doughnut={animation:{animateRotate:!0,animateScale:!1},aspectRatio:1,hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var o=0;o<i[0].data.length;++o)e.push('<li><span style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var o=t.getDatasetMeta(0),r=n.datasets[0],l=o.data[a],s=l&&l.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=s.backgroundColor?s.backgroundColor:u(r.backgroundColor,a,d.backgroundColor),h=s.borderColor?s.borderColor:u(r.borderColor,a,d.borderColor),f=s.borderWidth?s.borderWidth:u(r.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(r.data[a])||o.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)a=r.getDatasetMeta(n),a.data[o]&&(a.data[o].hidden=!a.data[o].hidden);r.update()}},cutoutPercentage:50,rotation:Math.PI*-.5,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,n){var i=n.labels[t.index],a=": "+n.datasets[t.datasetIndex].data[t.index];return e.isArray(i)?(i=i.slice(),i[0]+=a):i+=a,i}}}},n.pie=e.clone(n.doughnut),e.extend(n.pie,{cutoutPercentage:0}),t.controllers.doughnut=t.controllers.pie=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var n=this,i=n.chart,a=i.chartArea,o=i.options,r=o.elements.arc,l=a.right-a.left-r.borderWidth,s=a.bottom-a.top-r.borderWidth,u=Math.min(l,s),d={x:0,y:0},c=n.getMeta(),h=o.cutoutPercentage,f=o.circumference;if(f<2*Math.PI){var g=o.rotation%(2*Math.PI);g+=2*Math.PI*(g>=Math.PI?-1:g<-Math.PI?1:0);var p=g+f,m={x:Math.cos(g),y:Math.sin(g)},v={x:Math.cos(p),y:Math.sin(p)},b=g<=0&&0<=p||g<=2*Math.PI&&2*Math.PI<=p,x=g<=.5*Math.PI&&.5*Math.PI<=p||g<=2.5*Math.PI&&2.5*Math.PI<=p,y=g<=-Math.PI&&-Math.PI<=p||g<=Math.PI&&Math.PI<=p,k=g<=.5*-Math.PI&&.5*-Math.PI<=p||g<=1.5*Math.PI&&1.5*Math.PI<=p,w=h/100,M={x:y?-1:Math.min(m.x*(m.x<0?1:w),v.x*(v.x<0?1:w)),y:k?-1:Math.min(m.y*(m.y<0?1:w),v.y*(v.y<0?1:w))},S={x:b?1:Math.max(m.x*(m.x>0?1:w),v.x*(v.x>0?1:w)),y:x?1:Math.max(m.y*(m.y>0?1:w),v.y*(v.y>0?1:w))},C={width:.5*(S.x-M.x),height:.5*(S.y-M.y)};u=Math.min(l/C.width,s/C.height),d={x:(S.x+M.x)*-.5,y:(S.y+M.y)*-.5}}i.borderWidth=n.getMaxBorderWidth(c.data),i.outerRadius=Math.max((u-i.borderWidth)/2,0),i.innerRadius=Math.max(h?i.outerRadius/100*h:0,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),i.offsetX=d.x*i.outerRadius,i.offsetY=d.y*i.outerRadius,c.total=n.calculateTotal(),n.outerRadius=i.outerRadius-i.radiusLength*n.getRingIndex(n.index),n.innerRadius=Math.max(n.outerRadius-i.radiusLength,0),e.each(c.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){var a=this,o=a.chart,r=o.chartArea,l=o.options,s=l.animation,u=(r.left+r.right)/2,d=(r.top+r.bottom)/2,c=l.rotation,h=l.rotation,f=a.getDataset(),g=i&&s.animateRotate?0:t.hidden?0:a.calculateCircumference(f.data[n])*(l.circumference/(2*Math.PI)),p=i&&s.animateScale?0:a.innerRadius,m=i&&s.animateScale?0:a.outerRadius,v=e.getValueAtIndexOrDefault;e.extend(t,{_datasetIndex:a.index,_index:n,_model:{x:u+o.offsetX,y:d+o.offsetY,startAngle:c,endAngle:h,circumference:g,outerRadius:m,innerRadius:p,label:v(f.label,n,o.data.labels[n])}});var b=t._model;this.removeHoverStyle(t),i&&s.animateRotate||(0===n?b.startAngle=l.rotation:b.startAngle=a.getMeta().data[n-1]._model.endAngle,b.endAngle=b.startAngle+b.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var t,n=this.getDataset(),i=this.getMeta(),a=0;return e.each(i.data,function(e,i){t=n.data[i],isNaN(t)||e.hidden||(a+=Math.abs(t))}),a},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(t/e):0},getMaxBorderWidth:function(t){for(var e,n,i=0,a=this.index,o=t.length,r=0;r<o;r++)e=t[r]._model?t[r]._model.borderWidth:0,n=t[r]._chart?t[r]._chart.config.data.datasets[a].hoverBorderWidth:0,i=e>i?e:i,i=n>i?n:i;return i}})}},{}],18:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return n.getValueOrDefault(t.showLine,e.showLines)}var n=t.helpers;t.defaults.line={showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}},t.controllers.line=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,update:function(t){var i,a,o,r=this,l=r.getMeta(),s=l.dataset,u=l.data||[],d=r.chart.options,c=d.elements.line,h=r.getScaleForId(l.yAxisID),f=r.getDataset(),g=e(f,d);for(g&&(o=s.custom||{},void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),s._scale=h,s._datasetIndex=r.index,s._children=u,s._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:o.tension?o.tension:n.getValueOrDefault(f.lineTension,c.tension),backgroundColor:o.backgroundColor?o.backgroundColor:f.backgroundColor||c.backgroundColor,borderWidth:o.borderWidth?o.borderWidth:f.borderWidth||c.borderWidth,borderColor:o.borderColor?o.borderColor:f.borderColor||c.borderColor,borderCapStyle:o.borderCapStyle?o.borderCapStyle:f.borderCapStyle||c.borderCapStyle,borderDash:o.borderDash?o.borderDash:f.borderDash||c.borderDash,borderDashOffset:o.borderDashOffset?o.borderDashOffset:f.borderDashOffset||c.borderDashOffset,borderJoinStyle:o.borderJoinStyle?o.borderJoinStyle:f.borderJoinStyle||c.borderJoinStyle,fill:o.fill?o.fill:void 0!==f.fill?f.fill:c.fill,steppedLine:o.steppedLine?o.steppedLine:n.getValueOrDefault(f.steppedLine,c.stepped),cubicInterpolationMode:o.cubicInterpolationMode?o.cubicInterpolationMode:n.getValueOrDefault(f.cubicInterpolationMode,c.cubicInterpolationMode)},s.pivot()),i=0,a=u.length;i<a;++i)r.updateElement(u[i],i,t);for(g&&0!==s._model.tension&&r.updateBezierControlPoints(),i=0,a=u.length;i<a;++i)u[i].pivot()},getPointBackgroundColor:function(t,e){var i=this.chart.options.elements.point.backgroundColor,a=this.getDataset(),o=t.custom||{};return o.backgroundColor?i=o.backgroundColor:a.pointBackgroundColor?i=n.getValueAtIndexOrDefault(a.pointBackgroundColor,e,i):a.backgroundColor&&(i=a.backgroundColor),i},getPointBorderColor:function(t,e){var i=this.chart.options.elements.point.borderColor,a=this.getDataset(),o=t.custom||{};return o.borderColor?i=o.borderColor:a.pointBorderColor?i=n.getValueAtIndexOrDefault(a.pointBorderColor,e,i):a.borderColor&&(i=a.borderColor),i},getPointBorderWidth:function(t,e){var i=this.chart.options.elements.point.borderWidth,a=this.getDataset(),o=t.custom||{};return isNaN(o.borderWidth)?isNaN(a.pointBorderWidth)?isNaN(a.borderWidth)||(i=a.borderWidth):i=n.getValueAtIndexOrDefault(a.pointBorderWidth,e,i):i=o.borderWidth,i},updateElement:function(t,e,i){var a,o,r=this,l=r.getMeta(),s=t.custom||{},u=r.getDataset(),d=r.index,c=u.data[e],h=r.getScaleForId(l.yAxisID),f=r.getScaleForId(l.xAxisID),g=r.chart.options.elements.point,p=r.chart.data.labels||[],m=1===p.length||1===u.data.length||r.chart.isCombo;void 0!==u.radius&&void 0===u.pointRadius&&(u.pointRadius=u.radius),void 0!==u.hitRadius&&void 0===u.pointHitRadius&&(u.pointHitRadius=u.hitRadius),a=f.getPixelForValue("object"==typeof c?c:NaN,e,d,m),o=i?h.getBasePixel():r.calculatePointY(c,e,d),t._xScale=f,t._yScale=h,t._datasetIndex=d,t._index=e,t._model={x:a,y:o,skip:s.skip||isNaN(a)||isNaN(o),radius:s.radius||n.getValueAtIndexOrDefault(u.pointRadius,e,g.radius),pointStyle:s.pointStyle||n.getValueAtIndexOrDefault(u.pointStyle,e,g.pointStyle),backgroundColor:r.getPointBackgroundColor(t,e),borderColor:r.getPointBorderColor(t,e),borderWidth:r.getPointBorderWidth(t,e),tension:l.dataset._model?l.dataset._model.tension:0,steppedLine:!!l.dataset._model&&l.dataset._model.steppedLine,hitRadius:s.hitRadius||n.getValueAtIndexOrDefault(u.pointHitRadius,e,g.hitRadius)}},calculatePointY:function(t,e,n){var i,a,o,r=this,l=r.chart,s=r.getMeta(),u=r.getScaleForId(s.yAxisID),d=0,c=0;if(u.options.stacked){for(i=0;i<n;i++)if(a=l.data.datasets[i],o=l.getDatasetMeta(i),"line"===o.type&&o.yAxisID===u.id&&l.isDatasetVisible(i)){var h=Number(u.getRightValue(a.data[e]));h<0?c+=h||0:d+=h||0}var f=Number(u.getRightValue(t));return f<0?u.getPixelForValue(c+f):u.getPixelForValue(d+f)}return u.getPixelForValue(t)},updateBezierControlPoints:function(){function t(t,e,n){return Math.max(Math.min(t,n),e)}var e,i,a,o,r,l=this,s=l.getMeta(),u=l.chart.chartArea,d=s.data||[];if(s.dataset._model.spanGaps&&(d=d.filter(function(t){return!t._model.skip})),"monotone"===s.dataset._model.cubicInterpolationMode)n.splineCurveMonotone(d);else for(e=0,i=d.length;e<i;++e)a=d[e],o=a._model,r=n.splineCurve(n.previousItem(d,e)._model,o,n.nextItem(d,e)._model,s.dataset._model.tension),o.controlPointPreviousX=r.previous.x,o.controlPointPreviousY=r.previous.y,o.controlPointNextX=r.next.x,o.controlPointNextY=r.next.y;if(l.chart.options.elements.line.capBezierPoints)for(e=0,i=d.length;e<i;++e)o=d[e]._model,o.controlPointPreviousX=t(o.controlPointPreviousX,u.left,u.right),o.controlPointPreviousY=t(o.controlPointPreviousY,u.top,u.bottom),o.controlPointNextX=t(o.controlPointNextX,u.left,u.right),o.controlPointNextY=t(o.controlPointNextY,u.top,u.bottom)},draw:function(){var n=this,i=n.chart,a=n.getMeta(),o=a.data||[],r=i.chartArea,l=o.length,s=0;for(t.canvasHelpers.clipArea(i.ctx,r),e(n.getDataset(),i.options)&&a.dataset.draw(),t.canvasHelpers.unclipArea(i.ctx);s<l;++s)o[s].draw(r)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},o=t._model;o.radius=a.hoverRadius||n.getValueAtIndexOrDefault(e.pointHoverRadius,i,this.chart.options.elements.point.hoverRadius),o.backgroundColor=a.hoverBackgroundColor||n.getValueAtIndexOrDefault(e.pointHoverBackgroundColor,i,n.getHoverColor(o.backgroundColor)),o.borderColor=a.hoverBorderColor||n.getValueAtIndexOrDefault(e.pointHoverBorderColor,i,n.getHoverColor(o.borderColor)),o.borderWidth=a.hoverBorderWidth||n.getValueAtIndexOrDefault(e.pointHoverBorderWidth,i,o.borderWidth)},removeHoverStyle:function(t){var e=this,i=e.chart.data.datasets[t._datasetIndex],a=t._index,o=t.custom||{},r=t._model;void 0!==i.radius&&void 0===i.pointRadius&&(i.pointRadius=i.radius),r.radius=o.radius||n.getValueAtIndexOrDefault(i.pointRadius,a,e.chart.options.elements.point.radius),r.backgroundColor=e.getPointBackgroundColor(t,a),r.borderColor=e.getPointBorderColor(t,a),r.borderWidth=e.getPointBorderWidth(t,a)}})}},{}],19:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.polarArea={scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,aspectRatio:1,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var o=0;o<i[0].data.length;++o)e.push('<li><span style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var o=t.getDatasetMeta(0),r=n.datasets[0],l=o.data[a],s=l.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=s.backgroundColor?s.backgroundColor:u(r.backgroundColor,a,d.backgroundColor),h=s.borderColor?s.borderColor:u(r.borderColor,a,d.borderColor),f=s.borderWidth?s.borderWidth:u(r.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(r.data[a])||o.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)a=r.getDatasetMeta(n),a.data[o].hidden=!a.data[o].hidden;r.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}},t.controllers.polarArea=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,update:function(t){var n=this,i=n.chart,a=i.chartArea,o=n.getMeta(),r=i.options,l=r.elements.arc,s=Math.min(a.right-a.left,a.bottom-a.top);i.outerRadius=Math.max((s-l.borderWidth/2)/2,0),i.innerRadius=Math.max(r.cutoutPercentage?i.outerRadius/100*r.cutoutPercentage:1,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),n.outerRadius=i.outerRadius-i.radiusLength*n.index,n.innerRadius=n.outerRadius-i.radiusLength,o.count=n.countVisibleElements(),e.each(o.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){for(var a=this,o=a.chart,r=a.getDataset(),l=o.options,s=l.animation,u=o.scale,d=e.getValueAtIndexOrDefault,c=o.data.labels,h=a.calculateCircumference(r.data[n]),f=u.xCenter,g=u.yCenter,p=0,m=a.getMeta(),v=0;v<n;++v)isNaN(r.data[v])||m.data[v].hidden||++p;var b=l.startAngle,x=t.hidden?0:u.getDistanceFromCenterForValue(r.data[n]),y=b+h*p,k=y+(t.hidden?0:h),w=s.animateScale?0:u.getDistanceFromCenterForValue(r.data[n]);e.extend(t,{_datasetIndex:a.index,_index:n,_scale:u,_model:{x:f,y:g,innerRadius:0,outerRadius:i?w:x,startAngle:i&&s.animateRotate?b:y,endAngle:i&&s.animateRotate?b:k,label:d(c,n,c[n])}}),a.removeHoverStyle(t),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},countVisibleElements:function(){var t=this.getDataset(),n=this.getMeta(),i=0;return e.each(n.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},calculateCircumference:function(t){var e=this.getMeta().count;return e>0&&!isNaN(t)?2*Math.PI/e:0}})}},{}],20:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.radar={aspectRatio:1,scale:{type:"radialLinear"},elements:{line:{tension:0}}},t.controllers.radar=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,linkScales:e.noop,update:function(t){var n=this,i=n.getMeta(),a=i.dataset,o=i.data,r=a.custom||{},l=n.getDataset(),s=n.chart.options.elements.line,u=n.chart.scale;void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),e.extend(i.dataset,{_datasetIndex:n.index,_scale:u,_children:o,_loop:!0,_model:{tension:r.tension?r.tension:e.getValueOrDefault(l.lineTension,s.tension),backgroundColor:r.backgroundColor?r.backgroundColor:l.backgroundColor||s.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:l.borderWidth||s.borderWidth,borderColor:r.borderColor?r.borderColor:l.borderColor||s.borderColor,fill:r.fill?r.fill:void 0!==l.fill?l.fill:s.fill,borderCapStyle:r.borderCapStyle?r.borderCapStyle:l.borderCapStyle||s.borderCapStyle,borderDash:r.borderDash?r.borderDash:l.borderDash||s.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:l.borderDashOffset||s.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:l.borderJoinStyle||s.borderJoinStyle}}),i.dataset.pivot(),e.each(o,function(e,i){n.updateElement(e,i,t)},n),n.updateBezierControlPoints()},updateElement:function(t,n,i){var a=this,o=t.custom||{},r=a.getDataset(),l=a.chart.scale,s=a.chart.options.elements.point,u=l.getPointPositionForValue(n,r.data[n]);void 0!==r.radius&&void 0===r.pointRadius&&(r.pointRadius=r.radius),void 0!==r.hitRadius&&void 0===r.pointHitRadius&&(r.pointHitRadius=r.hitRadius),e.extend(t,{_datasetIndex:a.index,_index:n,_scale:l,_model:{x:i?l.xCenter:u.x,y:i?l.yCenter:u.y,tension:o.tension?o.tension:e.getValueOrDefault(r.lineTension,a.chart.options.elements.line.tension),radius:o.radius?o.radius:e.getValueAtIndexOrDefault(r.pointRadius,n,s.radius),backgroundColor:o.backgroundColor?o.backgroundColor:e.getValueAtIndexOrDefault(r.pointBackgroundColor,n,s.backgroundColor),borderColor:o.borderColor?o.borderColor:e.getValueAtIndexOrDefault(r.pointBorderColor,n,s.borderColor),borderWidth:o.borderWidth?o.borderWidth:e.getValueAtIndexOrDefault(r.pointBorderWidth,n,s.borderWidth),pointStyle:o.pointStyle?o.pointStyle:e.getValueAtIndexOrDefault(r.pointStyle,n,s.pointStyle),hitRadius:o.hitRadius?o.hitRadius:e.getValueAtIndexOrDefault(r.pointHitRadius,n,s.hitRadius)}}),t._model.skip=o.skip?o.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,n=this.getMeta();e.each(n.data,function(i,a){var o=i._model,r=e.splineCurve(e.previousItem(n.data,a,!0)._model,o,e.nextItem(n.data,a,!0)._model,o.tension);o.controlPointPreviousX=Math.max(Math.min(r.previous.x,t.right),t.left),o.controlPointPreviousY=Math.max(Math.min(r.previous.y,t.bottom),t.top),o.controlPointNextX=Math.max(Math.min(r.next.x,t.right),t.left),o.controlPointNextY=Math.max(Math.min(r.next.y,t.bottom),t.top),i.pivot()})},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,o=t._model;o.radius=i.hoverRadius?i.hoverRadius:e.getValueAtIndexOrDefault(n.pointHoverRadius,a,this.chart.options.elements.point.hoverRadius),o.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.pointHoverBackgroundColor,a,e.getHoverColor(o.backgroundColor)),o.borderColor=i.hoverBorderColor?i.hoverBorderColor:e.getValueAtIndexOrDefault(n.pointHoverBorderColor,a,e.getHoverColor(o.borderColor)),o.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:e.getValueAtIndexOrDefault(n.pointHoverBorderWidth,a,o.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,o=t._model,r=this.chart.options.elements.point;o.radius=i.radius?i.radius:e.getValueAtIndexOrDefault(n.pointRadius,a,r.radius),o.backgroundColor=i.backgroundColor?i.backgroundColor:e.getValueAtIndexOrDefault(n.pointBackgroundColor,a,r.backgroundColor),o.borderColor=i.borderColor?i.borderColor:e.getValueAtIndexOrDefault(n.pointBorderColor,a,r.borderColor),o.borderWidth=i.borderWidth?i.borderWidth:e.getValueAtIndexOrDefault(n.pointBorderWidth,a,r.borderWidth)}})}},{}],21:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.animation={duration:1e3,easing:"easeOutQuart",onProgress:e.noop,onComplete:e.noop},t.Animation=t.Element.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,n,i){var a,o,r=this.animations;for(e.chart=t,i||(t.animating=!0),a=0,o=r.length;a<o;++a)if(r[a].chart===t)return void(r[a]=e);r.push(e),1===r.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var n=e.findIndex(this.animations,function(e){return e.chart===t});n!==-1&&(this.animations.splice(n,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=e.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){var t=this,e=Date.now(),n=0;t.dropFrames>1&&(n=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1),t.advance(1+n);var i=Date.now();t.dropFrames+=(i-e)/t.frameDuration,t.animations.length>0&&t.requestAnimationFrame()},advance:function(t){for(var n,i,a=this.animations,o=0;o<a.length;)n=a[o],i=n.chart,n.currentStep=(n.currentStep||0)+t,n.currentStep=Math.min(n.currentStep,n.numSteps),e.callback(n.render,[i,n],i),e.callback(n.onAnimationProgress,[n],i),n.currentStep>=n.numSteps?(e.callback(n.onAnimationComplete,[n],i),i.animating=!1,a.splice(o,1)):++o}},Object.defineProperty(t.Animation.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(t.Animation.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}})}},{}],22:[function(t,e,n){"use strict";e.exports=function(t){var e=t.canvasHelpers={};e.drawPoint=function(e,n,i,a,o){var r,l,s,u,d,c;if("object"==typeof n&&(r=n.toString(),"[object HTMLImageElement]"===r||"[object HTMLCanvasElement]"===r))return void e.drawImage(n,a-n.width/2,o-n.height/2,n.width,n.height);if(!(isNaN(i)||i<=0)){switch(n){default:e.beginPath(),e.arc(a,o,i,0,2*Math.PI),e.closePath(),e.fill();break;case"triangle":e.beginPath(),l=3*i/Math.sqrt(3),d=l*Math.sqrt(3)/2,e.moveTo(a-l/2,o+d/3),e.lineTo(a+l/2,o+d/3),e.lineTo(a,o-2*d/3),e.closePath(),e.fill();break;case"rect":c=1/Math.SQRT2*i,e.beginPath(),e.fillRect(a-c,o-c,2*c,2*c),e.strokeRect(a-c,o-c,2*c,2*c);break;case"rectRounded":var h=i/Math.SQRT2,f=a-h,g=o-h,p=Math.SQRT2*i;t.helpers.drawRoundedRectangle(e,f,g,p,p,i/2),e.fill();break;case"rectRot":c=1/Math.SQRT2*i,e.beginPath(),e.moveTo(a-c,o),e.lineTo(a,o+c),e.lineTo(a+c,o),e.lineTo(a,o-c),e.closePath(),e.fill();break;case"cross":e.beginPath(),e.moveTo(a,o+i),e.lineTo(a,o-i),e.moveTo(a-i,o),e.lineTo(a+i,o),e.closePath();break;case"crossRot":e.beginPath(),s=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-s,o-u),e.lineTo(a+s,o+u),e.moveTo(a-s,o+u),e.lineTo(a+s,o-u),e.closePath();break;case"star":e.beginPath(),e.moveTo(a,o+i),e.lineTo(a,o-i),e.moveTo(a-i,o),e.lineTo(a+i,o),s=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-s,o-u),e.lineTo(a+s,o+u),e.moveTo(a-s,o+u),e.lineTo(a+s,o-u),e.closePath();break;case"line":e.beginPath(),e.moveTo(a-i,o),e.lineTo(a+i,o),e.closePath();break;case"dash":e.beginPath(),e.moveTo(a,o),e.lineTo(a+i,o),e.closePath()}e.stroke()}},e.clipArea=function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},e.unclipArea=function(t){t.restore()},e.lineTo=function(t,e,n,i){return n.steppedLine?("after"===n.steppedLine?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y),void t.lineTo(n.x,n.y)):n.tension?void t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):void t.lineTo(n.x,n.y)},t.helpers.canvas=e}},{}],23:[function(t,e,n){"use strict";e.exports=function(t){function e(e){e=e||{};var n=e.data=e.data||{};return n.datasets=n.datasets||[],n.labels=n.labels||[],e.options=a.configMerge(t.defaults.global,t.defaults[e.type],e.options||{}),e}function n(t){var e=t.options;e.scale?t.scale.options=e.scale:e.scales&&e.scales.xAxes.concat(e.scales.yAxes).forEach(function(e){t.scales[e.id].options=e}),t.tooltip._options=e.tooltips}function i(t){return"top"===t||"bottom"===t}var a=t.helpers,o=t.plugins,r=t.platform;t.types={},t.instances={},t.controllers={},a.extend(t.prototype,{construct:function(n,i){var o=this;i=e(i);var l=r.acquireContext(n,i),s=l&&l.canvas,u=s&&s.height,d=s&&s.width;return o.id=a.uid(),o.ctx=l,o.canvas=s,o.config=i,o.width=d,o.height=u,o.aspectRatio=u?d/u:null,o.options=i.options,o._bufferedRender=!1,o.chart=o,o.controller=o,t.instances[o.id]=o,Object.defineProperty(o,"data",{get:function(){return o.config.data},set:function(t){o.config.data=t}}),l&&s?(o.initialize(),void o.update()):void console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return o.notify(t,"beforeInit"),a.retinaScale(t),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildScales(),t.initToolTip(),o.notify(t,"afterInit"),t},clear:function(){return a.clear(this),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,r=n.maintainAspectRatio&&e.aspectRatio||null,l=Math.floor(a.getMaximumWidth(i)),s=Math.floor(r?l/r:a.getMaximumHeight(i));if((e.width!==l||e.height!==s)&&(i.width=e.width=l,i.height=e.height=s,i.style.width=l+"px",i.style.height=s+"px",a.retinaScale(e),!t)){var u={width:l,height:s};o.notify(e,"resize",[u]),e.options.onResize&&e.options.onResize(e,u),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;a.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),a.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),n&&(n.id=n.id||"scale")},buildScales:function(){var e=this,n=e.options,o=e.scales={},r=[];n.scales&&(r=r.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),n.scale&&r.push({options:n.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),a.each(r,function(n){var r=n.options,l=a.getValueOrDefault(r.type,n.dtype),s=t.scaleService.getScaleConstructor(l);if(s){i(r.position)!==i(n.dposition)&&(r.position=n.dposition);var u=new s({id:r.id,options:r,ctx:e.ctx,chart:e});o[u.id]=u,n.isDefault&&(e.scale=u)}}),t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,n=[],i=[];if(a.each(e.data.datasets,function(a,o){var r=e.getDatasetMeta(o);if(r.type||(r.type=a.type||e.config.type),n.push(r.type),r.controller)r.controller.updateIndex(o);else{var l=t.controllers[r.type];if(void 0===l)throw new Error('"'+r.type+'" is not a chart type.');r.controller=new l(e,o),i.push(r.controller)}},e),n.length>1)for(var o=1;o<n.length;o++)if(n[o]!==n[o-1]){e.isCombo=!0;break}return i},resetElements:function(){var t=this;a.each(t.data.datasets,function(e,n){t.getDatasetMeta(n).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t,e){var i=this;if(n(i),o.notify(i,"beforeUpdate")!==!1){i.tooltip._data=i.data;var r=i.buildOrUpdateControllers();a.each(i.data.datasets,function(t,e){i.getDatasetMeta(e).controller.buildOrUpdateElements()},i),i.updateLayout(),a.each(r,function(t){t.reset()}),i.updateDatasets(),o.notify(i,"afterUpdate"),i._bufferedRender?i._bufferedRequest={lazy:e,duration:t}:i.render(t,e)}},updateLayout:function(){var e=this;o.notify(e,"beforeLayout")!==!1&&(t.layoutService.update(this,this.width,this.height),o.notify(e,"afterScaleUpdate"),o.notify(e,"afterLayout"))},updateDatasets:function(){var t=this;if(o.notify(t,"beforeDatasetsUpdate")!==!1){for(var e=0,n=t.data.datasets.length;e<n;++e)t.updateDataset(e);o.notify(t,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this,n=e.getDatasetMeta(t),i={meta:n,index:t};o.notify(e,"beforeDatasetUpdate",[i])!==!1&&(n.controller.update(),o.notify(e,"afterDatasetUpdate",[i]))},render:function(e,n){var i=this;if(o.notify(i,"beforeRender")!==!1){var r=i.options.animation,l=function(t){o.notify(i,"afterRender"),a.callback(r&&r.onComplete,[t],i)};if(r&&("undefined"!=typeof e&&0!==e||"undefined"==typeof e&&0!==r.duration)){var s=new t.Animation({numSteps:(e||r.duration)/16.66,easing:r.easing,render:function(t,e){var n=a.easingEffects[e.easing],i=e.currentStep,o=i/e.numSteps;t.draw(n(o),o,i)},onAnimationProgress:r.onProgress,onAnimationComplete:l});t.animationService.addAnimation(i,s,e,n)}else i.draw(),l(new t.Animation({numSteps:0,chart:i}));return i}},draw:function(t){var e=this;e.clear(),void 0!==t&&null!==t||(t=1),e.transition(t),o.notify(e,"beforeDraw",[t])!==!1&&(a.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.scale&&e.scale.draw(),e.drawDatasets(t),e.tooltip.draw(),o.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=this,n=0,i=(e.data.datasets||[]).length;n<i;++n)e.isDatasetVisible(n)&&e.getDatasetMeta(n).controller.transition(t);e.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(o.notify(e,"beforeDatasetsDraw",[t])!==!1){for(var n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);o.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n=this,i=n.getDatasetMeta(t),a={meta:i,index:t,easingValue:e};o.notify(n,"beforeDatasetDraw",[a])!==!1&&(i.controller.draw(e),o.notify(n,"afterDatasetDraw",[a]))},getElementAtEvent:function(e){return t.Interaction.modes.single(this,e)},getElementsAtEvent:function(e){return t.Interaction.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return t.Interaction.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,n,i){var a=t.Interaction.modes[n];return"function"==typeof a?a(this,e,i):[]},getDatasetAtEvent:function(e){return t.Interaction.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(t){var e=this,n=e.data.datasets[t];n._meta||(n._meta={});var i=n._meta[e.id];return i||(i=n._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroy:function(){var e,n,i,l=this,s=l.canvas;for(l.stop(),n=0,i=l.data.datasets.length;n<i;++n)e=l.getDatasetMeta(n),e.controller&&(e.controller.destroy(),e.controller=null);s&&(l.unbindEvents(),a.clear(l),r.releaseContext(l.ctx),l.canvas=null,l.ctx=null),o.notify(l,"destroy"),delete t.instances[l.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new t.Tooltip({_chart:e,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e),e.tooltip.initialize()},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};a.each(t.options.events,function(i){r.addEventListener(t,i,n),e[i]=n}),t.options.responsive&&(n=function(){t.resize()},r.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,a.each(e,function(e,n){r.removeEventListener(t,n,e)}))},updateHoverStyle:function(t,e,n){var i,a,o,r=n?"setHoverStyle":"removeHoverStyle";for(a=0,o=t.length;a<o;++a)i=t[a],i&&this.getDatasetMeta(i._datasetIndex).controller[r](i)},eventHandler:function(t){var e=this,n=e.tooltip;if(o.notify(e,"beforeEvent",[t])!==!1){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);i|=n&&n.handleEvent(t),o.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a.duration,a.lazy):i&&!e.animating&&(e.stop(),e.render(e.options.hover.animationDuration,!0)),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e=this,n=e.options||{},i=n.hover,o=!1;return e.lastActive=e.lastActive||[],"mouseout"===t.type?e.active=[]:e.active=e.getElementsAtEventForMode(t,i.mode,i),i.onHover&&i.onHover.call(e,t.native,e.active),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(e,t.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,i.mode,!1),e.active.length&&i.mode&&e.updateHoverStyle(e.active,i.mode,!0),o=!a.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,o}}),t.Controller=t}},{}],24:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t._chartjs?void t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),void a.forEach(function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),o=a.apply(this,e);return i.each(t._chartjs.listeners,function(t){"function"==typeof t[n]&&t[n].apply(t,e)}),o}})}))}function n(t,e){var n=t._chartjs;if(n){var i=n.listeners,o=i.indexOf(e);
12
- o!==-1&&i.splice(o,1),i.length>0||(a.forEach(function(e){delete t[e]}),delete t._chartjs)}}var i=t.helpers,a=["push","pop","shift","splice","unshift"];t.DatasetController=function(t,e){this.initialize(t,e)},i.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null===e.xAxisID&&(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null===e.yAxisID&&(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&n(this._data,this)},createMetaDataset:function(){var t=this,e=t.datasetElementType;return e&&new e({_chart:t.chart,_datasetIndex:t.index})},createMetaData:function(t){var e=this,n=e.dataElementType;return n&&new n({_chart:e.chart,_datasetIndex:e.index,_index:t})},addElements:function(){var t,e,n=this,i=n.getMeta(),a=n.getDataset().data||[],o=i.data;for(t=0,e=a.length;t<e;++t)o[t]=o[t]||n.createMetaData(t);i.dataset=i.dataset||n.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t=this,i=t.getDataset(),a=i.data||(i.data=[]);t._data!==a&&(t._data&&n(t._data,t),e(a,t),t._data=a),t.resyncElements()},update:i.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},removeHoverStyle:function(t,e){var n=this.chart.data.datasets[t._datasetIndex],a=t._index,o=t.custom||{},r=i.getValueAtIndexOrDefault,l=t._model;l.backgroundColor=o.backgroundColor?o.backgroundColor:r(n.backgroundColor,a,e.backgroundColor),l.borderColor=o.borderColor?o.borderColor:r(n.borderColor,a,e.borderColor),l.borderWidth=o.borderWidth?o.borderWidth:r(n.borderWidth,a,e.borderWidth)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},o=i.getValueAtIndexOrDefault,r=i.getHoverColor,l=t._model;l.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:o(e.hoverBackgroundColor,n,r(l.backgroundColor)),l.borderColor=a.hoverBorderColor?a.hoverBorderColor:o(e.hoverBorderColor,n,r(l.borderColor)),l.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:o(e.hoverBorderWidth,n,l.borderWidth)},resyncElements:function(){var t=this,e=t.getMeta(),n=t.getDataset().data,i=e.data.length,a=n.length;a<i?e.data.splice(a,i-a):a>i&&t.insertElements(i,a-i)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){this.insertElements(this.getDataset().data.length-1,arguments.length)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),t.DatasetController.extend=i.inherits}},{}],25:[function(t,e,n){"use strict";var i=t(3);e.exports=function(t){function e(t,e,n,a){var o,r,l,s,u,d,c,h,f,g=Object.keys(n);for(o=0,r=g.length;o<r;++o)if(l=g[o],d=n[l],e.hasOwnProperty(l)||(e[l]=d),s=e[l],s!==d&&"_"!==l[0]){if(t.hasOwnProperty(l)||(t[l]=s),u=t[l],c=typeof d,c===typeof u)if("string"===c){if(h=i(u),h.valid&&(f=i(d),f.valid)){e[l]=f.mix(h,a).rgbString();continue}}else if("number"===c&&isFinite(u)&&isFinite(d)){e[l]=u+(d-u)*a;continue}e[l]=d}}var n=t.helpers;t.elements={},t.Element=function(t){n.extend(this,t),this.initialize.apply(this,arguments)},n.extend(t.Element.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=n.clone(t._model)),t._start={},t},transition:function(t){var n=this,i=n._model,a=n._start,o=n._view;return i&&1!==t?(o||(o=n._view={}),a||(a=n._start={}),e(a,o,i,t),n):(n._view=i,n._start=null,n)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return n.isNumber(this._model.x)&&n.isNumber(this._model.y)}}),t.Element.extend=n.inherits}},{3:3}],26:[function(t,e,n){"use strict";var i=t(3);e.exports=function(t){function e(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),t.indexOf("%")!==-1&&(i=i/100*e.parentNode[n])):i=t,i}function n(t){return void 0!==t&&null!==t&&"none"!==t}function a(t,i,a){var o=document.defaultView,r=t.parentNode,l=o.getComputedStyle(t)[i],s=o.getComputedStyle(r)[i],u=n(l),d=n(s),c=Number.POSITIVE_INFINITY;return u||d?Math.min(u?e(l,t,a):c,d?e(s,r,a):c):"none"}var o=t.helpers={};o.each=function(t,e,n,i){var a,r;if(o.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if("object"==typeof t){var l=Object.keys(t);for(r=l.length,a=0;a<r;a++)e.call(n,t[l[a]],l[a])}},o.clone=function(t){var e={};return o.each(t,function(t,n){o.isArray(t)?e[n]=t.slice(0):"object"==typeof t&&null!==t?e[n]=o.clone(t):e[n]=t}),e},o.extend=function(t){for(var e=function(e,n){t[n]=e},n=1,i=arguments.length;n<i;n++)o.each(arguments[n],e);return t},o.configMerge=function(e){var n=o.clone(e);return o.each(Array.prototype.slice.call(arguments,1),function(e){o.each(e,function(e,i){var a=n.hasOwnProperty(i),r=a?n[i]:{};"scales"===i?n[i]=o.scaleMerge(r,e):"scale"===i?n[i]=o.configMerge(r,t.scaleService.getScaleDefaults(e.type),e):!a||"object"!=typeof r||o.isArray(r)||null===r||"object"!=typeof e||o.isArray(e)?n[i]=e:n[i]=o.configMerge(r,e)})}),n},o.scaleMerge=function(e,n){var i=o.clone(e);return o.each(n,function(e,n){"xAxes"===n||"yAxes"===n?i.hasOwnProperty(n)?o.each(e,function(e,a){var r=o.getValueOrDefault(e.type,"xAxes"===n?"category":"linear"),l=t.scaleService.getScaleDefaults(r);a>=i[n].length||!i[n][a].type?i[n].push(o.configMerge(l,e)):e.type&&e.type!==i[n][a].type?i[n][a]=o.configMerge(i[n][a],l,e):i[n][a]=o.configMerge(i[n][a],e)}):(i[n]=[],o.each(e,function(e){var a=o.getValueOrDefault(e.type,"xAxes"===n?"category":"linear");i[n].push(o.configMerge(t.scaleService.getScaleDefaults(a),e))})):i.hasOwnProperty(n)&&"object"==typeof i[n]&&null!==i[n]&&"object"==typeof e?i[n]=o.configMerge(i[n],e):i[n]=e}),i},o.getValueAtIndexOrDefault=function(t,e,n){return void 0===t||null===t?n:o.isArray(t)?e<t.length?t[e]:n:t},o.getValueOrDefault=function(t,e){return void 0===t?e:t},o.indexOf=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;n<i;++n)if(t[n]===e)return n;return-1},o.where=function(t,e){if(o.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return o.each(t,function(t){e(t)&&n.push(t)}),n},o.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},o.findNextWhere=function(t,e,n){void 0!==n&&null!==n||(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},o.findPreviousWhere=function(t,e,n){void 0!==n&&null!==n||(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},o.inherits=function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=o.inherits,t&&o.extend(n.prototype,t),n.__super__=e.prototype,n},o.noop=function(){},o.uid=function(){var t=0;return function(){return t++}}(),o.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.almostEquals=function(t,e,n){return Math.abs(t-e)<n},o.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},o.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},o.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},o.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1},o.log10=Math.log10?function(t){return Math.log10(t)}:function(t){return Math.log(t)/Math.LN10},o.toRadians=function(t){return t*(Math.PI/180)},o.toDegrees=function(t){return t*(180/Math.PI)},o.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),o=Math.atan2(i,n);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},o.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},o.aliasPixel=function(t){return t%2===0?0:.5},o.splineCurve=function(t,e,n,i){var a=t.skip?e:t,o=e,r=n.skip?e:n,l=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),s=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),u=l/(l+s),d=s/(l+s);u=isNaN(u)?0:u,d=isNaN(d)?0:d;var c=i*u,h=i*d;return{previous:{x:o.x-c*(r.x-a.x),y:o.y-c*(r.y-a.y)},next:{x:o.x+h*(r.x-a.x),y:o.y+h*(r.y-a.y)}}},o.EPSILON=Number.EPSILON||1e-14,o.splineCurveMonotone=function(t){var e,n,i,a,r=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),l=r.length;for(e=0;e<l;++e)if(i=r[e],!i.model.skip){if(n=e>0?r[e-1]:null,a=e<l-1?r[e+1]:null,a&&!a.model.skip){var s=a.model.x-i.model.x;i.deltaK=0!==s?(a.model.y-i.model.y)/s:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}var u,d,c,h;for(e=0;e<l-1;++e)i=r[e],a=r[e+1],i.model.skip||a.model.skip||(o.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(u=i.mK/i.deltaK,d=a.mK/i.deltaK,h=Math.pow(u,2)+Math.pow(d,2),h<=9||(c=3/Math.sqrt(h),i.mK=u*c*i.deltaK,a.mK=d*c*i.deltaK)));var f;for(e=0;e<l;++e)i=r[e],i.model.skip||(n=e>0?r[e-1]:null,a=e<l-1?r[e+1]:null,n&&!n.model.skip&&(f=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-f,i.model.controlPointPreviousY=i.model.y-f*i.mK),a&&!a.model.skip&&(f=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+f,i.model.controlPointNextY=i.model.y+f*i.mK))},o.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},o.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},o.niceNum=function(t,e){var n,i=Math.floor(o.log10(t)),a=t/Math.pow(10,i);return n=e?a<1.5?1:a<3?2:a<7?5:10:a<=1?1:a<=2?2:a<=5?5:10,n*Math.pow(10,i)};var r=o.easingEffects={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-1*t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return 1*((t=t/1-1)*t*t+1)},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-1*((t=t/1-1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return 1*(t/=1)*t*t*t*t},easeOutQuint:function(t){return 1*((t=t/1-1)*t*t*t*t+1)},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return-1*Math.cos(t/1*(Math.PI/2))+1},easeOutSine:function(t){return 1*Math.sin(t/1*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t/1)-1)},easeInExpo:function(t){return 0===t?1:1*Math.pow(2,10*(t/1-1))},easeOutExpo:function(t){return 1===t?1:1*(-Math.pow(2,-10*t/1)+1)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(-Math.pow(2,-10*--t)+2)},easeInCirc:function(t){return t>=1?t:-1*(Math.sqrt(1-(t/=1)*t)-1)},easeOutCirc:function(t){return 1*Math.sqrt(1-(t=t/1-1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((1*t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2===(t/=.5)?1:(n||(n=1*(.3*1.5)),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?-.5*(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)):i*Math.pow(2,-10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return 1*(t/=1)*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return 1*((t=t/1-1)*t*((e+1)*t+e)+1)},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?.5*(t*t*(((e*=1.525)+1)*t-e)):.5*((t-=2)*t*(((e*=1.525)+1)*t+e)+2)},easeInBounce:function(t){return 1-r.easeOutBounce(1-t)},easeOutBounce:function(t){return(t/=1)<1/2.75?1*(7.5625*t*t):t<2/2.75?1*(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1*(7.5625*(t-=2.25/2.75)*t+.9375):1*(7.5625*(t-=2.625/2.75)*t+.984375)},easeInOutBounce:function(t){return t<.5?.5*r.easeInBounce(2*t):.5*r.easeOutBounce(2*t-1)+.5}};o.requestAnimFrame=function(){return"undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)}}(),o.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.currentTarget||t.srcElement,l=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var u=parseFloat(o.getStyle(r,"padding-left")),d=parseFloat(o.getStyle(r,"padding-top")),c=parseFloat(o.getStyle(r,"padding-right")),h=parseFloat(o.getStyle(r,"padding-bottom")),f=l.right-l.left-u-c,g=l.bottom-l.top-d-h;return n=Math.round((n-l.left-u)/f*r.width/e.currentDevicePixelRatio),i=Math.round((i-l.top-d)/g*r.height/e.currentDevicePixelRatio),{x:n,y:i}},o.addEvent=function(t,e,n){t.addEventListener?t.addEventListener(e,n):t.attachEvent?t.attachEvent("on"+e,n):t["on"+e]=n},o.removeEvent=function(t,e,n){t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent?t.detachEvent("on"+e,n):t["on"+e]=o.noop},o.getConstraintWidth=function(t){return a(t,"max-width","clientWidth")},o.getConstraintHeight=function(t){return a(t,"max-height","clientHeight")},o.getMaximumWidth=function(t){var e=t.parentNode,n=parseInt(o.getStyle(e,"padding-left"),10),i=parseInt(o.getStyle(e,"padding-right"),10),a=e.clientWidth-n-i,r=o.getConstraintWidth(t);return isNaN(r)?a:Math.min(a,r)},o.getMaximumHeight=function(t){var e=t.parentNode,n=parseInt(o.getStyle(e,"padding-top"),10),i=parseInt(o.getStyle(e,"padding-bottom"),10),a=e.clientHeight-n-i,r=o.getConstraintHeight(t);return isNaN(r)?a:Math.min(a,r)},o.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},o.retinaScale=function(t){var e=t.currentDevicePixelRatio=window.devicePixelRatio||1;if(1!==e){var n=t.canvas,i=t.height,a=t.width;n.height=i*e,n.width=a*e,t.ctx.scale(e,e),n.style.height=i+"px",n.style.width=a+"px"}},o.clear=function(t){t.ctx.clearRect(0,0,t.width,t.height)},o.fontString=function(t,e,n){return e+" "+t+"px "+n},o.longestText=function(t,e,n,i){i=i||{};var a=i.data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var l=0;o.each(n,function(e){void 0!==e&&null!==e&&o.isArray(e)!==!0?l=o.measureText(t,a,r,l,e):o.isArray(e)&&o.each(e,function(e){void 0===e||null===e||o.isArray(e)||(l=o.measureText(t,a,r,l,e))})});var s=r.length/2;if(s>n.length){for(var u=0;u<s;u++)delete a[r[u]];r.splice(0,s)}return l},o.measureText=function(t,e,n,i,a){var o=e[a];return o||(o=e[a]=t.measureText(a).width,n.push(a)),o>i&&(i=o),i},o.numberOfLabelLines=function(t){var e=1;return o.each(t,function(t){o.isArray(t)&&t.length>e&&(e=t.length)}),e},o.drawRoundedRectangle=function(t,e,n,i,a,o){t.beginPath(),t.moveTo(e+o,n),t.lineTo(e+i-o,n),t.quadraticCurveTo(e+i,n,e+i,n+o),t.lineTo(e+i,n+a-o),t.quadraticCurveTo(e+i,n+a,e+i-o,n+a),t.lineTo(e+o,n+a),t.quadraticCurveTo(e,n+a,e,n+a-o),t.lineTo(e,n+o),t.quadraticCurveTo(e,n,e+o,n),t.closePath()},o.color=i?function(e){return e instanceof CanvasGradient&&(e=t.defaults.global.defaultColor),i(e)}:function(t){return console.error("Color.js not found!"),t},o.isArray=Array.isArray?function(t){return Array.isArray(t)}:function(t){return"[object Array]"===Object.prototype.toString.call(t)},o.arrayEquals=function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!o.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},o.callback=function(t,e,n){t&&"function"==typeof t.call&&t.apply(n,e)},o.getHoverColor=function(t){return t instanceof CanvasPattern?t:o.color(t).saturate(.5).darken(.1).rgbString()},o.callCallback=o.callback}},{3:3}],27:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.native?{x:t.x,y:t.y}:r.getRelativePosition(t,e)}function n(t,e){var n,i,a,o,r,l=t.data.datasets;for(i=0,o=l.length;i<o;++i)if(t.isDatasetVisible(i))for(n=t.getDatasetMeta(i),a=0,r=n.data.length;a<r;++a){var s=n.data[a];s._view.skip||e(s)}}function i(t,e){var i=[];return n(t,function(t){t.inRange(e.x,e.y)&&i.push(t)}),i}function a(t,e,i,a){var o=Number.POSITIVE_INFINITY,l=[];return a||(a=r.distanceBetweenPoints),n(t,function(t){if(!i||t.inRange(e.x,e.y)){var n=t.getCenterPoint(),r=a(e,n);r<o?(l=[t],o=r):r===o&&l.push(t)}}),l}function o(t,n,o){var r=e(n,t),l=function(t,e){return Math.abs(t.x-e.x)},s=o.intersect?i(t,r):a(t,r,!1,l),u=[];return s.length?(t.data.datasets.forEach(function(e,n){if(t.isDatasetVisible(n)){var i=t.getDatasetMeta(n),a=i.data[s[0]._index];a&&!a._view.skip&&u.push(a)}}),u):[]}var r=t.helpers;t.Interaction={modes:{single:function(t,i){var a=e(i,t),o=[];return n(t,function(t){if(t.inRange(a.x,a.y))return o.push(t),o}),o.slice(0,1)},label:o,index:o,dataset:function(t,n,o){var r=e(n,t),l=o.intersect?i(t,r):a(t,r,!1);return l.length>0&&(l=t.getDatasetMeta(l[0]._datasetIndex).data),l},"x-axis":function(t,e){return o(t,e,!0)},point:function(t,n){var a=e(n,t);return i(t,a)},nearest:function(t,n,i){var o=e(n,t),r=a(t,o,i.intersect);return r.length>1&&r.sort(function(t,e){var n=t.getArea(),i=e.getArea(),a=n-i;return 0===a&&(a=t._datasetIndex-e._datasetIndex),a}),r.slice(0,1)},x:function(t,i,a){var o=e(i,t),r=[],l=!1;return n(t,function(t){t.inXRange(o.x)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),a.intersect&&!l&&(r=[]),r},y:function(t,i,a){var o=e(i,t),r=[],l=!1;return n(t,function(t){t.inYRange(o.y)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),a.intersect&&!l&&(r=[]),r}}}}},{}],28:[function(t,e,n){"use strict";e.exports=function(){var t=function(t,e){return this.construct(t,e),this};return t.defaults={global:{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}}},t.Chart=t,t}},{}],29:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return i.where(t,function(t){return t.position===e})}function n(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i._tmpIndex_-a._tmpIndex_:i.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}var i=t.helpers;t.layoutService={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;n!==-1&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],o=a.length,r=0;r<o;++r)i=a[r],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,a,o){function r(t){var e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?k:I,D),A-=e.height):(e=t.update(C,S),I-=e.width),P.push({horizontal:n,minSize:e,box:t})}function l(t){var e=i.findNextWhere(P,function(e){return e.box===t});if(e)if(t.isHorizontal()){var n={left:Math.max(L,_),right:Math.max(V,T),top:0,bottom:0};t.update(t.fullWidth?k:I,w/2,n)}else t.update(e.minSize.width,A)}function s(t){var e=i.findNextWhere(P,function(e){return e.box===t}),n={left:0,right:0,top:O,bottom:z};e&&t.update(e.minSize.width,A,n)}function u(t){t.isHorizontal()?(t.left=t.fullWidth?h:L,t.right=t.fullWidth?a-f:L+I,t.top=q,t.bottom=q+t.height,q=t.bottom):(t.left=H,t.right=H+t.width,t.top=O,t.bottom=O+A,H=t.right)}if(t){var d=t.options.layout,c=d?d.padding:null,h=0,f=0,g=0,p=0;isNaN(c)?(h=c.left||0,f=c.right||0,g=c.top||0,p=c.bottom||0):(h=c,f=c,g=c,p=c);var m=e(t.boxes,"left"),v=e(t.boxes,"right"),b=e(t.boxes,"top"),x=e(t.boxes,"bottom"),y=e(t.boxes,"chartArea");n(m,!0),n(v,!1),n(b,!0),n(x,!1);var k=a-h-f,w=o-g-p,M=k/2,S=w/2,C=(a-M)/(m.length+v.length),D=(o-S)/(b.length+x.length),I=k,A=w,P=[];i.each(m.concat(v,b,x),r);var _=0,T=0,F=0,R=0;i.each(b.concat(x),function(t){if(t.getPadding){var e=t.getPadding();_=Math.max(_,e.left),T=Math.max(T,e.right)}}),i.each(m.concat(v),function(t){if(t.getPadding){var e=t.getPadding();F=Math.max(F,e.top),R=Math.max(R,e.bottom)}});var L=h,V=f,O=g,z=p;i.each(m.concat(v),l),i.each(m,function(t){L+=t.width}),i.each(v,function(t){V+=t.width}),i.each(b.concat(x),l),i.each(b,function(t){O+=t.height}),i.each(x,function(t){z+=t.height}),i.each(m.concat(v),s),L=h,V=f,O=g,z=p,i.each(m,function(t){L+=t.width}),i.each(v,function(t){V+=t.width}),i.each(b,function(t){O+=t.height}),i.each(x,function(t){z+=t.height});var B=Math.max(_-L,0);L+=B,V+=Math.max(T-V,0);var W=Math.max(F-O,0);O+=W,z+=Math.max(R-z,0);var N=o-O-z,E=a-L-V;E===I&&N===A||(i.each(m,function(t){t.height=N}),i.each(v,function(t){t.height=N}),i.each(b,function(t){t.fullWidth||(t.width=E)}),i.each(x,function(t){t.fullWidth||(t.width=E)}),A=N,I=E);var H=h+B,q=g+W;i.each(m.concat(b),u),H+=I,q+=A,i.each(v,u),i.each(x,u),t.chartArea={left:L,top:O,right:L+I,bottom:O+A},i.each(y,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(I,A)})}}}}},{}],30:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.plugins={},t.plugins={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){e.indexOf(t)===-1&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var n=e.indexOf(t);n!==-1&&e.splice(n,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,o,r,l,s=this.descriptors(t),u=s.length;for(i=0;i<u;++i)if(a=s[i],o=a.plugin,l=o[e],"function"==typeof l&&(r=[t].concat(n||[]),r.push(a.options),l.apply(o,r)===!1))return!1;return!0},descriptors:function(n){var i=n._plugins||(n._plugins={});if(i.id===this._cacheId)return i.descriptors;var a=[],o=[],r=n&&n.config||{},l=t.defaults.global.plugins,s=r.options&&r.options.plugins||{};return this._plugins.concat(r.plugins||[]).forEach(function(t){var n=a.indexOf(t);if(n===-1){var i=t.id,r=s[i];r!==!1&&(r===!0&&(r=e.clone(l[i])),a.push(t),o.push({plugin:t,options:r||{}}))}}),i.descriptors=o,i.id=this._cacheId,o}},t.pluginService=t.plugins,t.PluginBase=t.Element.extend({})}},{}],31:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e,n){return i.isArray(e)?i.longestText(t,n,e):t.measureText(e).width}function n(e){var n=i.getValueOrDefault,a=t.defaults.global,o=n(e.fontSize,a.defaultFontSize),r=n(e.fontStyle,a.defaultFontStyle),l=n(e.fontFamily,a.defaultFontFamily);return{size:o,style:r,family:l,font:i.fontString(o,r,l)}}var i=t.helpers;t.defaults.scale={display:!0,position:"left",gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{labelString:"",display:!1},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:t.Ticks.formatters.values}},t.Scale=t.Element.extend({getPadding:function(){var t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}},beforeUpdate:function(){i.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=i.extend({left:0,right:0,top:0,bottom:0},n),a.longestTextCache=a.longestTextCache||{},a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeDataLimits(),a.determineDataLimits(),a.afterDataLimits(),a.beforeBuildTicks(),a.buildTicks(),a.afterBuildTicks(),a.beforeTickToLabelConversion(),a.convertTicksToLabels(),a.afterTickToLabelConversion(),a.beforeCalculateTickRotation(),a.calculateTickRotation(),a.afterCalculateTickRotation(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:function(){i.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){i.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){i.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){i.callback(this.options.beforeDataLimits,[this])},determineDataLimits:i.noop,afterDataLimits:function(){i.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){i.callback(this.options.beforeBuildTicks,[this])},buildTicks:i.noop,afterBuildTicks:function(){i.callback(this.options.afterBuildTicks,[this])},beforeTickToLabelConversion:function(){i.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this,e=t.options.ticks;t.ticks=t.ticks.map(e.userCallback||e.callback)},afterTickToLabelConversion:function(){i.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){i.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,a=t.options.ticks,o=n(a);e.font=o.font;var r=a.minRotation||0;if(t.options.display&&t.isHorizontal())for(var l,s,u=i.longestText(e,o.font,t.ticks,t.longestTextCache),d=u,c=t.getPixelForTick(1)-t.getPixelForTick(0)-6;d>c&&r<a.maxRotation;){var h=i.toRadians(r);if(l=Math.cos(h),s=Math.sin(h),s*u>t.maxHeight){r--;break}r++,d=l*u}t.labelRotation=r},afterCalculateTickRotation:function(){i.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){i.callback(this.options.beforeFit,[this])},fit:function(){var t=this,a=t.minSize={width:0,height:0},o=t.options,r=o.ticks,l=o.scaleLabel,s=o.gridLines,u=o.display,d=t.isHorizontal(),c=n(r),h=1.5*n(l).size,f=o.gridLines.tickMarkLength;if(d?a.width=t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:a.width=u&&s.drawTicks?f:0,d?a.height=u&&s.drawTicks?f:0:a.height=t.maxHeight,l.display&&u&&(d?a.height+=h:a.width+=h),r.display&&u){var g=i.longestText(t.ctx,c.font,t.ticks,t.longestTextCache),p=i.numberOfLabelLines(t.ticks),m=.5*c.size;if(d){t.longestLabelWidth=g;var v=i.toRadians(t.labelRotation),b=Math.cos(v),x=Math.sin(v),y=x*g+c.size*p+m*p;a.height=Math.min(t.maxHeight,a.height+y),t.ctx.font=c.font;var k=t.ticks[0],w=e(t.ctx,k,c.font),M=t.ticks[t.ticks.length-1],S=e(t.ctx,M,c.font);0!==t.labelRotation?(t.paddingLeft="bottom"===o.position?b*w+3:b*m+3,t.paddingRight="bottom"===o.position?b*m+3:b*S+3):(t.paddingLeft=w/2+3,t.paddingRight=S/2+3)}else r.mirror?g=0:g+=t.options.ticks.padding,a.width=Math.min(t.maxWidth,a.width+g),t.paddingTop=c.size/2,t.paddingBottom=c.size/2}t.handleMargins(),t.width=a.width,t.height=a.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){i.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){return null===t||"undefined"==typeof t?NaN:"number"!=typeof t||isFinite(t)?"object"==typeof t?t instanceof Date||t.isValid?t:this.getRightValue(this.isHorizontal()?t.x:t.y):t:NaN},getLabelForIndex:i.noop,getPixelForValue:i.noop,getValueForPixel:i.noop,getPixelForTick:function(t,e){var n=this;if(n.isHorizontal()){var i=n.width-(n.paddingLeft+n.paddingRight),a=i/Math.max(n.ticks.length-(n.options.gridLines.offsetGridLines?0:1),1),o=a*t+n.paddingLeft;e&&(o+=a/2);var r=n.left+Math.round(o);return r+=n.isFullWidth()?n.margins.left:0}var l=n.height-(n.paddingTop+n.paddingBottom);return n.top+t*(l/(n.ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var n=e.width-(e.paddingLeft+e.paddingRight),i=n*t+e.paddingLeft,a=e.left+Math.round(i);return a+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this,e=t.min,n=t.max;return t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0},draw:function(e){var a=this,o=a.options;if(o.display){var r,l,s=a.ctx,u=t.defaults.global,d=o.ticks,c=o.gridLines,h=o.scaleLabel,f=0!==a.labelRotation,g=d.autoSkip,p=a.isHorizontal();d.maxTicksLimit&&(l=d.maxTicksLimit);var m=i.getValueOrDefault(d.fontColor,u.defaultFontColor),v=n(d),b=c.drawTicks?c.tickMarkLength:0,x=i.getValueOrDefault(h.fontColor,u.defaultFontColor),y=n(h),k=i.toRadians(a.labelRotation),w=Math.cos(k),M=a.longestLabelWidth*w;s.fillStyle=m;var S=[];if(p){if(r=!1,(M+d.autoSkipPadding)*a.ticks.length>a.width-(a.paddingLeft+a.paddingRight)&&(r=1+Math.floor((M+d.autoSkipPadding)*a.ticks.length/(a.width-(a.paddingLeft+a.paddingRight)))),l&&a.ticks.length>l)for(;!r||a.ticks.length/(r||1)>l;)r||(r=1),r+=1;g||(r=!1)}var C="right"===o.position?a.left:a.right-b,D="right"===o.position?a.left+b:a.right,I="bottom"===o.position?a.top:a.bottom-b,A="bottom"===o.position?a.top+b:a.bottom;if(i.each(a.ticks,function(t,n){if(void 0!==t&&null!==t){var l=a.ticks.length===n+1,s=r>1&&n%r>0||n%r===0&&n+r>=a.ticks.length;if((!s||l)&&void 0!==t&&null!==t){var h,g,m,v;n===("undefined"!=typeof a.zeroLineIndex?a.zeroLineIndex:0)?(h=c.zeroLineWidth,g=c.zeroLineColor,m=c.zeroLineBorderDash,v=c.zeroLineBorderDashOffset):(h=i.getValueAtIndexOrDefault(c.lineWidth,n),g=i.getValueAtIndexOrDefault(c.color,n),m=i.getValueOrDefault(c.borderDash,u.borderDash),v=i.getValueOrDefault(c.borderDashOffset,u.borderDashOffset));var x,y,w,M,P,_,T,F,R,L,V="middle",O="middle";if(p){"bottom"===o.position?(O=f?"middle":"top",V=f?"right":"center",L=a.top+b):(O=f?"middle":"bottom",V=f?"left":"center",L=a.bottom-b);var z=a.getPixelForTick(n)+i.aliasPixel(h);R=a.getPixelForTick(n,c.offsetGridLines)+d.labelOffset,x=w=P=T=z,y=I,M=A,_=e.top,F=e.bottom}else{var B,W="left"===o.position,N=d.padding;d.mirror?(V=W?"left":"right",B=N):(V=W?"right":"left",
13
- B=b+N),R=W?a.right-B:a.left+B;var E=a.getPixelForTick(n);E+=i.aliasPixel(h),L=a.getPixelForTick(n,c.offsetGridLines),x=C,w=D,P=e.left,T=e.right,y=M=_=F=E}S.push({tx1:x,ty1:y,tx2:w,ty2:M,x1:P,y1:_,x2:T,y2:F,labelX:R,labelY:L,glWidth:h,glColor:g,glBorderDash:m,glBorderDashOffset:v,rotation:-1*k,label:t,textBaseline:O,textAlign:V})}}}),i.each(S,function(t){if(c.display&&(s.save(),s.lineWidth=t.glWidth,s.strokeStyle=t.glColor,s.setLineDash&&(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),c.drawTicks&&(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),c.drawOnChartArea&&(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),d.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=v.font,s.textBaseline=t.textBaseline,s.textAlign=t.textAlign;var e=t.label;if(i.isArray(e))for(var n=0,a=0;n<e.length;++n)s.fillText(""+e[n],0,a),a+=1.5*v.size;else s.fillText(e,0,0);s.restore()}}),h.display){var P,_,T=0;if(p)P=a.left+(a.right-a.left)/2,_="bottom"===o.position?a.bottom-y.size/2:a.top+y.size/2;else{var F="left"===o.position;P=F?a.left+y.size/2:a.right-y.size/2,_=a.top+(a.bottom-a.top)/2,T=F?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(P,_),s.rotate(T),s.textAlign="center",s.textBaseline="middle",s.fillStyle=x,s.font=y.font,s.fillText(h.labelString,0,0),s.restore()}if(c.drawBorder){s.lineWidth=i.getValueAtIndexOrDefault(c.lineWidth,0),s.strokeStyle=i.getValueAtIndexOrDefault(c.color,0);var R=a.left,L=a.right,V=a.top,O=a.bottom,z=i.aliasPixel(s.lineWidth);p?(V=O="top"===o.position?a.bottom:a.top,V+=z,O+=z):(R=L="left"===o.position?a.right:a.left,R+=z,L+=z),s.beginPath(),s.moveTo(R,V),s.lineTo(L,O),s.stroke()}}}})}},{}],32:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.scaleService={constructors:{},defaults:{},registerScaleType:function(t,n,i){this.constructors[t]=n,this.defaults[t]=e.clone(i)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(n){return this.defaults.hasOwnProperty(n)?e.scaleMerge(t.defaults.scale,this.defaults[n]):{}},updateScaleDefaults:function(t,n){var i=this.defaults;i.hasOwnProperty(t)&&(i[t]=e.extend(i[t],n))},addScalesToLayout:function(n){e.each(n.scales,function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,t.layoutService.addBox(n,e)})}}}},{}],33:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.Ticks={generators:{linear:function(t,n){var i,a=[];if(t.stepSize&&t.stepSize>0)i=t.stepSize;else{var o=e.niceNum(n.max-n.min,!1);i=e.niceNum(o/(t.maxTicks-1),!0)}var r=Math.floor(n.min/i)*i,l=Math.ceil(n.max/i)*i;t.min&&t.max&&t.stepSize&&e.almostWhole((t.max-t.min)/t.stepSize,i/1e3)&&(r=t.min,l=t.max);var s=(l-r)/i;s=e.almostEquals(s,Math.round(s),i/1e3)?Math.round(s):Math.ceil(s),a.push(void 0!==t.min?t.min:r);for(var u=1;u<s;++u)a.push(r+u*i);return a.push(void 0!==t.max?t.max:l),a},logarithmic:function(t,n){var i,a,o=[],r=e.getValueOrDefault,l=r(t.min,Math.pow(10,Math.floor(e.log10(n.min)))),s=Math.floor(e.log10(n.max)),u=Math.ceil(n.max/Math.pow(10,s));0===l?(i=Math.floor(e.log10(n.minNotZero)),a=Math.floor(n.minNotZero/Math.pow(10,i)),o.push(l),l=a*Math.pow(10,i)):(i=Math.floor(e.log10(l)),a=Math.floor(l/Math.pow(10,i)));do o.push(l),++a,10===a&&(a=1,++i),l=a*Math.pow(10,i);while(i<s||i===s&&a<u);var d=r(t.max,l);return o.push(d),o}},formatters:{values:function(t){return e.isArray(t)?t:""+t},linear:function(t,n,i){var a=i.length>3?i[2]-i[1]:i[1]-i[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var o=e.log10(Math.abs(a)),r="";if(0!==t){var l=-1*Math.floor(o);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,n,i){var a=t/Math.pow(10,Math.floor(e.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===n||n===i.length-1?t.toExponential():""}}}}},{}],34:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){var n=s.color(t);return n.alpha(e*n.alpha()).rgbaString()}function n(t,e){return e&&(s.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function i(t){var e=t._xScale,n=t._yScale||t._scale,i=t._index,a=t._datasetIndex;return{xLabel:e?e.getLabelForIndex(i,a):"",yLabel:n?n.getLabelForIndex(i,a):"",index:i,datasetIndex:a,x:t._model.x,y:t._model.y}}function a(e){var n=t.defaults.global,i=s.getValueOrDefault;return{xPadding:e.xPadding,yPadding:e.yPadding,xAlign:e.xAlign,yAlign:e.yAlign,bodyFontColor:e.bodyFontColor,_bodyFontFamily:i(e.bodyFontFamily,n.defaultFontFamily),_bodyFontStyle:i(e.bodyFontStyle,n.defaultFontStyle),_bodyAlign:e.bodyAlign,bodyFontSize:i(e.bodyFontSize,n.defaultFontSize),bodySpacing:e.bodySpacing,titleFontColor:e.titleFontColor,_titleFontFamily:i(e.titleFontFamily,n.defaultFontFamily),_titleFontStyle:i(e.titleFontStyle,n.defaultFontStyle),titleFontSize:i(e.titleFontSize,n.defaultFontSize),_titleAlign:e.titleAlign,titleSpacing:e.titleSpacing,titleMarginBottom:e.titleMarginBottom,footerFontColor:e.footerFontColor,_footerFontFamily:i(e.footerFontFamily,n.defaultFontFamily),_footerFontStyle:i(e.footerFontStyle,n.defaultFontStyle),footerFontSize:i(e.footerFontSize,n.defaultFontSize),_footerAlign:e.footerAlign,footerSpacing:e.footerSpacing,footerMarginTop:e.footerMarginTop,caretSize:e.caretSize,cornerRadius:e.cornerRadius,backgroundColor:e.backgroundColor,opacity:0,legendColorBackground:e.multiKeyBackground,displayColors:e.displayColors,borderColor:e.borderColor,borderWidth:e.borderWidth}}function o(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,o=e.body,r=o.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);r+=e.beforeBody.length+e.afterBody.length;var l=e.title.length,u=e.footer.length,d=e.titleFontSize,c=e.bodyFontSize,h=e.footerFontSize;i+=l*d,i+=l?(l-1)*e.titleSpacing:0,i+=l?e.titleMarginBottom:0,i+=r*c,i+=r?(r-1)*e.bodySpacing:0,i+=u?e.footerMarginTop:0,i+=u*h,i+=u?(u-1)*e.footerSpacing:0;var f=0,g=function(t){a=Math.max(a,n.measureText(t).width+f)};return n.font=s.fontString(d,e._titleFontStyle,e._titleFontFamily),s.each(e.title,g),n.font=s.fontString(c,e._bodyFontStyle,e._bodyFontFamily),s.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?c+2:0,s.each(o,function(t){s.each(t.before,g),s.each(t.lines,g),s.each(t.after,g)}),f=0,n.font=s.fontString(h,e._footerFontStyle,e._footerFontFamily),s.each(e.footer,g),a+=2*e.xPadding,{width:a,height:i}}function r(t,e){var n=t._model,i=t._chart,a=t._chart.chartArea,o="center",r="center";n.y<e.height?r="top":n.y>i.height-e.height&&(r="bottom");var l,s,u,d,c,h=(a.left+a.right)/2,f=(a.top+a.bottom)/2;"center"===r?(l=function(t){return t<=h},s=function(t){return t>h}):(l=function(t){return t<=e.width/2},s=function(t){return t>=i.width-e.width/2}),u=function(t){return t+e.width>i.width},d=function(t){return t-e.width<0},c=function(t){return t<=f?"top":"bottom"},l(n.x)?(o="left",u(n.x)&&(o="center",r=c(n.y))):s(n.x)&&(o="right",d(n.x)&&(o="center",r=c(n.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:o,yAlign:g.yAlign?g.yAlign:r}}function l(t,e,n){var i=t.x,a=t.y,o=t.caretSize,r=t.caretPadding,l=t.cornerRadius,s=n.xAlign,u=n.yAlign,d=o+r,c=l+r;return"right"===s?i-=e.width:"center"===s&&(i-=e.width/2),"top"===u?a+=d:a-="bottom"===u?e.height+d:e.height/2,"center"===u?"left"===s?i+=d:"right"===s&&(i-=d):"left"===s?i-=c:"right"===s&&(i+=c),{x:i,y:a}}var s=t.helpers;t.defaults.global.tooltips={enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:s.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var o=t[0];o.xLabel?n=o.xLabel:a>0&&o.index<a&&(n=i[o.index])}return n},afterTitle:s.noop,beforeBody:s.noop,beforeLabel:s.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),n+=t.yLabel},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex),i=n.data[t.index],a=i._view;return{borderColor:a.borderColor,backgroundColor:a.backgroundColor}},afterLabel:s.noop,afterBody:s.noop,beforeFooter:s.noop,footer:s.noop,afterFooter:s.noop}},t.Tooltip=t.Element.extend({initialize:function(){this._model=a(this._options)},getTitle:function(){var t=this,e=t._options,i=e.callbacks,a=i.beforeTitle.apply(t,arguments),o=i.title.apply(t,arguments),r=i.afterTitle.apply(t,arguments),l=[];return l=n(l,a),l=n(l,o),l=n(l,r)},getBeforeBody:function(){var t=this._options.callbacks.beforeBody.apply(this,arguments);return s.isArray(t)?t:void 0!==t?[t]:[]},getBody:function(t,e){var i=this,a=i._options.callbacks,o=[];return s.each(t,function(t){var r={before:[],lines:[],after:[]};n(r.before,a.beforeLabel.call(i,t,e)),n(r.lines,a.label.call(i,t,e)),n(r.after,a.afterLabel.call(i,t,e)),o.push(r)}),o},getAfterBody:function(){var t=this._options.callbacks.afterBody.apply(this,arguments);return s.isArray(t)?t:void 0!==t?[t]:[]},getFooter:function(){var t=this,e=t._options.callbacks,i=e.beforeFooter.apply(t,arguments),a=e.footer.apply(t,arguments),o=e.afterFooter.apply(t,arguments),r=[];return r=n(r,i),r=n(r,a),r=n(r,o)},update:function(e){var n,u,d=this,c=d._options,h=d._model,f=d._model=a(c),g=d._active,p=d._data,m={xAlign:h.xAlign,yAlign:h.yAlign},v={x:h.x,y:h.y},b={width:h.width,height:h.height},x={x:h.caretX,y:h.caretY};if(g.length){f.opacity=1;var y=[];x=t.Tooltip.positioners[c.position](g,d._eventPosition);var k=[];for(n=0,u=g.length;n<u;++n)k.push(i(g[n]));c.filter&&(k=k.filter(function(t){return c.filter(t,p)})),c.itemSort&&(k=k.sort(function(t,e){return c.itemSort(t,e,p)})),s.each(k,function(t){y.push(c.callbacks.labelColor.call(d,t,d._chart))}),f.title=d.getTitle(k,p),f.beforeBody=d.getBeforeBody(k,p),f.body=d.getBody(k,p),f.afterBody=d.getAfterBody(k,p),f.footer=d.getFooter(k,p),f.x=Math.round(x.x),f.y=Math.round(x.y),f.caretPadding=c.caretPadding,f.labelColors=y,f.dataPoints=k,b=o(this,f),m=r(this,b),v=l(f,b,m)}else f.opacity=0;return f.xAlign=m.xAlign,f.yAlign=m.yAlign,f.x=v.x,f.y=v.y,f.width=b.width,f.height=b.height,f.caretX=x.x,f.caretY=x.y,d._model=f,e&&c.custom&&c.custom.call(d,f),d},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,o,r,l,s,u=n.caretSize,d=n.cornerRadius,c=n.xAlign,h=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===h)l=g+m/2,"left"===c?(i=f,a=i-u,o=i,r=l+u,s=l-u):(i=f+p,a=i+u,o=i,r=l-u,s=l+u);else if("left"===c?(a=f+d+u,i=a-u,o=a+u):"right"===c?(a=f+p-d-u,i=a-u,o=a+u):(a=f+p/2,i=a-u,o=a+u),"top"===h)r=g,l=r-u,s=r;else{r=g+m,l=r+u,s=r;var v=o;o=i,i=v}return{x1:i,x2:a,x3:o,y1:r,y2:l,y3:s}},drawTitle:function(t,n,i,a){var o=n.title;if(o.length){i.textAlign=n._titleAlign,i.textBaseline="top";var r=n.titleFontSize,l=n.titleSpacing;i.fillStyle=e(n.titleFontColor,a),i.font=s.fontString(r,n._titleFontStyle,n._titleFontFamily);var u,d;for(u=0,d=o.length;u<d;++u)i.fillText(o[u],t.x,t.y),t.y+=r+l,u+1===o.length&&(t.y+=n.titleMarginBottom-l)}},drawBody:function(t,n,i,a){var o=n.bodyFontSize,r=n.bodySpacing,l=n.body;i.textAlign=n._bodyAlign,i.textBaseline="top";var u=e(n.bodyFontColor,a);i.fillStyle=u,i.font=s.fontString(o,n._bodyFontStyle,n._bodyFontFamily);var d=0,c=function(e){i.fillText(e,t.x+d,t.y),t.y+=o+r};s.each(n.beforeBody,c);var h=n.displayColors;d=h?o+2:0,s.each(l,function(r,l){s.each(r.before,c),s.each(r.lines,function(r){h&&(i.fillStyle=e(n.legendColorBackground,a),i.fillRect(t.x,t.y,o,o),i.strokeStyle=e(n.labelColors[l].borderColor,a),i.strokeRect(t.x,t.y,o,o),i.fillStyle=e(n.labelColors[l].backgroundColor,a),i.fillRect(t.x+1,t.y+1,o-2,o-2),i.fillStyle=u),c(r)}),s.each(r.after,c)}),d=0,s.each(n.afterBody,c),t.y-=r},drawFooter:function(t,n,i,a){var o=n.footer;o.length&&(t.y+=n.footerMarginTop,i.textAlign=n._footerAlign,i.textBaseline="top",i.fillStyle=e(n.footerFontColor,a),i.font=s.fontString(n.footerFontSize,n._footerFontStyle,n._footerFontFamily),s.each(o,function(e){i.fillText(e,t.x,t.y),t.y+=n.footerFontSize+n.footerSpacing}))},drawBackground:function(t,n,i,a,o){i.fillStyle=e(n.backgroundColor,o),i.strokeStyle=e(n.borderColor,o),i.lineWidth=n.borderWidth;var r=n.xAlign,l=n.yAlign,s=t.x,u=t.y,d=a.width,c=a.height,h=n.cornerRadius;i.beginPath(),i.moveTo(s+h,u),"top"===l&&this.drawCaret(t,a),i.lineTo(s+d-h,u),i.quadraticCurveTo(s+d,u,s+d,u+h),"center"===l&&"right"===r&&this.drawCaret(t,a),i.lineTo(s+d,u+c-h),i.quadraticCurveTo(s+d,u+c,s+d-h,u+c),"bottom"===l&&this.drawCaret(t,a),i.lineTo(s+h,u+c),i.quadraticCurveTo(s,u+c,s,u+c-h),"center"===l&&"left"===r&&this.drawCaret(t,a),i.lineTo(s,u+h),i.quadraticCurveTo(s,u,s+h,u),i.closePath(),i.fill(),n.borderWidth>0&&i.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(this.drawBackground(i,e,t,n,a),i.x+=e.xPadding,i.y+=e.yPadding,this.drawTitle(i,e,t,a),this.drawBody(i,e,t,a),this.drawFooter(i,e,t,a))}},handleEvent:function(t){var e=this,n=e._options,i=!1;if(e._lastActive=e._lastActive||[],"mouseout"===t.type?e._active=[]:e._active=e._chart.getElementsAtEventForMode(t,n.mode,n),i=!s.arrayEquals(e._active,e._lastActive),!i)return!1;if(e._lastActive=e._active,n.enabled||n.custom){e._eventPosition={x:t.x,y:t.y};var a=e._model;e.update(!0),e.pivot(),i|=a.x!==e._model.x||a.y!==e._model.y}return i}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,o=0;for(e=0,n=t.length;e<n;++e){var r=t[e];if(r&&r.hasValue()){var l=r.tooltipPosition();i+=l.x,a+=l.y,++o}}return{x:Math.round(i/o),y:Math.round(a/o)}},nearest:function(t,e){var n,i,a,o=e.x,r=e.y,l=Number.POSITIVE_INFINITY;for(i=0,a=t.length;i<a;++i){var u=t[i];if(u&&u.hasValue()){var d=u.getCenterPoint(),c=s.distanceBetweenPoints(e,d);c<l&&(l=c,n=u)}}if(n){var h=n.tooltipPosition();o=h.x,r=h.y}return{x:o,y:r}}}}},{}],35:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults.global;n.elements.arc={backgroundColor:n.defaultColor,borderColor:"#fff",borderWidth:2},t.elements.Arc=t.Element.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,n){var i=this._view;if(i){for(var a=e.getAngleFromPoint(i,{x:t,y:n}),o=a.angle,r=a.distance,l=i.startAngle,s=i.endAngle;s<l;)s+=2*Math.PI;for(;o>s;)o-=2*Math.PI;for(;o<l;)o+=2*Math.PI;var u=o>=l&&o<=s,d=r>=i.innerRadius&&r<=i.outerRadius;return u&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t=this._chart.ctx,e=this._view,n=e.startAngle,i=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,n,i),t.arc(e.x,e.y,e.innerRadius,i,n,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})}},{}],36:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults.global;t.defaults.global.elements.line={tension:.4,backgroundColor:n.defaultColor,borderWidth:3,borderColor:n.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0},t.elements.Line=t.Element.extend({draw:function(){var t,i,a,o,r=this,l=r._view,s=r._chart.ctx,u=l.spanGaps,d=r._children.slice(),c=n.elements.line,h=-1;for(r._loop&&d.length&&d.push(d[0]),s.save(),s.lineCap=l.borderCapStyle||c.borderCapStyle,s.setLineDash&&s.setLineDash(l.borderDash||c.borderDash),s.lineDashOffset=l.borderDashOffset||c.borderDashOffset,s.lineJoin=l.borderJoinStyle||c.borderJoinStyle,s.lineWidth=l.borderWidth||c.borderWidth,s.strokeStyle=l.borderColor||n.defaultColor,s.beginPath(),h=-1,t=0;t<d.length;++t)i=d[t],a=e.previousItem(d,t),o=i._view,0===t?o.skip||(s.moveTo(o.x,o.y),h=t):(a=h===-1?a:d[h],o.skip||(h!==t-1&&!u||h===-1?s.moveTo(o.x,o.y):e.canvas.lineTo(s,a._view,i._view),h=t));s.stroke(),s.restore()}})}},{}],37:[function(t,e,n){"use strict";e.exports=function(t){function e(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hitRadius,2)}function n(t){var e=this._view;return!!e&&Math.pow(t-e.y,2)<Math.pow(e.radius+e.hitRadius,2)}var i=t.helpers,a=t.defaults.global,o=a.defaultColor;a.elements.point={radius:3,pointStyle:"circle",backgroundColor:o,borderWidth:1,borderColor:o,hitRadius:1,hoverRadius:4,hoverBorderWidth:1},t.elements.Point=t.Element.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:e,inXRange:e,inYRange:n,getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(e){var n=this._view,r=this._model,l=this._chart.ctx,s=n.pointStyle,u=n.radius,d=n.x,c=n.y,h=t.helpers.color,f=1.01,g=0;n.skip||(l.strokeStyle=n.borderColor||o,l.lineWidth=i.getValueOrDefault(n.borderWidth,a.elements.point.borderWidth),l.fillStyle=n.backgroundColor||o,void 0!==e&&(r.x<e.left||e.right*f<r.x||r.y<e.top||e.bottom*f<r.y)&&(r.x<e.left?g=(d-r.x)/(e.left-r.x):e.right*f<r.x?g=(r.x-d)/(r.x-e.right):r.y<e.top?g=(c-r.y)/(e.top-r.y):e.bottom*f<r.y&&(g=(r.y-c)/(r.y-e.bottom)),g=Math.round(100*g)/100,l.strokeStyle=h(l.strokeStyle).alpha(g).rgbString(),l.fillStyle=h(l.fillStyle).alpha(g).rgbString()),t.canvasHelpers.drawPoint(l,s,u,d,c))}})}},{}],38:[function(t,e,n){"use strict";e.exports=function(t){function e(t){return void 0!==t._view.width}function n(t){var n,i,a,o,r=t._view;if(e(t)){var l=r.width/2;n=r.x-l,i=r.x+l,a=Math.min(r.y,r.base),o=Math.max(r.y,r.base)}else{var s=r.height/2;n=Math.min(r.x,r.base),i=Math.max(r.x,r.base),a=r.y-s,o=r.y+s}return{left:n,top:a,right:i,bottom:o}}var i=t.defaults.global;i.elements.rectangle={backgroundColor:i.defaultColor,borderWidth:0,borderColor:i.defaultColor,borderSkipped:"bottom"},t.elements.Rectangle=t.Element.extend({draw:function(){function t(t){return v[(x+t)%4]}var e,n,i,a,o,r,l,s=this._chart.ctx,u=this._view,d=u.borderWidth;if(u.horizontal?(e=u.base,n=u.x,i=u.y-u.height/2,a=u.y+u.height/2,o=n>e?1:-1,r=1,l=u.borderSkipped||"left"):(e=u.x-u.width/2,n=u.x+u.width/2,i=u.y,a=u.base,o=1,r=a>i?1:-1,l=u.borderSkipped||"bottom"),d){var c=Math.min(Math.abs(e-n),Math.abs(i-a));d=d>c?c:d;var h=d/2,f=e+("left"!==l?h*o:0),g=n+("right"!==l?-h*o:0),p=i+("top"!==l?h*r:0),m=a+("bottom"!==l?-h*r:0);f!==g&&(i=p,a=m),p!==m&&(e=f,n=g)}s.beginPath(),s.fillStyle=u.backgroundColor,s.strokeStyle=u.borderColor,s.lineWidth=d;var v=[[e,a],[e,i],[n,i],[n,a]],b=["bottom","left","top","right"],x=b.indexOf(l,0);x===-1&&(x=0);var y=t(0);s.moveTo(y[0],y[1]);for(var k=1;k<4;k++)y=t(k),s.lineTo(y[0],y[1]);s.fill(),d&&s.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var i=!1;if(this._view){var a=n(this);i=t>=a.left&&t<=a.right&&e>=a.top&&e<=a.bottom}return i},inLabelRange:function(t,i){var a=this;if(!a._view)return!1;var o=!1,r=n(a);return o=e(a)?t>=r.left&&t<=r.right:i>=r.top&&i<=r.bottom},inXRange:function(t){var e=n(this);return t>=e.left&&t<=e.right},inYRange:function(t){var e=n(this);return t>=e.top&&t<=e.bottom},getCenterPoint:function(){var t,n,i=this._view;return e(this)?(t=i.x,n=(i.y+i.base)/2):(t=(i.x+i.base)/2,n=i.y),{x:t,y:n}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})}},{}],39:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){var n=s.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}function n(t,n){var i=t.style,a=t.getAttribute("height"),o=t.getAttribute("width");if(t._chartjs={initial:{height:a,width:o,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===o||""===o){var r=e(t,"width");void 0!==r&&(t.width=r)}if(null===a||""===a)if(""===t.style.height)t.height=t.width/(n.options.aspectRatio||2);else{var l=e(t,"height");void 0!==r&&(t.height=l)}return t}function i(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function a(t,e){var n=u[t.type]||t.type,a=s.getRelativePosition(t,e);return i(n,e,a.x,a.y,t)}function o(t){var e=document.createElement("iframe");return e.className="chartjs-hidden-iframe",e.style.cssText="display:block;overflow:hidden;border:0;margin:0;top:0;left:0;bottom:0;right:0;height:100%;width:100%;position:absolute;pointer-events:none;z-index:-1;",e.tabIndex=-1,s.addEvent(e,"load",function(){s.addEvent(e.contentWindow||e,"resize",t),t()}),e}function r(t,e,n){var a=t._chartjs={ticking:!1},r=function(){a.ticking||(a.ticking=!0,s.requestAnimFrame.call(window,function(){if(a.resizer)return a.ticking=!1,e(i("resize",n))}))};a.resizer=o(r),t.insertBefore(a.resizer,t.firstChild)}function l(t){if(t&&t._chartjs){var e=t._chartjs.resizer;e&&(e.parentNode.removeChild(e),t._chartjs.resizer=null),delete t._chartjs}}var s=t.helpers,u={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};return{acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(n(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e._chartjs){var n=e._chartjs.initial;["height","width"].forEach(function(t){var i=n[t];void 0===i||null===i?e.removeAttribute(t):e.setAttribute(t,i)}),s.each(n.style||{},function(t,n){e.style[n]=t}),e.width=e.width,delete e._chartjs}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"===e)return void r(i.parentNode,n,t);var o=n._chartjs||(n._chartjs={}),l=o.proxies||(o.proxies={}),u=l[t.id+"_"+e]=function(e){n(a(e,t))};s.addEvent(i,e,u)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"===e)return void l(i.parentNode,n);var a=n._chartjs||{},o=a.proxies||{},r=o[t.id+"_"+e];r&&s.removeEvent(i,e,r)}}}},{}],40:[function(t,e,n){"use strict";var i=t(39);e.exports=function(t){t.platform={acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},t.helpers.extend(t.platform,i(t))}},{39:39}],41:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e,n){var i,a=t._model||{},o=a.fill;if(void 0===o&&(o=!!a.backgroundColor),o===!1||null===o)return!1;if(o===!0)return"origin";if(i=parseFloat(o,10),isFinite(i)&&Math.floor(i)===i)return"-"!==o[0]&&"+"!==o[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function n(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?o=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?o=n.scaleZero:i.getBasePosition?o=i.getBasePosition():i.getBasePixel&&(o=i.getBasePixel()),void 0!==o&&null!==o){if(void 0!==o.x&&void 0!==o.y)return o;if("number"==typeof o&&isFinite(o))return e=i.isHorizontal(),{x:e?o:null,y:e?null:o}}return null}function i(t,e,n){var i,a=t[e],o=a.fill,r=[e];if(!n)return o;for(;o!==!1&&r.indexOf(o)===-1;){if(!isFinite(o))return o;if(i=t[o],!i)return!1;if(i.visible)return o;r.push(o),o=i.fill}return!1}function a(t){var e=t.fill,n="dataset";return e===!1?null:(isFinite(e)||(n="boundary"),d[n](t))}function o(t){return t&&!t.skip}function r(t,e,n,i,a){var o;if(i&&a){for(t.moveTo(e[0].x,e[0].y),o=1;o<i;++o)u.canvas.lineTo(t,e[o-1],e[o]);for(t.lineTo(n[a-1].x,n[a-1].y),o=a-1;o>0;--o)u.canvas.lineTo(t,n[o],n[o-1],!0)}}function l(t,e,n,i,a,l){var s,u,d,c,h,f,g,p=e.length,m=i.spanGaps,v=[],b=[],x=0,y=0;for(t.beginPath(),s=0,u=p+!!l;s<u;++s)d=s%p,c=e[d]._view,h=n(c,d,i),f=o(c),g=o(h),f&&g?(x=v.push(c),y=b.push(h)):x&&y&&(m?(f&&v.push(c),g&&b.push(h)):(r(t,v,b,x,y),x=y=0,v=[],b=[]));r(t,v,b,x,y),t.closePath(),t.fillStyle=a,t.fill()}t.defaults.global.plugins.filler={propagate:!0};var s=t.defaults,u=t.helpers,d={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e),o=a&&i.dataset._children||[];return o.length?function(t,e){return o[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};return{id:"filler",afterDatasetsUpdate:function(o,r){var l,s,u,d,c=(o.data.datasets||[]).length,h=r.propagate,f=[];for(s=0;s<c;++s)l=o.getDatasetMeta(s),u=l.dataset,d=null,u&&u._model&&u instanceof t.elements.Line&&(d={visible:o.isDatasetVisible(s),fill:e(u,s,c),chart:o,el:u}),l.$filler=d,f.push(d);for(s=0;s<c;++s)d=f[s],d&&(d.fill=i(f,s,h),d.boundary=n(d),d.mapper=a(d))},beforeDatasetDraw:function(t,e){var n=e.meta.$filler;if(n){var i=n.el,a=i._view,o=i._children||[],r=n.mapper,u=a.backgroundColor||s.global.defaultColor;r&&u&&o.length&&l(t.ctx,o,r,a,u,i._loop)}}}}},{}],42:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}function n(e,n){var i=new t.Legend({ctx:e.ctx,options:n,chart:e});a.configure(e,i,n),a.addBox(e,i),e.legend=i}var i=t.helpers,a=t.layoutService,o=i.noop;return t.defaults.global.legend={display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return i.isArray(e.datasets)?e.datasets.map(function(e,n){return{text:e.label,fillStyle:i.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}},this):[]}}},t.Legend=t.Element.extend({initialize:function(t){i.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:o,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:o,beforeSetDimensions:o,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:o,beforeBuildLabels:o,buildLabels:function(){var t=this,e=t.options.labels,n=e.generateLabels.call(t,t.chart);e.filter&&(n=n.filter(function(n){return e.filter(n,t.chart.data)})),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:o,beforeFit:o,fit:function(){var n=this,a=n.options,o=a.labels,r=a.display,l=n.ctx,s=t.defaults.global,u=i.getValueOrDefault,d=u(o.fontSize,s.defaultFontSize),c=u(o.fontStyle,s.defaultFontStyle),h=u(o.fontFamily,s.defaultFontFamily),f=i.fontString(d,c,h),g=n.legendHitBoxes=[],p=n.minSize,m=n.isHorizontal();if(m?(p.width=n.maxWidth,p.height=r?10:0):(p.width=r?10:0,p.height=n.maxHeight),r)if(l.font=f,m){var v=n.lineWidths=[0],b=n.legendItems.length?d+o.padding:0;l.textAlign="left",l.textBaseline="top",i.each(n.legendItems,function(t,i){var a=e(o,d),r=a+d/2+l.measureText(t.text).width;v[v.length-1]+r+o.padding>=n.width&&(b+=d+o.padding,v[v.length]=n.left),g[i]={left:0,top:0,width:r,height:d},v[v.length-1]+=r+o.padding}),p.height+=b}else{var x=o.padding,y=n.columnWidths=[],k=o.padding,w=0,M=0,S=d+x;i.each(n.legendItems,function(t,n){var i=e(o,d),a=i+d/2+l.measureText(t.text).width;M+S>p.height&&(k+=w+o.padding,y.push(w),w=0,M=0),w=Math.max(w,a),M+=S,g[n]={left:0,top:0,width:a,height:d}}),k+=w,y.push(w),p.width+=k}n.width=p.width,n.height=p.height},afterFit:o,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var n=this,a=n.options,o=a.labels,r=t.defaults.global,l=r.elements.line,s=n.width,u=n.lineWidths;if(a.display){var d,c=n.ctx,h=i.getValueOrDefault,f=h(o.fontColor,r.defaultFontColor),g=h(o.fontSize,r.defaultFontSize),p=h(o.fontStyle,r.defaultFontStyle),m=h(o.fontFamily,r.defaultFontFamily),v=i.fontString(g,p,m);c.textAlign="left",c.textBaseline="top",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=v;var b=e(o,g),x=n.legendHitBoxes,y=function(e,n,i){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(i.fillStyle,r.defaultColor),c.lineCap=h(i.lineCap,l.borderCapStyle),c.lineDashOffset=h(i.lineDashOffset,l.borderDashOffset),c.lineJoin=h(i.lineJoin,l.borderJoinStyle),c.lineWidth=h(i.lineWidth,l.borderWidth),c.strokeStyle=h(i.strokeStyle,r.defaultColor);var o=0===h(i.lineWidth,l.borderWidth);if(c.setLineDash&&c.setLineDash(h(i.lineDash,l.borderDash)),a.labels&&a.labels.usePointStyle){var s=g*Math.SQRT2/2,u=s/Math.SQRT2,d=e+u,f=n+u;t.canvasHelpers.drawPoint(c,i.pointStyle,s,d,f)}else o||c.strokeRect(e,n,b,g),c.fillRect(e,n,b,g);c.restore()}},k=function(t,e,n,i){c.fillText(n.text,b+g/2+t,e),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(b+g/2+t,e+g/2),c.lineTo(b+g/2+t+i,e+g/2),c.stroke())},w=n.isHorizontal();d=w?{x:n.left+(s-u[0])/2,y:n.top+o.padding,line:0}:{x:n.left+o.padding,y:n.top+o.padding,line:0};var M=g+o.padding;i.each(n.legendItems,function(t,e){var i=c.measureText(t.text).width,a=b+g/2+i,r=d.x,l=d.y;w?r+a>=s&&(l=d.y+=M,d.line++,r=d.x=n.left+(s-u[d.line])/2):l+M>n.bottom&&(r=d.x=r+n.columnWidths[d.line]+o.padding,l=d.y=n.top+o.padding,d.line++),y(r,l,t),x[e].left=r,x[e].top=l,k(r,l,t,i),w?d.x+=a+o.padding:d.y+=M})}},handleEvent:function(t){var e=this,n=e.options,i="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===i){if(!n.onHover)return}else{if("click"!==i)return;if(!n.onClick)return}var o=t.x,r=t.y;if(o>=e.left&&o<=e.right&&r>=e.top&&r<=e.bottom)for(var l=e.legendHitBoxes,s=0;s<l.length;++s){var u=l[s];if(o>=u.left&&o<=u.left+u.width&&r>=u.top&&r<=u.top+u.height){if("click"===i){n.onClick.call(e,t.native,e.legendItems[s]),a=!0;break}if("mousemove"===i){n.onHover.call(e,t.native,e.legendItems[s]),a=!0;break}}}return a}}),{id:"legend",beforeInit:function(t){var e=t.options.legend;e&&n(t,e)},beforeUpdate:function(e){var o=e.options.legend,r=e.legend;o?(o=i.configMerge(t.defaults.global.legend,o),r?(a.configure(e,r,o),r.options=o):n(e,o)):r&&(a.removeBox(e,r),delete e.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}}}},{}],43:[function(t,e,n){"use strict";e.exports=function(t){function e(e,n){var a=new t.Title({ctx:e.ctx,options:n,chart:e});i.configure(e,a,n),i.addBox(e,a),e.titleBlock=a}var n=t.helpers,i=t.layoutService,a=n.noop;return t.defaults.global.title={display:!1,position:"top",fullWidth:!0,weight:2e3,fontStyle:"bold",padding:10,text:""},t.Title=t.Element.extend({initialize:function(t){var e=this;n.extend(e,t),e.legendHitBoxes=[];
14
- },beforeUpdate:a,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:a,beforeSetDimensions:a,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:a,beforeBuildLabels:a,buildLabels:a,afterBuildLabels:a,beforeFit:a,fit:function(){var e=this,i=n.getValueOrDefault,a=e.options,o=t.defaults.global,r=a.display,l=i(a.fontSize,o.defaultFontSize),s=e.minSize;e.isHorizontal()?(s.width=e.maxWidth,s.height=r?l+2*a.padding:0):(s.width=r?l+2*a.padding:0,s.height=e.maxHeight),e.width=s.width,e.height=s.height},afterFit:a,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var e=this,i=e.ctx,a=n.getValueOrDefault,o=e.options,r=t.defaults.global;if(o.display){var l,s,u,d=a(o.fontSize,r.defaultFontSize),c=a(o.fontStyle,r.defaultFontStyle),h=a(o.fontFamily,r.defaultFontFamily),f=n.fontString(d,c,h),g=0,p=e.top,m=e.left,v=e.bottom,b=e.right;i.fillStyle=a(o.fontColor,r.defaultFontColor),i.font=f,e.isHorizontal()?(l=m+(b-m)/2,s=p+(v-p)/2,u=b-m):(l="left"===o.position?m+d/2:b-d/2,s=p+(v-p)/2,u=v-p,g=Math.PI*("left"===o.position?-.5:.5)),i.save(),i.translate(l,s),i.rotate(g),i.textAlign="center",i.textBaseline="middle",i.fillText(o.text,0,0,u),i.restore()}}}),{id:"title",beforeInit:function(t){var n=t.options.title;n&&e(t,n)},beforeUpdate:function(a){var o=a.options.title,r=a.titleBlock;o?(o=n.configMerge(t.defaults.global.title,o),r?(i.configure(a,r,o),r.options=o):e(a,o)):r&&(t.layoutService.removeBox(a,r),delete a.titleBlock)}}}},{}],44:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"bottom"},i=t.Scale.extend({getLabels:function(){var t=this.chart.data;return(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t=this,n=t.getLabels();t.minIndex=0,t.maxIndex=n.length-1;var i;void 0!==t.options.ticks.min&&(i=e.indexOf(n,t.options.ticks.min),t.minIndex=i!==-1?i:t.minIndex),void 0!==t.options.ticks.max&&(i=e.indexOf(n,t.options.ticks.max),t.maxIndex=i!==-1?i:t.maxIndex),t.min=n[t.minIndex],t.max=n[t.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,i=n.chart.data,a=n.isHorizontal();return i.yLabels&&!a?n.getRightValue(i.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e,n,i){var a,o=this,r=Math.max(o.maxIndex+1-o.minIndex-(o.options.gridLines.offsetGridLines?0:1),1);if(void 0!==t&&null!==t&&(a=o.isHorizontal()?t.x:t.y),void 0!==a||void 0!==t&&isNaN(e)){var l=o.getLabels();t=a||t;var s=l.indexOf(t);e=s!==-1?s:e}if(o.isHorizontal()){var u=o.width/r,d=u*(e-o.minIndex);return(o.options.gridLines.offsetGridLines&&i||o.maxIndex===o.minIndex&&i)&&(d+=u/2),o.left+Math.round(d)}var c=o.height/r,h=c*(e-o.minIndex);return o.options.gridLines.offsetGridLines&&i&&(h+=c/2),o.top+Math.round(h)},getPixelForTick:function(t,e){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null,e)},getValueForPixel:function(t){var e,n=this,i=Math.max(n.ticks.length-(n.options.gridLines.offsetGridLines?0:1),1),a=n.isHorizontal(),o=(a?n.width:n.height)/i;return t-=a?n.left:n.top,n.options.gridLines.offsetGridLines&&(t-=o/2),e=t<=0?0:Math.round(t/o)},getBasePixel:function(){return this.bottom}});t.scaleService.registerScaleType("category",i,n)}},{}],45:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"left",ticks:{callback:t.Ticks.formatters.linear}},i=t.LinearScaleBase.extend({determineDataLimits:function(){function t(t){return l?t.xAxisID===n.id:t.yAxisID===n.id}var n=this,i=n.options,a=n.chart,o=a.data,r=o.datasets,l=n.isHorizontal(),s=0,u=1;n.min=null,n.max=null;var d=i.stacked;if(void 0===d&&e.each(r,function(e,n){if(!d){var i=a.getDatasetMeta(n);a.isDatasetVisible(n)&&t(i)&&void 0!==i.stack&&(d=!0)}}),i.stacked||d){var c={};e.each(r,function(o,r){var l=a.getDatasetMeta(r),s=[l.type,void 0===i.stacked&&void 0===l.stack?r:"",l.stack].join(".");void 0===c[s]&&(c[s]={positiveValues:[],negativeValues:[]});var u=c[s].positiveValues,d=c[s].negativeValues;a.isDatasetVisible(r)&&t(l)&&e.each(o.data,function(t,e){var a=+n.getRightValue(t);isNaN(a)||l.data[e].hidden||(u[e]=u[e]||0,d[e]=d[e]||0,i.relativePoints?u[e]=100:a<0?d[e]+=a:u[e]+=a)})}),e.each(c,function(t){var i=t.positiveValues.concat(t.negativeValues),a=e.min(i),o=e.max(i);n.min=null===n.min?a:Math.min(n.min,a),n.max=null===n.max?o:Math.max(n.max,o)})}else e.each(r,function(i,o){var r=a.getDatasetMeta(o);a.isDatasetVisible(o)&&t(r)&&e.each(i.data,function(t,e){var i=+n.getRightValue(t);isNaN(i)||r.data[e].hidden||(null===n.min?n.min=i:i<n.min&&(n.min=i),null===n.max?n.max=i:i>n.max&&(n.max=i))})});n.min=isFinite(n.min)?n.min:s,n.max=isFinite(n.max)?n.max:u,this.handleTickRangeOptions()},getTickLimit:function(){var n,i=this,a=i.options.ticks;if(i.isHorizontal())n=Math.min(a.maxTicksLimit?a.maxTicksLimit:11,Math.ceil(i.width/50));else{var o=e.getValueOrDefault(a.fontSize,t.defaults.global.defaultFontSize);n=Math.min(a.maxTicksLimit?a.maxTicksLimit:11,Math.ceil(i.height/(2*o)))}return n},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e,n=this,i=n.start,a=+n.getRightValue(t),o=n.end-i;return n.isHorizontal()?(e=n.left+n.width/o*(a-i),Math.round(e)):(e=n.bottom-n.height/o*(a-i),Math.round(e))},getValueForPixel:function(t){var e=this,n=e.isHorizontal(),i=n?e.width:e.height,a=(n?t-e.left:e.bottom-t)/i;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType("linear",i,n)}},{}],46:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=e.noop;t.LinearScaleBase=t.Scale.extend({handleTickRangeOptions:function(){var t=this,n=t.options,i=n.ticks;if(i.beginAtZero){var a=e.sign(t.min),o=e.sign(t.max);a<0&&o<0?t.max=0:a>0&&o>0&&(t.min=0)}void 0!==i.min?t.min=i.min:void 0!==i.suggestedMin&&(null===t.min?t.min=i.suggestedMin:t.min=Math.min(t.min,i.suggestedMin)),void 0!==i.max?t.max=i.max:void 0!==i.suggestedMax&&(null===t.max?t.max=i.suggestedMax:t.max=Math.max(t.max,i.suggestedMax)),t.min===t.max&&(t.max++,i.beginAtZero||t.min--)},getTickLimit:n,handleDirectionalChanges:n,buildTicks:function(){var n=this,i=n.options,a=i.ticks,o=n.getTickLimit();o=Math.max(2,o);var r={maxTicks:o,min:a.min,max:a.max,stepSize:e.getValueOrDefault(a.fixedStepSize,a.stepSize)},l=n.ticks=t.Ticks.generators.linear(r,n);n.handleDirectionalChanges(),n.max=e.max(l),n.min=e.min(l),a.reverse?(l.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){var e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),t.Scale.prototype.convertTicksToLabels.call(e)}})}},{}],47:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"left",ticks:{callback:t.Ticks.formatters.logarithmic}},i=t.Scale.extend({determineDataLimits:function(){function t(t){return u?t.xAxisID===n.id:t.yAxisID===n.id}var n=this,i=n.options,a=i.ticks,o=n.chart,r=o.data,l=r.datasets,s=e.getValueOrDefault,u=n.isHorizontal();n.min=null,n.max=null,n.minNotZero=null;var d=i.stacked;if(void 0===d&&e.each(l,function(e,n){if(!d){var i=o.getDatasetMeta(n);o.isDatasetVisible(n)&&t(i)&&void 0!==i.stack&&(d=!0)}}),i.stacked||d){var c={};e.each(l,function(a,r){var l=o.getDatasetMeta(r),s=[l.type,void 0===i.stacked&&void 0===l.stack?r:"",l.stack].join(".");o.isDatasetVisible(r)&&t(l)&&(void 0===c[s]&&(c[s]=[]),e.each(a.data,function(t,e){var a=c[s],o=+n.getRightValue(t);isNaN(o)||l.data[e].hidden||(a[e]=a[e]||0,i.relativePoints?a[e]=100:a[e]+=o)}))}),e.each(c,function(t){var i=e.min(t),a=e.max(t);n.min=null===n.min?i:Math.min(n.min,i),n.max=null===n.max?a:Math.max(n.max,a)})}else e.each(l,function(i,a){var r=o.getDatasetMeta(a);o.isDatasetVisible(a)&&t(r)&&e.each(i.data,function(t,e){var i=+n.getRightValue(t);isNaN(i)||r.data[e].hidden||(null===n.min?n.min=i:i<n.min&&(n.min=i),null===n.max?n.max=i:i>n.max&&(n.max=i),0!==i&&(null===n.minNotZero||i<n.minNotZero)&&(n.minNotZero=i))})});n.min=s(a.min,n.min),n.max=s(a.max,n.max),n.min===n.max&&(0!==n.min&&null!==n.min?(n.min=Math.pow(10,Math.floor(e.log10(n.min))-1),n.max=Math.pow(10,Math.floor(e.log10(n.max))+1)):(n.min=1,n.max=10))},buildTicks:function(){var n=this,i=n.options,a=i.ticks,o={min:a.min,max:a.max},r=n.ticks=t.Ticks.generators.logarithmic(o,n);n.isHorizontal()||r.reverse(),n.max=e.max(r),n.min=e.min(r),a.reverse?(r.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),t.Scale.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},getPixelForValue:function(t){var n,i,a,o=this,r=o.start,l=+o.getRightValue(t),s=o.options,u=s.ticks;return o.isHorizontal()?(a=e.log10(o.end)-e.log10(r),0===l?i=o.left:(n=o.width,i=o.left+n/a*(e.log10(l)-e.log10(r)))):(n=o.height,0!==r||u.reverse?0===o.end&&u.reverse?(a=e.log10(o.start)-e.log10(o.minNotZero),i=l===o.end?o.top:l===o.minNotZero?o.top+.02*n:o.top+.02*n+.98*n/a*(e.log10(l)-e.log10(o.minNotZero))):0===l?i=u.reverse?o.top:o.bottom:(a=e.log10(o.end)-e.log10(r),n=o.height,i=o.bottom-n/a*(e.log10(l)-e.log10(r))):(a=e.log10(o.end)-e.log10(o.minNotZero),i=l===r?o.bottom:l===o.minNotZero?o.bottom-.02*n:o.bottom-.02*n-.98*n/a*(e.log10(l)-e.log10(o.minNotZero)))),i},getValueForPixel:function(t){var n,i,a=this,o=e.log10(a.end)-e.log10(a.start);return a.isHorizontal()?(i=a.width,n=a.start*Math.pow(10,(t-a.left)*o/i)):(i=a.height,n=Math.pow(10,(a.bottom-t)*o/i)/a.start),n}});t.scaleService.registerScaleType("logarithmic",i,n)}},{}],48:[function(t,e,n){"use strict";e.exports=function(t){function e(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function n(t){var e=t.options.pointLabels,n=f.getValueOrDefault(e.fontSize,g.defaultFontSize),i=f.getValueOrDefault(e.fontStyle,g.defaultFontStyle),a=f.getValueOrDefault(e.fontFamily,g.defaultFontFamily),o=f.fontString(n,i,a);return{size:n,style:i,family:a,font:o}}function i(t,e,n){return f.isArray(n)?{w:f.longestText(t,t.font,n),h:n.length*e+1.5*(n.length-1)*e}:{w:t.measureText(n).width,h:e}}function a(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n-5,end:e}:{start:e,end:e+n+5}}function o(t){var o,r,l,s=n(t),u=Math.min(t.height/2,t.width/2),d={r:t.width,l:0,t:t.height,b:0},c={};t.ctx.font=s.font,t._pointLabelSizes=[];var h=e(t);for(o=0;o<h;o++){l=t.getPointPosition(o,u),r=i(t.ctx,s.size,t.pointLabels[o]||""),t._pointLabelSizes[o]=r;var g=t.getIndexAngle(o),p=f.toDegrees(g)%360,m=a(p,l.x,r.w,0,180),v=a(p,l.y,r.h,90,270);m.start<d.l&&(d.l=m.start,c.l=g),m.end>d.r&&(d.r=m.end,c.r=g),v.start<d.t&&(d.t=v.start,c.t=g),v.end>d.b&&(d.b=v.end,c.b=g)}t.setReductions(u,d,c)}function r(t){var e=Math.min(t.height/2,t.width/2);t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0)}function l(t){return 0===t||180===t?"center":t<180?"left":"right"}function s(t,e,n,i){if(f.isArray(e))for(var a=n.y,o=1.5*i,r=0;r<e.length;++r)t.fillText(e[r],n.x,a),a+=o;else t.fillText(e,n.x,n.y)}function u(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function d(t){var i=t.ctx,a=f.getValueOrDefault,o=t.options,r=o.angleLines,d=o.pointLabels;i.lineWidth=r.lineWidth,i.strokeStyle=r.color;var c=t.getDistanceFromCenterForValue(o.reverse?t.min:t.max),h=n(t);i.textBaseline="top";for(var p=e(t)-1;p>=0;p--){if(r.display){var m=t.getPointPosition(p,c);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(m.x,m.y),i.stroke(),i.closePath()}if(d.display){var v=t.getPointPosition(p,c+5),b=a(d.fontColor,g.defaultFontColor);i.font=h.font,i.fillStyle=b;var x=t.getIndexAngle(p),y=f.toDegrees(x);i.textAlign=l(y),u(y,t._pointLabelSizes[p],v),s(i,t.pointLabels[p]||"",v,h.size)}}}function c(t,n,i,a){var o=t.ctx;if(o.strokeStyle=f.getValueAtIndexOrDefault(n.color,a-1),o.lineWidth=f.getValueAtIndexOrDefault(n.lineWidth,a-1),t.options.gridLines.circular)o.beginPath(),o.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),o.closePath(),o.stroke();else{var r=e(t);if(0===r)return;o.beginPath();var l=t.getPointPosition(0,i);o.moveTo(l.x,l.y);for(var s=1;s<r;s++)l=t.getPointPosition(s,i),o.lineTo(l.x,l.y);o.closePath(),o.stroke()}}function h(t){return f.isNumber(t)?t:0}var f=t.helpers,g=t.defaults.global,p={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:t.Ticks.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}},m=t.LinearScaleBase.extend({setDimensions:function(){var t=this,e=t.options,n=e.ticks;t.width=t.maxWidth,t.height=t.maxHeight,t.xCenter=Math.round(t.width/2),t.yCenter=Math.round(t.height/2);var i=f.min([t.height,t.width]),a=f.getValueOrDefault(n.fontSize,g.defaultFontSize);t.drawingArea=e.display?i/2-(a/2+n.backdropPaddingY):i/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;f.each(e.data.datasets,function(a,o){if(e.isDatasetVisible(o)){var r=e.getDatasetMeta(o);f.each(a.data,function(e,a){var o=+t.getRightValue(e);isNaN(o)||r.data[a].hidden||(n=Math.min(o,n),i=Math.max(o,i))})}}),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},getTickLimit:function(){var t=this.options.ticks,e=f.getValueOrDefault(t.fontSize,g.defaultFontSize);return Math.min(t.maxTicksLimit?t.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*e)))},convertTicksToLabels:function(){var e=this;t.LinearScaleBase.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(e.options.pointLabels.callback,e)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){this.options.pointLabels.display?o(this):r(this)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),o=Math.max(e.r-i.width,0)/Math.sin(n.r),r=-e.t/Math.cos(n.t),l=-Math.max(e.b-i.height,0)/Math.cos(n.b);a=h(a),o=h(o),r=h(r),l=h(l),i.drawingArea=Math.min(Math.round(t-(a+o)/2),Math.round(t-(r+l)/2)),i.setCenterPoint(a,o,r,l)},setCenterPoint:function(t,e,n,i){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,l=n+a.drawingArea,s=a.height-i-a.drawingArea;a.xCenter=Math.round((r+o)/2+a.left),a.yCenter=Math.round((l+s)/2+a.top)},getIndexAngle:function(t){var n=2*Math.PI/e(this),i=this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0,a=i*Math.PI*2/360;return t*n+a},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this,i=n.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+n.xCenter,y:Math.round(Math.sin(i)*e)+n.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this,e=t.min,n=t.max;return t.getPointPositionForValue(0,t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,i=e.ticks,a=f.getValueOrDefault;if(e.display){var o=t.ctx,r=a(i.fontSize,g.defaultFontSize),l=a(i.fontStyle,g.defaultFontStyle),s=a(i.fontFamily,g.defaultFontFamily),u=f.fontString(r,l,s);f.each(t.ticks,function(l,s){if(s>0||e.reverse){var d=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]),h=t.yCenter-d;if(n.display&&0!==s&&c(t,n,d,s),i.display){var f=a(i.fontColor,g.defaultFontColor);if(o.font=u,i.showLabelBackdrop){var p=o.measureText(l).width;o.fillStyle=i.backdropColor,o.fillRect(t.xCenter-p/2-i.backdropPaddingX,h-r/2-i.backdropPaddingY,p+2*i.backdropPaddingX,r+2*i.backdropPaddingY)}o.textAlign="center",o.textBaseline="middle",o.fillStyle=f,o.fillText(l,t.xCenter,h)}}}),(e.angleLines.display||e.pointLabels.display)&&d(t)}}});t.scaleService.registerScaleType("radialLinear",m,p)}},{}],49:[function(t,e,n){"use strict";var i=t(1);i="function"==typeof i?i:window.moment,e.exports=function(t){function e(t,e){var n=t.options.time;if("string"==typeof n.parser)return i(e,n.parser);if("function"==typeof n.parser)return n.parser(e);if("function"==typeof e.getMonth||"number"==typeof e)return i(e);if(e.isValid&&e.isValid())return e;var a=n.format;return"string"!=typeof a&&a.call?(console.warn("options.time.format is deprecated and replaced by options.time.parser."),a(e)):i(e,a)}function n(t,e,n,i){for(var a,o=Object.keys(l),r=o.length,s=o.indexOf(t);s<r;s++){a=o[s];var u=l[a],d=u.steps&&u.steps[u.steps.length-1]||u.maxStep;if(void 0===d||Math.ceil((n-e)/(d*u.size))<=i)break}return a}function a(t,e,n,i){var a=l[n],o=a.size,r=Math.ceil((e-t)/o),s=1,u=e-t;if(a.steps)for(var d=a.steps.length,c=0;c<d&&r>i;c++)s=a.steps[c],r=Math.ceil(u/(o*s));else for(;r>i&&i>0;)++s,r=Math.ceil(u/(o*s));return s}function o(t,e,n){var a=[];if(t.maxTicks){var o=t.stepSize;a.push(void 0!==t.min?t.min:n.min);for(var r=i(n.min);r.add(o,t.unit).valueOf()<n.max;)a.push(r.valueOf());var l=t.max||n.max;a[a.length-1]!==l&&a.push(l)}return a}var r=t.helpers,l={millisecond:{size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{size:1e3,steps:[1,2,5,10,30]},minute:{size:6e4,steps:[1,2,5,10,30]},hour:{size:36e5,steps:[1,2,3,6,12]},day:{size:864e5,steps:[1,2,5]},week:{size:6048e5,maxStep:4},month:{size:2628e6,maxStep:3},quarter:{size:7884e6,maxStep:4},year:{size:3154e7,maxStep:!1}},s={position:"bottom",time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm:ss a",hour:"MMM D, hA",day:"ll",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"}},ticks:{autoSkip:!1}};t.Ticks.generators.time=function(t,e){var n,a,r=t.isoWeekday;return"week"===t.unit&&r!==!1?(n=i(e.min).startOf("isoWeek").isoWeekday(r).valueOf(),a=i(e.max).startOf("isoWeek").isoWeekday(r),e.max-a>0&&a.add(1,"week"),a=a.valueOf()):(n=i(e.min).startOf(t.unit).valueOf(),a=i(e.max).startOf(t.unit),e.max-a>0&&a.add(1,t.unit),a=a.valueOf()),o(t,e,{min:n,max:a})};var u=t.Scale.extend({initialize:function(){if(!i)throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com");t.Scale.prototype.initialize.call(this)},determineDataLimits:function(){var t,n=this,i=n.options.time,a=Number.MAX_SAFE_INTEGER,o=Number.MIN_SAFE_INTEGER,l=n.chart.data,s={labels:[],datasets:[]};r.each(l.labels,function(r,l){var u=e(n,r);u.isValid()&&(i.round&&u.startOf(i.round),t=u.valueOf(),a=Math.min(t,a),o=Math.max(t,o),s.labels[l]=t)}),r.each(l.datasets,function(l,u){var d=[];"object"==typeof l.data[0]&&null!==l.data[0]&&n.chart.isDatasetVisible(u)?r.each(l.data,function(r,l){var s=e(n,n.getRightValue(r));s.isValid()&&(i.round&&s.startOf(i.round),t=s.valueOf(),a=Math.min(t,a),o=Math.max(t,o),d[l]=t)}):d=s.labels.slice(),s.datasets[u]=d}),n.dataMin=a,n.dataMax=o,n._parsedData=s},buildTicks:function(){var i,o,l=this,s=l.options.time,u=l.dataMin,d=l.dataMax;if(s.min){var c=e(l,s.min);s.round&&c.round(s.round),i=c.valueOf()}s.max&&(o=e(l,s.max).valueOf());var h=l.getLabelCapacity(i||u),f=s.unit||n(s.minUnit,i||u,o||d,h);l.displayFormat=s.displayFormats[f];var g=s.stepSize||a(i||u,o||d,f,h);l.ticks=t.Ticks.generators.time({maxTicks:h,min:i,max:o,stepSize:g,unit:f,isoWeekday:s.isoWeekday},{min:u,max:d}),l.max=r.max(l.ticks),l.min=r.min(l.ticks)},getLabelForIndex:function(t,n){var i=this,a=i.chart.data.labels&&t<i.chart.data.labels.length?i.chart.data.labels[t]:"",o=i.chart.data.datasets[n].data[t];return null!==o&&"object"==typeof o&&(a=i.getRightValue(o)),i.options.time.tooltipFormat&&(a=e(i,a).format(i.options.time.tooltipFormat)),a},tickFormatFunction:function(t,e,n){var i=t.format(this.displayFormat),a=this.options.ticks,o=r.getValueOrDefault(a.callback,a.userCallback);return o?o(i,e,n):i},convertTicksToLabels:function(){var t=this;t.ticksAsTimestamps=t.ticks,t.ticks=t.ticks.map(function(t){return i(t)}).map(t.tickFormatFunction,t)},getPixelForOffset:function(t){var e=this,n=e.max-e.min,i=n?(t-e.min)/n:0;if(e.isHorizontal()){var a=e.width*i;return e.left+Math.round(a)}var o=e.height*i;return e.top+Math.round(o)},getPixelForValue:function(t,n,i){var a=this,o=null;if(void 0!==n&&void 0!==i&&(o=a._parsedData.datasets[i][n]),null===o&&(t&&t.isValid||(t=e(a,a.getRightValue(t))),t&&t.isValid&&t.isValid()&&(o=t.valueOf())),null!==o)return a.getPixelForOffset(o)},getPixelForTick:function(t){return this.getPixelForOffset(this.ticksAsTimestamps[t])},getValueForPixel:function(t){var e=this,n=e.isHorizontal()?e.width:e.height,a=(t-(e.isHorizontal()?e.left:e.top))/n;return i(e.min+a*(e.max-e.min))},getLabelWidth:function(e){var n=this,i=n.options.ticks,a=n.ctx.measureText(e).width,o=Math.cos(r.toRadians(i.maxRotation)),l=Math.sin(r.toRadians(i.maxRotation)),s=r.getValueOrDefault(i.fontSize,t.defaults.global.defaultFontSize);return a*o+s*l},getLabelCapacity:function(t){var e=this;e.displayFormat=e.options.time.displayFormats.millisecond;var n=e.tickFormatFunction(i(t),0,[]),a=e.getLabelWidth(n),o=e.isHorizontal()?e.width:e.height,r=o/a;return r}});t.scaleService.registerScaleType("time",u,s)}},{1:1}]},{},[7])(7)});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
obfx_modules/stats/views/dashboard-widget-tpl.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
- /**
3
- * The Dashboard Widget View for Stats Module of Orbit Fox.
4
- *
5
- * @link https://themeisle.com
6
- * @since 1.0.0
7
- *
8
- * @package Orbit_Fox_Modules
9
- * @subpackage Orbit_Fox_Modules/stats/views
10
- * @codeCoverageIgnore
11
- */
12
-
13
- $html_title = '';
14
- if ( trim( $title ) != '' ) {
15
- $html_title = '<h3>' . $title . ' <small><i> for ' . $display_year . '</i></small></h3>';
16
- }
17
-
18
- $html_desc = '';
19
- if ( trim( $desc ) != '' ) {
20
- $html_desc = '<hr/><small>' . $desc . '</small>';
21
- }
22
-
23
- $posts_data = '';
24
- $comments_data = '';
25
- $graph_shows = $this->get_option( 'graph_shows' );
26
- if ( $graph_shows == 0 || $graph_shows == 2 ) {
27
- $posts_data = 'data-posts="' . json_encode( $posts_count ) . '"';
28
- }
29
- if ( $graph_shows == 1 || $graph_shows == 2 ) {
30
- $comments_data = 'data-comments="' . json_encode( $comments_count ) . '"';
31
- }
32
-
33
- ?>
34
-
35
- <?php echo $html_title; ?>
36
- <canvas id="obfxChart" <?php echo $posts_data; ?> <?php echo $comments_data; ?> ></canvas>
37
- <?php echo $html_desc; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
obfx_modules/template-directory/css/admin.css CHANGED
@@ -7,26 +7,42 @@
7
  padding: 15px;
8
  font-size: 16px;
9
  font-weight: 600;
 
10
  }
11
 
12
  .obfx-template {
13
  float: left;
 
 
14
  position: relative;
15
- box-sizing: border-box;
16
- width: 22.7%;
17
- margin: 0 3% 3% 0;
18
  border: 1px solid #ddd;
19
- background: #fff;
20
- box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1);
 
 
21
  }
22
 
23
- .obfx-template:nth-child(4n) {
24
  margin-right: 0;
25
  }
 
 
 
 
 
 
 
26
 
27
  .obfx-template-actions {
 
 
 
 
 
 
 
28
  float: right;
29
- padding: 10px;
30
  }
31
 
32
  .obfx-template-actions .button .dashicons {
@@ -38,17 +54,21 @@
38
  }
39
 
40
  .obfx-template-screenshot {
 
41
  display: inline-block;
42
  overflow: hidden;
43
  position: relative;
44
  border: 1px solid #ddd;
45
  border-right: none;
46
  border-left: none;
 
 
 
47
  }
48
 
49
  .obfx-template img {
50
  float: left;
51
- max-width: 100%;
52
  }
53
 
54
  .obfx-template-browser.customizer {
@@ -56,14 +76,6 @@
56
  padding: 10px 20px 60px;
57
  }
58
 
59
- .obfx-custom-customizer #customize-header-actions input.save {
60
- display: none;
61
- }
62
-
63
- .obfx-custom-customizer .control-panel-widgets {
64
- display: none !important;
65
- }
66
-
67
  .obfx-next-prev {
68
  position: absolute;
69
  left: 45px;
@@ -119,19 +131,6 @@
119
  background: #fff;
120
  }
121
 
122
- .obfx-template-browser.customizer .obfx-template {
123
- display: none;
124
- float: none;
125
- width: 100%;
126
- margin: 0 0 20px 0;
127
- border: none;
128
- cursor: default;
129
- }
130
-
131
- #customize-controls .obfx-template-actions {
132
- padding: 0;
133
- }
134
-
135
  .obfx-template-browser.customizer .obfx-template.active {
136
  display: inline-block;
137
  }
@@ -159,7 +158,10 @@
159
  }
160
 
161
  .obfx-done-import {
162
- margin: 0 10px;
 
 
 
163
  color: green;
164
  }
165
 
@@ -167,20 +169,10 @@
167
  font-size: 30px;
168
  }
169
 
170
- #customize-controls .obfx-done-import .dashicons {
171
- line-height: 50px;
172
- }
173
-
174
  .obfx-updating.updating-message.button.button-primary {
175
  padding: 0 4px 0 10px;
176
  }
177
 
178
- #customize-header-actions .button.obfx-import-template,
179
- #customize-header-actions .button.obfx-updating {
180
- float: right;
181
- margin-top: 8px;
182
- }
183
-
184
  .obfx-no-elementor-modal-wrapper {
185
  display: none;
186
  position: fixed;
@@ -231,3 +223,101 @@
231
  color: #7b7b7b;
232
  cursor: pointer;
233
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  padding: 15px;
8
  font-size: 16px;
9
  font-weight: 600;
10
+ float: left;
11
  }
12
 
13
  .obfx-template {
14
  float: left;
15
+ background: #fff;
16
+ cursor: pointer;
17
  position: relative;
 
 
 
18
  border: 1px solid #ddd;
19
+ box-shadow: 0 1px 1px -1px rgba(0,0,0,.1);
20
+ box-sizing: border-box;
21
+ margin: 0 4% 4% 0;
22
+ width: 30.6%;
23
  }
24
 
25
+ .obfx-template:nth-child(3n) {
26
  margin-right: 0;
27
  }
28
+ .obfx-template:hover .obfx-template-actions,
29
+ .obfx-template:hover .obfx-preview-template {
30
+ opacity: 1;
31
+ }
32
+ .obfx-template:hover .obfx-template-screenshot {
33
+ opacity: .4;
34
+ }
35
 
36
  .obfx-template-actions {
37
+ position: absolute;
38
+ right: 0;
39
+ bottom: 0;
40
+ transition: .3s ease;
41
+ opacity:0;
42
+ background: rgba(244,244,244,.7);
43
+ border-left: 1px solid rgba(0,0,0,.05);
44
  float: right;
45
+ padding: 10px 15px;
46
  }
47
 
48
  .obfx-template-actions .button .dashicons {
54
  }
55
 
56
  .obfx-template-screenshot {
57
+ background: #fff;
58
  display: inline-block;
59
  overflow: hidden;
60
  position: relative;
61
  border: 1px solid #ddd;
62
  border-right: none;
63
  border-left: none;
64
+ float: left;
65
+ transition: .3s ease;
66
+ width: 100%;
67
  }
68
 
69
  .obfx-template img {
70
  float: left;
71
+ width: 100%;
72
  }
73
 
74
  .obfx-template-browser.customizer {
76
  padding: 10px 20px 60px;
77
  }
78
 
 
 
 
 
 
 
 
 
79
  .obfx-next-prev {
80
  position: absolute;
81
  left: 45px;
131
  background: #fff;
132
  }
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  .obfx-template-browser.customizer .obfx-template.active {
135
  display: inline-block;
136
  }
158
  }
159
 
160
  .obfx-done-import {
161
+ display: block;
162
+ text-align: center;
163
+ padding-top: 10px;
164
+ margin: 0;
165
  color: green;
166
  }
167
 
169
  font-size: 30px;
170
  }
171
 
 
 
 
 
172
  .obfx-updating.updating-message.button.button-primary {
173
  padding: 0 4px 0 10px;
174
  }
175
 
 
 
 
 
 
 
176
  .obfx-no-elementor-modal-wrapper {
177
  display: none;
178
  position: fixed;
223
  color: #7b7b7b;
224
  cursor: pointer;
225
  }
226
+
227
+
228
+ .obfx-template-preview.theme-install-overlay .install-theme-info.obfx-theme-info .theme-screenshot{
229
+ width: 100%;
230
+ }
231
+ .obfx-template-preview.theme-install-overlay .install-theme-info.obfx-theme-info {
232
+ display: none;
233
+ }
234
+
235
+ .obfx-template-preview.theme-install-overlay .install-theme-info.obfx-theme-info.active {
236
+ display: block;
237
+ }
238
+
239
+ .more-details.obfx-preview-template {
240
+ transition: .3s ease;
241
+ cursor: pointer;
242
+ position: absolute;
243
+ top: 0;
244
+ bottom: 51px;
245
+ left: 0;
246
+ right: 0;
247
+ text-align: center;
248
+ z-index: 100;
249
+ opacity:0;
250
+ }
251
+
252
+ .more-details.obfx-preview-template span {
253
+ background: #23282d;
254
+ background: rgba(0,0,0,.7);
255
+ color: #fff;
256
+ font-size: 15px;
257
+ text-shadow: 0 1px 0 rgba(0,0,0,.6);
258
+ -webkit-font-smoothing: antialiased;
259
+ font-weight: 600;
260
+ padding: 15px 12px;
261
+ text-align: center;
262
+ border-radius: 3px;
263
+ transform: translate(-50%, -50%);
264
+ position: relative;
265
+ left: 50%;
266
+ top: 50%;
267
+ width: 45%;
268
+ display: block;
269
+ }
270
+
271
+ .obfx-required-plugins > p {
272
+ color: #333;
273
+ font-weight: 800;
274
+ margin-top: 20px;
275
+ }
276
+
277
+ .obfx-required-plugins .button {
278
+ display: none;
279
+ }
280
+ @media only screen and (min-width: 1640px) {
281
+ .obfx-template {
282
+ width: 22.7%;
283
+ margin: 0 3% 3% 0;
284
+ }
285
+ .obfx-template:nth-child(3n) {
286
+ margin-right: 3%;
287
+ }
288
+ .obfx-template:nth-child(4n) {
289
+ margin-right: 0;
290
+ }
291
+ }
292
+
293
+ @media only screen and (max-width: 1120px){
294
+ .obfx-template {
295
+ width: 47.5%;
296
+ margin: 0 3% 3% 0;
297
+ }
298
+ .obfx-template:nth-child(3n) {
299
+ margin-right: 3%;
300
+ }
301
+ .obfx-template:nth-child(even) {
302
+ margin-right: 0;
303
+ }
304
+ }
305
+
306
+ @media only screen and (max-width: 600px) {
307
+ .obfx-template-preview .wp-full-overlay-sidebar {
308
+ width: 100%;
309
+ }
310
+ }
311
+
312
+ @media only screen and (min-width: 2000px) {
313
+ .obfx-template {
314
+ width: 17.6%;
315
+ margin: 0 3% 3% 0;
316
+ }
317
+ .obfx-template:nth-child(4n) {
318
+ margin-right: 3%;
319
+ }
320
+ .obfx-template:nth-child(5n) {
321
+ margin-right: 0;
322
+ }
323
+ }
obfx_modules/template-directory/inc/class-obfx-template-directory-customizer-section.php DELETED
@@ -1,122 +0,0 @@
1
- <?php
2
- /**
3
- * Orbit fox template directory customizer section.
4
- *
5
- * @package Orbit_Fox_Modules
6
- * @subpackage Orbit_Fox_Modules/template-directory
7
- */
8
-
9
- /**
10
- * The Orbit Fox Template Directory Customizer Section.
11
- *
12
- * @link https://themeisle.com
13
- * @since 1.0.0
14
- *
15
- * @package Template_Directory_OBFX_Module
16
- */
17
- class OBFX_Template_Directory_Customizer_Section extends WP_Customize_Section {
18
-
19
- /**
20
- * The type of customize section being rendered.
21
- *
22
- * @since 1.0.0
23
- * @access public
24
- * @var string
25
- */
26
- public $type = 'obfx-template-directory-section';
27
-
28
- /**
29
- * OBFX Module Directory
30
- *
31
- * @since 1.0.0
32
- * @access private
33
- *
34
- * @var string
35
- */
36
- private $module_dir = '';
37
-
38
- /**
39
- * Templates list.
40
- *
41
- * @var array
42
- */
43
- private $templates = array();
44
-
45
- /**
46
- * The previewed template slug.
47
- *
48
- * @var string
49
- */
50
- private $called_template = '';
51
-
52
- /**
53
- * The tempalte to render required plugins install button.
54
- *
55
- * @var string
56
- */
57
- private $required_plugins = '';
58
-
59
- /**
60
- * Hestia_Hiding_Section constructor.
61
- *
62
- * @param WP_Customize_Manager $manager Customizer Manager.
63
- * @param string $id Control id.
64
- * @param array $args Arguments.
65
- */
66
- public function __construct( WP_Customize_Manager $manager, $id, array $args = array() ) {
67
- parent::__construct( $manager, $id, $args );
68
- $this->module_dir = $args['module_directory'];
69
-
70
- add_action( 'customize_controls_init', array( $this, 'enqueue' ) );
71
-
72
- if ( ! empty( $args['templates'] ) ) {
73
- $this->templates = $args['templates'];
74
- }
75
- if ( ! empty( $args['requires_plugins'] ) ) {
76
- $this->required_plugins = $args['requires_plugins'];
77
- }
78
-
79
- $this->called_template = isset( $_GET['obfx_template_id'] ) ? $_GET['obfx_template_id'] : '';
80
- }
81
-
82
- /**
83
- * Enqueue scripts designated for this control.
84
- */
85
- public function enqueue() {
86
- wp_enqueue_script( 'obfx-template-dir-script', $this->module_dir . 'template-directory/js/customizer.js', array( 'jquery', 'customize-preview' ), '1.0.0', true );
87
- }
88
-
89
- /**
90
- * Outputs the Underscore.js template.
91
- *
92
- * @since 1.1.47
93
- * @access public
94
- * @return void
95
- */
96
- protected function render() {
97
- $html = '';
98
- if ( ! empty( $this->templates ) ) {
99
- $html .= '<div class="obfx-template-browser customizer">';
100
- foreach ( $this->templates as $template => $properties ) {
101
- $active = '';
102
- if ( $template === $this->called_template ) {
103
- $active = ' active';
104
- }
105
- $html .= '<div class="obfx-template' . esc_attr( $active ) . '" data-demo-url="' . esc_url( $properties['demo_url'] ) . '" data-slug="' . $template . '" data-template-file="' . esc_url( $properties['import_file'] ) . '">';
106
- $html .= '<h2 class="template-name template-header">' . esc_html( $properties['title'] ) . '</h2>';
107
- $html .= '<div class="obfx-template-screenshot">';
108
- $html .= '<img src="' . esc_url( $properties['screenshot'] ) . '" alt="' . esc_html( $properties['title'] ) . '">';
109
- $html .= '</div>';
110
- $html .= '<div class="obfx-template-details">';
111
- $html .= '<p>' . esc_html( $properties['description'] ) . '</p>';
112
- $html .= '</div>'; // .obfx-template-details
113
- $html .= '</div>'; // .obfx-template
114
- }
115
- $html .= '</div>'; // .obfx-template-browser
116
- if ( ! empty( $this->required_plugins ) ) {
117
- $html .= $this->required_plugins;
118
- }
119
- }
120
- echo $html;
121
- }
122
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
obfx_modules/template-directory/init.php CHANGED
@@ -67,11 +67,8 @@ class Template_Directory_OBFX_Module extends Orbit_Fox_Module_Abstract {
67
  $this->loader->add_action( 'init', $this, 'demo_listing_register' );
68
  //Add template redirect.
69
  $this->loader->add_action( 'template_redirect', $this, 'demo_listing' );
70
- //Remove customizer controls.
71
- $this->loader->add_action( 'customize_register', $this, 'adjust_customizer', 1000 );
72
  //Enqueue admin scripts.
73
  $this->loader->add_action( 'admin_enqueue_scripts', $this, 'enqueue_template_dir_scripts' );
74
- $this->loader->add_action( 'customize_controls_enqueue_scripts', $this, 'enqueue_template_dir_scripts' );
75
  }
76
 
77
  /**
@@ -79,12 +76,10 @@ class Template_Directory_OBFX_Module extends Orbit_Fox_Module_Abstract {
79
  */
80
  public function enqueue_template_dir_scripts() {
81
  $current_screen = get_current_screen();
82
- if ( $current_screen->id == 'orbit-fox_page_obfx_template_dir' || $this->is_template_dir_customize() ) {
83
  $script_handle = $this->slug . '-script';
84
- if ( ! defined( 'ELEMENTOR_VERSION' ) ) {
85
- wp_enqueue_script( 'plugin-install' );
86
- wp_enqueue_script( 'updates' );
87
- }
88
  wp_register_script( $script_handle, plugin_dir_url( $this->get_dir() ) . $this->slug . '/js/script.js', array( 'jquery' ), $this->version );
89
  wp_localize_script( $script_handle, 'importer_endpoint',
90
  array(
@@ -141,13 +136,6 @@ class Template_Directory_OBFX_Module extends Orbit_Fox_Module_Abstract {
141
  'admin' => array(),
142
  ),
143
  );
144
-
145
- if ( ! defined( 'ELEMENTOR_VERSION' ) ) {
146
- $enqueue['js'] = array(
147
- 'plugin-install-helper' => array( 'jquery' ),
148
- );
149
- }
150
-
151
  return $enqueue;
152
  }
153
 
@@ -161,66 +149,6 @@ class Template_Directory_OBFX_Module extends Orbit_Fox_Module_Abstract {
161
  ) );
162
  }
163
 
164
- /**
165
- * Remove the customizer controls and add the template listing control.
166
- */
167
- public function adjust_customizer( $wp_customize ) {
168
-
169
- if ( ! $this->is_template_dir_customize() ) {
170
- return;
171
- }
172
- add_filter( 'customize_loaded_components', '__return_empty_array' );
173
-
174
- //Remove all customizer sections and panels except 'obfx-templates'.
175
- foreach ( $wp_customize->sections() as $section ) {
176
- if ( $section->id !== 'obfx-templates' ) {
177
- $wp_customize->remove_section( $section->id );
178
- }
179
- }
180
- foreach ( $wp_customize->panels() as $panel ) {
181
- if ( $panel->id !== 'widgets' && $panel->id !== 'nav_menus' ) {
182
- $wp_customize->remove_panel( $panel->id );
183
- }
184
- }
185
-
186
- //Get the module directory to later pass it for scripts enqueueing in the Orbit Fox customizer section.
187
- $module_directory = $this->get_dir();
188
-
189
- //Include the customizer section custom class and add the section.
190
- require_once( $module_directory . '/inc/class-obfx-template-directory-customizer-section.php' );
191
- if ( class_exists( 'OBFX_Template_Directory_Customizer_Section' ) ) {
192
- $wp_customize->add_section(
193
- new OBFX_Template_Directory_Customizer_Section(
194
- $wp_customize, 'obfx-templates', array(
195
- 'priority' => 0,
196
- 'module_directory' => plugin_dir_url( $this->get_dir() ),
197
- 'templates' => $this->templates_list(),
198
- 'requires_plugins' => $this->render_view( 'template-plugin-install' ),
199
- )
200
- )
201
- );
202
- }
203
-
204
- }
205
-
206
- /**
207
- * Utility method to check if it's the customizer instance for the Template Directory Preview.
208
- *
209
- * @return bool
210
- */
211
- public function is_template_dir_customize() {
212
- //Check the URL parameter and bail if not on 'obfx_templates'.
213
- $current = urldecode( isset( $_GET['url'] ) ? $_GET['url'] : '' );
214
- $flag = add_query_arg( 'obfx_templates', '', trailingslashit( home_url() ) );
215
- $current = str_replace( '/', '', $current );
216
- $flag = str_replace( '/', '', $flag );
217
- if ( $flag !== $current ) {
218
- return false;
219
- }
220
-
221
- return true;
222
- }
223
-
224
  /**
225
  * The templates list.
226
  *
@@ -229,62 +157,84 @@ class Template_Directory_OBFX_Module extends Orbit_Fox_Module_Abstract {
229
  public function templates_list() {
230
  $repository_raw_url = 'https://raw.githubusercontent.com/Codeinwp/obfx-templates/master/';
231
  $defaults_if_empty = array(
232
- 'title' => __( 'A new Orbit Fox Template', 'themeisle-companion' ),
233
- 'screenshot' => esc_url( 'https://raw.githubusercontent.com/Codeinwp/obfx-templates/master/placeholder.png' ),
234
- 'description' => __( 'This is an awesome Orbit Fox Template.', 'themeisle-companion' ),
235
- 'demo_url' => esc_url( 'https://demo.themeisle.com/hestia-pro-demo-content/demo-placeholder/' ),
236
- 'import_file' => '',
 
237
  );
238
 
239
  $templates_list = array(
240
  'about-our-business-elementor' => array(
241
- 'title' => __( 'About Our Business', 'themeisle-companion' ),
242
- 'description' => __( 'A fancy description here', 'themeisle-companion' ),
243
- 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/about-our-business-elementor/',
244
- 'screenshot' => esc_url( $repository_raw_url . 'about-our-business-elementor/screenshot.png' ),
245
- 'import_file' => esc_url( $repository_raw_url . 'about-our-business-elementor/template.json' ),
246
- ),
247
  'contact-us-elementor' => array(
248
- 'title' => __( 'Contact Us', 'themeisle-companion' ),
249
- 'description' => __( 'A fancy description here', 'themeisle-companion' ),
250
- 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/contact-us-elementor/',
251
- 'screenshot' => esc_url( $repository_raw_url . 'contact-us-elementor/screenshot.png' ),
252
- 'import_file' => esc_url( $repository_raw_url . 'contact-us-elementor/template.json' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  ),
254
- 'pricing-elementor' => array(
255
- 'title' => __( 'Pricing', 'themeisle-companion' ),
256
- 'description' => __( 'A fancy description here', 'themeisle-companion' ),
257
- 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/pricing-elementor/',
258
- 'screenshot' => esc_url( $repository_raw_url . 'pricing-elementor/screenshot.png' ),
259
- 'import_file' => esc_url( $repository_raw_url . 'pricing-elementor/template.json' ),
260
  ),
261
- 'material-homepage-elementor' => array(
262
- 'title' => __( 'Material Homepage', 'themeisle-companion' ),
263
- 'description' => __( 'A fancy description here', 'themeisle-companion' ),
264
- 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/material-homepage-elementor/',
265
- 'screenshot' => esc_url( $repository_raw_url . 'material-homepage-elementor/screenshot.png' ),
266
- 'import_file' => esc_url( $repository_raw_url . 'material-homepage-elementor/template.json' ),
267
  ),
268
- 'ether-elementor' => array(
269
- 'title' => __( 'Ether - Landing Page', 'themeisle-companion' ),
270
- 'description' => __( 'A fancy description here', 'themeisle-companion' ),
271
- 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/ether-elementor/',
272
- 'screenshot' => esc_url( $repository_raw_url . 'ether-elementor/screenshot.png' ),
273
- 'import_file' => esc_url( $repository_raw_url . 'ether-elementor/template.json' ),
274
  ),
275
- 'jason-elementor' => array(
276
- 'title' => __( 'Jason - Landing Page', 'themeisle-companion' ),
277
- 'description' => __( 'A fancy description here', 'themeisle-companion' ),
278
- 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/jason-elementor/',
279
- 'screenshot' => esc_url( $repository_raw_url . 'jason-elementor/screenshot.png' ),
280
- 'import_file' => esc_url( $repository_raw_url . 'jason-elementor/template.json' ),
281
  ),
282
- 'pulse-elementor' => array(
283
- 'title' => __( 'Pulse - Landing Page', 'themeisle-companion' ),
284
- 'description' => __( 'A fancy description here', 'themeisle-companion' ),
285
- 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/pulse-elementor/',
286
- 'screenshot' => esc_url( $repository_raw_url . 'pulse-elementor/screenshot.png' ),
287
- 'import_file' => esc_url( $repository_raw_url . 'pulse-elementor/template.json' ),
288
  ),
289
  );
290
 
@@ -339,7 +289,6 @@ class Template_Directory_OBFX_Module extends Orbit_Fox_Module_Abstract {
339
  public function render_admin_page() {
340
  $data = array(
341
  'templates_array' => $this->templates_list(),
342
- 'requires_plugins' => $this->render_view( 'template-plugin-install' )
343
  );
344
  echo $this->render_view( 'template-directory-page', $data );
345
  }
@@ -468,8 +417,6 @@ class Template_Directory_OBFX_Module extends Orbit_Fox_Module_Abstract {
468
  array(
469
  'action' => 'activate',
470
  'plugin' => rawurlencode( $plugin_link_suffix ),
471
- 'plugin_status' => 'all',
472
- 'paged' => '1',
473
  '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $plugin_link_suffix ),
474
  ), network_admin_url( 'plugins.php' )
475
  );
67
  $this->loader->add_action( 'init', $this, 'demo_listing_register' );
68
  //Add template redirect.
69
  $this->loader->add_action( 'template_redirect', $this, 'demo_listing' );
 
 
70
  //Enqueue admin scripts.
71
  $this->loader->add_action( 'admin_enqueue_scripts', $this, 'enqueue_template_dir_scripts' );
 
72
  }
73
 
74
  /**
76
  */
77
  public function enqueue_template_dir_scripts() {
78
  $current_screen = get_current_screen();
79
+ if ( $current_screen->id == 'orbit-fox_page_obfx_template_dir' ) {
80
  $script_handle = $this->slug . '-script';
81
+ wp_enqueue_script( 'plugin-install' );
82
+ wp_enqueue_script( 'updates' );
 
 
83
  wp_register_script( $script_handle, plugin_dir_url( $this->get_dir() ) . $this->slug . '/js/script.js', array( 'jquery' ), $this->version );
84
  wp_localize_script( $script_handle, 'importer_endpoint',
85
  array(
136
  'admin' => array(),
137
  ),
138
  );
 
 
 
 
 
 
 
139
  return $enqueue;
140
  }
141
 
149
  ) );
150
  }
151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  /**
153
  * The templates list.
154
  *
157
  public function templates_list() {
158
  $repository_raw_url = 'https://raw.githubusercontent.com/Codeinwp/obfx-templates/master/';
159
  $defaults_if_empty = array(
160
+ 'title' => __( 'A new Orbit Fox Template', 'themeisle-companion' ),
161
+ 'screenshot' => esc_url( 'https://raw.githubusercontent.com/Codeinwp/obfx-templates/master/placeholder.png' ),
162
+ 'description' => __( 'This is an awesome Orbit Fox Template.', 'themeisle-companion' ),
163
+ 'demo_url' => esc_url( 'https://demo.themeisle.com/hestia-pro-demo-content/demo-placeholder/' ),
164
+ 'import_file' => '',
165
+ 'required_plugins' => array( 'elementor' => array( 'title' => __( 'Elementor Page Builder', 'themeisle-companion' ) ) ),
166
  );
167
 
168
  $templates_list = array(
169
  'about-our-business-elementor' => array(
170
+ 'title' => __( 'About Our Business', 'themeisle-companion' ),
171
+ 'description' => __( 'Use this layout to present your business in a fancy way. Add an interactive header, shwocase your services via progress bars, introduce your team members, and locate your headquarters on Google Maps. Last but not least, beautify the design by adding catchy images.', 'themeisle-companion' ),
172
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/about-our-business-elementor/',
173
+ 'screenshot' => esc_url( $repository_raw_url . 'about-our-business-elementor/screenshot.png' ),
174
+ 'import_file' => esc_url( $repository_raw_url . 'about-our-business-elementor/template.json' ),
175
+ ),
176
  'contact-us-elementor' => array(
177
+ 'title' => __( 'Contact Us', 'themeisle-companion' ),
178
+ 'description' => __( 'A clean and simple template for your Contact page, where we integrated our Pirate Forms plugin. It will let your customers send you a message using an intuitive form. A Google map, together with a few other details about your business, completes the section.', 'themeisle-companion' ),
179
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/contact-us-elementor/',
180
+ 'screenshot' => esc_url( $repository_raw_url . 'contact-us-elementor/screenshot.png' ),
181
+ 'import_file' => esc_url( $repository_raw_url . 'contact-us-elementor/template.json' ),
182
+ ),
183
+ 'pricing-elementor' => array(
184
+ 'title' => __( 'Pricing', 'themeisle-companion' ),
185
+ 'description' => __( 'If you plan to sell your products online, this layout offers you elegant pricing tables so you can differentiate the features and services for your clients. Also, for a better clarification, the template provides a FAQ area where you can answer people\'s questions.', 'themeisle-companion' ),
186
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/pricing-elementor/',
187
+ 'screenshot' => esc_url( $repository_raw_url . 'pricing-elementor/screenshot.png' ),
188
+ 'import_file' => esc_url( $repository_raw_url . 'pricing-elementor/template.json' ),
189
+ ),
190
+ 'material-homepage-elementor' => array(
191
+ 'title' => __( 'Material Homepage', 'themeisle-companion' ),
192
+ 'description' => __( 'This layout could be your main website homepage (or you can use it as an alternative homepage, if you wish). It was built on material design and comes with call to action, catchy icons, testimonials, blog posts, pricing plans, and other sections that you can add yourself by customizing it.', 'themeisle-companion' ),
193
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/material-homepage-elementor/',
194
+ 'screenshot' => esc_url( $repository_raw_url . 'material-homepage-elementor/screenshot.png' ),
195
+ 'import_file' => esc_url( $repository_raw_url . 'material-homepage-elementor/template.json' ),
196
+ ),
197
+ 'ether-elementor' => array(
198
+ 'title' => __( 'Ether - Landing Page', 'themeisle-companion' ),
199
+ 'description' => __( 'An elegant and modern landing page for e-commerce, coming with a clean interface, beautiful typography, photo galleries, and call to action. If you have an online shop and want to promote a certain product, use this layout to tell people why they should buy it.', 'themeisle-companion' ),
200
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/ether-elementor/',
201
+ 'screenshot' => esc_url( $repository_raw_url . 'ether-elementor/screenshot.png' ),
202
+ 'import_file' => esc_url( $repository_raw_url . 'ether-elementor/template.json' ),
203
  ),
204
+ 'jason-elementor' => array(
205
+ 'title' => __( 'Jason - Landing Page', 'themeisle-companion' ),
206
+ 'description' => __( 'A classy template for freelancers, where you can put your skills and knowldge in the spotlight for potential clients. Talk about yourself, your projects, awards, and let people contact you easily. The template is designed to feature one-page scrolling.', 'themeisle-companion' ),
207
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/jason-elementor/',
208
+ 'screenshot' => esc_url( $repository_raw_url . 'jason-elementor/screenshot.png' ),
209
+ 'import_file' => esc_url( $repository_raw_url . 'jason-elementor/template.json' ),
210
  ),
211
+ 'pulse-elementor' => array(
212
+ 'title' => __( 'Pulse - Landing Page', 'themeisle-companion' ),
213
+ 'description' => __( 'A good-looking landing page for products and apps, built to mark the features and services that they offer. The layout provides customer reviews, call to action, beautiful pricing tables, an About section, and a creative design. If you want to promote and sell your brand product, this template might help.', 'themeisle-companion' ),
214
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/pulse-elementor/',
215
+ 'screenshot' => esc_url( $repository_raw_url . 'pulse-elementor/screenshot.png' ),
216
+ 'import_file' => esc_url( $repository_raw_url . 'pulse-elementor/template.json' ),
217
  ),
218
+ 'ascend-elementor' => array(
219
+ 'title' => __( 'Ascend - Landing Page', 'themeisle-companion' ),
220
+ 'description' => __( 'A resume-like template, built for outdoor enthusiasts and nature lovers. Its design and layout make it flexible for any other purpose too, so do not hesitate to showcase any kind of skills and activities, even business-oriented.', 'themeisle-companion' ),
221
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/ascend-elementor/',
222
+ 'screenshot' => esc_url( $repository_raw_url . 'ascend-elementor/screenshot.png' ),
223
+ 'import_file' => esc_url( $repository_raw_url . 'ascend-elementor/template.json' ),
224
  ),
225
+ 'path-elementor' => array(
226
+ 'title' => __( 'Path - Landing Page', 'themeisle-companion' ),
227
+ 'description' => __( 'If you are a business consultant - agency or working on your own - have a look at this template! It comes with a clean design, call to action, statistics, and sections that put your services first.', 'themeisle-companion' ),
228
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/path-elementor/',
229
+ 'screenshot' => esc_url( $repository_raw_url . 'path-elementor/screenshot.png' ),
230
+ 'import_file' => esc_url( $repository_raw_url . 'path-elementor/template.json' ),
231
  ),
232
+ 'mocha-elementor' => array(
233
+ 'title' => __( 'Mocha - Landing Page', 'themeisle-companion' ),
234
+ 'description' => __( 'An elegant and modern template for cafes and pubs, where you can display your menu in a mouth-watering way. Call to action, blog posts, attractive images, tabbed menus, and a catchy design will help you convince more people to stop by.', 'themeisle-companion' ),
235
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/mocha-elementor/',
236
+ 'screenshot' => esc_url( $repository_raw_url . 'mocha-elementor/screenshot.png' ),
237
+ 'import_file' => esc_url( $repository_raw_url . 'mocha-elementor/template.json' ),
238
  ),
239
  );
240
 
289
  public function render_admin_page() {
290
  $data = array(
291
  'templates_array' => $this->templates_list(),
 
292
  );
293
  echo $this->render_view( 'template-directory-page', $data );
294
  }
417
  array(
418
  'action' => 'activate',
419
  'plugin' => rawurlencode( $plugin_link_suffix ),
 
 
420
  '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $plugin_link_suffix ),
421
  ), network_admin_url( 'plugins.php' )
422
  );
obfx_modules/template-directory/js/customizer.js DELETED
@@ -1,71 +0,0 @@
1
- /*exported obfxHandleChange */
2
-
3
- /**
4
- * Template Directory Customizer Public Script
5
- *
6
- * This handles the customizer.
7
- *
8
- * @since 1.0.0
9
- * @package obfx_modules/template-directory/js
10
- *
11
- * @author ThemeIsle
12
- */
13
-
14
- var obfx_template_directory_previewer = function( $ ) {
15
- 'use strict';
16
-
17
- $(
18
- function () {
19
- $( 'head title' ).html( 'Orbit Fox Template Preview' );
20
- $( '.wp-full-overlay-sidebar' ).addClass( 'obfx-custom-customizer' );
21
- var importBtn = '<span class="obfx-import-template button button-primary" href="#">Import</span>';
22
- $( '.customize-controls-preview-toggle .controls' ).html( 'Templates' );
23
- // Remove Save Button
24
- $( 'input.save, .customize-info, #accordion-panel-widgets, .customize-save-button-wrapper, .customize-control-notifications-container' ).remove();
25
- $( '.wp-full-overlay-sidebar-content' ).removeAttr( 'style' );
26
- $( '#customize-header-actions' ).prepend( importBtn ).append( '<div class="obfx-next-prev"><span onclick="obfxHandleChange(\'prev\');" class="previous-template"></span><span onclick="obfxHandleChange(\'next\');" class="next-template"></span></div>' );
27
- $( '#customize-preview' ).remove();
28
- var previewUrl = $( '.obfx-template.active' ).data( 'demo-url' );
29
- var newFrame = '<div id="customize-preview" class="wp-full-overlay-main"><iframe src="' + previewUrl + '" title="OBFX Template Preview" name="customize-preview-obfx-template"></iframe></div>';
30
- $( '.obfx-custom-customizer' ).after( newFrame );
31
- changeButtonProps();
32
- }
33
- );
34
- };
35
-
36
- obfx_template_directory_previewer( jQuery );
37
-
38
- function obfxHandleChange(direction) {
39
- 'use strict';
40
- var active = jQuery( '.obfx-template.active' ).removeClass( 'active' );
41
- direction = direction || 'next';
42
- if (direction === 'next') {
43
- if (active.next() && active.next().length) {
44
- active.next().addClass( 'active' );
45
- } else {
46
- active.siblings( ':first' ).addClass( 'active' );
47
- }
48
- }
49
- if (direction === 'prev') {
50
- if (active.prev() && active.prev().length) {
51
- active.prev().addClass( 'active' );
52
- } else {
53
- active.siblings( ':last' ).addClass( 'active' );
54
- }
55
- }
56
- changePreviewSource();
57
- }
58
-
59
- function changePreviewSource() {
60
- var previewUrl = jQuery( '.obfx-template.active' ).data( 'demo-url' );
61
- jQuery( '#customize-preview iframe' ).attr( 'src', previewUrl );
62
- changeButtonProps();
63
- }
64
-
65
- function changeButtonProps() {
66
- var templateFileUrl = jQuery( '.obfx-template.active' ).data( 'template-file' );
67
- var importBtn = '<span class="obfx-import-template button button-primary" href="#">Import</span>';
68
-
69
- jQuery( '.obfx-done-import' ).replaceWith( importBtn );
70
- jQuery( '.obfx-import-template.button' ).attr( 'data-template-file', templateFileUrl );
71
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
obfx_modules/template-directory/js/plugin-install-helper.js DELETED
@@ -1,55 +0,0 @@
1
- var obfx_plugin_install_helper = function( $ ) {
2
- 'use strict';
3
- $(
4
- function () {
5
-
6
- $( 'body' ).on(
7
- 'click', ' .obfx-install-plugin ', function () {
8
- var slug = $( this ).attr( 'data-slug' );
9
- wp.updates.installPlugin(
10
- {
11
- slug: slug
12
- }
13
- );
14
- return false;
15
- }
16
- );
17
-
18
- $( '.obfx-close-modal' ).on(
19
- 'click', function () {
20
- $( '.obfx-no-elementor-modal-wrapper' ).fadeOut();
21
- }
22
- );
23
- }
24
- );
25
-
26
- // Remove activate button and replace with activation in progress button.
27
- $( document ).on(
28
- 'DOMNodeInserted','.activate-now', function () {
29
- var activateButton = $( '.obfx-no-elementor-modal-wrapper .activate-now' );
30
- if (activateButton.length) {
31
- var url = $( activateButton ).attr( 'href' );
32
- if (typeof url !== 'undefined') {
33
- // Request plugin activation.
34
- $.ajax(
35
- {
36
- beforeSend: function () {
37
- $( activateButton ).replaceWith( '<a class="button updating-message">Activating...</a>' );
38
- },
39
- async: true,
40
- type: 'GET',
41
- url: url,
42
- success: function () {
43
- $( '.obfx-no-elementor-modal-wrapper' ).fadeOut();
44
- $( '.obfx-import-queue' ).trigger( 'click' );
45
-
46
- }
47
- }
48
- );
49
- }
50
- }
51
- }
52
- );
53
- };
54
-
55
- obfx_plugin_install_helper( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
obfx_modules/template-directory/js/script.js CHANGED
@@ -5,61 +5,217 @@
5
  *
6
  * This handles the template directory.
7
  *
8
- * @since 1.0.0
9
  * @package obfx_modules/template-directory/js
10
  *
11
- * @author ThemeIsle
12
  */
13
 
14
- var obfx_template_directory = function( $ ) {
15
  'use strict';
16
 
17
  $(
18
  function () {
19
- $( '.obfx-template-actions, #customize-header-actions' ).on(
20
- 'click', '.obfx-import-template', function () {
21
- $( this ).addClass( 'obfx-import-queue' );
22
- var template_url = $( this ).data( 'template-file' );
23
- var template_name = get_the_template_name( this );
24
- $( this ).hide().after( '<span class="button button-primary obfx-updating updating-message"></span>' );
 
 
 
 
 
25
  $.ajax(
26
  {
27
  url: importer_endpoint.url,
28
  beforeSend: function ( xhr ) {
 
29
  xhr.setRequestHeader( 'X-WP-Nonce', importer_endpoint.nonce );
30
  },
31
- async: true,
32
  data: {
33
  template_url: template_url,
34
  template_name: template_name
35
  },
36
  type: 'POST',
37
  success: function ( data ) {
38
- if (data !== 'no-elementor') {
39
- $( '.obfx-updating' ).replaceWith( '<span class="obfx-done-import" style="float:right"><i class="dashicons-yes dashicons"></i></span>' );
40
- location.href = data;
41
- } else {
42
- $( '.obfx-import-template' ).show();
43
- $( '.obfx-updating' ).remove();
44
- $( '.obfx-no-elementor-modal-wrapper' ).fadeIn();
45
- }
46
  },
47
  error: function ( error ) {
48
  console.error( error );
 
 
 
49
  }
50
  }, 'json'
51
  );
52
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  }
55
  );
56
  };
57
 
58
  obfx_template_directory( jQuery );
59
-
60
- function get_the_template_name( button ) {
61
- if ( jQuery( 'body' ).hasClass( 'tools_page_obfx_template_dir' ) ) {
62
- return jQuery( button ).parent().prev().prev().text();
63
- }
64
- return jQuery( '.obfx-template.active .template-name' ).text();
65
- }
5
  *
6
  * This handles the template directory.
7
  *
8
+ * @since 1.0.0
9
  * @package obfx_modules/template-directory/js
10
  *
11
+ * @author ThemeIsle
12
  */
13
 
14
+ var obfx_template_directory = function ( $ ) {
15
  'use strict';
16
 
17
  $(
18
  function () {
19
+
20
+ // Handle import click.
21
+ $( '.wp-full-overlay-header' ).on(
22
+ 'click', '.obfx-import-template', function () {
23
+ $( this ).addClass( 'obfx-import-queue updating-message obfx-updating' ).html( '' );
24
+ $( '.obfx-template-preview .close-full-overlay, .obfx-next-prev' ).remove();
25
+ var template_url = $( this ).data( 'template-file' );
26
+ var template_name = $( this ).data( 'template-title' );
27
+ if ( $( '.active .obfx-installable' ).length || $( '.active .obfx-activate' ).length ) {
28
+ checkAndInstallPlugins();
29
+ } else {
30
  $.ajax(
31
  {
32
  url: importer_endpoint.url,
33
  beforeSend: function ( xhr ) {
34
+ $( '.obfx-import-queue' ).addClass( 'obfx-updating' ).html( '' );
35
  xhr.setRequestHeader( 'X-WP-Nonce', importer_endpoint.nonce );
36
  },
37
+ // async: false,
38
  data: {
39
  template_url: template_url,
40
  template_name: template_name
41
  },
42
  type: 'POST',
43
  success: function ( data ) {
44
+ $( '.obfx-updating' ).replaceWith( '<span class="obfx-done-import"><i class="dashicons-yes dashicons"></i></span>' );
45
+ location.href = data;
 
 
 
 
 
 
46
  },
47
  error: function ( error ) {
48
  console.error( error );
49
+ },
50
+ complete: function() {
51
+ $( '.obfx-updating' ).replaceWith( '<span class="obfx-done-import"><i class="dashicons-yes dashicons"></i></span>' );
52
  }
53
  }, 'json'
54
  );
55
  }
56
+ }
57
+ );
58
+
59
+ function checkAndInstallPlugins() {
60
+ var installable = $( '.active .obfx-installable' );
61
+ var toActivate = $( '.active .obfx-activate' );
62
+ if ( installable.length || toActivate.length ) {
63
+
64
+ $( installable ).each(
65
+ function () {
66
+ var plugin = $( this );
67
+ $( plugin ).removeClass( 'obfx-installable' ).addClass( 'obfx-installing' );
68
+ $( plugin ).find( 'span.dashicons' ).replaceWith( '<span class="dashicons dashicons-update" style="-webkit-animation: rotation 2s infinite linear; animation: rotation 2s infinite linear; color: #ffb227 "></span>' );
69
+ var slug = $( this ).find( '.obfx-install-plugin' ).attr( 'data-slug' );
70
+ wp.updates.installPlugin(
71
+ {
72
+ slug: slug,
73
+ success: function ( response ) {
74
+ activatePlugin( response.activateUrl, plugin );
75
+ }
76
+ }
77
+ );
78
+ }
79
+ );
80
+
81
+ $( toActivate ).each(
82
+ function () {
83
+ var plugin = $( this );
84
+ var activateUrl = $( plugin ).find( '.activate-now' ).attr( 'href' );
85
+ if (typeof activateUrl !== 'undefined') {
86
+ activatePlugin( activateUrl, plugin );
87
+ }
88
+ }
89
+ );
90
+ }
91
+ }
92
+
93
+ function activatePlugin( activationUrl, plugin ) {
94
+ $.ajax(
95
+ {
96
+ type: 'GET',
97
+ url: activationUrl,
98
+ beforeSend: function() {
99
+ $( plugin ).removeClass( 'obfx-activate' ).addClass( 'obfx-installing' );
100
+ $( plugin ).find( 'span.dashicons' ).replaceWith( '<span class="dashicons dashicons-update" style="-webkit-animation: rotation 2s infinite linear; animation: rotation 2s infinite linear; color: #ffb227 "></span>' );
101
+ },
102
+ success: function () {
103
+ $( plugin ).find( '.dashicons' ).replaceWith( '<span class="dashicons dashicons-yes" style="color: #34a85e"></span>' );
104
+ $( plugin ).removeClass( 'obfx-installing' );
105
+ },
106
+ complete: function() {
107
+ if ( $( '.active .obfx-installing' ).length === 0 ) {
108
+ $( '.obfx-import-queue' ).trigger( 'click' );
109
+ }
110
+ }
111
+ }
112
  );
113
+ }
114
+
115
+ // Handle sidebar collapse in preview.
116
+ $( '.obfx-template-preview' ).on(
117
+ 'click', '.collapse-sidebar', function () {
118
+ event.preventDefault();
119
+ var overlay = $( '.obfx-template-preview' );
120
+ if ( overlay.hasClass( 'expanded' ) ) {
121
+ overlay.removeClass( 'expanded' );
122
+ overlay.addClass( 'collapsed' );
123
+ return false;
124
+ }
125
+
126
+ if ( overlay.hasClass( 'collapsed' ) ) {
127
+ overlay.removeClass( 'collapsed' );
128
+ overlay.addClass( 'expanded' );
129
+ return false;
130
+ }
131
+ }
132
+ );
133
+
134
+ // Handle responsive buttons.
135
+ $( '.obfx-responsive-preview' ).on(
136
+ 'click', 'button', function () {
137
+ $( '.obfx-template-preview' ).removeClass( 'preview-mobile preview-tablet preview-desktop' );
138
+ var deviceClass = 'preview-' + $( this ).data( 'device' );
139
+ $( '.obfx-responsive-preview button' ).each(
140
+ function () {
141
+ $( this ).attr( 'aria-pressed', 'false' );
142
+ $( this ).removeClass( 'active' );
143
+ }
144
+ );
145
+
146
+ $( '.obfx-responsive-preview' ).removeClass( $( this ).attr( 'class' ).split( ' ' ).pop() );
147
+ $( '.obfx-template-preview' ).addClass( deviceClass );
148
+ $( this ).addClass( 'active' );
149
+ }
150
+ );
151
+
152
+ // Hide preview.
153
+ $( '.close-full-overlay' ).on(
154
+ 'click', function () {
155
+ $( '.obfx-template-preview .obfx-theme-info.active' ).removeClass( 'active' );
156
+ $( '.obfx-template-preview' ).hide();
157
+ $( '.obfx-template-frame' ).attr( 'src', '' );
158
+ }
159
+ );
160
+
161
+ // Open preview routine.
162
+ $( '.obfx-preview-template' ).on(
163
+ 'click', function () {
164
+ var templateSlug = $( this ).data( 'template-slug' );
165
+ var previewUrl = $( this ).data( 'demo-url' );
166
+ $( '.obfx-template-frame' ).attr( 'src', previewUrl );
167
+ $( '.obfx-theme-info.' + templateSlug ).addClass( 'active' );
168
+ setupImportButton();
169
+ $( '.obfx-template-preview' ).fadeIn();
170
+ }
171
+ );
172
+
173
+ // Handle left-right navigation between templates.
174
+ $( '.obfx-next-prev .next-theme' ).on(
175
+ 'click', function () {
176
+ var active = $( '.obfx-theme-info.active' ).removeClass( 'active' );
177
+ if ( active.next() && active.next().length ) {
178
+ active.next().addClass( 'active' );
179
+ } else {
180
+ active.siblings( ':first' ).addClass( 'active' );
181
+ }
182
+ changePreviewSource();
183
+ setupImportButton();
184
+ }
185
+ );
186
+ $( '.obfx-next-prev .previous-theme' ).on(
187
+ 'click', function () {
188
+ var active = $( '.obfx-theme-info.active' ).removeClass( 'active' );
189
+ if ( active.prev() && active.prev().length ) {
190
+ active.prev().addClass( 'active' );
191
+ } else {
192
+ active.siblings( ':last' ).addClass( 'active' );
193
+ }
194
+ changePreviewSource();
195
+ setupImportButton();
196
+ }
197
+ );
198
+
199
+ // Change preview source.
200
+ function changePreviewSource() {
201
+ var previewUrl = $( '.obfx-theme-info.active' ).data( 'demo-url' );
202
+ $( '.obfx-template-frame' ).attr( 'src', previewUrl );
203
+ }
204
+
205
+ function setupImportButton() {
206
+ var installable = $( '.active .obfx-installable' );
207
+ if ( installable.length > 0 ) {
208
+ $( '.wp-full-overlay-header .obfx-import-template' ).text( 'Install and Import' );
209
+ } else {
210
+ $( '.wp-full-overlay-header .obfx-import-template' ).text( 'Import' );
211
+ }
212
+ var activeTheme = $( '.obfx-theme-info.active' );
213
+ var button = $( '.wp-full-overlay-header .obfx-import-template' );
214
+ $( button ).attr( 'data-template-file', $( activeTheme ).data( 'template-file' ) );
215
+ $( button ).attr( 'data-template-title', $( activeTheme ).data( 'template-title' ) );
216
+ }
217
  }
218
  );
219
  };
220
 
221
  obfx_template_directory( jQuery );
 
 
 
 
 
 
 
obfx_modules/template-directory/views/template-directory-page-tpl.php CHANGED
@@ -20,28 +20,16 @@ if ( is_array( $templates_array ) ) {
20
  $html .= '<div class="obfx-template-browser">';
21
 
22
  foreach ( $templates_array as $template => $properties ) {
23
- $admin_url = admin_url() . 'customize.php';
24
- $customizer_url = add_query_arg(
25
- array(
26
- 'url' => urlencode( $preview_url ),
27
- 'return' => admin_url() . 'admin.php?page=obfx_template_dir',
28
- 'obfx_template_id' => esc_html( $template ),
29
- ), $admin_url
30
- );
31
-
32
  $html .= '<div class="obfx-template">';
33
- $html .= '<h2 class="template-name template-header">' . esc_html( $properties['title'] ) . '</h2>';
34
  $html .= '<div class="obfx-template-screenshot">';
35
  $html .= '<img src="' . esc_url( $properties['screenshot'] ) . '" alt="' . esc_html( $properties['title'] ) . '" >';
36
  $html .= '</div>'; // .obfx-template-screenshot
37
-
38
  $html .= '<div class="obfx-template-actions">';
39
- if ( ! empty( $properties['demo_url'] ) ) {
40
- $html .= '<a class="button obfx-preview-template" href="' . esc_url( $customizer_url ) . '" >' . __( 'Preview', 'themeisle-companion' ) . '</a>';
41
- }
42
 
43
- if ( ! empty( $properties['import_file'] ) ) {
44
- $html .= '<a class="button button-primary obfx-import-template" data-template-file="' . esc_url( $properties['import_file'] ) . '"> ' . __( 'Import', 'themeisle-companion' ) . '</a>';
45
  }
46
  $html .= '</div>'; // .obfx-template-actions
47
  $html .= '</div>'; // .obfx-template
@@ -49,9 +37,92 @@ if ( is_array( $templates_array ) ) {
49
  $html .= '</div>'; // .obfx-template-browser
50
  $html .= '</div>'; // .obfx-template-dir
51
  $html .= '<div class="wp-clearfix clearfix"></div>';
52
- if ( ! defined( 'ELEMENTOR_VERSION' ) ) {
53
- $html .= $requires_plugins;
54
- }
55
  }// End if().
56
 
57
  echo $html;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  $html .= '<div class="obfx-template-browser">';
21
 
22
  foreach ( $templates_array as $template => $properties ) {
 
 
 
 
 
 
 
 
 
23
  $html .= '<div class="obfx-template">';
24
+ $html .= '<div class="more-details obfx-preview-template" data-demo-url="' . esc_url( $properties['demo_url'] ) . '" data-template-slug="' . esc_attr( $template ) . '" ><span>' . __( 'More Details', 'themeisle-companion' ) . '</span></div>';
25
  $html .= '<div class="obfx-template-screenshot">';
26
  $html .= '<img src="' . esc_url( $properties['screenshot'] ) . '" alt="' . esc_html( $properties['title'] ) . '" >';
27
  $html .= '</div>'; // .obfx-template-screenshot
28
+ $html .= '<h2 class="template-name template-header">' . esc_html( $properties['title'] ) . '</h2>';
29
  $html .= '<div class="obfx-template-actions">';
 
 
 
30
 
31
+ if ( ! empty( $properties['demo_url'] ) ) {
32
+ $html .= '<a class="button obfx-preview-template" data-demo-url="' . esc_url( $properties['demo_url'] ) . '" data-template-slug="' . esc_attr( $template ) . '" >' . __( 'Preview', 'themeisle-companion' ) . '</a>';
33
  }
34
  $html .= '</div>'; // .obfx-template-actions
35
  $html .= '</div>'; // .obfx-template
37
  $html .= '</div>'; // .obfx-template-browser
38
  $html .= '</div>'; // .obfx-template-dir
39
  $html .= '<div class="wp-clearfix clearfix"></div>';
 
 
 
40
  }// End if().
41
 
42
  echo $html;
43
+ ?>
44
+
45
+ <div class="obfx-template-preview theme-install-overlay wp-full-overlay expanded" style="display: none;">
46
+ <div class="wp-full-overlay-sidebar">
47
+ <div class="wp-full-overlay-header">
48
+ <button class="close-full-overlay"><span class="screen-reader-text">Close</span></button>
49
+ <div class="obfx-next-prev">
50
+ <button class="previous-theme"><span class="screen-reader-text">Previous</span></button>
51
+ <button class="next-theme"><span class="screen-reader-text">Next</span></button>
52
+ </div>
53
+ <span class="obfx-import-template button button-primary">Import</span>
54
+ </div>
55
+ <div class="wp-full-overlay-sidebar-content">
56
+ <?php
57
+ foreach ( $templates_array as $template => $properties ) {
58
+ ?>
59
+ <div class="install-theme-info obfx-theme-info <?php echo esc_attr( $template ); ?>"
60
+ data-demo-url="<?php echo esc_url( $properties['demo_url'] ); ?>"
61
+ data-template-file="<?php echo esc_url( $properties['import_file'] ); ?>"
62
+ data-template-title="<?php echo esc_html( $properties['title'] ); ?>">
63
+ <h3 class="theme-name"><?php echo esc_html( $properties['title'] ); ?></h3>
64
+ <img class="theme-screenshot" src="<?php echo esc_url( $properties['screenshot'] ); ?>"
65
+ alt="<?php echo esc_html( $properties['title'] ); ?>">
66
+ <div class="theme-details">
67
+ <?php echo esc_html( $properties['description'] ); ?>
68
+ </div>
69
+ <?php
70
+ if ( ! empty( $properties['required_plugins'] ) && is_array( $properties['required_plugins'] ) ) {
71
+ ?>
72
+ <div class="obfx-required-plugins">
73
+ <p>Required Plugins</p>
74
+ <?php
75
+ foreach ( $properties['required_plugins'] as $plugin_slug => $details ) {
76
+ if ( $this->check_plugin_state( $plugin_slug ) === 'install' ) {
77
+ echo '<div class="obfx-installable plugin-card-' . esc_attr( $plugin_slug ) . '">';
78
+ echo '<span class="dashicons dashicons-no-alt"></span>';
79
+ echo $details['title'];
80
+ echo $this->get_button_html( $plugin_slug );
81
+ echo '</div>';
82
+ } elseif ( $this->check_plugin_state( $plugin_slug ) === 'activate' ) {
83
+ echo '<div class="obfx-activate plugin-card-' . esc_attr( $plugin_slug ) . '">';
84
+ echo '<span class="dashicons dashicons-admin-plugins" style="color: #ffb227;"></span>';
85
+ echo $details['title'];
86
+ echo $this->get_button_html( $plugin_slug );
87
+ echo '</div>';
88
+ } else {
89
+ echo '<div class="obfx-installed plugin-card-' . esc_attr( $plugin_slug ) . '">';
90
+ echo '<span class="dashicons dashicons-yes" style="color: #34a85e"></span>';
91
+ echo $details['title'];
92
+ echo '</div>';
93
+ }
94
+ }
95
+ ?>
96
+ </div>
97
+ <?php
98
+ }
99
+ ?>
100
+ </div><!-- /.install-theme-info -->
101
+ <?php } ?>
102
+ </div>
103
+
104
+ <div class="wp-full-overlay-footer">
105
+ <button type="button" class="collapse-sidebar button" aria-expanded="true" aria-label="Collapse Sidebar">
106
+ <span class="collapse-sidebar-arrow"></span>
107
+ <span class="collapse-sidebar-label"><?php echo __( 'Collapse', 'themeisle-companion' ); ?></span>
108
+ </button>
109
+ <div class="devices-wrapper">
110
+ <div class="devices obfx-responsive-preview">
111
+ <button type="button" class="preview-desktop active" aria-pressed="true" data-device="desktop">
112
+ <span class="screen-reader-text">Enter desktop preview mode</span>
113
+ </button>
114
+ <button type="button" class="preview-tablet" aria-pressed="false" data-device="tablet">
115
+ <span class="screen-reader-text">Enter tablet preview mode</span>
116
+ </button>
117
+ <button type="button" class="preview-mobile" aria-pressed="false" data-device="mobile">
118
+ <span class="screen-reader-text">Enter mobile preview mode</span>
119
+ </button>
120
+ </div>
121
+ </div>
122
+
123
+ </div>
124
+ </div>
125
+ <div class="wp-full-overlay-main obfx-main-preview">
126
+ <iframe src="" title="Preview" class="obfx-template-frame"></iframe>
127
+ </div>
128
+ </div>
obfx_modules/template-directory/views/template-plugin-install-tpl.php DELETED
@@ -1,23 +0,0 @@
1
- <?php
2
- /**
3
- * The View for Rendering the Plugin install modal.
4
- *
5
- * @link https://themeisle.com
6
- * @since 2.0.0
7
- *
8
- * @package Orbit_Fox_Modules
9
- * @subpackage Orbit_Fox_Modules/template-directory
10
- * @codeCoverageIgnore
11
- */
12
-
13
- if ( ( $this->check_plugin_state( 'elementor' ) === 'activate' ) || ( $this->check_plugin_state( 'elementor' ) === 'install' ) ) {
14
- $html = '';
15
- $button = $this->get_button_html( 'elementor' );
16
- $html .= '<div class="obfx-no-elementor-modal-wrapper"><div class="obfx-no-elementor-modal plugin-card-elementor">';
17
- $html .= '<div class="modal-header"><span class="obfx-close-modal"><i class="dashicons dashicons-no"></i></span></div>';
18
- $html .= '<p>' . __( 'In order to import this template, you must have Elementor Page Builder installed. Click the button below to install and activate now.', 'themeisle-companion' ) . '</p>';
19
- $html .= $button;
20
- $html .= '</div>';
21
-
22
- echo $html;
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.md CHANGED
@@ -36,6 +36,35 @@ Orbit Fox is a user-centred plugin with an easy-to-use admin panel. One of the m
36
 
37
  - It’s fully customizable: You can easily optimise button location for according to the device your visitors will use.
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  Choose from more than 20+ social networks to share with full control for every device that your visitors use.
40
 
41
  The sharing options can be positioned for the maximum effect according to whether the visitor is using a mobile device or desktop. Best of all they can be switched on/off from your WordPress instance.
@@ -46,8 +75,10 @@ We've also built some fantastic <a href="http://themeisle.com/wordpress-themes/f
46
 
47
  **Features:**
48
 
 
 
 
49
  - Sharing module
50
- - Reporting module
51
  - Menu icons module
52
  - Free stock photos module
53
  - More widgets and sections for Hestia Theme
@@ -86,6 +117,17 @@ Activating the Orbit Fox Companion plugin is just like any other plugin. If you'
86
  3. Screenshot 3. How reports module is looking
87
 
88
  ## Changelog ##
 
 
 
 
 
 
 
 
 
 
 
89
  ### 2.2.5 - 2017-12-11 ###
90
 
91
  * Better UX for CC0 images import module.
36
 
37
  - It’s fully customizable: You can easily optimise button location for according to the device your visitors will use.
38
 
39
+
40
+ **Why use our custom Elementor addons module:**
41
+
42
+ - We offer new widgets to add more value to the content you can create within Elementor page builder.
43
+
44
+ - Pricing Table Widget to easily create pricing layouts.
45
+
46
+ - Services Widget to easily create pricing layouts.
47
+
48
+ - Post Grid Widget to easily list your Posts / Products / any other post types in a grid.
49
+
50
+
51
+ **Why use our custom Beaver Builder addons module:**
52
+
53
+ - We offer new widgets to add more value to the content you can create within the Beaver Builder page builder.
54
+
55
+ - Pricing Table Widget to easily create pricing layouts.
56
+
57
+ - Services Widget to easily create pricing layouts.
58
+
59
+ - Post Grid Widget to easily list your Posts / Products / any other post types in a grid.
60
+
61
+
62
+ **Why use our Template Directory:**
63
+
64
+ - One-click import for awesome page templates.
65
+
66
+ - Elementor templates will be added frequently for you to use creatively.
67
+
68
  Choose from more than 20+ social networks to share with full control for every device that your visitors use.
69
 
70
  The sharing options can be positioned for the maximum effect according to whether the visitor is using a mobile device or desktop. Best of all they can be switched on/off from your WordPress instance.
75
 
76
  **Features:**
77
 
78
+ - Template Directory
79
+ - Elementor Addons and Widgets
80
+ - Beaver Builder Widgets
81
  - Sharing module
 
82
  - Menu icons module
83
  - Free stock photos module
84
  - More widgets and sections for Hestia Theme
117
  3. Screenshot 3. How reports module is looking
118
 
119
  ## Changelog ##
120
+ ### 2.2.6 - 2017-12-19 ###
121
+
122
+ * Added new Beaver Builder Widgets Module - Pricing table widget, Services widget, Posts Grid widget.
123
+ * Better user experience for the template directory.
124
+ * More native design for the template directory.
125
+ * Added three free new templates to the template directory - Path, Mocha and Ascend.
126
+ * Fixed bug with the Elementor Pricing Table widget button link.
127
+ * Fixed php notice given by the Elementor Posts Grid widget.
128
+ * Removed the useless Stats module.
129
+
130
+
131
  ### 2.2.5 - 2017-12-11 ###
132
 
133
  * Better UX for CC0 images import module.
readme.txt CHANGED
@@ -36,6 +36,35 @@ Orbit Fox is a user-centred plugin with an easy-to-use admin panel. One of the m
36
 
37
  - It’s fully customizable: You can easily optimise button location for according to the device your visitors will use.
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  Choose from more than 20+ social networks to share with full control for every device that your visitors use.
40
 
41
  The sharing options can be positioned for the maximum effect according to whether the visitor is using a mobile device or desktop. Best of all they can be switched on/off from your WordPress instance.
@@ -46,8 +75,10 @@ We've also built some fantastic <a href="http://themeisle.com/wordpress-themes/f
46
 
47
  **Features:**
48
 
 
 
 
49
  - Sharing module
50
- - Reporting module
51
  - Menu icons module
52
  - Free stock photos module
53
  - More widgets and sections for Hestia Theme
@@ -86,6 +117,17 @@ Activating the Orbit Fox Companion plugin is just like any other plugin. If you'
86
  3. Screenshot 3. How reports module is looking
87
 
88
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
89
  = 2.2.5 - 2017-12-11 =
90
 
91
  * Better UX for CC0 images import module.
36
 
37
  - It’s fully customizable: You can easily optimise button location for according to the device your visitors will use.
38
 
39
+
40
+ **Why use our custom Elementor addons module:**
41
+
42
+ - We offer new widgets to add more value to the content you can create within Elementor page builder.
43
+
44
+ - Pricing Table Widget to easily create pricing layouts.
45
+
46
+ - Services Widget to easily create pricing layouts.
47
+
48
+ - Post Grid Widget to easily list your Posts / Products / any other post types in a grid.
49
+
50
+
51
+ **Why use our custom Beaver Builder addons module:**
52
+
53
+ - We offer new widgets to add more value to the content you can create within the Beaver Builder page builder.
54
+
55
+ - Pricing Table Widget to easily create pricing layouts.
56
+
57
+ - Services Widget to easily create pricing layouts.
58
+
59
+ - Post Grid Widget to easily list your Posts / Products / any other post types in a grid.
60
+
61
+
62
+ **Why use our Template Directory:**
63
+
64
+ - One-click import for awesome page templates.
65
+
66
+ - Elementor templates will be added frequently for you to use creatively.
67
+
68
  Choose from more than 20+ social networks to share with full control for every device that your visitors use.
69
 
70
  The sharing options can be positioned for the maximum effect according to whether the visitor is using a mobile device or desktop. Best of all they can be switched on/off from your WordPress instance.
75
 
76
  **Features:**
77
 
78
+ - Template Directory
79
+ - Elementor Addons and Widgets
80
+ - Beaver Builder Widgets
81
  - Sharing module
 
82
  - Menu icons module
83
  - Free stock photos module
84
  - More widgets and sections for Hestia Theme
117
  3. Screenshot 3. How reports module is looking
118
 
119
  == Changelog ==
120
+ = 2.2.6 - 2017-12-19 =
121
+
122
+ * Added new Beaver Builder Widgets Module - Pricing table widget, Services widget, Posts Grid widget.
123
+ * Better user experience for the template directory.
124
+ * More native design for the template directory.
125
+ * Added three free new templates to the template directory - Path, Mocha and Ascend.
126
+ * Fixed bug with the Elementor Pricing Table widget button link.
127
+ * Fixed php notice given by the Elementor Posts Grid widget.
128
+ * Removed the useless Stats module.
129
+
130
+
131
  = 2.2.5 - 2017-12-11 =
132
 
133
  * Better UX for CC0 images import module.
themeisle-companion.php CHANGED
@@ -15,7 +15,7 @@
15
  * Plugin Name: Orbit Fox Companion
16
  * Plugin URI: https://themeisle.com/plugins/orbit-fox-companion
17
  * Description: Enhances ThemeIsle's themes with extra functionality.
18
- * Version: 2.2.5
19
  * Author: Themeisle
20
  * Author URI: https://themeisle.com
21
  * License: GPL-2.0+
15
  * Plugin Name: Orbit Fox Companion
16
  * Plugin URI: https://themeisle.com/plugins/orbit-fox-companion
17
  * Description: Enhances ThemeIsle's themes with extra functionality.
18
+ * Version: 2.2.6
19
  * Author: Themeisle
20
  * Author URI: https://themeisle.com
21
  * License: GPL-2.0+
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit28f2d4a1d11f34b08053b24cf7e97e23::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit2950a8d436437719e363bc4bb2cf7a75::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit28f2d4a1d11f34b08053b24cf7e97e23
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit28f2d4a1d11f34b08053b24cf7e97e23
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit28f2d4a1d11f34b08053b24cf7e97e23', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit28f2d4a1d11f34b08053b24cf7e97e23', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit28f2d4a1d11f34b08053b24cf7e97e23
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire28f2d4a1d11f34b08053b24cf7e97e23($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire28f2d4a1d11f34b08053b24cf7e97e23($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit2950a8d436437719e363bc4bb2cf7a75
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit2950a8d436437719e363bc4bb2cf7a75', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit2950a8d436437719e363bc4bb2cf7a75', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequire2950a8d436437719e363bc4bb2cf7a75($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire2950a8d436437719e363bc4bb2cf7a75($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;