Happy Addons for Elementor (Mega Menu, Post Grid, Woocommerce Product Grid, Table, Event Calendar, Slider Elementor Widget) - Version 2.4.1

Version Description

  • 10 December 2019 =

  • Fix: News Ticket single post selection issue

  • Fix: Blank icons controls JS error issue (it also fixes EA Table and Elementor FORM issue)

  • Fix: Gravity Forms Elementor editor style issue

Download this release

Release Info

Developer thehappymonster
Plugin Icon 128x128 Happy Addons for Elementor (Mega Menu, Post Grid, Woocommerce Product Grid, Table, Event Calendar, Slider Elementor Widget)
Version 2.4.1
Comparing to
See all releases

Code changes from version 2.4.0 to 2.4.1

assets/admin/js/editor.js CHANGED
@@ -62,18 +62,22 @@
62
  if ( elementor.modules.controls.Icons ) {
63
  var WithHappyIcons = elementor.modules.controls.Icons.extend({
64
  getControlValue: function() {
65
- var value = this.constructor.__super__.getControlValue.call(this),
66
  model = this.model,
67
  valueToMigrate = this.getValueToMigrate(),
68
  newValue = { value: '', library: 'happy-icons' };
69
 
70
- if ( _.isObject( value ) && value.library !== 'svg' && value.value.indexOf( 'fashm' ) === 0 ) {
71
- newValue.value = value.value.substr( value.value.indexOf( 'hm hm-' ) );
 
 
 
 
72
  this.elementSettingsModel.set( model.get( 'name' ), newValue );
73
  return newValue;
74
  }
75
 
76
- if ( ! _.isObject( value ) && valueToMigrate && valueToMigrate.indexOf('hm hm-') === 0 ) {
77
  newValue.value = valueToMigrate;
78
  this.elementSettingsModel.set( model.get( 'name' ), newValue );
79
  return newValue;
@@ -85,7 +89,7 @@
85
 
86
  // Bail if no migration flag or no value to migrate
87
  if ( ! valueToMigrate ) {
88
- return value;
89
  }
90
 
91
  var didMigration = this.elementSettingsModel.get( this.dataKeys.migratedKey ),
@@ -97,7 +101,7 @@
97
  }
98
  // Check if already migrated
99
  if ( didMigration && didMigration[ controlName ] ) {
100
- return value;
101
  }
102
 
103
  // Do migration
62
  if ( elementor.modules.controls.Icons ) {
63
  var WithHappyIcons = elementor.modules.controls.Icons.extend({
64
  getControlValue: function() {
65
+ var controlValue = this.constructor.__super__.getControlValue.call(this),
66
  model = this.model,
67
  valueToMigrate = this.getValueToMigrate(),
68
  newValue = { value: '', library: 'happy-icons' };
69
 
70
+ if ( _.isObject( controlValue ) &&
71
+ !_.isEmpty( controlValue ) &&
72
+ controlValue.library !== 'svg' &&
73
+ controlValue.value.indexOf( 'fashm' ) === 0
74
+ ) {
75
+ newValue.value = controlValue.value.substr( controlValue.value.indexOf( 'hm hm-' ) );
76
  this.elementSettingsModel.set( model.get( 'name' ), newValue );
77
  return newValue;
78
  }
79
 
80
+ if ( ! _.isObject( controlValue ) && valueToMigrate && valueToMigrate.indexOf( 'hm hm-' ) === 0 ) {
81
  newValue.value = valueToMigrate;
82
  this.elementSettingsModel.set( model.get( 'name' ), newValue );
83
  return newValue;
89
 
90
  // Bail if no migration flag or no value to migrate
91
  if ( ! valueToMigrate ) {
92
+ return controlValue;
93
  }
94
 
95
  var didMigration = this.elementSettingsModel.get( this.dataKeys.migratedKey ),
101
  }
102
  // Check if already migrated
103
  if ( didMigration && didMigration[ controlName ] ) {
104
+ return controlValue;
105
  }
106
 
107
  // Do migration
assets/admin/js/editor.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,t,n){"use strict";function i(){return{translate:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],skew:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],scale:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],rotate:["x","y","z","x_tablet","y_tablet","z_tablet","x_mobile","y_mobile","z_mobile"]}}function a(t,n,i){t="ha_transform_fx_"+t,n="ha_transform_fx_"+n,i.on("change:"+t,function(t,a){if(!a){var o=e.getPanelView().getCurrentPageView().children.find(function(e){return e.model.get("name")===n});i.set(n,_.extend({},i.defaults[n])),o&&o.render()}})}function o(t){var n=elementorFrontend.config.elements.data[t.cid];_.each(i(),function(e,t){_.each(e,function(e){a(t+"_toggle",t+"_"+e,n)})}),e.getPanelView().getCurrentPageView().model.on("editor:close",function(){_.each(i(),function(e,t){n.off("change:ha_transform_fx_"+t+"_toggle")})})}if(e.on("panel:init",function(){t("#elementor-panel-elements-search-input").on("keyup",_.debounce(function(){t("#elementor-panel-elements").find(".hm").parents(".elementor-element").addClass("is-ha-widget")},100))}),e.hooks.addAction("panel/open_editor/widget",function(e,t){o(t)}),e.modules.controls.Icons){var l=e.modules.controls.Icons.extend({getControlValue:function(){var e=this.constructor.__super__.getControlValue.call(this),t=this.model,n=this.getValueToMigrate(),i={value:"",library:"happy-icons"};if(_.isObject(e)&&"svg"!==e.library&&0===e.value.indexOf("fashm"))return i.value=e.value.substr(e.value.indexOf("hm hm-")),this.elementSettingsModel.set(t.get("name"),i),i;if(!_.isObject(e)&&n&&0===n.indexOf("hm hm-"))return i.value=n,this.elementSettingsModel.set(t.get("name"),i),i;if(!this.isMigrationAllowed())return n;if(!n)return e;var a=this.elementSettingsModel.get(this.dataKeys.migratedKey),o=t.get("name");return this.cache.migratedFlag[o]?this.cache.migratedFlag[o]:a&&a[o]?e:this.migrateFa4toFa5(n)}});e.addControlView("icons",l)}n.ha_has_icon_library=function(){return e.helpers&&e.helpers.renderIcon},n.ha_get_feature_label=function(e){var t=document.createElement("DIV");return t.innerHTML=e,e=t.textContent||t.innerText||e,e.length>20?e.substring(0,20)+"...":e},e.modules.layouts.panel.pages.menu.Menu.addItem({name:"happyaddons-home",icon:"hm hm-happyaddons",title:HappyAddonsEditor.editorPanelHomeLinkTitle,type:"link",link:HappyAddonsEditor.editorPanelHomeLinkURL,newTab:!0},"settings"),e.modules.layouts.panel.pages.menu.Menu.addItem({name:"happyaddons-widgets",icon:"hm hm-cross-game",title:HappyAddonsEditor.editorPanelWidgetsLinkTitle,type:"link",link:HappyAddonsEditor.editorPanelWidgetsLinkURL,newTab:!0},"settings")}(elementor,jQuery,window);
1
+ !function(e,t,n){"use strict";function i(){return{translate:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],skew:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],scale:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],rotate:["x","y","z","x_tablet","y_tablet","z_tablet","x_mobile","y_mobile","z_mobile"]}}function a(t,n,i){t="ha_transform_fx_"+t,n="ha_transform_fx_"+n,i.on("change:"+t,function(t,a){if(!a){var o=e.getPanelView().getCurrentPageView().children.find(function(e){return e.model.get("name")===n});i.set(n,_.extend({},i.defaults[n])),o&&o.render()}})}function o(t){var n=elementorFrontend.config.elements.data[t.cid];_.each(i(),function(e,t){_.each(e,function(e){a(t+"_toggle",t+"_"+e,n)})}),e.getPanelView().getCurrentPageView().model.on("editor:close",function(){_.each(i(),function(e,t){n.off("change:ha_transform_fx_"+t+"_toggle")})})}if(e.on("panel:init",function(){t("#elementor-panel-elements-search-input").on("keyup",_.debounce(function(){t("#elementor-panel-elements").find(".hm").parents(".elementor-element").addClass("is-ha-widget")},100))}),e.hooks.addAction("panel/open_editor/widget",function(e,t){o(t)}),e.modules.controls.Icons){var l=e.modules.controls.Icons.extend({getControlValue:function(){var e=this.constructor.__super__.getControlValue.call(this),t=this.model,n=this.getValueToMigrate(),i={value:"",library:"happy-icons"};if(_.isObject(e)&&!_.isEmpty(e)&&"svg"!==e.library&&0===e.value.indexOf("fashm"))return i.value=e.value.substr(e.value.indexOf("hm hm-")),this.elementSettingsModel.set(t.get("name"),i),i;if(!_.isObject(e)&&n&&0===n.indexOf("hm hm-"))return i.value=n,this.elementSettingsModel.set(t.get("name"),i),i;if(!this.isMigrationAllowed())return n;if(!n)return e;var a=this.elementSettingsModel.get(this.dataKeys.migratedKey),o=t.get("name");return this.cache.migratedFlag[o]?this.cache.migratedFlag[o]:a&&a[o]?e:this.migrateFa4toFa5(n)}});e.addControlView("icons",l)}n.ha_has_icon_library=function(){return e.helpers&&e.helpers.renderIcon},n.ha_get_feature_label=function(e){var t=document.createElement("DIV");return t.innerHTML=e,e=t.textContent||t.innerText||e,e.length>20?e.substring(0,20)+"...":e},e.modules.layouts.panel.pages.menu.Menu.addItem({name:"happyaddons-home",icon:"hm hm-happyaddons",title:HappyAddonsEditor.editorPanelHomeLinkTitle,type:"link",link:HappyAddonsEditor.editorPanelHomeLinkURL,newTab:!0},"settings"),e.modules.layouts.panel.pages.menu.Menu.addItem({name:"happyaddons-widgets",icon:"hm hm-cross-game",title:HappyAddonsEditor.editorPanelWidgetsLinkTitle,type:"link",link:HappyAddonsEditor.editorPanelWidgetsLinkURL,newTab:!0},"settings")}(elementor,jQuery,window);
assets/js/happy-addons.js CHANGED
@@ -441,7 +441,7 @@
441
  'ha-image-compare.default': HandleImageCompare,
442
  'ha-justified-gallery.default': HandleJustifiedGallery,
443
  'ha-number.default': NumberHandler,
444
- 'ha-skills.default': SkillHandler
445
  };
446
 
447
  $.each( handlersFnMap, function( widgetName, handlerFn ) {
441
  'ha-image-compare.default': HandleImageCompare,
442
  'ha-justified-gallery.default': HandleJustifiedGallery,
443
  'ha-number.default': NumberHandler,
444
+ 'ha-skills.default': SkillHandler,
445
  };
446
 
447
  $.each( handlersFnMap, function( widgetName, handlerFn ) {
changelog.txt CHANGED
@@ -1,3 +1,9 @@
 
 
 
 
 
 
1
  = 2.4.0 - 3 December 2019 =
2
 
3
  - New: Happy Clone - (duplicate post/page from anywhere!)
1
+ = 2.4.1 - 10 December 2019 =
2
+
3
+ - Fix: News Ticket single post selection issue
4
+ - Fix: Blank icons controls JS error issue (it also fixes EA Table and Elementor FORM issue)
5
+ - Fix: Gravity Forms Elementor editor style issue
6
+
7
  = 2.4.0 - 3 December 2019 =
8
 
9
  - New: Happy Clone - (duplicate post/page from anywhere!)
classes/assets-manager.php CHANGED
@@ -298,5 +298,14 @@ class Assets_Manager {
298
  HAPPY_ADDONS_VERSION
299
  );
300
  }
 
 
 
 
 
 
 
 
 
301
  }
302
  }
298
  HAPPY_ADDONS_VERSION
299
  );
300
  }
301
+
302
+ if ( ha_is_gravityforms_activated() ) {
303
+ wp_enqueue_style(
304
+ 'happy-elementor-gravity-preview',
305
+ plugins_url( '/gravityforms/css/formsmain.min.css', 'gravityforms' ),
306
+ null,
307
+ HAPPY_ADDONS_VERSION
308
+ );
309
+ }
310
  }
311
  }
classes/attention-seeker.php CHANGED
@@ -98,23 +98,6 @@ class Attention_Seeker {
98
  }
99
 
100
  private static function get_attentions() {
101
- return [
102
- [
103
- '_id' => '#000Friday',
104
- 'start_date' => strtotime( '20th November 2019, 12AM' ),
105
- 'end_date' => strtotime( '4th December 2019, 11:59:59PM' ),
106
- 'render_cb' => [ __CLASS__, 'render_000Friday_offer' ],
107
- ]
108
- ];
109
- }
110
-
111
- public static function render_000Friday_offer( $id ) {
112
- ?>
113
- <div class="notice updated elementor-message is-dismissible ha-seeker" data-id="<?php echo $id; ?>">
114
- <a href="https://happyaddons.com/pricing/" target="_blank" rel="noopener">
115
- <img style="max-width:100%; height: auto; display: block;" src="<?php echo HAPPY_ADDONS_ASSETS ?>/imgs/bf-img.png" alt="Black Friday & Cyber Monday Offer - BFCM2019">
116
- </a>
117
- </div>
118
- <?php
119
  }
120
  }
98
  }
99
 
100
  private static function get_attentions() {
101
+ return [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  }
103
  }
classes/widgets-manager.php CHANGED
@@ -155,6 +155,11 @@ class Widgets_Manager {
155
  'icon' => 'hm hm-hand-watch',
156
  'is_pro' => true,
157
  ],
 
 
 
 
 
158
  ];
159
  }
160
 
@@ -493,8 +498,11 @@ class Widgets_Manager {
493
 
494
  protected static function register_widget( $widget_key ) {
495
  $widget_file = HAPPY_ADDONS_DIR_PATH . 'widgets/' . $widget_key . '/widget.php';
 
496
  if ( is_readable( $widget_file ) ) {
 
497
  include_once( $widget_file );
 
498
  $widget_class = '\Happy_Addons\Elementor\Widget\\' . str_replace( '-', '_', $widget_key );
499
  if ( class_exists( $widget_class ) ) {
500
  ha_elementor()->widgets_manager->register_widget_type( new $widget_class );
155
  'icon' => 'hm hm-hand-watch',
156
  'is_pro' => true,
157
  ],
158
+ 'promo-box' => [
159
+ 'title' => __( 'Promo Box', 'happy-elementor-addons' ),
160
+ 'icon' => 'hm hm-promo',
161
+ 'is_pro' => true,
162
+ ],
163
  ];
164
  }
165
 
498
 
499
  protected static function register_widget( $widget_key ) {
500
  $widget_file = HAPPY_ADDONS_DIR_PATH . 'widgets/' . $widget_key . '/widget.php';
501
+
502
  if ( is_readable( $widget_file ) ) {
503
+
504
  include_once( $widget_file );
505
+
506
  $widget_class = '\Happy_Addons\Elementor\Widget\\' . str_replace( '-', '_', $widget_key );
507
  if ( class_exists( $widget_class ) ) {
508
  ha_elementor()->widgets_manager->register_widget_type( new $widget_class );
extensions/widgets-extended.php CHANGED
@@ -14,13 +14,11 @@ defined('ABSPATH') || die();
14
  class Widgets_Extended {
15
 
16
  public static function init() {
17
- add_action( 'elementor/element/button/section_style/after_section_start', [ __CLASS__, 'add_button_controls'
18
- ] );
19
  }
20
 
21
- public static function add_button_controls( Widget_Base $element ) {
22
-
23
- $element->add_control(
24
  'ha_fixed_size_toggle',
25
  [
26
  'label' => sprintf( __( 'Fixed Size %s', 'happy-elementor-addons' ), '<i style="color: #d5dadf;" class="hm hm-happyaddons"></i>' ),
@@ -29,9 +27,9 @@ class Widgets_Extended {
29
  ]
30
  );
31
 
32
- $element->start_popover();
33
 
34
- $element->add_responsive_control(
35
  'ha_height',
36
  [
37
  'label' => __( 'Height', 'happy-elementor-addons' ),
@@ -53,7 +51,7 @@ class Widgets_Extended {
53
  ]
54
  );
55
 
56
- $element->add_responsive_control(
57
  'ha_width',
58
  [
59
  'label' => __( 'Width', 'happy-elementor-addons' ),
@@ -75,7 +73,7 @@ class Widgets_Extended {
75
  ]
76
  );
77
 
78
- $element->add_control(
79
  'ha_align_x',
80
  [
81
  'type' => Controls_Manager::CHOOSE,
@@ -110,7 +108,7 @@ class Widgets_Extended {
110
  ]
111
  );
112
 
113
- $element->add_control(
114
  'ha_align_y',
115
  [
116
  'type' => Controls_Manager::CHOOSE,
@@ -145,7 +143,7 @@ class Widgets_Extended {
145
  ]
146
  );
147
 
148
- $element->add_control(
149
  'ha_flex_display',
150
  [
151
  'type' => Controls_Manager::HIDDEN,
@@ -161,6 +159,6 @@ class Widgets_Extended {
161
  ]
162
  );
163
 
164
- $element->end_popover();
165
  }
166
  }
14
  class Widgets_Extended {
15
 
16
  public static function init() {
17
+ add_action( 'elementor/element/button/section_style/after_section_start', [ __CLASS__, 'add_button_controls' ] );
 
18
  }
19
 
20
+ public static function add_button_controls( Widget_Base $widget ) {
21
+ $widget->add_control(
 
22
  'ha_fixed_size_toggle',
23
  [
24
  'label' => sprintf( __( 'Fixed Size %s', 'happy-elementor-addons' ), '<i style="color: #d5dadf;" class="hm hm-happyaddons"></i>' ),
27
  ]
28
  );
29
 
30
+ $widget->start_popover();
31
 
32
+ $widget->add_responsive_control(
33
  'ha_height',
34
  [
35
  'label' => __( 'Height', 'happy-elementor-addons' ),
51
  ]
52
  );
53
 
54
+ $widget->add_responsive_control(
55
  'ha_width',
56
  [
57
  'label' => __( 'Width', 'happy-elementor-addons' ),
73
  ]
74
  );
75
 
76
+ $widget->add_control(
77
  'ha_align_x',
78
  [
79
  'type' => Controls_Manager::CHOOSE,
108
  ]
109
  );
110
 
111
+ $widget->add_control(
112
  'ha_align_y',
113
  [
114
  'type' => Controls_Manager::CHOOSE,
143
  ]
144
  );
145
 
146
+ $widget->add_control(
147
  'ha_flex_display',
148
  [
149
  'type' => Controls_Manager::HIDDEN,
159
  ]
160
  );
161
 
162
+ $widget->end_popover();
163
  }
164
  }
plugin.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: https://happyaddons.com/
5
  * Description: <a href="https://happyaddons.com/">HappyAddons</a> is a collection of slick, powerful widgets that works seamlessly with Elementor page builder. It’s trendy look with detail customization features allows to create extraordinary designs instantly. <a href="https://happyaddons.com/">HappyAddons</a> is free, rapidly growing and comes with great support.
6
- * Version: 2.4.0
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
@@ -34,7 +34,7 @@ Copyright 2019 HappyMonster <http://happymonster.me>
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
- define( 'HAPPY_ADDONS_VERSION', '2.4.0' );
38
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
39
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
40
  define( 'HAPPY_ADDONS_DIR_URL', plugin_dir_url( HAPPY_ADDONS__FILE__ ) );
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: https://happyaddons.com/
5
  * Description: <a href="https://happyaddons.com/">HappyAddons</a> is a collection of slick, powerful widgets that works seamlessly with Elementor page builder. It’s trendy look with detail customization features allows to create extraordinary designs instantly. <a href="https://happyaddons.com/">HappyAddons</a> is free, rapidly growing and comes with great support.
6
+ * Version: 2.4.1
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
+ define( 'HAPPY_ADDONS_VERSION', '2.4.1' );
38
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
39
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
40
  define( 'HAPPY_ADDONS_DIR_URL', plugin_dir_url( HAPPY_ADDONS__FILE__ ) );
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
- Version: 2.4.0
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, obiplabon
@@ -27,7 +27,7 @@ _HappyAddons is a unique Elementor Addon. It might be the best addon package for
27
  _— **Adam Preiser, Founder of WP Crafter**_
28
 
29
 
30
- ### **INCLUDED 27 FREE WIDGETS**
31
 
32
  Unlike other Elementor addons, the Happy Elementor Addons comes with a host of free yet powerful widgets. The magical widgets will impress you so much that you will be confused whether they are premium or free:
33
 
@@ -60,7 +60,7 @@ Unlike other Elementor addons, the Happy Elementor Addons comes with a host of f
60
  27. **[News Ticker](https://happyaddons.com/docs/happy-addons-for-elementor/widgets/news-ticker/)** - Want to show updates, popular content or messages on your website? With the Happy Elementor Addons Content Ticker widget, you can do this at your disposal with great customizability.
61
 
62
 
63
- ### **Free Built-in Extensions to Give You an Awesome Experience**
64
 
65
  **Happy Extensions contain free extensions augmenting the features of the Elementor page builder to add additional customizations. These effects are unique and exclusive that is only available in Happy Addons.**
66
 
@@ -88,25 +88,25 @@ As mentioned, the happy Elementor Addons caters you with these two effects that
88
  👉 **[CSS Transform](https://demo.happyaddons.com/elementor-css-transform-demo/)** – Another missing piece, a great enhancement over core Elementor that works seamlessly with every widget. You can now apply various CSS transforms like translate, rotate, scale and skew without any limitations.
89
 
90
  https://www.youtube.com/watch?v=LmtacsLcFPU
91
-
92
  **Space Effects Using Floating Effects**
93
-
94
  https://www.youtube.com/watch?v=F33g3zqkeog
95
 
96
 
97
- ### **Presenting the Mighty Happy Elementor Add Ons Pro**
98
 
99
  The Happy Elementor Addons ships not only with some unique premium features but also with premium widgets. The premium features are 100% unique and exclusive and the premium widgets are there to give you professional assistance to craft any design.
100
 
101
  https://www.youtube.com/watch?v=QwJrFMtfO2U
102
 
103
 
104
- ## **Premium (Pro) Features of the Happy Elementor Addons**
105
 
106
  The premium features of happy addons make it stand out from all the other Elementor add-ons. You will get the following three premium features from the Happy Addons:
107
 
108
 
109
- ### **Cross-Domain Copy-Paste: Apply the Same Design to Multiple Domains with a Single Click**
110
 
111
  If you are creating different web pages with WordPress, you will often try to use the same elements of a web page to other pages over and over again.
112
 
@@ -119,7 +119,7 @@ This is where the goodness of the Happy Addons comes to the rescue! With this to
119
  https://www.youtube.com/watch?v=s1WlUYweJl0
120
 
121
 
122
- ### **Preset: Save Your Time and Effort by Using the Preset Feature**
123
 
124
  If you try to create your website from scratch and give it a professional appearance, then it will take up a huge amount of time and effort.
125
 
@@ -130,7 +130,7 @@ To tackle this hassle, the Preset option of the Happy Addons comes into play! Mu
130
  https://www.youtube.com/watch?v=fEEvoc6HRBA
131
 
132
 
133
- ### **Unlimited Section Nesting: Use Unlimited Section Nesting to Go Beyond the Limit**
134
 
135
  With Elementor, you can create sections to make room for elements. We feel happy to say that by integrating the Happy Elementor add-ons, you can create infinite sections within a single section.
136
 
@@ -141,7 +141,7 @@ And as usual, you can insert as many widgets as you want into those sections.
141
  https://www.youtube.com/watch?v=Vr0-msIB3jc
142
 
143
 
144
- ### **Live Copy: Copy Designs from Demo Site to Get It Done Right Away!**
145
 
146
  Sometimes you may wish to simulate exactly the same design that you see on our demo page. Amazingly, with the Live Copy option, you can do it at your disposal.
147
 
@@ -154,7 +154,7 @@ Unlike a theme template, using the demo designs won’t put any pressure on your
154
  https://www.youtube.com/watch?v=339WNqlDFAA
155
 
156
 
157
- ## **Premium Widgets of Happy Elementor Addons**
158
 
159
  If you are not contented with the free widgets, then the following premium widgets are there to quench your thirst. The best part is that you can copy and paste the design source code and so you won’t have to make any design from scratch:
160
 
@@ -183,7 +183,7 @@ to make your text stand apart from the crowd applying smart animations. You can
183
  19. **[Source Code](https://demo.happyaddons.com/elementor-source-code-widget-demo/)** - While writing docs or tutorial posts, you can use this widget to skillfully show codes to your visitors so that they can copy and paste them anywhere on the page at their disposal. [Check demo](https://demo.happyaddons.com/elementor-source-code-widget-demo/)
184
 
185
 
186
- ### **Enjoy Extra Benefits from the Happy Addons!**
187
 
188
  Our code doesn’t stink and we don’t leave you blindfolded when you need support from us. Apart from the freemium widgets, the plugin will pamper you with a fleet of professional quality features.
189
 
@@ -192,7 +192,7 @@ For example, it’s compatible with almost every WordPress theme; it’s lightwe
192
  If you don’t understand a feature or fail to give it the desired look which was already demonstrated in a demo, or it’s not working as expected – we got your back. Just drop us a line and we will do our best to help you figure a way out.
193
 
194
 
195
- ### **BUGS, TECHNICAL HINTS OR CONTRIBUTE**
196
 
197
  Please give us feedback, contribute and file technical bugs on [GitHub Repo](https://github.com/weDevsOfficial/happy-elementor-addons/issues).
198
 
@@ -258,6 +258,12 @@ It's really easy and super simple to install **Happy Elementor Addons** plugin b
258
 
259
  == Changelog ==
260
 
 
 
 
 
 
 
261
  = 2.4.0 - 3 December 2019 =
262
 
263
  - New: Happy Clone - (duplicate post/page from anywhere!)
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
+ Version: 2.4.1
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, obiplabon
27
  _— **Adam Preiser, Founder of WP Crafter**_
28
 
29
 
30
+ ### INCLUDED 27 FREE WIDGETS
31
 
32
  Unlike other Elementor addons, the Happy Elementor Addons comes with a host of free yet powerful widgets. The magical widgets will impress you so much that you will be confused whether they are premium or free:
33
 
60
  27. **[News Ticker](https://happyaddons.com/docs/happy-addons-for-elementor/widgets/news-ticker/)** - Want to show updates, popular content or messages on your website? With the Happy Elementor Addons Content Ticker widget, you can do this at your disposal with great customizability.
61
 
62
 
63
+ ### Free Built-in Extensions to Give You an Awesome Experience
64
 
65
  **Happy Extensions contain free extensions augmenting the features of the Elementor page builder to add additional customizations. These effects are unique and exclusive that is only available in Happy Addons.**
66
 
88
  👉 **[CSS Transform](https://demo.happyaddons.com/elementor-css-transform-demo/)** – Another missing piece, a great enhancement over core Elementor that works seamlessly with every widget. You can now apply various CSS transforms like translate, rotate, scale and skew without any limitations.
89
 
90
  https://www.youtube.com/watch?v=LmtacsLcFPU
91
+
92
  **Space Effects Using Floating Effects**
93
+
94
  https://www.youtube.com/watch?v=F33g3zqkeog
95
 
96
 
97
+ ### Presenting the Mighty Happy Elementor Add Ons Pro
98
 
99
  The Happy Elementor Addons ships not only with some unique premium features but also with premium widgets. The premium features are 100% unique and exclusive and the premium widgets are there to give you professional assistance to craft any design.
100
 
101
  https://www.youtube.com/watch?v=QwJrFMtfO2U
102
 
103
 
104
+ ## Premium (Pro) Features of the Happy Elementor Addons
105
 
106
  The premium features of happy addons make it stand out from all the other Elementor add-ons. You will get the following three premium features from the Happy Addons:
107
 
108
 
109
+ ### Cross-Domain Copy-Paste: Apply the Same Design to Multiple Domains with a Single Click
110
 
111
  If you are creating different web pages with WordPress, you will often try to use the same elements of a web page to other pages over and over again.
112
 
119
  https://www.youtube.com/watch?v=s1WlUYweJl0
120
 
121
 
122
+ ### Preset: Save Your Time and Effort by Using the Preset Feature
123
 
124
  If you try to create your website from scratch and give it a professional appearance, then it will take up a huge amount of time and effort.
125
 
130
  https://www.youtube.com/watch?v=fEEvoc6HRBA
131
 
132
 
133
+ ### Unlimited Section Nesting: Use Unlimited Section Nesting to Go Beyond the Limit
134
 
135
  With Elementor, you can create sections to make room for elements. We feel happy to say that by integrating the Happy Elementor add-ons, you can create infinite sections within a single section.
136
 
141
  https://www.youtube.com/watch?v=Vr0-msIB3jc
142
 
143
 
144
+ ### Live Copy: Copy Designs from Demo Site to Get It Done Right Away!
145
 
146
  Sometimes you may wish to simulate exactly the same design that you see on our demo page. Amazingly, with the Live Copy option, you can do it at your disposal.
147
 
154
  https://www.youtube.com/watch?v=339WNqlDFAA
155
 
156
 
157
+ ## Premium Widgets of Happy Elementor Addons
158
 
159
  If you are not contented with the free widgets, then the following premium widgets are there to quench your thirst. The best part is that you can copy and paste the design source code and so you won’t have to make any design from scratch:
160
 
183
  19. **[Source Code](https://demo.happyaddons.com/elementor-source-code-widget-demo/)** - While writing docs or tutorial posts, you can use this widget to skillfully show codes to your visitors so that they can copy and paste them anywhere on the page at their disposal. [Check demo](https://demo.happyaddons.com/elementor-source-code-widget-demo/)
184
 
185
 
186
+ ### Enjoy Extra Benefits from the Happy Addons!
187
 
188
  Our code doesn’t stink and we don’t leave you blindfolded when you need support from us. Apart from the freemium widgets, the plugin will pamper you with a fleet of professional quality features.
189
 
192
  If you don’t understand a feature or fail to give it the desired look which was already demonstrated in a demo, or it’s not working as expected – we got your back. Just drop us a line and we will do our best to help you figure a way out.
193
 
194
 
195
+ ### BUGS, TECHNICAL HINTS OR CONTRIBUTE
196
 
197
  Please give us feedback, contribute and file technical bugs on [GitHub Repo](https://github.com/weDevsOfficial/happy-elementor-addons/issues).
198
 
258
 
259
  == Changelog ==
260
 
261
+ = 2.4.1 - 10 December 2019 =
262
+
263
+ - Fix: News Ticket single post selection issue
264
+ - Fix: Blank icons controls JS error issue (it also fixes EA Table and Elementor FORM issue)
265
+ - Fix: Gravity Forms Elementor editor style issue
266
+
267
  = 2.4.0 - 3 December 2019 =
268
 
269
  - New: Happy Clone - (duplicate post/page from anywhere!)
widgets/gravityforms/widget.php CHANGED
@@ -153,8 +153,8 @@ class GravityForms extends Base {
153
  'type' => Controls_Manager::DIMENSIONS,
154
  'size_units' => [ 'px', '%' ],
155
  'selectors' => [
156
- '{{WRAPPER}} .gfield .ginput_container:not(.ginput_container_fileupload) > input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
157
- '{{WRAPPER}} .gfield .ginput_container.ginput_complex input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
158
  '{{WRAPPER}} .gform_body .gfield textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
159
  ],
160
  ]
153
  'type' => Controls_Manager::DIMENSIONS,
154
  'size_units' => [ 'px', '%' ],
155
  'selectors' => [
156
+ '{{WRAPPER}} .gform_body .gfield .ginput_container:not(.ginput_container_fileupload) > input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
157
+ '{{WRAPPER}} .gform_body .gfield .ginput_container.ginput_complex input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
158
  '{{WRAPPER}} .gform_body .gfield textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
159
  ],
160
  ]
widgets/news-ticker/widget.php CHANGED
@@ -451,7 +451,7 @@ class News_Ticker extends Base {
451
  $news_posts = [];
452
  $the_query = get_posts( $query_args );
453
  if ( ! empty( $the_query ) ) {
454
- $news_posts = wp_list_pluck( $the_query, 'post_title', 'post_status' );
455
  }
456
 
457
  $this->add_render_attribute( 'wrapper', 'class', [ 'ha-news-ticker-wrapper' ] );
@@ -471,7 +471,7 @@ class News_Ticker extends Base {
471
  <?php foreach ( $news_posts as $key => $value ): ?>
472
  <li <?php $this->print_render_attribute_string( 'item' ); ?>>
473
  <h2 class="ha-news-ticker-title">
474
- <a href="<?php echo esc_url( $key ); ?>">
475
  <?php echo esc_html( $value ); ?>
476
  </a>
477
  </h2>
451
  $news_posts = [];
452
  $the_query = get_posts( $query_args );
453
  if ( ! empty( $the_query ) ) {
454
+ $news_posts = wp_list_pluck( $the_query, 'post_title', 'ID' );
455
  }
456
 
457
  $this->add_render_attribute( 'wrapper', 'class', [ 'ha-news-ticker-wrapper' ] );
471
  <?php foreach ( $news_posts as $key => $value ): ?>
472
  <li <?php $this->print_render_attribute_string( 'item' ); ?>>
473
  <h2 class="ha-news-ticker-title">
474
+ <a href="<?php echo esc_url( get_the_permalink($key) ); ?>">
475
  <?php echo esc_html( $value ); ?>
476
  </a>
477
  </h2>