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

Version Description

  • 7 October 2019 =

  • Update: Style copy-paste support improved

  • Fix: Image Grid image alt attribute value issue

  • Fix: Justified Gallery image alt attribute value issue

  • Fix: Skills Bar % sign visibility inconsistency 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.2.0
Comparing to
See all releases

Code changes from version 2.1.0 to 2.2.0

assets/js/happy-addons.js CHANGED
@@ -305,7 +305,7 @@
305
  $lt.numerator({
306
  toValue: lv + '%',
307
  duration: 1300,
308
- onComplete: function() {
309
  $lt.append('%');
310
  }
311
  });
305
  $lt.numerator({
306
  toValue: lv + '%',
307
  duration: 1300,
308
+ onStep: function() {
309
  $lt.append('%');
310
  }
311
  });
assets/js/happy-addons.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";!function(t,e){function i(e,i){var n=e.find(".hajs-gallery-filter");n.length&&n.on("click","button",function(e){e.stopPropagation();var n=t(this);n.parent().addClass("ha-filter-active").siblings().removeClass("ha-filter-active"),i(n.data("filter"))})}function n(e,i,n,s){if(t.fn.magnificPopup){if(!n)return void t.magnificPopup.close();e.on("click",i,function(t){t.stopPropagation()}),e.find(i).magnificPopup({key:s,type:"image",image:{titleSrc:function(t){return t.el.attr("title")?t.el.attr("title"):t.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(t){return t.is("img")?t:t.find("img")}}})}}var s=t(e);t.fn.getHappySettings=function(){return this.data("happy-settings")};var o=function(t){var e=t.find(".hajs-image-comparison"),i=e.getHappySettings();i[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[i.move_handle||"on_swipe"]]=!0,delete i.move_handle,e.imagesLoaded().done(function(){e.twentytwenty(i)})},a=function(e){var s=e.find(".hajs-justified-gallery"),o=s.getHappySettings(),a=o.enable_popup;s.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},o)),n(e,".ha-js-popup",a,"justifiedgallery"),i(e,function(t){s.justifiedGallery({lastRow:"*"===t?o.lastRow:"nojustify",filter:t}),n(e,"*"!==t?t:".ha-js-popup",a,"justifiedgallery")})};s.on("elementor/frontend/init",function(){var e=elementorFrontend,s=elementorModules,l=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.widgetContainer=this.$element.find(".elementor-widget-container")[0],this.initFloatingEffects(),this.initBackgroundOverlay()},initBackgroundOverlay:function(){this.isEdit&&this.$element.addClass("ha-has-background-overlay")},getDefaultSettings:function(){return{targets:this.widgetContainer,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(){this.animation&&this.animation.restart(),this.initFloatingEffects()},getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},initFloatingEffects:function(){var t=this.getDefaultSettings();this.getConfig("translate_toggle")&&((this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to"))&&(t.translateX={value:[this.getConfig("translate_x.sizes.from")||0,this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0}),(this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to"))&&(t.translateY={value:[this.getConfig("translate_y.sizes.from")||0,this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0})),this.getConfig("rotate_toggle")&&((this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to"))&&(t.rotateX={value:[this.getConfig("rotate_x.sizes.from")||0,this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to"))&&(t.rotateY={value:[this.getConfig("rotate_y.sizes.from")||0,this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to"))&&(t.rotateZ={value:[this.getConfig("rotate_z.sizes.from")||0,this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0})),this.getConfig("scale_toggle")&&((this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to"))&&(t.scaleX={value:[this.getConfig("scale_x.sizes.from")||0,this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0}),(this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to"))&&(t.scaleY={value:[this.getConfig("scale_y.sizes.from")||0,this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0})),(this.getConfig("translate_toggle")||this.getConfig("rotate_toggle")||this.getConfig("scale_toggle"))&&(this.widgetContainer.style.setProperty("will-change","transform"),this.animation=anime(t))}}),r=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-slick"),this.run()},isCarousel:function(){return this.$element.hasClass("ha-carousel")},getDefaultSettings:function(){return{arrows:!1,dots:!1,checkVisible:!1,infinite:!0,slidesToShow:this.isCarousel()?3:1,rows:0,prevArrow:'<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',nextArrow:'<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'}},onElementChange:function(){this.$container.slick("unslick"),this.run()},getReadySettings:function(){var i={infinite:!!this.getElementSettings("loop"),autoplay:!!this.getElementSettings("autoplay"),autoplaySpeed:this.getElementSettings("autoplay_speed"),speed:this.getElementSettings("animation_speed"),centerMode:!!this.getElementSettings("center"),vertical:!!this.getElementSettings("vertical"),slidesToScroll:1};switch(this.getElementSettings("navigation")){case"arrow":i.arrows=!0;break;case"dots":i.dots=!0;break;case"both":i.arrows=!0,i.dots=!0}return this.isCarousel()&&(i.slidesToShow=this.getElementSettings("slides_to_show")||3,i.responsive=[{breakpoint:e.config.breakpoints.lg,settings:{slidesToShow:this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}},{breakpoint:e.config.breakpoints.md,settings:{slidesToShow:this.getElementSettings("slides_to_show_mobile")||this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}}]),t.extend({},this.getDefaultSettings(),i)},run:function(){this.$container.slick(this.getReadySettings())}}),g=function(t){e.waypoint(t,function(){var e=t.find(".ha-number-text");e.numerator(e.data("animation"))})},h=function(i){e.waypoint(i,function(){i.find(".ha-skill-level").each(function(){var e=t(this),i=e.find(".ha-skill-level-text"),n=e.data("level");e.animate({width:n+"%"},500),i.numerator({toValue:n+"%",duration:1300,onComplete:function(){i.append("%")}})})})},f=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-isotope"),this.run(),this.runFilter()},getLayoutMode:function(){var t=this.getElementSettings("layout");return"even"===t?"masonry":t},getDefaultSettings:function(){return{itemSelector:".ha-image-grid-item",percentPosition:!0,layoutMode:this.getLayoutMode()}},runFilter:function(){var t=this;i(this.$element,function(e){t.$container.isotope({filter:e});var i="*"!==e?e:".ha-js-popup";n(t.$element,i,t.getElementSettings("enable_popup"),"imagegrid")})},onElementChange:function(t){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(t)&&this.run()},run:function(){var t=this;this.$container.isotope(t.getDefaultSettings()),this.$container.imagesLoaded().progress(function(){t.$container.isotope("layout")}),n(this.$element,".ha-js-popup",this.getElementSettings("enable_popup"),"imagegrid")}}),d={"ha-image-compare.default":o,"ha-justified-gallery.default":a,"ha-number.default":g,"ha-skills.default":h};t.each(d,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,i)});var u={"ha-slider.default":r,"ha-carousel.default":r,"ha-image-grid.default":f,widget:l};t.each(u,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,function(t){e.elementsHandler.addHandler(i,{$element:t})})})})}(jQuery,window);
1
+ "use strict";!function(t,e){function i(e,i){var n=e.find(".hajs-gallery-filter");n.length&&n.on("click","button",function(e){e.stopPropagation();var n=t(this);n.parent().addClass("ha-filter-active").siblings().removeClass("ha-filter-active"),i(n.data("filter"))})}function n(e,i,n,s){if(t.fn.magnificPopup){if(!n)return void t.magnificPopup.close();e.on("click",i,function(t){t.stopPropagation()}),e.find(i).magnificPopup({key:s,type:"image",image:{titleSrc:function(t){return t.el.attr("title")?t.el.attr("title"):t.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(t){return t.is("img")?t:t.find("img")}}})}}var s=t(e);t.fn.getHappySettings=function(){return this.data("happy-settings")};var o=function(t){var e=t.find(".hajs-image-comparison"),i=e.getHappySettings();i[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[i.move_handle||"on_swipe"]]=!0,delete i.move_handle,e.imagesLoaded().done(function(){e.twentytwenty(i)})},a=function(e){var s=e.find(".hajs-justified-gallery"),o=s.getHappySettings(),a=o.enable_popup;s.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},o)),n(e,".ha-js-popup",a,"justifiedgallery"),i(e,function(t){s.justifiedGallery({lastRow:"*"===t?o.lastRow:"nojustify",filter:t}),n(e,"*"!==t?t:".ha-js-popup",a,"justifiedgallery")})};s.on("elementor/frontend/init",function(){var e=elementorFrontend,s=elementorModules,r=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.widgetContainer=this.$element.find(".elementor-widget-container")[0],this.initFloatingEffects(),this.initBackgroundOverlay()},initBackgroundOverlay:function(){this.isEdit&&this.$element.addClass("ha-has-background-overlay")},getDefaultSettings:function(){return{targets:this.widgetContainer,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(){this.animation&&this.animation.restart(),this.initFloatingEffects()},getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},initFloatingEffects:function(){var t=this.getDefaultSettings();this.getConfig("translate_toggle")&&((this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to"))&&(t.translateX={value:[this.getConfig("translate_x.sizes.from")||0,this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0}),(this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to"))&&(t.translateY={value:[this.getConfig("translate_y.sizes.from")||0,this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0})),this.getConfig("rotate_toggle")&&((this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to"))&&(t.rotateX={value:[this.getConfig("rotate_x.sizes.from")||0,this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to"))&&(t.rotateY={value:[this.getConfig("rotate_y.sizes.from")||0,this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to"))&&(t.rotateZ={value:[this.getConfig("rotate_z.sizes.from")||0,this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0})),this.getConfig("scale_toggle")&&((this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to"))&&(t.scaleX={value:[this.getConfig("scale_x.sizes.from")||0,this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0}),(this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to"))&&(t.scaleY={value:[this.getConfig("scale_y.sizes.from")||0,this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0})),(this.getConfig("translate_toggle")||this.getConfig("rotate_toggle")||this.getConfig("scale_toggle"))&&(this.widgetContainer.style.setProperty("will-change","transform"),this.animation=anime(t))}}),l=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-slick"),this.run()},isCarousel:function(){return this.$element.hasClass("ha-carousel")},getDefaultSettings:function(){return{arrows:!1,dots:!1,checkVisible:!1,infinite:!0,slidesToShow:this.isCarousel()?3:1,rows:0,prevArrow:'<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',nextArrow:'<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'}},onElementChange:function(){this.$container.slick("unslick"),this.run()},getReadySettings:function(){var i={infinite:!!this.getElementSettings("loop"),autoplay:!!this.getElementSettings("autoplay"),autoplaySpeed:this.getElementSettings("autoplay_speed"),speed:this.getElementSettings("animation_speed"),centerMode:!!this.getElementSettings("center"),vertical:!!this.getElementSettings("vertical"),slidesToScroll:1};switch(this.getElementSettings("navigation")){case"arrow":i.arrows=!0;break;case"dots":i.dots=!0;break;case"both":i.arrows=!0,i.dots=!0}return this.isCarousel()&&(i.slidesToShow=this.getElementSettings("slides_to_show")||3,i.responsive=[{breakpoint:e.config.breakpoints.lg,settings:{slidesToShow:this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}},{breakpoint:e.config.breakpoints.md,settings:{slidesToShow:this.getElementSettings("slides_to_show_mobile")||this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}}]),t.extend({},this.getDefaultSettings(),i)},run:function(){this.$container.slick(this.getReadySettings())}}),g=function(t){e.waypoint(t,function(){var e=t.find(".ha-number-text");e.numerator(e.data("animation"))})},h=function(i){e.waypoint(i,function(){i.find(".ha-skill-level").each(function(){var e=t(this),i=e.find(".ha-skill-level-text"),n=e.data("level");e.animate({width:n+"%"},500),i.numerator({toValue:n+"%",duration:1300,onStep:function(){i.append("%")}})})})},f=s.frontend.handlers.Base.extend({onInit:function(){s.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-isotope"),this.run(),this.runFilter()},getLayoutMode:function(){var t=this.getElementSettings("layout");return"even"===t?"masonry":t},getDefaultSettings:function(){return{itemSelector:".ha-image-grid-item",percentPosition:!0,layoutMode:this.getLayoutMode()}},runFilter:function(){var t=this;i(this.$element,function(e){t.$container.isotope({filter:e});var i="*"!==e?e:".ha-js-popup";n(t.$element,i,t.getElementSettings("enable_popup"),"imagegrid")})},onElementChange:function(t){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(t)&&this.run()},run:function(){var t=this;this.$container.isotope(t.getDefaultSettings()),this.$container.imagesLoaded().progress(function(){t.$container.isotope("layout")}),n(this.$element,".ha-js-popup",this.getElementSettings("enable_popup"),"imagegrid")}}),d={"ha-image-compare.default":o,"ha-justified-gallery.default":a,"ha-number.default":g,"ha-skills.default":h};t.each(d,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,i)});var u={"ha-slider.default":l,"ha-carousel.default":l,"ha-image-grid.default":f,widget:r};t.each(u,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,function(t){e.elementsHandler.addHandler(i,{$element:t})})})})}(jQuery,window);
base.php CHANGED
@@ -78,7 +78,12 @@ class Base {
78
  );
79
 
80
  // Active insights
81
- $this->appsero->insights()->init();
 
 
 
 
 
82
  }
83
 
84
  public function include_files() {
78
  );
79
 
80
  // Active insights
81
+ $this->appsero->insights()
82
+ ->add_extra([
83
+ 'pro_installed' => ha_has_pro() ? 'Yes' : 'No',
84
+ 'pro_version' => ha_has_pro() ? HAPPY_ADDONS_PRO_VERSION : '',
85
+ ])
86
+ ->init();
87
  }
88
 
89
  public function include_files() {
classes/widgets-manager.php CHANGED
@@ -86,100 +86,105 @@ class Widgets_Manager {
86
  public static function get_pro_widget_map() {
87
  return [
88
  'google-map' => [
89
- 'title' => __( 'Google Map', 'happy-addons-pro' ),
90
  'icon' => 'hm hm-map-marker',
91
  'is_pro' => true,
92
  ],
93
  'advanced-heading' => [
94
- 'title' => __( 'Advanced Heading', 'happy-addons-pro' ),
95
  'icon' => 'hm hm-advanced-heading',
96
  'is_pro' => true,
97
  ],
98
  'list-group' => [
99
- 'title' => __( 'List Group', 'happy-addons-pro' ),
100
  'icon' => 'hm hm-list-group',
101
  'is_pro' => true,
102
  ],
103
  'hover-box' => [
104
- 'title' => __( 'Hover Box', 'happy-addons-pro' ),
105
  'icon' => 'hm hm-finger-point',
106
  'is_pro' => true,
107
  ],
108
  'countdown' => [
109
- 'title' => __( 'Countdown', 'happy-addons-pro' ),
110
  'icon' => 'hm hm-refresh-time',
111
  'is_pro' => true,
112
  ],
113
  'team-carousel' => [
114
- 'title' => __( 'Team Carousel', 'happy-addons-pro' ),
115
  'icon' => 'hm hm-team-carousel',
116
  'is_pro' => true,
117
  ],
118
  'logo-carousel' => [
119
- 'title' => __( 'Logo Carousel', 'happy-addons-pro' ),
120
  'icon' => 'hm hm-logo-carousel',
121
  'is_pro' => true,
122
  ],
123
  'source-code' => [
124
- 'title' => __( 'Source Code', 'happy-addons-pro' ),
125
  'icon' => 'hm hm-code-browser',
126
  'is_pro' => true,
127
  ],
128
  'feature-list' => [
129
- 'title' => __( 'Feature List', 'happy-addons-pro' ),
130
  'icon' => 'hm hm-list-2',
131
  'is_pro' => true,
132
  ],
133
  'testimonial-carousel' => [
134
- 'title' => __( 'Testimonial Carousel', 'happy-addons-pro' ),
135
  'icon' => 'hm hm-testimonial-carousel',
136
  'is_pro' => true,
137
  ],
138
  'advanced-tabs' => [
139
- 'title' => __( 'Advanced Tabs', 'happy-addons-pro' ),
140
  'icon' => 'hm hm-tab',
141
  'is_pro' => true,
142
  ],
143
  'animated-text' => [
144
- 'title' => __( 'Animated Text', 'happy-addons-pro' ),
145
  'icon' => 'hm hm-text-animation',
146
  'is_pro' => true,
147
  ],
148
  'timeline' => [
149
- 'title' => __( 'Timeline', 'happy-addons-pro' ),
150
  'icon' => 'hm hm-timeline',
151
  'is_pro' => true,
152
  ],
153
  'instagram-feed' => [
154
- 'title' => __( 'Instagram Feed', 'happy-addons-pro' ),
155
  'icon' => 'hm hm-instagram',
156
  'is_pro' => true,
157
  ],
158
  'scrolling-image' => [
159
- 'title' => __( 'Scrolling Image', 'happy-addons-pro' ),
160
  'icon' => 'hm hm-scrolling-image',
161
  'is_pro' => true,
162
  ],
163
  'toggle' => [
164
- 'title' => __( 'Advanced Toggle', 'happy-addons-pro' ),
165
  'icon' => 'hm hm-accordion-vertical',
166
  'is_pro' => true,
167
  ],
168
  'accordion' => [
169
- 'title' => __( 'Advanced Accordion', 'happy-addons-pro' ),
170
  'icon' => 'hm hm-accordion-vertical',
171
  'is_pro' => true,
172
  ],
173
  'advanced-pricing-table' => [
174
- 'title' => __( 'Advanced Pricing Table', 'happy-addons-pro'),
175
  'icon' => 'hm hm-file-cabinet',
176
  'is_pro' => true,
177
  ],
178
  'advanced-flip-box' => [
179
- 'title' => __( 'Advanced Flip Box', 'happy-addons-pro' ),
180
  'icon' => 'hm hm-flip-card1',
181
  'is_pro' => true,
182
  ],
 
 
 
 
 
183
  ];
184
  }
185
 
86
  public static function get_pro_widget_map() {
87
  return [
88
  'google-map' => [
89
+ 'title' => __( 'Google Map', 'happy-elementor-addons' ),
90
  'icon' => 'hm hm-map-marker',
91
  'is_pro' => true,
92
  ],
93
  'advanced-heading' => [
94
+ 'title' => __( 'Advanced Heading', 'happy-elementor-addons' ),
95
  'icon' => 'hm hm-advanced-heading',
96
  'is_pro' => true,
97
  ],
98
  'list-group' => [
99
+ 'title' => __( 'List Group', 'happy-elementor-addons' ),
100
  'icon' => 'hm hm-list-group',
101
  'is_pro' => true,
102
  ],
103
  'hover-box' => [
104
+ 'title' => __( 'Hover Box', 'happy-elementor-addons' ),
105
  'icon' => 'hm hm-finger-point',
106
  'is_pro' => true,
107
  ],
108
  'countdown' => [
109
+ 'title' => __( 'Countdown', 'happy-elementor-addons' ),
110
  'icon' => 'hm hm-refresh-time',
111
  'is_pro' => true,
112
  ],
113
  'team-carousel' => [
114
+ 'title' => __( 'Team Carousel', 'happy-elementor-addons' ),
115
  'icon' => 'hm hm-team-carousel',
116
  'is_pro' => true,
117
  ],
118
  'logo-carousel' => [
119
+ 'title' => __( 'Logo Carousel', 'happy-elementor-addons' ),
120
  'icon' => 'hm hm-logo-carousel',
121
  'is_pro' => true,
122
  ],
123
  'source-code' => [
124
+ 'title' => __( 'Source Code', 'happy-elementor-addons' ),
125
  'icon' => 'hm hm-code-browser',
126
  'is_pro' => true,
127
  ],
128
  'feature-list' => [
129
+ 'title' => __( 'Feature List', 'happy-elementor-addons' ),
130
  'icon' => 'hm hm-list-2',
131
  'is_pro' => true,
132
  ],
133
  'testimonial-carousel' => [
134
+ 'title' => __( 'Testimonial Carousel', 'happy-elementor-addons' ),
135
  'icon' => 'hm hm-testimonial-carousel',
136
  'is_pro' => true,
137
  ],
138
  'advanced-tabs' => [
139
+ 'title' => __( 'Advanced Tabs', 'happy-elementor-addons' ),
140
  'icon' => 'hm hm-tab',
141
  'is_pro' => true,
142
  ],
143
  'animated-text' => [
144
+ 'title' => __( 'Animated Text', 'happy-elementor-addons' ),
145
  'icon' => 'hm hm-text-animation',
146
  'is_pro' => true,
147
  ],
148
  'timeline' => [
149
+ 'title' => __( 'Timeline', 'happy-elementor-addons' ),
150
  'icon' => 'hm hm-timeline',
151
  'is_pro' => true,
152
  ],
153
  'instagram-feed' => [
154
+ 'title' => __( 'Instagram Feed', 'happy-elementor-addons' ),
155
  'icon' => 'hm hm-instagram',
156
  'is_pro' => true,
157
  ],
158
  'scrolling-image' => [
159
+ 'title' => __( 'Scrolling Image', 'happy-elementor-addons' ),
160
  'icon' => 'hm hm-scrolling-image',
161
  'is_pro' => true,
162
  ],
163
  'toggle' => [
164
+ 'title' => __( 'Advanced Toggle', 'happy-elementor-addons' ),
165
  'icon' => 'hm hm-accordion-vertical',
166
  'is_pro' => true,
167
  ],
168
  'accordion' => [
169
+ 'title' => __( 'Advanced Accordion', 'happy-elementor-addons' ),
170
  'icon' => 'hm hm-accordion-vertical',
171
  'is_pro' => true,
172
  ],
173
  'advanced-pricing-table' => [
174
+ 'title' => __( 'Advanced Pricing Table', 'happy-elementor-addons'),
175
  'icon' => 'hm hm-file-cabinet',
176
  'is_pro' => true,
177
  ],
178
  'advanced-flip-box' => [
179
+ 'title' => __( 'Advanced Flip Box', 'happy-elementor-addons' ),
180
  'icon' => 'hm hm-flip-card1',
181
  'is_pro' => true,
182
  ],
183
+ 'business-hour' => [
184
+ 'title' => __( 'Business Hour', 'happy-elementor-addons' ),
185
+ 'icon' => 'hm hm-hand-watch',
186
+ 'is_pro' => true,
187
+ ],
188
  ];
189
  }
190
 
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.1.0
7
  * Author: HappyMonster
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.1.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.2.0
7
  * Author: HappyMonster
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
+ define( 'HAPPY_ADDONS_VERSION', '2.2.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__ ) );
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
- Version: 2.1.0
4
  Author: HappyMonster
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, obiplabon, sourav926, wedevs
@@ -140,6 +140,13 @@ It's really easy and super simple to install **Happy Elementor Addons** plugin b
140
 
141
  == Changelog ==
142
 
 
 
 
 
 
 
 
143
  = 2.1.0 - 3 October 2019 =
144
 
145
  - New: Widgets control panel link in Elementor Finder
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
+ Version: 2.2.0
4
  Author: HappyMonster
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, obiplabon, sourav926, wedevs
140
 
141
  == Changelog ==
142
 
143
+ = 2.2.0 - 7 October 2019 =
144
+
145
+ - Update: Style copy-paste support improved
146
+ - Fix: Image Grid image alt attribute value issue
147
+ - Fix: Justified Gallery image alt attribute value issue
148
+ - Fix: Skills Bar % sign visibility inconsistency issue
149
+
150
  = 2.1.0 - 3 October 2019 =
151
 
152
  - New: Widgets control panel link in Elementor Finder
vendor/appsero/src/License.php CHANGED
@@ -206,6 +206,11 @@ class License {
206
  }
207
  }
208
 
 
 
 
 
 
209
  /**
210
  * License menu output
211
  */
@@ -249,7 +254,7 @@ class License {
249
  <label>License key</label>
250
  </th>
251
  <td>
252
- <input type="text" class="regular-text code" value="<?php echo $license['key']; ?>"
253
  placeholder="Enter your license key" name="license_key"
254
  <?php echo ( 'Deactive' == $action ) ? 'readonly="readonly"' : ''; ?> />
255
  </td>
206
  }
207
  }
208
 
209
+ protected function make_license_key_unreadable( $key ) {
210
+ $len = strlen( $key );
211
+ return str_pad( substr( $key, 0, $len / 2 ), $len, '*' );
212
+ }
213
+
214
  /**
215
  * License menu output
216
  */
254
  <label>License key</label>
255
  </th>
256
  <td>
257
+ <input type="text" class="regular-text code" value="<?php echo $this->make_license_key_unreadable( $license['key'] ); ?>"
258
  placeholder="Enter your license key" name="license_key"
259
  <?php echo ( 'Deactive' == $action ) ? 'readonly="readonly"' : ''; ?> />
260
  </td>
widgets/card/widget.php CHANGED
@@ -103,6 +103,7 @@ class Card extends Base {
103
  'toggle' => false,
104
  'default' => 'top',
105
  'prefix_class' => 'ha-card--',
 
106
  ]
107
  );
108
 
@@ -135,7 +136,7 @@ class Card extends Base {
135
  $this->add_control(
136
  'title',
137
  [
138
- 'label' => __( 'Title & Description', 'happy-elementor-addons' ),
139
  'label_block' => true,
140
  'type' => Controls_Manager::TEXT,
141
  'default' => __( 'Happy Card Title', 'happy-elementor-addons' ),
@@ -151,7 +152,6 @@ class Card extends Base {
151
  [
152
  'label' => __( 'Description', 'happy-elementor-addons' ),
153
  'description' => ha_get_allowed_html_desc( 'intermediate' ),
154
- 'show_label' => false,
155
  'type' => Controls_Manager::TEXTAREA,
156
  'default' => __( 'Happy card description goes here', 'happy-elementor-addons' ),
157
  'placeholder' => __( 'Type card description', 'happy-elementor-addons' ),
@@ -304,6 +304,7 @@ class Card extends Base {
304
  'default' => 'before',
305
  'toggle' => false,
306
  'condition' => $condition,
 
307
  ]
308
  );
309
 
103
  'toggle' => false,
104
  'default' => 'top',
105
  'prefix_class' => 'ha-card--',
106
+ 'style_transfer' => true,
107
  ]
108
  );
109
 
136
  $this->add_control(
137
  'title',
138
  [
139
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
140
  'label_block' => true,
141
  'type' => Controls_Manager::TEXT,
142
  'default' => __( 'Happy Card Title', 'happy-elementor-addons' ),
152
  [
153
  'label' => __( 'Description', 'happy-elementor-addons' ),
154
  'description' => ha_get_allowed_html_desc( 'intermediate' ),
 
155
  'type' => Controls_Manager::TEXTAREA,
156
  'default' => __( 'Happy card description goes here', 'happy-elementor-addons' ),
157
  'placeholder' => __( 'Type card description', 'happy-elementor-addons' ),
304
  'default' => 'before',
305
  'toggle' => false,
306
  'condition' => $condition,
307
+ 'style_transfer' => true,
308
  ]
309
  );
310
 
widgets/carousel/widget.php CHANGED
@@ -217,6 +217,7 @@ class Carousel extends Base {
217
  'return_value' => 'yes',
218
  'description' => __( 'Best works with odd number of slides (Slides To Show) and loop (Infinite Loop)', 'happy-elementor-addons' ),
219
  'frontend_available' => true,
 
220
  ]
221
  );
222
 
@@ -229,6 +230,7 @@ class Carousel extends Base {
229
  'label_off' => __( 'No', 'happy-elementor-addons' ),
230
  'return_value' => 'yes',
231
  'frontend_available' => true,
 
232
  ]
233
  );
234
 
@@ -245,6 +247,7 @@ class Carousel extends Base {
245
  ],
246
  'default' => 'arrow',
247
  'frontend_available' => true,
 
248
  ]
249
  );
250
 
@@ -265,6 +268,7 @@ class Carousel extends Base {
265
  'tablet_default' => 3,
266
  'mobile_default' => 2,
267
  'frontend_available' => true,
 
268
  ]
269
  );
270
 
217
  'return_value' => 'yes',
218
  'description' => __( 'Best works with odd number of slides (Slides To Show) and loop (Infinite Loop)', 'happy-elementor-addons' ),
219
  'frontend_available' => true,
220
+ 'style_transfer' => true,
221
  ]
222
  );
223
 
230
  'label_off' => __( 'No', 'happy-elementor-addons' ),
231
  'return_value' => 'yes',
232
  'frontend_available' => true,
233
+ 'style_transfer' => true,
234
  ]
235
  );
236
 
247
  ],
248
  'default' => 'arrow',
249
  'frontend_available' => true,
250
+ 'style_transfer' => true,
251
  ]
252
  );
253
 
268
  'tablet_default' => 3,
269
  'mobile_default' => 2,
270
  'frontend_available' => true,
271
+ 'style_transfer' => true,
272
  ]
273
  );
274
 
widgets/dual-button/widget.php CHANGED
@@ -128,7 +128,8 @@ class Dual_Button extends Base {
128
  ],
129
  'toggle' => false,
130
  'default' => 'before',
131
- 'condition' => $condition
 
132
  ]
133
  );
134
 
@@ -185,7 +186,8 @@ class Dual_Button extends Base {
185
  'default' => 'text',
186
  'condition' => [
187
  'button_connector_hide!' => 'yes',
188
- ]
 
189
  ]
190
  );
191
 
@@ -222,6 +224,10 @@ class Dual_Button extends Base {
222
  'label' => __( 'Icon', 'happy-elementor-addons' ),
223
  'type' => Controls_Manager::ICONS,
224
  'fa4compatibility' => 'button_connector_icon',
 
 
 
 
225
  'condition' => [
226
  'button_connector_hide!' => 'yes',
227
  'button_connector_type' => 'icon',
@@ -306,7 +312,8 @@ class Dual_Button extends Base {
306
  ],
307
  'toggle' => false,
308
  'default' => 'after',
309
- 'condition' => $condition
 
310
  ]
311
  );
312
 
@@ -347,7 +354,8 @@ class Dual_Button extends Base {
347
  'tablet_default' => 'queue',
348
  'mobile_default' => 'queue',
349
  'separator' => 'before',
350
- 'prefix_class' => 'ha-dual-button-%s-layout-'
 
351
  ]
352
  );
353
 
128
  ],
129
  'toggle' => false,
130
  'default' => 'before',
131
+ 'condition' => $condition,
132
+ 'style_transfer' => true,
133
  ]
134
  );
135
 
186
  'default' => 'text',
187
  'condition' => [
188
  'button_connector_hide!' => 'yes',
189
+ ],
190
+ 'style_transfer' => true,
191
  ]
192
  );
193
 
224
  'label' => __( 'Icon', 'happy-elementor-addons' ),
225
  'type' => Controls_Manager::ICONS,
226
  'fa4compatibility' => 'button_connector_icon',
227
+ 'default' => [
228
+ 'library' => 'happy-icons',
229
+ 'value' => 'hm hm-happyaddons',
230
+ ],
231
  'condition' => [
232
  'button_connector_hide!' => 'yes',
233
  'button_connector_type' => 'icon',
312
  ],
313
  'toggle' => false,
314
  'default' => 'after',
315
+ 'condition' => $condition,
316
+ 'style_transfer' => true,
317
  ]
318
  );
319
 
354
  'tablet_default' => 'queue',
355
  'mobile_default' => 'queue',
356
  'separator' => 'before',
357
+ 'prefix_class' => 'ha-dual-button-%s-layout-',
358
+ 'style_transfer' => true,
359
  ]
360
  );
361
 
widgets/flip-box/widget.php CHANGED
@@ -79,6 +79,7 @@ class Flip_Box extends Base {
79
  ],
80
  ],
81
  'toggle' => false,
 
82
  ]
83
  );
84
 
@@ -235,6 +236,7 @@ class Flip_Box extends Base {
235
  ],
236
  ],
237
  'toggle' => false,
 
238
  ]
239
  );
240
 
79
  ],
80
  ],
81
  'toggle' => false,
82
+ 'style_transfer' => true,
83
  ]
84
  );
85
 
236
  ],
237
  ],
238
  'toggle' => false,
239
+ 'style_transfer' => true,
240
  ]
241
  );
242
 
widgets/image-grid/widget.php CHANGED
@@ -125,7 +125,8 @@ class Image_Grid extends Base {
125
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
126
  'label_off' => __( 'No', 'happy-elementor-addons' ),
127
  'return_value' => 'yes',
128
- 'description' => __( 'Enable to display filter menu.', 'happy-elementor-addons' )
 
129
  ]
130
  );
131
 
@@ -141,7 +142,8 @@ class Image_Grid extends Base {
141
  'description' => __( 'Enable to display "All" filter in filter menu.', 'happy-elementor-addons' ),
142
  'condition' => [
143
  'show_filter' => 'yes'
144
- ]
 
145
  ]
146
  );
147
 
@@ -178,7 +180,8 @@ class Image_Grid extends Base {
178
  'prefix_class' => 'ha-image-grid--col-',
179
  'selectors' => [
180
  '{{WRAPPER}} .ha-image-grid-item' => 'width: calc(100% / {{VALUE}});',
181
- ]
 
182
  ]
183
  );
184
 
@@ -196,6 +199,7 @@ class Image_Grid extends Base {
196
  'render' => 'none',
197
  'frontend_available' => true,
198
  'prefix_class' => 'ha-image-grid--layout-',
 
199
  ]
200
  );
201
 
@@ -734,15 +738,7 @@ class Image_Grid extends Base {
734
 
735
  <<?php echo $item_html_tag; ?> <?php echo $popup; ?> class="ha-image-grid-item ha-js-popup <?php echo esc_attr( implode( ' ', $filters ) ); ?>">
736
  <div class="ha-image-grid-inner">
737
- <?php echo wp_get_attachment_image(
738
- $id,
739
- $settings['thumbnail_size'],
740
- false,
741
- [
742
- 'alt' => wp_get_attachment_caption( $id ),
743
- 'class' => 'elementor-animation-' . esc_attr( $settings['image_hover_animation'] )
744
- ]
745
- ); ?>
746
  </div>
747
  </<?php echo $item_html_tag; ?>>
748
 
125
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
126
  'label_off' => __( 'No', 'happy-elementor-addons' ),
127
  'return_value' => 'yes',
128
+ 'description' => __( 'Enable to display filter menu.', 'happy-elementor-addons' ),
129
+ 'style_transfer' => true,
130
  ]
131
  );
132
 
142
  'description' => __( 'Enable to display "All" filter in filter menu.', 'happy-elementor-addons' ),
143
  'condition' => [
144
  'show_filter' => 'yes'
145
+ ],
146
+ 'style_transfer' => true,
147
  ]
148
  );
149
 
180
  'prefix_class' => 'ha-image-grid--col-',
181
  'selectors' => [
182
  '{{WRAPPER}} .ha-image-grid-item' => 'width: calc(100% / {{VALUE}});',
183
+ ],
184
+ 'style_transfer' => true,
185
  ]
186
  );
187
 
199
  'render' => 'none',
200
  'frontend_available' => true,
201
  'prefix_class' => 'ha-image-grid--layout-',
202
+ 'style_transfer' => true,
203
  ]
204
  );
205
 
738
 
739
  <<?php echo $item_html_tag; ?> <?php echo $popup; ?> class="ha-image-grid-item ha-js-popup <?php echo esc_attr( implode( ' ', $filters ) ); ?>">
740
  <div class="ha-image-grid-inner">
741
+ <?php echo wp_get_attachment_image( $id, $settings['thumbnail_size'], false, [ 'class' => 'elementor-animation-' . esc_attr( $settings['image_hover_animation'] ) ] ); ?>
 
 
 
 
 
 
 
 
742
  </div>
743
  </<?php echo $item_html_tag; ?>>
744
 
widgets/infobox/widget.php CHANGED
@@ -77,6 +77,7 @@ class InfoBox extends Base {
77
  ],
78
  'default' => 'icon',
79
  'toggle' => false,
 
80
  ]
81
  );
82
 
@@ -162,7 +163,7 @@ class InfoBox extends Base {
162
  $this->add_control(
163
  'title',
164
  [
165
- 'label' => __( 'Title & Description', 'happy-elementor-addons' ),
166
  'label_block' => true,
167
  'type' => Controls_Manager::TEXT,
168
  'default' => __( 'Happy Info Box Title', 'happy-elementor-addons' ),
@@ -177,7 +178,6 @@ class InfoBox extends Base {
177
  'description',
178
  [
179
  'label' => __( 'Description', 'happy-elementor-addons' ),
180
- 'show_label' => false,
181
  'description' => ha_get_allowed_html_desc( 'intermediate' ),
182
  'type' => Controls_Manager::TEXTAREA,
183
  'default' => __( 'Happy info box description goes here', 'happy-elementor-addons' ),
@@ -331,6 +331,7 @@ class InfoBox extends Base {
331
  'default' => 'after',
332
  'toggle' => false,
333
  'condition' => $condition,
 
334
  ]
335
  );
336
 
77
  ],
78
  'default' => 'icon',
79
  'toggle' => false,
80
+ 'style_transfer' => true,
81
  ]
82
  );
83
 
163
  $this->add_control(
164
  'title',
165
  [
166
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
167
  'label_block' => true,
168
  'type' => Controls_Manager::TEXT,
169
  'default' => __( 'Happy Info Box Title', 'happy-elementor-addons' ),
178
  'description',
179
  [
180
  'label' => __( 'Description', 'happy-elementor-addons' ),
 
181
  'description' => ha_get_allowed_html_desc( 'intermediate' ),
182
  'type' => Controls_Manager::TEXTAREA,
183
  'default' => __( 'Happy info box description goes here', 'happy-elementor-addons' ),
331
  'default' => 'after',
332
  'toggle' => false,
333
  'condition' => $condition,
334
+ 'style_transfer' => true,
335
  ]
336
  );
337
 
widgets/justified-gallery/widget.php CHANGED
@@ -14,7 +14,6 @@ use Elementor\Group_Control_Box_Shadow;
14
  use Elementor\Group_Control_Image_Size;
15
  use Elementor\Group_Control_Typography;
16
  use Elementor\Scheme_Typography;
17
- use Elementor\Utils;
18
 
19
  defined( 'ABSPATH' ) || die();
20
 
@@ -126,7 +125,8 @@ class Justified_Gallery extends Base {
126
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
127
  'label_off' => __( 'No', 'happy-elementor-addons' ),
128
  'return_value' => 'yes',
129
- 'description' => __( 'Enable to display filter menu.', 'happy-elementor-addons' )
 
130
  ]
131
  );
132
 
@@ -142,7 +142,8 @@ class Justified_Gallery extends Base {
142
  'description' => __( 'Enable to display "All" filter in filter menu.', 'happy-elementor-addons' ),
143
  'condition' => [
144
  'show_filter' => 'yes'
145
- ]
 
146
  ]
147
  );
148
 
@@ -170,7 +171,8 @@ class Justified_Gallery extends Base {
170
  'label_off' => __( 'No', 'happy-elementor-addons' ),
171
  'return_value' => 'yes',
172
  'separator' => 'before',
173
- 'description' => __( 'Make sure to add image caption.', 'happy-elementor-addons' )
 
174
  ]
175
  );
176
 
@@ -811,12 +813,11 @@ class Justified_Gallery extends Base {
811
 
812
  <div <?php echo $this->get_render_attribute_string( 'container' ); ?>>
813
  <?php foreach ( $gallery['items'] as $id => $filters ) :
814
- $alt = esc_attr( wp_get_attachment_caption( $id ) );
815
- $caption = $settings['show_caption'] ? $alt : '';
816
  $popup = $has_popup ? sprintf( 'href="%s"', esc_url( wp_get_attachment_image_url( $id, $settings['popup_image_size'] ) ) ) : '';
817
  ?>
818
  <<?php echo $item_html_tag; ?> <?php echo $popup; ?> class="ha-justified-gallery-item ha-js-popup <?php echo esc_attr( implode( ' ', $filters ) ); ?>" title="<?php echo $caption; ?>">
819
- <?php echo wp_get_attachment_image( $id, $settings['thumbnail_size'], false, [ 'alt' => $alt, 'class' => 'elementor-animation-' . esc_attr( $settings['image_hover_animation'] ) ] ); ?>
820
  </<?php echo $item_html_tag; ?>>
821
  <?php endforeach; ?>
822
  </div>
14
  use Elementor\Group_Control_Image_Size;
15
  use Elementor\Group_Control_Typography;
16
  use Elementor\Scheme_Typography;
 
17
 
18
  defined( 'ABSPATH' ) || die();
19
 
125
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
126
  'label_off' => __( 'No', 'happy-elementor-addons' ),
127
  'return_value' => 'yes',
128
+ 'description' => __( 'Enable to display filter menu.', 'happy-elementor-addons' ),
129
+ 'style_transfer' => true,
130
  ]
131
  );
132
 
142
  'description' => __( 'Enable to display "All" filter in filter menu.', 'happy-elementor-addons' ),
143
  'condition' => [
144
  'show_filter' => 'yes'
145
+ ],
146
+ 'style_transfer' => true,
147
  ]
148
  );
149
 
171
  'label_off' => __( 'No', 'happy-elementor-addons' ),
172
  'return_value' => 'yes',
173
  'separator' => 'before',
174
+ 'description' => __( 'Make sure to add image caption.', 'happy-elementor-addons' ),
175
+ 'style_transfer' => true,
176
  ]
177
  );
178
 
813
 
814
  <div <?php echo $this->get_render_attribute_string( 'container' ); ?>>
815
  <?php foreach ( $gallery['items'] as $id => $filters ) :
816
+ $caption = $settings['show_caption'] ? esc_attr( wp_get_attachment_caption( $id ) ) : '';
 
817
  $popup = $has_popup ? sprintf( 'href="%s"', esc_url( wp_get_attachment_image_url( $id, $settings['popup_image_size'] ) ) ) : '';
818
  ?>
819
  <<?php echo $item_html_tag; ?> <?php echo $popup; ?> class="ha-justified-gallery-item ha-js-popup <?php echo esc_attr( implode( ' ', $filters ) ); ?>" title="<?php echo $caption; ?>">
820
+ <?php echo wp_get_attachment_image( $id, $settings['thumbnail_size'], false, ['class' => 'elementor-animation-' . esc_attr( $settings['image_hover_animation'] ) ] ); ?>
821
  </<?php echo $item_html_tag; ?>>
822
  <?php endforeach; ?>
823
  </div>
widgets/logo-grid/widget.php CHANGED
@@ -139,7 +139,8 @@ class Logo_Grid extends Base {
139
  'tictactoe' => __( 'Tic Tac Toe', 'happy-elementor-addons' ),
140
  ],
141
  'default' => 'box',
142
- 'prefix_class' => 'ha-logo-grid--'
 
143
  ]
144
  );
145
 
@@ -159,6 +160,7 @@ class Logo_Grid extends Base {
159
  'tablet_default' => 2,
160
  'mobile_default' => 2,
161
  'prefix_class' => 'ha-logo-grid--col-%s',
 
162
  ]
163
  );
164
 
139
  'tictactoe' => __( 'Tic Tac Toe', 'happy-elementor-addons' ),
140
  ],
141
  'default' => 'box',
142
+ 'prefix_class' => 'ha-logo-grid--',
143
+ 'style_transfer' => true,
144
  ]
145
  );
146
 
160
  'tablet_default' => 2,
161
  'mobile_default' => 2,
162
  'prefix_class' => 'ha-logo-grid--col-%s',
163
+ 'style_transfer' => true,
164
  ]
165
  );
166
 
widgets/member/widget.php CHANGED
@@ -299,6 +299,7 @@ class Member extends Base {
299
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
300
  'label_off' => __( 'No', 'happy-elementor-addons' ),
301
  'return_value' => 'yes',
 
302
  ]
303
  );
304
 
@@ -323,7 +324,8 @@ class Member extends Base {
323
  'selectors' => [
324
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}' => 'color: {{VALUE}}',
325
  ],
326
- 'condition' => ['customize' => 'yes']
 
327
  ]
328
  );
329
 
@@ -335,7 +337,8 @@ class Member extends Base {
335
  'selectors' => [
336
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}' => 'background-color: {{VALUE}}',
337
  ],
338
- 'condition' => ['customize' => 'yes']
 
339
  ]
340
  );
341
 
@@ -355,7 +358,8 @@ class Member extends Base {
355
  'selectors' => [
356
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:hover, {{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:focus' => 'color: {{VALUE}}',
357
  ],
358
- 'condition' => ['customize' => 'yes']
 
359
  ]
360
  );
361
 
@@ -367,7 +371,8 @@ class Member extends Base {
367
  'selectors' => [
368
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:hover, {{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:focus' => 'background-color: {{VALUE}}',
369
  ],
370
- 'condition' => ['customize' => 'yes']
 
371
  ]
372
  );
373
 
@@ -379,7 +384,8 @@ class Member extends Base {
379
  'selectors' => [
380
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:hover, {{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:focus' => 'border-color: {{VALUE}}',
381
  ],
382
- 'condition' => ['customize' => 'yes']
 
383
  ]
384
  );
385
 
@@ -406,7 +412,7 @@ class Member extends Base {
406
  'link' => ['url' => 'https://linkedin.com/'],
407
  'name' => 'linkedin'
408
  ]
409
- ]
410
  ]
411
  );
412
 
299
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
300
  'label_off' => __( 'No', 'happy-elementor-addons' ),
301
  'return_value' => 'yes',
302
+ 'style_transfer' => true,
303
  ]
304
  );
305
 
324
  'selectors' => [
325
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}' => 'color: {{VALUE}}',
326
  ],
327
+ 'condition' => ['customize' => 'yes'],
328
+ 'style_transfer' => true,
329
  ]
330
  );
331
 
337
  'selectors' => [
338
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}' => 'background-color: {{VALUE}}',
339
  ],
340
+ 'condition' => ['customize' => 'yes'],
341
+ 'style_transfer' => true,
342
  ]
343
  );
344
 
358
  'selectors' => [
359
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:hover, {{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:focus' => 'color: {{VALUE}}',
360
  ],
361
+ 'condition' => ['customize' => 'yes'],
362
+ 'style_transfer' => true,
363
  ]
364
  );
365
 
371
  'selectors' => [
372
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:hover, {{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:focus' => 'background-color: {{VALUE}}',
373
  ],
374
+ 'condition' => ['customize' => 'yes'],
375
+ 'style_transfer' => true,
376
  ]
377
  );
378
 
384
  'selectors' => [
385
  '{{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:hover, {{WRAPPER}} .ha-member-links > {{CURRENT_ITEM}}:focus' => 'border-color: {{VALUE}}',
386
  ],
387
+ 'condition' => ['customize' => 'yes'],
388
+ 'style_transfer' => true,
389
  ]
390
  );
391
 
412
  'link' => ['url' => 'https://linkedin.com/'],
413
  'name' => 'linkedin'
414
  ]
415
+ ],
416
  ]
417
  );
418
 
widgets/pricing-table/widget.php CHANGED
@@ -43,7 +43,7 @@ class Pricing_Table extends Base {
43
  }
44
 
45
  public function get_keywords() {
46
- return [ 'pricing', 'table', 'package', 'product', 'plan' ];
47
  }
48
 
49
  protected function register_content_controls() {
@@ -60,7 +60,7 @@ class Pricing_Table extends Base {
60
  [
61
  'label' => __( 'Title', 'happy-elementor-addons' ),
62
  'type' => Controls_Manager::TEXT,
63
- 'label_block' => false,
64
  'default' => __( 'Basic', 'happy-elementor-addons' ),
65
  'dynamic' => [
66
  'active' => true
@@ -164,6 +164,7 @@ class Pricing_Table extends Base {
164
  'type' => Controls_Manager::TEXT,
165
  'default' => __( 'Features', 'happy-elementor-addons' ),
166
  'separator' => 'after',
 
167
  'dynamic' => [
168
  'active' => true
169
  ]
@@ -268,7 +269,7 @@ class Pricing_Table extends Base {
268
  'type' => Controls_Manager::TEXT,
269
  'default' => __( 'Subscribe', 'happy-elementor-addons' ),
270
  'placeholder' => __( 'Type button text here', 'happy-elementor-addons' ),
271
- 'label_block' => false,
272
  'dynamic' => [
273
  'active' => true
274
  ]
43
  }
44
 
45
  public function get_keywords() {
46
+ return [ 'pricing', 'price', 'table', 'package', 'product', 'plan' ];
47
  }
48
 
49
  protected function register_content_controls() {
60
  [
61
  'label' => __( 'Title', 'happy-elementor-addons' ),
62
  'type' => Controls_Manager::TEXT,
63
+ 'label_block' => true,
64
  'default' => __( 'Basic', 'happy-elementor-addons' ),
65
  'dynamic' => [
66
  'active' => true
164
  'type' => Controls_Manager::TEXT,
165
  'default' => __( 'Features', 'happy-elementor-addons' ),
166
  'separator' => 'after',
167
+ 'label_block' => true,
168
  'dynamic' => [
169
  'active' => true
170
  ]
269
  'type' => Controls_Manager::TEXT,
270
  'default' => __( 'Subscribe', 'happy-elementor-addons' ),
271
  'placeholder' => __( 'Type button text here', 'happy-elementor-addons' ),
272
+ 'label_block' => true,
273
  'dynamic' => [
274
  'active' => true
275
  ]
widgets/review/widget.php CHANGED
@@ -188,7 +188,8 @@ class Review extends Base {
188
  ],
189
  'default' => 'top',
190
  'toggle' => false,
191
- 'prefix_class' => 'ha-review--'
 
192
  ]
193
  );
194
 
@@ -196,6 +197,7 @@ class Review extends Base {
196
  'title',
197
  [
198
  'label' => __( 'Name', 'happy-elementor-addons' ),
 
199
  'type' => Controls_Manager::TEXT,
200
  'default' => 'Happy Reviewer',
201
  'placeholder' => __( 'Type Reviewer Name', 'happy-elementor-addons' ),
@@ -210,6 +212,7 @@ class Review extends Base {
210
  'job_title',
211
  [
212
  'label' => __( 'Job Title', 'happy-elementor-addons' ),
 
213
  'type' => Controls_Manager::TEXT,
214
  'default' => __( 'Happy Officer', 'happy-elementor-addons' ),
215
  'placeholder' => __( 'Type Reviewer Job Title', 'happy-elementor-addons' ),
188
  ],
189
  'default' => 'top',
190
  'toggle' => false,
191
+ 'prefix_class' => 'ha-review--',
192
+ 'style_transfer' => true,
193
  ]
194
  );
195
 
197
  'title',
198
  [
199
  'label' => __( 'Name', 'happy-elementor-addons' ),
200
+ 'label_block' => true,
201
  'type' => Controls_Manager::TEXT,
202
  'default' => 'Happy Reviewer',
203
  'placeholder' => __( 'Type Reviewer Name', 'happy-elementor-addons' ),
212
  'job_title',
213
  [
214
  'label' => __( 'Job Title', 'happy-elementor-addons' ),
215
+ 'label_block' => true,
216
  'type' => Controls_Manager::TEXT,
217
  'default' => __( 'Happy Officer', 'happy-elementor-addons' ),
218
  'placeholder' => __( 'Type Reviewer Job Title', 'happy-elementor-addons' ),
widgets/skills/widget.php CHANGED
@@ -93,7 +93,8 @@ class Skills extends Base {
93
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
94
  'label_off' => __( 'No', 'happy-elementor-addons' ),
95
  'return_value' => 'yes',
96
- 'description' => __( 'You can customize this skill bar color from here or customize from Style tab', 'happy-elementor-addons' )
 
97
  ]
98
  );
99
 
@@ -105,7 +106,8 @@ class Skills extends Base {
105
  'selectors' => [
106
  '{{WRAPPER}} {{CURRENT_ITEM}} .ha-skill-info' => 'color: {{VALUE}};',
107
  ],
108
- 'condition' => ['customize' => 'yes']
 
109
  ]
110
  );
111
 
@@ -117,7 +119,8 @@ class Skills extends Base {
117
  'selectors' => [
118
  '{{WRAPPER}} {{CURRENT_ITEM}} .ha-skill-level' => 'background-color: {{VALUE}};',
119
  ],
120
- 'condition' => ['customize' => 'yes']
 
121
  ]
122
  );
123
 
@@ -129,7 +132,8 @@ class Skills extends Base {
129
  'selectors' => [
130
  '{{WRAPPER}} {{CURRENT_ITEM}}.ha-skill' => 'background-color: {{VALUE}};',
131
  ],
132
- 'condition' => ['customize' => 'yes']
 
133
  ]
134
  );
135
 
93
  'label_on' => __( 'Yes', 'happy-elementor-addons' ),
94
  'label_off' => __( 'No', 'happy-elementor-addons' ),
95
  'return_value' => 'yes',
96
+ 'description' => __( 'You can customize this skill bar color from here or customize from Style tab', 'happy-elementor-addons' ),
97
+ 'style_transfer' => true,
98
  ]
99
  );
100
 
106
  'selectors' => [
107
  '{{WRAPPER}} {{CURRENT_ITEM}} .ha-skill-info' => 'color: {{VALUE}};',
108
  ],
109
+ 'condition' => ['customize' => 'yes'],
110
+ 'style_transfer' => true,
111
  ]
112
  );
113
 
119
  'selectors' => [
120
  '{{WRAPPER}} {{CURRENT_ITEM}} .ha-skill-level' => 'background-color: {{VALUE}};',
121
  ],
122
+ 'condition' => ['customize' => 'yes'],
123
+ 'style_transfer' => true,
124
  ]
125
  );
126
 
132
  'selectors' => [
133
  '{{WRAPPER}} {{CURRENT_ITEM}}.ha-skill' => 'background-color: {{VALUE}};',
134
  ],
135
+ 'condition' => ['customize' => 'yes'],
136
+ 'style_transfer' => true,
137
  ]
138
  );
139
 
widgets/slider/widget.php CHANGED
@@ -205,7 +205,6 @@ class Slider extends Base {
205
  ]
206
  );
207
 
208
-
209
  $this->add_control(
210
  'vertical',
211
  [
@@ -215,6 +214,7 @@ class Slider extends Base {
215
  'label_off' => __( 'No', 'happy-elementor-addons' ),
216
  'return_value' => 'yes',
217
  'frontend_available' => true,
 
218
  ]
219
  );
220
 
@@ -231,6 +231,7 @@ class Slider extends Base {
231
  ],
232
  'default' => 'arrow',
233
  'frontend_available' => true,
 
234
  ]
235
  );
236
 
205
  ]
206
  );
207
 
 
208
  $this->add_control(
209
  'vertical',
210
  [
214
  'label_off' => __( 'No', 'happy-elementor-addons' ),
215
  'return_value' => 'yes',
216
  'frontend_available' => true,
217
+ 'style_transfer' => true,
218
  ]
219
  );
220
 
231
  ],
232
  'default' => 'arrow',
233
  'frontend_available' => true,
234
+ 'style_transfer' => true,
235
  ]
236
  );
237