Version Description
- New: Justified Grid Widget
- New: Logo Grid Widget
- New: Number Widget
Download this release
Release Info
Developer | thehappymonster |
Plugin | Happy Addons for Elementor (Mega Menu, Post Grid, Woocommerce Product Grid, Table, Event Calendar, Slider Elementor Widget) |
Version | 1.2.0 |
Comparing to | |
See all releases |
Code changes from version 1.1.1 to 1.2.0
- assets/admin/css/dashboard.css +2 -2
- assets/css/main.css +805 -2
- assets/css/main.min.css +1 -1
- assets/js/happy-addons.js +50 -22
- assets/js/happy-addons.min.js +1 -1
- assets/vendor/justifiedGallery/css/justifiedGallery.min.css +102 -0
- assets/vendor/justifiedGallery/js/jquery.justifiedGallery.min.js +8 -0
- base.php +5 -4
- base/widget-base.php +1 -10
- classes/asset-manager.php +67 -5
- classes/class.communicator.php +109 -0
- classes/dashboard.php +0 -38
- classes/widget-manager.php +13 -1
- inc/admin-templates/save.php +0 -8
- inc/admin-templates/widgets.php +0 -25
- inc/functions.php +4 -0
- plugin.php +2 -2
- readme.txt +18 -7
- widgets/card/widget.php +1 -1
- widgets/image-compare/widget.php +2 -2
- widgets/infobox/widget.php +1 -1
- widgets/justified-gallery/widget.php +659 -0
- widgets/logo-grid/widget.php +433 -0
- widgets/number/widget.php +351 -0
- widgets/review/widget.php +1 -1
- widgets/testimonial/widget.php +92 -100
assets/admin/css/dashboard.css
CHANGED
@@ -88,8 +88,8 @@
|
|
88 |
transform: translateX(4px);
|
89 |
}
|
90 |
.ha-switch input:checked + .ha-slider:before {
|
91 |
-
-webkit-transform: translateX(
|
92 |
-
-ms-transform: translateX(
|
93 |
transform: translateX(22px);
|
94 |
}
|
95 |
|
88 |
transform: translateX(4px);
|
89 |
}
|
90 |
.ha-switch input:checked + .ha-slider:before {
|
91 |
+
-webkit-transform: translateX(22px);
|
92 |
+
-ms-transform: translateX(22px);
|
93 |
transform: translateX(22px);
|
94 |
}
|
95 |
|
assets/css/main.css
CHANGED
@@ -30,12 +30,15 @@
|
|
30 |
}
|
31 |
|
32 |
.ha-cf:before,
|
33 |
-
.ha-
|
|
|
|
|
34 |
display: table;
|
35 |
content: " ";
|
36 |
}
|
37 |
|
38 |
-
.ha-cf:after
|
|
|
39 |
clear: both;
|
40 |
}
|
41 |
|
@@ -532,6 +535,283 @@ span .ha-review-ratting--star:before,
|
|
532 |
border-radius: inherit;
|
533 |
}
|
534 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
535 |
.ha-skills > .elementor-widget-container {
|
536 |
padding-top: 1px;
|
537 |
}
|
@@ -612,6 +892,491 @@ span .ha-review-ratting--star:before,
|
|
612 |
text-decoration: none;
|
613 |
}
|
614 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
615 |
.ha-dual-button > .elementor-widget-container {
|
616 |
display: -webkit-box;
|
617 |
display: -webkit-flex;
|
@@ -708,6 +1473,7 @@ span .ha-review-ratting--star:before,
|
|
708 |
bottom: -14px;
|
709 |
color: #fff;
|
710 |
content: "\e911";
|
|
|
711 |
font-size: 36px;
|
712 |
font-family: "Happy Icons";
|
713 |
-webkit-transform: rotate(-180deg);
|
@@ -804,3 +1570,40 @@ span .ha-review-ratting--star:before,
|
|
804 |
.ha-testimonial--center {
|
805 |
text-align: center;
|
806 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
}
|
31 |
|
32 |
.ha-cf:before,
|
33 |
+
.ha-logo-grid-wrapper:before,
|
34 |
+
.ha-cf:after,
|
35 |
+
.ha-logo-grid-wrapper:after {
|
36 |
display: table;
|
37 |
content: " ";
|
38 |
}
|
39 |
|
40 |
+
.ha-cf:after,
|
41 |
+
.ha-logo-grid-wrapper:after {
|
42 |
clear: both;
|
43 |
}
|
44 |
|
535 |
border-radius: inherit;
|
536 |
}
|
537 |
|
538 |
+
.ha-gallery-filter {
|
539 |
+
margin: 0 10px 2rem;
|
540 |
+
padding: 0;
|
541 |
+
list-style: none;
|
542 |
+
}
|
543 |
+
.ha-gallery-filter > li {
|
544 |
+
display: inline-block;
|
545 |
+
margin-bottom: 10px;
|
546 |
+
}
|
547 |
+
.ha-gallery-filter > li:not(:last-child) {
|
548 |
+
margin-right: 10px;
|
549 |
+
}
|
550 |
+
.ha-gallery-filter > li > button {
|
551 |
+
display: block;
|
552 |
+
padding: 10px 25px;
|
553 |
+
border: 2px solid #562dd4;
|
554 |
+
border-radius: .25rem;
|
555 |
+
background-color: transparent;
|
556 |
+
color: #562dd4;
|
557 |
+
text-transform: uppercase;
|
558 |
+
font-size: 14px;
|
559 |
+
cursor: pointer;
|
560 |
+
-webkit-transition: all .3s;
|
561 |
+
transition: all .3s;
|
562 |
+
}
|
563 |
+
.ha-gallery-filter > li > button:hover,
|
564 |
+
.ha-gallery-filter > li > button:focus {
|
565 |
+
outline: 0;
|
566 |
+
background-color: #562dd4;
|
567 |
+
color: #fff;
|
568 |
+
}
|
569 |
+
.ha-gallery-filter > .ha-filter-active > button {
|
570 |
+
background-color: #562dd4;
|
571 |
+
color: #fff;
|
572 |
+
}
|
573 |
+
|
574 |
+
.ha-image-grid-item {
|
575 |
+
float: left;
|
576 |
+
}
|
577 |
+
|
578 |
+
.ha-image-grid-link {
|
579 |
+
position: relative;
|
580 |
+
display: block;
|
581 |
+
overflow: hidden;
|
582 |
+
margin: 10px;
|
583 |
+
text-decoration: none;
|
584 |
+
}
|
585 |
+
.ha-image-grid-link:focus {
|
586 |
+
outline: none;
|
587 |
+
}
|
588 |
+
.ha-image-grid-link img {
|
589 |
+
vertical-align: bottom;
|
590 |
+
-webkit-transition: -webkit-transform .25s linear;
|
591 |
+
transition: -webkit-transform .25s linear;
|
592 |
+
transition: transform .25s linear;
|
593 |
+
transition: transform .25s linear, -webkit-transform .25s linear;
|
594 |
+
}
|
595 |
+
.ha-image-grid-link:hover img {
|
596 |
+
-webkit-transform: scale(1.25);
|
597 |
+
-ms-transform: scale(1.25);
|
598 |
+
transform: scale(1.25);
|
599 |
+
}
|
600 |
+
.ha-image-grid-link:hover .ha-image-grid-overlay {
|
601 |
+
opacity: 1;
|
602 |
+
}
|
603 |
+
.ha-image-grid-link:hover .ha-image-grid-content {
|
604 |
+
opacity: 1;
|
605 |
+
}
|
606 |
+
.ha-image-grid-link:hover .ha-image-grid-content:before {
|
607 |
+
width: 80px;
|
608 |
+
}
|
609 |
+
|
610 |
+
.ha-image-grid-overlay {
|
611 |
+
position: absolute;
|
612 |
+
top: 0;
|
613 |
+
right: 0;
|
614 |
+
bottom: 0;
|
615 |
+
left: 0;
|
616 |
+
padding: 30px;
|
617 |
+
background-color: rgba(0, 0, 0, .8);
|
618 |
+
opacity: 0;
|
619 |
+
-webkit-transition: opacity .5s;
|
620 |
+
transition: opacity .5s;
|
621 |
+
}
|
622 |
+
|
623 |
+
.ha-image-grid-content {
|
624 |
+
position: absolute;
|
625 |
+
width: 100%;
|
626 |
+
color: #fff;
|
627 |
+
font-size: 16px;
|
628 |
+
opacity: 0;
|
629 |
+
-webkit-transition: opacity .5s;
|
630 |
+
transition: opacity .5s;
|
631 |
+
}
|
632 |
+
.ha-image-grid-content:before {
|
633 |
+
position: absolute;
|
634 |
+
top: -15px;
|
635 |
+
width: 35px;
|
636 |
+
height: 1px;
|
637 |
+
background: #fe413b;
|
638 |
+
content: "";
|
639 |
+
-webkit-transition: all .3s;
|
640 |
+
transition: all .3s;
|
641 |
+
}
|
642 |
+
.ha-image-grid-content--topleft {
|
643 |
+
top: 2.9rem;
|
644 |
+
left: 2rem;
|
645 |
+
text-align: left;
|
646 |
+
}
|
647 |
+
.ha-image-grid-content--topleft:before {
|
648 |
+
left: 0;
|
649 |
+
}
|
650 |
+
.ha-image-grid-content--topcenter {
|
651 |
+
top: 2.9rem;
|
652 |
+
left: 50%;
|
653 |
+
text-align: center;
|
654 |
+
-webkit-transform: translateX(-50%);
|
655 |
+
-ms-transform: translateX(-50%);
|
656 |
+
transform: translateX(-50%);
|
657 |
+
}
|
658 |
+
.ha-image-grid-content--topcenter:before {
|
659 |
+
left: 50%;
|
660 |
+
-webkit-transform: translateX(-50%);
|
661 |
+
-ms-transform: translateX(-50%);
|
662 |
+
transform: translateX(-50%);
|
663 |
+
}
|
664 |
+
.ha-image-grid-content--topright {
|
665 |
+
top: 2.9rem;
|
666 |
+
right: 2rem;
|
667 |
+
text-align: right;
|
668 |
+
}
|
669 |
+
.ha-image-grid-content--topright:before {
|
670 |
+
right: 0;
|
671 |
+
}
|
672 |
+
.ha-image-grid-content--bottomleft {
|
673 |
+
bottom: 2rem;
|
674 |
+
left: 2rem;
|
675 |
+
text-align: left;
|
676 |
+
}
|
677 |
+
.ha-image-grid-content--bottomleft:before {
|
678 |
+
left: 0;
|
679 |
+
}
|
680 |
+
.ha-image-grid-content--bottomcenter {
|
681 |
+
bottom: 2rem;
|
682 |
+
left: 50%;
|
683 |
+
text-align: center;
|
684 |
+
-webkit-transform: translateX(-50%);
|
685 |
+
-ms-transform: translateX(-50%);
|
686 |
+
transform: translateX(-50%);
|
687 |
+
}
|
688 |
+
.ha-image-grid-content--bottomcenter:before {
|
689 |
+
left: 50%;
|
690 |
+
-webkit-transform: translateX(-50%);
|
691 |
+
-ms-transform: translateX(-50%);
|
692 |
+
transform: translateX(-50%);
|
693 |
+
}
|
694 |
+
.ha-image-grid-content--bottomright {
|
695 |
+
right: 2rem;
|
696 |
+
bottom: 2rem;
|
697 |
+
text-align: right;
|
698 |
+
}
|
699 |
+
.ha-image-grid-content--bottomright:before {
|
700 |
+
right: 0;
|
701 |
+
}
|
702 |
+
.ha-image-grid-content--middleleft {
|
703 |
+
top: 50%;
|
704 |
+
left: 2rem;
|
705 |
+
text-align: left;
|
706 |
+
-webkit-transform: translateY(-50%);
|
707 |
+
-ms-transform: translateY(-50%);
|
708 |
+
transform: translateY(-50%);
|
709 |
+
}
|
710 |
+
.ha-image-grid-content--middleleft:before {
|
711 |
+
left: 0;
|
712 |
+
}
|
713 |
+
.ha-image-grid-content--middlecenter {
|
714 |
+
top: 50%;
|
715 |
+
left: 50%;
|
716 |
+
text-align: center;
|
717 |
+
-webkit-transform: translateX(-50%);
|
718 |
+
-ms-transform: translateX(-50%);
|
719 |
+
transform: translateX(-50%);
|
720 |
+
}
|
721 |
+
.ha-image-grid-content--middlecenter:before {
|
722 |
+
left: 50%;
|
723 |
+
-webkit-transform: translateX(-50%);
|
724 |
+
-ms-transform: translateX(-50%);
|
725 |
+
transform: translateX(-50%);
|
726 |
+
}
|
727 |
+
.ha-image-grid-content--middleright {
|
728 |
+
top: 50%;
|
729 |
+
right: 2rem;
|
730 |
+
text-align: right;
|
731 |
+
-webkit-transform: translateY(-50%);
|
732 |
+
-ms-transform: translateY(-50%);
|
733 |
+
transform: translateY(-50%);
|
734 |
+
}
|
735 |
+
.ha-image-grid-content--middleright:before {
|
736 |
+
right: 0;
|
737 |
+
}
|
738 |
+
|
739 |
+
.ha-image-grid--col-2 .ha-image-grid-item {
|
740 |
+
width: 50%;
|
741 |
+
}
|
742 |
+
|
743 |
+
.ha-image-grid--col-3 .ha-image-grid-item {
|
744 |
+
width: 33.33%;
|
745 |
+
}
|
746 |
+
|
747 |
+
.ha-image-grid--col-4 .ha-image-grid-item {
|
748 |
+
width: 25%;
|
749 |
+
}
|
750 |
+
|
751 |
+
.ha-image-grid--col-5 .ha-image-grid-item {
|
752 |
+
width: 20%;
|
753 |
+
}
|
754 |
+
|
755 |
+
.ha-justified-gallery-item {
|
756 |
+
border-radius: 6px;
|
757 |
+
-webkit-transition: all .3s;
|
758 |
+
transition: all .3s;
|
759 |
+
}
|
760 |
+
.ha-justified-gallery-item > img {
|
761 |
+
width: 100%;
|
762 |
+
-webkit-transition: all .25s !important;
|
763 |
+
transition: all .25s !important;
|
764 |
+
}
|
765 |
+
.ha-justified-gallery-item:hover > img {
|
766 |
+
-webkit-transform: scale(1.25);
|
767 |
+
-ms-transform: scale(1.25);
|
768 |
+
transform: scale(1.25);
|
769 |
+
}
|
770 |
+
|
771 |
+
.justified-gallery > a > .caption,
|
772 |
+
.justified-gallery > div > .caption,
|
773 |
+
.justified-gallery > figure > .caption {
|
774 |
+
padding: 10px;
|
775 |
+
}
|
776 |
+
|
777 |
+
.justified-gallery > a > .caption,
|
778 |
+
.justified-gallery > div > .caption,
|
779 |
+
.justified-gallery > figure > .caption {
|
780 |
+
bottom: -100px !important;
|
781 |
+
-webkit-transition: all .25s !important;
|
782 |
+
transition: all .25s !important;
|
783 |
+
-webkit-animation: haSmoothReveal .3s forwards;
|
784 |
+
animation: haSmoothReveal .3s forwards;
|
785 |
+
}
|
786 |
+
|
787 |
+
.justified-gallery > a > .caption.caption-visible,
|
788 |
+
.justified-gallery > div > .caption.caption-visible,
|
789 |
+
.justified-gallery > figure > .caption.caption-visible {
|
790 |
+
bottom: 0 !important;
|
791 |
+
}
|
792 |
+
|
793 |
+
@-webkit-keyframes haSmoothReveal {
|
794 |
+
0% {
|
795 |
+
-webkit-transform: translateY(100px);
|
796 |
+
transform: translateY(100px);
|
797 |
+
}
|
798 |
+
to {
|
799 |
+
-webkit-transform: translateY(0);
|
800 |
+
transform: translateY(0);
|
801 |
+
}
|
802 |
+
}
|
803 |
+
|
804 |
+
@keyframes haSmoothReveal {
|
805 |
+
0% {
|
806 |
+
-webkit-transform: translateY(100px);
|
807 |
+
transform: translateY(100px);
|
808 |
+
}
|
809 |
+
to {
|
810 |
+
-webkit-transform: translateY(0);
|
811 |
+
transform: translateY(0);
|
812 |
+
}
|
813 |
+
}
|
814 |
+
|
815 |
.ha-skills > .elementor-widget-container {
|
816 |
padding-top: 1px;
|
817 |
}
|
892 |
text-decoration: none;
|
893 |
}
|
894 |
|
895 |
+
.ha-logo-grid-item {
|
896 |
+
float: left;
|
897 |
+
overflow: hidden;
|
898 |
+
height: 180px;
|
899 |
+
border-color: #e7e7e7;
|
900 |
+
}
|
901 |
+
|
902 |
+
.ha-logo-grid-figure {
|
903 |
+
display: -webkit-box;
|
904 |
+
display: -webkit-flex;
|
905 |
+
display: -ms-flexbox;
|
906 |
+
display: flex;
|
907 |
+
-webkit-box-align: center;
|
908 |
+
-webkit-align-items: center;
|
909 |
+
align-items: center;
|
910 |
+
-ms-flex-align: center;
|
911 |
+
-webkit-box-pack: center;
|
912 |
+
-ms-flex-pack: center;
|
913 |
+
-webkit-justify-content: center;
|
914 |
+
justify-content: center;
|
915 |
+
margin: 0;
|
916 |
+
padding: 30px;
|
917 |
+
width: 100%;
|
918 |
+
height: 100%;
|
919 |
+
}
|
920 |
+
|
921 |
+
.ha-logo-grid-img {
|
922 |
+
max-height: 100%;
|
923 |
+
}
|
924 |
+
|
925 |
+
.ha-logo-grid--col-2 .ha-logo-grid-item {
|
926 |
+
width: calc(100% / 2);
|
927 |
+
}
|
928 |
+
|
929 |
+
.ha-logo-grid--col-3 .ha-logo-grid-item {
|
930 |
+
width: calc(100% / 3);
|
931 |
+
}
|
932 |
+
|
933 |
+
.ha-logo-grid--col-4 .ha-logo-grid-item {
|
934 |
+
width: calc(100% / 4);
|
935 |
+
}
|
936 |
+
|
937 |
+
.ha-logo-grid--col-5 .ha-logo-grid-item {
|
938 |
+
width: calc(100% / 5);
|
939 |
+
}
|
940 |
+
|
941 |
+
.ha-logo-grid--col-6 .ha-logo-grid-item {
|
942 |
+
width: calc(100% / 6);
|
943 |
+
}
|
944 |
+
|
945 |
+
@media (max-width: 1024px) {
|
946 |
+
.ha-logo-grid--col--tablet2 .ha-logo-grid-item {
|
947 |
+
width: calc(100% / 2);
|
948 |
+
}
|
949 |
+
.ha-logo-grid--col--tablet3 .ha-logo-grid-item {
|
950 |
+
width: calc(100% / 3);
|
951 |
+
}
|
952 |
+
.ha-logo-grid--col--tablet4 .ha-logo-grid-item {
|
953 |
+
width: calc(100% / 4);
|
954 |
+
}
|
955 |
+
.ha-logo-grid--col--tablet5 .ha-logo-grid-item {
|
956 |
+
width: calc(100% / 5);
|
957 |
+
}
|
958 |
+
.ha-logo-grid--col--tablet6 .ha-logo-grid-item {
|
959 |
+
width: calc(100% / 6);
|
960 |
+
}
|
961 |
+
}
|
962 |
+
|
963 |
+
@media (max-width: 767px) {
|
964 |
+
.ha-logo-grid--col--mobile2 .ha-logo-grid-item {
|
965 |
+
width: calc(100% / 2);
|
966 |
+
}
|
967 |
+
.ha-logo-grid--col--mobile3 .ha-logo-grid-item {
|
968 |
+
width: calc(100% / 3);
|
969 |
+
}
|
970 |
+
.ha-logo-grid--col--mobile4 .ha-logo-grid-item {
|
971 |
+
width: calc(100% / 4);
|
972 |
+
}
|
973 |
+
.ha-logo-grid--col--mobile5 .ha-logo-grid-item {
|
974 |
+
width: calc(100% / 5);
|
975 |
+
}
|
976 |
+
.ha-logo-grid--col--mobile6 .ha-logo-grid-item {
|
977 |
+
width: calc(100% / 6);
|
978 |
+
}
|
979 |
+
}
|
980 |
+
|
981 |
+
.ha-logo-grid--tictactoe .ha-logo-grid-item {
|
982 |
+
border-width: 2px 2px 0 0;
|
983 |
+
border-style: solid;
|
984 |
+
}
|
985 |
+
|
986 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n) {
|
987 |
+
border-right-width: 0;
|
988 |
+
}
|
989 |
+
|
990 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n + 2) {
|
991 |
+
border-top-width: 0;
|
992 |
+
}
|
993 |
+
|
994 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n) {
|
995 |
+
border-right-width: 0;
|
996 |
+
}
|
997 |
+
|
998 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n + 3) {
|
999 |
+
border-top-width: 0;
|
1000 |
+
}
|
1001 |
+
|
1002 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n) {
|
1003 |
+
border-right-width: 0;
|
1004 |
+
}
|
1005 |
+
|
1006 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n + 4) {
|
1007 |
+
border-top-width: 0;
|
1008 |
+
}
|
1009 |
+
|
1010 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n) {
|
1011 |
+
border-right-width: 0;
|
1012 |
+
}
|
1013 |
+
|
1014 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n + 5) {
|
1015 |
+
border-top-width: 0;
|
1016 |
+
}
|
1017 |
+
|
1018 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n) {
|
1019 |
+
border-right-width: 0;
|
1020 |
+
}
|
1021 |
+
|
1022 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n + 6) {
|
1023 |
+
border-top-width: 0;
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
@media (max-width: 1024px) {
|
1027 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n) {
|
1028 |
+
border-right-width: 0;
|
1029 |
+
}
|
1030 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n + 2) {
|
1031 |
+
border-top-width: 0;
|
1032 |
+
}
|
1033 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n) {
|
1034 |
+
border-right-width: 0;
|
1035 |
+
}
|
1036 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n + 3) {
|
1037 |
+
border-top-width: 0;
|
1038 |
+
}
|
1039 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n) {
|
1040 |
+
border-right-width: 0;
|
1041 |
+
}
|
1042 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n + 4) {
|
1043 |
+
border-top-width: 0;
|
1044 |
+
}
|
1045 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n) {
|
1046 |
+
border-right-width: 0;
|
1047 |
+
}
|
1048 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n + 5) {
|
1049 |
+
border-top-width: 0;
|
1050 |
+
}
|
1051 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n) {
|
1052 |
+
border-right-width: 0;
|
1053 |
+
}
|
1054 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n + 6) {
|
1055 |
+
border-top-width: 0;
|
1056 |
+
}
|
1057 |
+
}
|
1058 |
+
|
1059 |
+
@media (max-width: 767px) {
|
1060 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n) {
|
1061 |
+
border-right-width: 0;
|
1062 |
+
}
|
1063 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n + 2) {
|
1064 |
+
border-top-width: 0;
|
1065 |
+
}
|
1066 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n) {
|
1067 |
+
border-right-width: 0;
|
1068 |
+
}
|
1069 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n + 3) {
|
1070 |
+
border-top-width: 0;
|
1071 |
+
}
|
1072 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n) {
|
1073 |
+
border-right-width: 0;
|
1074 |
+
}
|
1075 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n + 4) {
|
1076 |
+
border-top-width: 0;
|
1077 |
+
}
|
1078 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n) {
|
1079 |
+
border-right-width: 0;
|
1080 |
+
}
|
1081 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n + 5) {
|
1082 |
+
border-top-width: 0;
|
1083 |
+
}
|
1084 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n) {
|
1085 |
+
border-right-width: 0;
|
1086 |
+
}
|
1087 |
+
.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n + 6) {
|
1088 |
+
border-top-width: 0;
|
1089 |
+
}
|
1090 |
+
}
|
1091 |
+
|
1092 |
+
.ha-logo-grid--border {
|
1093 |
+
border-radius: .5rem;
|
1094 |
+
}
|
1095 |
+
|
1096 |
+
.ha-logo-grid--border .ha-logo-grid-item {
|
1097 |
+
border-width: 0 2px 2px 0;
|
1098 |
+
border-style: solid;
|
1099 |
+
}
|
1100 |
+
.ha-logo-grid--border .ha-logo-grid-item:first-child {
|
1101 |
+
border-top-left-radius: 10px;
|
1102 |
+
}
|
1103 |
+
.ha-logo-grid--border .ha-logo-grid-item:last-child {
|
1104 |
+
border-bottom-right-radius: 10px;
|
1105 |
+
}
|
1106 |
+
|
1107 |
+
.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n + 2) {
|
1108 |
+
border-top-width: 2px;
|
1109 |
+
}
|
1110 |
+
|
1111 |
+
.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n + 1) {
|
1112 |
+
border-left-width: 2px;
|
1113 |
+
}
|
1114 |
+
|
1115 |
+
.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2) {
|
1116 |
+
border-top-right-radius: 10px;
|
1117 |
+
}
|
1118 |
+
|
1119 |
+
.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2) {
|
1120 |
+
border-bottom-left-radius: 10px;
|
1121 |
+
}
|
1122 |
+
|
1123 |
+
.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n + 3) {
|
1124 |
+
border-top-width: 2px;
|
1125 |
+
}
|
1126 |
+
|
1127 |
+
.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n + 1) {
|
1128 |
+
border-left-width: 2px;
|
1129 |
+
}
|
1130 |
+
|
1131 |
+
.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3) {
|
1132 |
+
border-top-right-radius: 10px;
|
1133 |
+
}
|
1134 |
+
|
1135 |
+
.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3) {
|
1136 |
+
border-bottom-left-radius: 10px;
|
1137 |
+
}
|
1138 |
+
|
1139 |
+
.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n + 4) {
|
1140 |
+
border-top-width: 2px;
|
1141 |
+
}
|
1142 |
+
|
1143 |
+
.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n + 1) {
|
1144 |
+
border-left-width: 2px;
|
1145 |
+
}
|
1146 |
+
|
1147 |
+
.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4) {
|
1148 |
+
border-top-right-radius: 10px;
|
1149 |
+
}
|
1150 |
+
|
1151 |
+
.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4) {
|
1152 |
+
border-bottom-left-radius: 10px;
|
1153 |
+
}
|
1154 |
+
|
1155 |
+
.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n + 5) {
|
1156 |
+
border-top-width: 2px;
|
1157 |
+
}
|
1158 |
+
|
1159 |
+
.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n + 1) {
|
1160 |
+
border-left-width: 2px;
|
1161 |
+
}
|
1162 |
+
|
1163 |
+
.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5) {
|
1164 |
+
border-top-right-radius: 10px;
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5) {
|
1168 |
+
border-bottom-left-radius: 10px;
|
1169 |
+
}
|
1170 |
+
|
1171 |
+
.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n + 6) {
|
1172 |
+
border-top-width: 2px;
|
1173 |
+
}
|
1174 |
+
|
1175 |
+
.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n + 1) {
|
1176 |
+
border-left-width: 2px;
|
1177 |
+
}
|
1178 |
+
|
1179 |
+
.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6) {
|
1180 |
+
border-top-right-radius: 10px;
|
1181 |
+
}
|
1182 |
+
|
1183 |
+
.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6) {
|
1184 |
+
border-bottom-left-radius: 10px;
|
1185 |
+
}
|
1186 |
+
|
1187 |
+
@media (max-width: 1024px) {
|
1188 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n + 2) {
|
1189 |
+
border-top-width: 2px;
|
1190 |
+
}
|
1191 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n + 1) {
|
1192 |
+
border-left-width: 2px;
|
1193 |
+
}
|
1194 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2) {
|
1195 |
+
border-top-right-radius: 10px;
|
1196 |
+
}
|
1197 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2) {
|
1198 |
+
border-bottom-left-radius: 10px;
|
1199 |
+
}
|
1200 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n + 3) {
|
1201 |
+
border-top-width: 2px;
|
1202 |
+
}
|
1203 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n + 1) {
|
1204 |
+
border-left-width: 2px;
|
1205 |
+
}
|
1206 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3) {
|
1207 |
+
border-top-right-radius: 10px;
|
1208 |
+
}
|
1209 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3) {
|
1210 |
+
border-bottom-left-radius: 10px;
|
1211 |
+
}
|
1212 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n + 4) {
|
1213 |
+
border-top-width: 2px;
|
1214 |
+
}
|
1215 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n + 1) {
|
1216 |
+
border-left-width: 2px;
|
1217 |
+
}
|
1218 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4) {
|
1219 |
+
border-top-right-radius: 10px;
|
1220 |
+
}
|
1221 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4) {
|
1222 |
+
border-bottom-left-radius: 10px;
|
1223 |
+
}
|
1224 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n + 5) {
|
1225 |
+
border-top-width: 2px;
|
1226 |
+
}
|
1227 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n + 1) {
|
1228 |
+
border-left-width: 2px;
|
1229 |
+
}
|
1230 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5) {
|
1231 |
+
border-top-right-radius: 10px;
|
1232 |
+
}
|
1233 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5) {
|
1234 |
+
border-bottom-left-radius: 10px;
|
1235 |
+
}
|
1236 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n + 6) {
|
1237 |
+
border-top-width: 2px;
|
1238 |
+
}
|
1239 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n + 1) {
|
1240 |
+
border-left-width: 2px;
|
1241 |
+
}
|
1242 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6) {
|
1243 |
+
border-top-right-radius: 10px;
|
1244 |
+
}
|
1245 |
+
.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6) {
|
1246 |
+
border-bottom-left-radius: 10px;
|
1247 |
+
}
|
1248 |
+
}
|
1249 |
+
|
1250 |
+
@media (max-width: 767px) {
|
1251 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n + 2) {
|
1252 |
+
border-top-width: 2px;
|
1253 |
+
}
|
1254 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n + 1) {
|
1255 |
+
border-left-width: 2px;
|
1256 |
+
}
|
1257 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2) {
|
1258 |
+
border-top-right-radius: 10px;
|
1259 |
+
}
|
1260 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2) {
|
1261 |
+
border-bottom-left-radius: 10px;
|
1262 |
+
}
|
1263 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n + 3) {
|
1264 |
+
border-top-width: 2px;
|
1265 |
+
}
|
1266 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n + 1) {
|
1267 |
+
border-left-width: 2px;
|
1268 |
+
}
|
1269 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3) {
|
1270 |
+
border-top-right-radius: 10px;
|
1271 |
+
}
|
1272 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3) {
|
1273 |
+
border-bottom-left-radius: 10px;
|
1274 |
+
}
|
1275 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n + 4) {
|
1276 |
+
border-top-width: 2px;
|
1277 |
+
}
|
1278 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n + 1) {
|
1279 |
+
border-left-width: 2px;
|
1280 |
+
}
|
1281 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4) {
|
1282 |
+
border-top-right-radius: 10px;
|
1283 |
+
}
|
1284 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4) {
|
1285 |
+
border-bottom-left-radius: 10px;
|
1286 |
+
}
|
1287 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n + 5) {
|
1288 |
+
border-top-width: 2px;
|
1289 |
+
}
|
1290 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n + 1) {
|
1291 |
+
border-left-width: 2px;
|
1292 |
+
}
|
1293 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5) {
|
1294 |
+
border-top-right-radius: 10px;
|
1295 |
+
}
|
1296 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5) {
|
1297 |
+
border-bottom-left-radius: 10px;
|
1298 |
+
}
|
1299 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n + 6) {
|
1300 |
+
border-top-width: 2px;
|
1301 |
+
}
|
1302 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n + 1) {
|
1303 |
+
border-left-width: 2px;
|
1304 |
+
}
|
1305 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6) {
|
1306 |
+
border-top-right-radius: 10px;
|
1307 |
+
}
|
1308 |
+
.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6) {
|
1309 |
+
border-bottom-left-radius: 10px;
|
1310 |
+
}
|
1311 |
+
}
|
1312 |
+
|
1313 |
+
.ha-logo-grid--box .ha-logo-grid-wrapper {
|
1314 |
+
margin: -.5rem;
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
.ha-logo-grid--box .ha-logo-grid-item {
|
1318 |
+
margin: .5rem;
|
1319 |
+
border-width: 2px;
|
1320 |
+
border-style: solid;
|
1321 |
+
border-radius: .5rem;
|
1322 |
+
}
|
1323 |
+
|
1324 |
+
.ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item {
|
1325 |
+
width: calc((100% / 2) - 1rem);
|
1326 |
+
}
|
1327 |
+
|
1328 |
+
.ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item {
|
1329 |
+
width: calc((100% / 3) - 1rem);
|
1330 |
+
}
|
1331 |
+
|
1332 |
+
.ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item {
|
1333 |
+
width: calc((100% / 4) - 1rem);
|
1334 |
+
}
|
1335 |
+
|
1336 |
+
.ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item {
|
1337 |
+
width: calc((100% / 5) - 1rem);
|
1338 |
+
}
|
1339 |
+
|
1340 |
+
.ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item {
|
1341 |
+
width: calc((100% / 6) - 1rem);
|
1342 |
+
}
|
1343 |
+
|
1344 |
+
@media (max-width: 1024px) {
|
1345 |
+
.ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item {
|
1346 |
+
width: calc((100% / 2) - 1rem);
|
1347 |
+
}
|
1348 |
+
.ha-logo-grid--box.ha-logo-grid--col--tablet3 .ha-logo-grid-item {
|
1349 |
+
width: calc((100% / 3) - 1rem);
|
1350 |
+
}
|
1351 |
+
.ha-logo-grid--box.ha-logo-grid--col--tablet4 .ha-logo-grid-item {
|
1352 |
+
width: calc((100% / 4) - 1rem);
|
1353 |
+
}
|
1354 |
+
.ha-logo-grid--box.ha-logo-grid--col--tablet5 .ha-logo-grid-item {
|
1355 |
+
width: calc((100% / 5) - 1rem);
|
1356 |
+
}
|
1357 |
+
.ha-logo-grid--box.ha-logo-grid--col--tablet6 .ha-logo-grid-item {
|
1358 |
+
width: calc((100% / 6) - 1rem);
|
1359 |
+
}
|
1360 |
+
}
|
1361 |
+
|
1362 |
+
@media (max-width: 767px) {
|
1363 |
+
.ha-logo-grid--box.ha-logo-grid--col--mobile2 .ha-logo-grid-item {
|
1364 |
+
width: calc((100% / 2) - 1rem);
|
1365 |
+
}
|
1366 |
+
.ha-logo-grid--box.ha-logo-grid--col--mobile3 .ha-logo-grid-item {
|
1367 |
+
width: calc((100% / 3) - 1rem);
|
1368 |
+
}
|
1369 |
+
.ha-logo-grid--box.ha-logo-grid--col--mobile4 .ha-logo-grid-item {
|
1370 |
+
width: calc((100% / 4) - 1rem);
|
1371 |
+
}
|
1372 |
+
.ha-logo-grid--box.ha-logo-grid--col--mobile5 .ha-logo-grid-item {
|
1373 |
+
width: calc((100% / 5) - 1rem);
|
1374 |
+
}
|
1375 |
+
.ha-logo-grid--box.ha-logo-grid--col--mobile6 .ha-logo-grid-item {
|
1376 |
+
width: calc((100% / 6) - 1rem);
|
1377 |
+
}
|
1378 |
+
}
|
1379 |
+
|
1380 |
.ha-dual-button > .elementor-widget-container {
|
1381 |
display: -webkit-box;
|
1382 |
display: -webkit-flex;
|
1473 |
bottom: -14px;
|
1474 |
color: #fff;
|
1475 |
content: "\e911";
|
1476 |
+
font-style: normal;
|
1477 |
font-size: 36px;
|
1478 |
font-family: "Happy Icons";
|
1479 |
-webkit-transform: rotate(-180deg);
|
1570 |
.ha-testimonial--center {
|
1571 |
text-align: center;
|
1572 |
}
|
1573 |
+
|
1574 |
+
.ha-number-body .ha-number-border {
|
1575 |
+
position: relative;
|
1576 |
+
display: -webkit-flex;
|
1577 |
+
/* Safari 7.0+ */
|
1578 |
+
display: -webkit-box;
|
1579 |
+
display: -ms-flexbox;
|
1580 |
+
display: flex;
|
1581 |
+
overflow: hidden;
|
1582 |
+
-webkit-box-align: center;
|
1583 |
+
/* Safari */
|
1584 |
+
-webkit-align-items: center;
|
1585 |
+
align-items: center;
|
1586 |
+
-ms-flex-align: center;
|
1587 |
+
padding: 6px 6px 6px 6px;
|
1588 |
+
width: 50px;
|
1589 |
+
height: 50px;
|
1590 |
+
border-radius: 100%;
|
1591 |
+
background: #c36;
|
1592 |
+
color: #fff;
|
1593 |
+
text-align: center;
|
1594 |
+
font-size: 20px;
|
1595 |
+
}
|
1596 |
+
.ha-number-body .ha-number-border .ha-number-border-overlay {
|
1597 |
+
position: absolute;
|
1598 |
+
top: 0;
|
1599 |
+
left: 0;
|
1600 |
+
width: 100%;
|
1601 |
+
height: 100%;
|
1602 |
+
}
|
1603 |
+
.ha-number-body .ha-number-border span {
|
1604 |
+
/* Safari 6.1+ */
|
1605 |
+
-webkit-box-flex: 1;
|
1606 |
+
-webkit-flex: 1;
|
1607 |
+
-ms-flex: 1;
|
1608 |
+
flex: 1;
|
1609 |
+
}
|
assets/css/main.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.ha-card>.elementor-widget-container,.ha-icon-box>.elementor-widget-container,.ha-image-compare>.elementor-widget-container,.ha-infobox>.elementor-widget-container,.ha-member>.elementor-widget-container,.ha-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);word-wrap:break-word;overflow-wrap:break-word}.happy-addon,.happy-addon *{box-sizing:border-box}.happy-addon img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.happy-addon p:empty{display:none}.ha-cf:after,.ha-cf:before{display:table;content:" "}.ha-cf:after{clear:both}.ha-btn{display:inline-block;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:.25rem;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon{-webkit-transition:all .3s;transition:all .3s}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-card-figure{position:relative;height:250px}.ha-card-figure>img{border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.ha-card-body{padding:1.5rem}.ha-card-title{margin-top:0;margin-bottom:.75rem;color:#151515;font-weight:700;font-size:22px}.ha-card-text{margin-bottom:2rem;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p,.ha-infobox-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure,.ha-member-links>a{display:inline-block}.ha-card--left>.elementor-widget-container,.ha-card--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-card--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-card--left .ha-card-body,.ha-card--left .ha-card-figure,.ha-card--right .ha-card-body,.ha-card--right .ha-card-figure{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-card--left .ha-card-body,.ha-card--right .ha-card-body{padding:2.5rem}.ha-card--left .ha-card-figure>img{border-radius:calc(.5rem - 1px) 0 0 calc(.5rem - 1px)}.ha-card--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-card--right .ha-card-figure>img{border-radius:0 calc(.5rem - 1px) calc(.5rem - 1px) 0}.ha-card .ha-badge{position:absolute}.ha-badge{padding:.475rem 1.1rem;border-radius:50px;background-color:#fff;font-size:12px}.ha-badge--top-left{top:1rem;left:1rem}.ha-badge--top-center{top:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--top-right{top:1rem;right:1rem}.ha-badge--middle-left{top:50%;left:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--middle-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-badge--middle-right{top:50%;right:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--bottom-left{bottom:1rem;left:1rem}.ha-badge--bottom-center{bottom:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--bottom-right{right:1rem;bottom:1rem}.ha-infobox>.elementor-widget-container{padding:1.5rem}.ha-infobox-title{margin-top:0;margin-bottom:1rem;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-infobox-figure--icon{text-align:center;font-size:3rem}.ha-icon-box-icon>i,.ha-infobox-figure>i{position:relative;display:block;width:1em;height:1em}.ha-icon-box-icon>i:before,.ha-infobox-figure>i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-card-figure>img,.ha-infobox-figure>img,.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-text+.ha-btn--link{margin-top:1rem}.ha-icon-box>.elementor-widget-container{position:relative;padding:1.25rem}.ha-icon-box-title{margin-top:0;margin-bottom:0;color:#151515;font-size:24px;-webkit-transition:color .3s;transition:color .3s}.ha-icon-box-icon{display:inline-block;margin-bottom:1rem;color:#151515;text-align:center;font-size:3rem;-webkit-transition:border .3s,background .3s,color .3s,-webkit-transform .3s;transition:transform .3s,border .3s,background .3s,color .3s;transition:transform .3s,border .3s,background .3s,color .3s,-webkit-transform .3s}.ha-icon-box-icon>i{-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-link{display:block;color:transparent;text-decoration:none}.ha-icon-box .ha-badge{position:absolute;z-index:9999;background-color:#e2498a;color:#fff}.ha-member>.elementor-widget-container{padding:1.25rem}.ha-member-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-member-name{margin-top:0;margin-bottom:.5rem;color:#151515;font-size:18px}.ha-member-position{margin-bottom:1.5rem;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:1.5rem;font-size:14px;line-height:1.6}.ha-member-links>a{color:#9895ad;text-align:center;line-height:1;-webkit-transition:all .2s;transition:all .2s}.ha-member-links>a:focus,.ha-member-links>a:hover{color:#222}.ha-member-links>a>i{width:1em;height:1em}.ha-member-links>a:not(:last-child){margin-right:.3rem}.ha-review-header{margin-top:1.5rem}.ha-review-desc p,.ha-review-figure{margin:0}.ha-review-figure>img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:.3rem;color:#151515;font-size:18px}.ha-review-position{margin-bottom:.5rem;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:.25em .66em;border-radius:2.5em;background-color:#287dfe;color:#fff}.ha-review-ratting--star{display:inline-block;color:#ffbf36;font-family:"Fontawesome"}.ha-review-ratting--star>span{position:relative;overflow:hidden;height:1em}.ha-review-ratting--star span>span{position:absolute;top:0;left:0;overflow:hidden;padding-top:1.5em}.ha-review-ratting--star span>span:before,span .ha-review-ratting--star:before{position:absolute;top:0;left:0}.ha-review-ratting--star span:before{content:"\f006\f006\f006\f006\f006"}.ha-review-ratting--star span>span:before{content:"\f005\f005\f005\f005\f005"}.ha-review-desc{margin-top:1.5rem;font-size:16px;line-height:1.6}.ha-review--top>.elementor-widget-container{padding:2rem}.ha-review--top .ha-review-figure{display:inline-block;max-width:70px;height:70px}.ha-review--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-review--left>.elementor-widget-container,.ha-review--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding-left:2rem}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 150px;-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 150px);-ms-flex:0 0 calc(100% - 150px);flex:0 0 calc(100% - 150px);padding:2rem;max-width:calc(100% - 150px)}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.ha-review--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;padding-right:2rem;padding-left:0;text-align:right}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper{border-radius:inherit}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px}.ha-skill--inside .ha-skill-level-text,.ha-skill--outside .ha-skill-level-text{float:right}.ha-skill--outside{height:2px}.ha-skill--outside .ha-skill-level{position:relative}.ha-skill--outside .ha-skill-info{position:absolute;top:-25px;width:100%;color:#242424}.ha-skill--inside{overflow:hidden;height:30px;border-radius:.3rem}.ha-skill--inside .ha-skill-info{padding-right:1rem;padding-left:1rem;color:#fff}.ha-skill-level{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;background-color:#007bff;color:#fff;text-align:center;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.ha-skill--outside{margin-top:40px}.ha-skill--inside:not(:first-child){margin-top:20px}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}.ha-dual-button>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-dual-btn,.ha-dual-btn-connector{display:inline-block}.ha-dual-btn-wrapper{position:relative;text-align:center;font-weight:400}.ha-dual-btn{padding:1.2rem 3rem;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{border-top-left-radius:50px;border-bottom-left-radius:50px;background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab}.ha-dual-btn--right{border-top-right-radius:50px;border-bottom-right-radius:50px;background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e}.ha-dual-btn-connector{position:absolute!important;top:50%;right:0;z-index:9;width:30px;height:30px;border-radius:100%;background-color:#fff;box-shadow:0 0 0 5px rgba(255,255,255,.3);color:#27374c;text-transform:uppercase;font-size:12px;line-height:30px;-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%)}.ha-dual-btn-icon--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.ha-testimonial--basic>.elementor-widget-container{padding:2rem;border:1px solid #ececec;border-radius:.5rem}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:2.5em}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:1.5rem;padding:2rem;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6rem}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{width:65px;height:65px}.ha-testimonial__reviewer-thumb>img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:.3rem;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:1em}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:1em}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:1em}.ha-testimonial--left{text-align:left}.ha-testimonial--right{text-align:right}.ha-testimonial--center{text-align:center}
|
1 |
+
.ha-card>.elementor-widget-container,.ha-icon-box>.elementor-widget-container,.ha-image-compare>.elementor-widget-container,.ha-infobox>.elementor-widget-container,.ha-member>.elementor-widget-container,.ha-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);word-wrap:break-word;overflow-wrap:break-word}.happy-addon,.happy-addon *{box-sizing:border-box}.happy-addon img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.happy-addon p:empty{display:none}.ha-cf:after,.ha-cf:before,.ha-logo-grid-wrapper:after,.ha-logo-grid-wrapper:before{display:table;content:" "}.ha-cf:after,.ha-logo-grid-wrapper:after{clear:both}.ha-btn{display:inline-block;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:.25rem;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon{-webkit-transition:all .3s;transition:all .3s}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-card-figure{position:relative;height:250px}.ha-card-figure>img{border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.ha-card-body{padding:1.5rem}.ha-card-title{margin-top:0;margin-bottom:.75rem;color:#151515;font-weight:700;font-size:22px}.ha-card-text{margin-bottom:2rem;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p,.ha-infobox-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure,.ha-member-links>a{display:inline-block}.ha-card--left>.elementor-widget-container,.ha-card--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-card--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-card--left .ha-card-body,.ha-card--left .ha-card-figure,.ha-card--right .ha-card-body,.ha-card--right .ha-card-figure{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-card--left .ha-card-body,.ha-card--right .ha-card-body{padding:2.5rem}.ha-card--left .ha-card-figure>img{border-radius:calc(.5rem - 1px) 0 0 calc(.5rem - 1px)}.ha-card--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-card--right .ha-card-figure>img{border-radius:0 calc(.5rem - 1px) calc(.5rem - 1px) 0}.ha-card .ha-badge{position:absolute}.ha-badge{padding:.475rem 1.1rem;border-radius:50px;background-color:#fff;font-size:12px}.ha-badge--top-left{top:1rem;left:1rem}.ha-badge--top-center{top:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--top-right{top:1rem;right:1rem}.ha-badge--middle-left{top:50%;left:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--middle-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-badge--middle-right{top:50%;right:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--bottom-left{bottom:1rem;left:1rem}.ha-badge--bottom-center{bottom:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--bottom-right{right:1rem;bottom:1rem}.ha-infobox>.elementor-widget-container{padding:1.5rem}.ha-infobox-title{margin-top:0;margin-bottom:1rem;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-infobox-figure--icon{text-align:center;font-size:3rem}.ha-icon-box-icon>i,.ha-infobox-figure>i{position:relative;display:block;width:1em;height:1em}.ha-icon-box-icon>i:before,.ha-infobox-figure>i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-card-figure>img,.ha-infobox-figure>img,.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-text+.ha-btn--link{margin-top:1rem}.ha-icon-box>.elementor-widget-container{position:relative;padding:1.25rem}.ha-icon-box-title{margin-top:0;margin-bottom:0;color:#151515;font-size:24px;-webkit-transition:color .3s;transition:color .3s}.ha-icon-box-icon{display:inline-block;margin-bottom:1rem;color:#151515;text-align:center;font-size:3rem;-webkit-transition:border .3s,background .3s,color .3s,-webkit-transform .3s;transition:transform .3s,border .3s,background .3s,color .3s;transition:transform .3s,border .3s,background .3s,color .3s,-webkit-transform .3s}.ha-icon-box-icon>i{-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-link{display:block;color:transparent;text-decoration:none}.ha-icon-box .ha-badge{position:absolute;z-index:9999;background-color:#e2498a;color:#fff}.ha-member>.elementor-widget-container{padding:1.25rem}.ha-member-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-member-name{margin-top:0;margin-bottom:.5rem;color:#151515;font-size:18px}.ha-member-position{margin-bottom:1.5rem;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:1.5rem;font-size:14px;line-height:1.6}.ha-member-links>a{color:#9895ad;text-align:center;line-height:1;-webkit-transition:all .2s;transition:all .2s}.ha-member-links>a:focus,.ha-member-links>a:hover{color:#222}.ha-member-links>a>i{width:1em;height:1em}.ha-member-links>a:not(:last-child){margin-right:.3rem}.ha-review-header{margin-top:1.5rem}.ha-review-desc p,.ha-review-figure{margin:0}.ha-review-figure>img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:.3rem;color:#151515;font-size:18px}.ha-review-position{margin-bottom:.5rem;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:.25em .66em;border-radius:2.5em;background-color:#287dfe;color:#fff}.ha-review-ratting--star{display:inline-block;color:#ffbf36;font-family:"Fontawesome"}.ha-review-ratting--star>span{position:relative;overflow:hidden;height:1em}.ha-review-ratting--star span>span{position:absolute;top:0;left:0;overflow:hidden;padding-top:1.5em}.ha-review-ratting--star span>span:before,span .ha-review-ratting--star:before{position:absolute;top:0;left:0}.ha-review-ratting--star span:before{content:"\f006\f006\f006\f006\f006"}.ha-review-ratting--star span>span:before{content:"\f005\f005\f005\f005\f005"}.ha-review-desc{margin-top:1.5rem;font-size:16px;line-height:1.6}.ha-review--top>.elementor-widget-container{padding:2rem}.ha-review--top .ha-review-figure{display:inline-block;max-width:70px;height:70px}.ha-review--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-review--left>.elementor-widget-container,.ha-review--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding-left:2rem}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 150px;-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 150px);-ms-flex:0 0 calc(100% - 150px);flex:0 0 calc(100% - 150px);padding:2rem;max-width:calc(100% - 150px)}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.ha-review--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;padding-right:2rem;padding-left:0;text-align:right}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper{border-radius:inherit}.ha-gallery-filter{margin:0 10px 2rem;padding:0;list-style:none}.ha-gallery-filter>li{display:inline-block;margin-bottom:10px}.ha-gallery-filter>li:not(:last-child){margin-right:10px}.ha-gallery-filter>li>button{display:block;padding:10px 25px;border:2px solid #562dd4;border-radius:.25rem;background-color:transparent;color:#562dd4;text-transform:uppercase;font-size:14px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-gallery-filter>li>button:focus,.ha-gallery-filter>li>button:hover{outline:0;background-color:#562dd4;color:#fff}.ha-gallery-filter>.ha-filter-active>button{background-color:#562dd4;color:#fff}.ha-image-grid-item{float:left}.ha-image-grid-link{position:relative;display:block;overflow:hidden;margin:10px;text-decoration:none}.ha-image-grid-link:focus{outline:none}.ha-image-grid-link img{vertical-align:bottom;-webkit-transition:-webkit-transform .25s linear;transition:transform .25s linear;transition:transform .25s linear,-webkit-transform .25s linear}.ha-image-grid-link:hover img,.ha-justified-gallery-item:hover>img{-webkit-transform:scale(1.25);-ms-transform:scale(1.25);transform:scale(1.25)}.ha-image-grid-link:hover .ha-image-grid-content,.ha-image-grid-link:hover .ha-image-grid-overlay{opacity:1}.ha-image-grid-link:hover .ha-image-grid-content:before{width:80px}.ha-image-grid-content,.ha-image-grid-overlay{position:absolute;opacity:0;-webkit-transition:opacity .5s;transition:opacity .5s}.ha-image-grid-overlay{top:0;right:0;bottom:0;left:0;padding:30px;background-color:rgba(0,0,0,.8)}.ha-image-grid-content{width:100%;color:#fff;font-size:16px}.ha-image-grid-content:before{position:absolute;top:-15px;width:35px;height:1px;background:#fe413b;content:"";-webkit-transition:all .3s;transition:all .3s}.ha-image-grid-content--topleft{top:2.9rem;left:2rem;text-align:left}.ha-image-grid-content--topleft:before{left:0}.ha-image-grid-content--topcenter{top:2.9rem;text-align:center}.ha-image-grid-content--topcenter,.ha-image-grid-content--topcenter:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-image-grid-content--topright{top:2.9rem;right:2rem;text-align:right}.ha-image-grid-content--topright:before{right:0}.ha-image-grid-content--bottomleft{bottom:2rem;left:2rem;text-align:left}.ha-image-grid-content--bottomleft:before{left:0}.ha-image-grid-content--bottomcenter{bottom:2rem;text-align:center}.ha-image-grid-content--bottomcenter,.ha-image-grid-content--bottomcenter:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-image-grid-content--bottomright{right:2rem;bottom:2rem;text-align:right}.ha-image-grid-content--bottomright:before{right:0}.ha-image-grid-content--middleleft{top:50%;left:2rem;text-align:left;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-image-grid-content--middleleft:before{left:0}.ha-image-grid-content--middlecenter{top:50%;text-align:center}.ha-image-grid-content--middlecenter,.ha-image-grid-content--middlecenter:before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-image-grid-content--middleright{top:50%;right:2rem;text-align:right;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-image-grid-content--middleright:before{right:0}.ha-image-grid--col-2 .ha-image-grid-item{width:50%}.ha-image-grid--col-3 .ha-image-grid-item{width:33.33%}.ha-image-grid--col-4 .ha-image-grid-item{width:25%}.ha-image-grid--col-5 .ha-image-grid-item{width:20%}.ha-justified-gallery-item{border-radius:6px;-webkit-transition:all .3s;transition:all .3s}.ha-justified-gallery-item>img{width:100%;-webkit-transition:all .25s!important;transition:all .25s!important}.justified-gallery>a>.caption,.justified-gallery>div>.caption,.justified-gallery>figure>.caption{padding:10px;bottom:-100px!important;-webkit-transition:all .25s!important;transition:all .25s!important;-webkit-animation:haSmoothReveal .3s forwards;animation:haSmoothReveal .3s forwards}.justified-gallery>a>.caption.caption-visible,.justified-gallery>div>.caption.caption-visible,.justified-gallery>figure>.caption.caption-visible{bottom:0!important}@-webkit-keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px}.ha-skill--inside .ha-skill-level-text,.ha-skill--outside .ha-skill-level-text{float:right}.ha-skill--outside{height:2px}.ha-skill--outside .ha-skill-level{position:relative}.ha-skill--outside .ha-skill-info{position:absolute;top:-25px;width:100%;color:#242424}.ha-skill--inside{overflow:hidden;height:30px;border-radius:.3rem}.ha-skill--inside .ha-skill-info{padding-right:1rem;padding-left:1rem;color:#fff}.ha-skill-level{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;background-color:#007bff;color:#fff;text-align:center;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.ha-skill--outside{margin-top:40px}.ha-skill--inside:not(:first-child){margin-top:20px}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}.ha-logo-grid-item{float:left;overflow:hidden;height:180px;border-color:#e7e7e7}.ha-logo-grid-figure{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:30px;width:100%;height:100%}.ha-logo-grid-img{max-height:100%}.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc(100%/6)}@media (max-width:1024px){.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:767px){.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc(100%/6)}}.ha-logo-grid--tictactoe .ha-logo-grid-item{border-width:2px 2px 0 0;border-style:solid}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0}@media (max-width:1024px){.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0}}@media (max-width:767px){.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n){border-right-width:0}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0}}.ha-logo-grid--border{border-radius:.5rem}.ha-logo-grid--border .ha-logo-grid-item{border-width:0 2px 2px 0;border-style:solid}.ha-logo-grid--border .ha-logo-grid-item:first-child{border-top-left-radius:10px}.ha-logo-grid--border .ha-logo-grid-item:last-child{border-bottom-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}@media (max-width:1024px){.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:767px){.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}.ha-logo-grid--box .ha-logo-grid-wrapper{margin:-.5rem}.ha-logo-grid--box .ha-logo-grid-item{margin:.5rem;border-width:2px;border-style:solid;border-radius:.5rem}.ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}@media (max-width:1024px){.ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:767px){.ha-logo-grid--box.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}.ha-dual-button>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-dual-btn,.ha-dual-btn-connector{display:inline-block}.ha-dual-btn-wrapper{position:relative;text-align:center;font-weight:400}.ha-dual-btn{padding:1.2rem 3rem;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{border-top-left-radius:50px;border-bottom-left-radius:50px;background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab}.ha-dual-btn--right{border-top-right-radius:50px;border-bottom-right-radius:50px;background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e}.ha-dual-btn-connector{position:absolute!important;top:50%;right:0;z-index:9;width:30px;height:30px;border-radius:100%;background-color:#fff;box-shadow:0 0 0 5px rgba(255,255,255,.3);color:#27374c;text-transform:uppercase;font-size:12px;line-height:30px;-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%)}.ha-dual-btn-icon--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.ha-testimonial--basic>.elementor-widget-container{padding:2rem;border:1px solid #ececec;border-radius:.5rem}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:2.5em}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:1.5rem;padding:2rem;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6rem}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-style:normal;font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{width:65px;height:65px}.ha-testimonial__reviewer-thumb>img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:.3rem;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:1em}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:1em}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:1em}.ha-testimonial--left{text-align:left}.ha-testimonial--right{text-align:right}.ha-testimonial--center{text-align:center}.ha-number-body .ha-number-border{position:relative;display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding:6px;width:50px;height:50px;border-radius:100%;background:#c36;color:#fff;text-align:center;font-size:20px}.ha-number-body .ha-number-border .ha-number-border-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ha-number-body .ha-number-border span{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}
|
assets/js/happy-addons.js
CHANGED
@@ -8,6 +8,23 @@ window.Happy = window.Happy || {};
|
|
8 |
return this.data('happy-settings');
|
9 |
};
|
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
Happy.initImageComparison = function($scope) {
|
12 |
var $item = $scope.find('.hajs-image-comparison'),
|
13 |
settings = $item.getHappySettings(),
|
@@ -24,29 +41,42 @@ window.Happy = window.Happy || {};
|
|
24 |
});
|
25 |
};
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
$window.on('elementor/frontend/init', function() {
|
28 |
var HappyEffects = elementorModules.frontend.handlers.Base.extend({
|
29 |
onInit: function() {
|
30 |
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
|
|
31 |
this.run();
|
32 |
},
|
33 |
|
34 |
-
|
35 |
-
return
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
},
|
42 |
-
|
43 |
-
onDestroy: function() {
|
44 |
-
elementorModules.frontend.handlers.Base.prototype.onDestroy.apply(this, arguments);
|
45 |
-
this.factoryReset();
|
46 |
},
|
47 |
|
48 |
onElementChange: function() {
|
49 |
-
this.
|
50 |
this.run();
|
51 |
},
|
52 |
|
@@ -55,12 +85,7 @@ window.Happy = window.Happy || {};
|
|
55 |
},
|
56 |
|
57 |
run: function() {
|
58 |
-
var config =
|
59 |
-
targets: this.getWrapper(),
|
60 |
-
loop: true,
|
61 |
-
direction: 'alternate',
|
62 |
-
easing: 'easeInOutSine',
|
63 |
-
};
|
64 |
|
65 |
if (this.getConfig('translate_toggle')) {
|
66 |
if (this.getConfig('translate_x.size') || this.getConfig('translate_x.sizes.to')) {
|
@@ -121,8 +146,8 @@ window.Happy = window.Happy || {};
|
|
121 |
}
|
122 |
|
123 |
if (this.getConfig('translate_toggle') || this.getConfig('rotate_toggle') || this.getConfig('scale_toggle')) {
|
124 |
-
this.
|
125 |
-
anime(config);
|
126 |
}
|
127 |
}
|
128 |
});
|
@@ -131,7 +156,10 @@ window.Happy = window.Happy || {};
|
|
131 |
'frontend/element_ready/ha-image-compare.default',
|
132 |
Happy.initImageComparison
|
133 |
);
|
134 |
-
|
|
|
|
|
|
|
135 |
elementorFrontend.hooks.addAction(
|
136 |
'frontend/element_ready/widget',
|
137 |
function($scope) {
|
8 |
return this.data('happy-settings');
|
9 |
};
|
10 |
|
11 |
+
function initFilterable($scope, filterFn) {
|
12 |
+
var $filterable = $scope.find('.hajs-gallery-filter');
|
13 |
+
if ($filterable.length) {
|
14 |
+
$filterable.on('click', 'button', function(event) {
|
15 |
+
event.stopPropagation();
|
16 |
+
|
17 |
+
var $current = $(this);
|
18 |
+
$current
|
19 |
+
.parent()
|
20 |
+
.addClass('ha-filter-active')
|
21 |
+
.siblings()
|
22 |
+
.removeClass('ha-filter-active');
|
23 |
+
filterFn($current.data('filter'));
|
24 |
+
});
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
Happy.initImageComparison = function($scope) {
|
29 |
var $item = $scope.find('.hajs-image-comparison'),
|
30 |
settings = $item.getHappySettings(),
|
41 |
});
|
42 |
};
|
43 |
|
44 |
+
Happy.initJustifiedGallery = function($scope) {
|
45 |
+
var $item = $scope.find('.hajs-justified-gallery'),
|
46 |
+
settings = $item.getHappySettings()
|
47 |
+
$item.justifiedGallery($.extend({}, {
|
48 |
+
rowHeight: 150,
|
49 |
+
lastRow: 'justify',
|
50 |
+
margins: 10,
|
51 |
+
}, settings));
|
52 |
+
|
53 |
+
initFilterable($scope, function(filter) {
|
54 |
+
$item.justifiedGallery({
|
55 |
+
lastRow: (filter === '*' ? settings.lastRow : 'nojustify'),
|
56 |
+
filter: filter
|
57 |
+
});
|
58 |
+
});
|
59 |
+
};
|
60 |
+
|
61 |
$window.on('elementor/frontend/init', function() {
|
62 |
var HappyEffects = elementorModules.frontend.handlers.Base.extend({
|
63 |
onInit: function() {
|
64 |
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
65 |
+
this.$container = this.$element.find('.elementor-widget-container')[0];
|
66 |
this.run();
|
67 |
},
|
68 |
|
69 |
+
getDefaultSettings: function() {
|
70 |
+
return {
|
71 |
+
targets: this.$container,
|
72 |
+
loop: true,
|
73 |
+
direction: 'alternate',
|
74 |
+
easing: 'easeInOutSine',
|
75 |
+
};
|
|
|
|
|
|
|
|
|
|
|
76 |
},
|
77 |
|
78 |
onElementChange: function() {
|
79 |
+
this.animation && this.animation.restart();
|
80 |
this.run();
|
81 |
},
|
82 |
|
85 |
},
|
86 |
|
87 |
run: function() {
|
88 |
+
var config = this.getDefaultSettings();
|
|
|
|
|
|
|
|
|
|
|
89 |
|
90 |
if (this.getConfig('translate_toggle')) {
|
91 |
if (this.getConfig('translate_x.size') || this.getConfig('translate_x.sizes.to')) {
|
146 |
}
|
147 |
|
148 |
if (this.getConfig('translate_toggle') || this.getConfig('rotate_toggle') || this.getConfig('scale_toggle')) {
|
149 |
+
this.$container.style.setProperty('will-change', 'transform');
|
150 |
+
this.animation = anime(config);
|
151 |
}
|
152 |
}
|
153 |
});
|
156 |
'frontend/element_ready/ha-image-compare.default',
|
157 |
Happy.initImageComparison
|
158 |
);
|
159 |
+
elementorFrontend.hooks.addAction(
|
160 |
+
'frontend/element_ready/ha-justified-gallery.default',
|
161 |
+
Happy.initJustifiedGallery
|
162 |
+
);
|
163 |
elementorFrontend.hooks.addAction(
|
164 |
'frontend/element_ready/widget',
|
165 |
function($scope) {
|
assets/js/happy-addons.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
"use strict";window.Happy=window.Happy||{},function(t,e,i){var s=t(i);t.fn.getHappySettings=function(){return this.data("happy-settings")},e.initImageComparison=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)})},s.on("elementor/frontend/init",function(){var t=elementorModules.frontend.handlers.Base.extend({onInit:function(){elementorModules.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this
|
1 |
+
"use strict";window.Happy=window.Happy||{},function(t,e,i){function n(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"))})}var s=t(i);t.fn.getHappySettings=function(){return this.data("happy-settings")},e.initImageComparison=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)})},e.initJustifiedGallery=function(e){var i=e.find(".hajs-justified-gallery"),s=i.getHappySettings();i.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},s)),n(e,function(t){i.justifiedGallery({lastRow:"*"===t?s.lastRow:"nojustify",filter:t})})},s.on("elementor/frontend/init",function(){var t=elementorModules.frontend.handlers.Base.extend({onInit:function(){elementorModules.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".elementor-widget-container")[0],this.run()},getDefaultSettings:function(){return{targets:this.$container,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(){this.animation&&this.animation.restart(),this.run()},getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},run: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.$container.style.setProperty("will-change","transform"),this.animation=anime(t))}});elementorFrontend.hooks.addAction("frontend/element_ready/ha-image-compare.default",e.initImageComparison),elementorFrontend.hooks.addAction("frontend/element_ready/ha-justified-gallery.default",e.initJustifiedGallery),elementorFrontend.hooks.addAction("frontend/element_ready/widget",function(e){elementorFrontend.elementsHandler.addHandler(t,{$element:e})})})}(jQuery,Happy,window);
|
assets/vendor/justifiedGallery/css/justifiedGallery.min.css
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* justifiedGallery - v3.7.0
|
3 |
+
* http://miromannino.github.io/Justified-Gallery/
|
4 |
+
* Copyright (c) 2018 Miro Mannino
|
5 |
+
* Licensed under the MIT license.
|
6 |
+
*/
|
7 |
+
.justified-gallery {
|
8 |
+
width: 100%;
|
9 |
+
position: relative;
|
10 |
+
overflow: hidden;
|
11 |
+
}
|
12 |
+
.justified-gallery > a,
|
13 |
+
.justified-gallery > div,
|
14 |
+
.justified-gallery > figure {
|
15 |
+
position: absolute;
|
16 |
+
display: inline-block;
|
17 |
+
overflow: hidden;
|
18 |
+
/* background: #888888; To have gray placeholders while the gallery is loading with waitThumbnailsLoad = false */
|
19 |
+
filter: "alpha(opacity=10)";
|
20 |
+
opacity: 0.1;
|
21 |
+
margin: 0;
|
22 |
+
padding: 0;
|
23 |
+
}
|
24 |
+
.justified-gallery > a > img,
|
25 |
+
.justified-gallery > div > img,
|
26 |
+
.justified-gallery > figure > img,
|
27 |
+
.justified-gallery > a > a > img,
|
28 |
+
.justified-gallery > div > a > img,
|
29 |
+
.justified-gallery > figure > a > img {
|
30 |
+
position: absolute;
|
31 |
+
top: 50%;
|
32 |
+
left: 50%;
|
33 |
+
margin: 0;
|
34 |
+
padding: 0;
|
35 |
+
border: none;
|
36 |
+
filter: "alpha(opacity=0)";
|
37 |
+
opacity: 0;
|
38 |
+
}
|
39 |
+
.justified-gallery > a > .caption,
|
40 |
+
.justified-gallery > div > .caption,
|
41 |
+
.justified-gallery > figure > .caption {
|
42 |
+
display: none;
|
43 |
+
position: absolute;
|
44 |
+
bottom: 0;
|
45 |
+
padding: 5px;
|
46 |
+
background-color: #000000;
|
47 |
+
left: 0;
|
48 |
+
right: 0;
|
49 |
+
margin: 0;
|
50 |
+
color: white;
|
51 |
+
font-size: 12px;
|
52 |
+
font-weight: 300;
|
53 |
+
font-family: sans-serif;
|
54 |
+
}
|
55 |
+
.justified-gallery > a > .caption.caption-visible,
|
56 |
+
.justified-gallery > div > .caption.caption-visible,
|
57 |
+
.justified-gallery > figure > .caption.caption-visible {
|
58 |
+
display: initial;
|
59 |
+
filter: "alpha(opacity=70)";
|
60 |
+
opacity: 0.7;
|
61 |
+
-webkit-transition: opacity 500ms ease-in;
|
62 |
+
-moz-transition: opacity 500ms ease-in;
|
63 |
+
-o-transition: opacity 500ms ease-in;
|
64 |
+
transition: opacity 500ms ease-in;
|
65 |
+
}
|
66 |
+
.justified-gallery > .entry-visible {
|
67 |
+
filter: "alpha(opacity=100)";
|
68 |
+
opacity: 1;
|
69 |
+
background: none;
|
70 |
+
}
|
71 |
+
.justified-gallery > .entry-visible > img,
|
72 |
+
.justified-gallery > .entry-visible > a > img {
|
73 |
+
filter: "alpha(opacity=100)";
|
74 |
+
opacity: 1;
|
75 |
+
-webkit-transition: opacity 500ms ease-in;
|
76 |
+
-moz-transition: opacity 500ms ease-in;
|
77 |
+
-o-transition: opacity 500ms ease-in;
|
78 |
+
transition: opacity 500ms ease-in;
|
79 |
+
}
|
80 |
+
.justified-gallery > .jg-filtered {
|
81 |
+
display: none;
|
82 |
+
}
|
83 |
+
.justified-gallery > .spinner {
|
84 |
+
position: absolute;
|
85 |
+
bottom: 0;
|
86 |
+
margin-left: -24px;
|
87 |
+
padding: 10px 0 10px 0;
|
88 |
+
left: 50%;
|
89 |
+
filter: "alpha(opacity=100)";
|
90 |
+
opacity: 1;
|
91 |
+
overflow: initial;
|
92 |
+
}
|
93 |
+
.justified-gallery > .spinner > span {
|
94 |
+
display: inline-block;
|
95 |
+
filter: "alpha(opacity=0)";
|
96 |
+
opacity: 0;
|
97 |
+
width: 8px;
|
98 |
+
height: 8px;
|
99 |
+
margin: 0 4px 0 4px;
|
100 |
+
background-color: #000;
|
101 |
+
border-radius: 6px;
|
102 |
+
}
|
assets/vendor/justifiedGallery/js/jquery.justifiedGallery.min.js
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* justifiedGallery - v3.7.0
|
3 |
+
* http://miromannino.github.io/Justified-Gallery/
|
4 |
+
* Copyright (c) 2018 Miro Mannino
|
5 |
+
* Licensed under the MIT license.
|
6 |
+
*/
|
7 |
+
|
8 |
+
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=function(t,i){return void 0===i&&(i="undefined"!=typeof window?require("jquery"):require("jquery")(t)),e(i),i}:e(jQuery)}(function(g){var r=function(t,i){this.settings=i,this.checkSettings(),this.imgAnalyzerTimeout=null,this.entries=null,this.buildingRow={entriesBuff:[],width:0,height:0,aspectRatio:0},this.lastFetchedEntry=null,this.lastAnalyzedIndex=-1,this.yield={every:2,flushed:0},this.border=0<=i.border?i.border:i.margins,this.maxRowHeight=this.retrieveMaxRowHeight(),this.suffixRanges=this.retrieveSuffixRanges(),this.offY=this.border,this.rows=0,this.spinner={phase:0,timeSlot:150,$el:g('<div class="spinner"><span></span><span></span><span></span></div>'),intervalId:null},this.scrollBarOn=!1,this.checkWidthIntervalId=null,this.galleryWidth=t.width(),this.$gallery=t};r.prototype.getSuffix=function(t,i){var e,s;for(e=i<t?t:i,s=0;s<this.suffixRanges.length;s++)if(e<=this.suffixRanges[s])return this.settings.sizeRangeSuffixes[this.suffixRanges[s]];return this.settings.sizeRangeSuffixes[this.suffixRanges[s-1]]},r.prototype.removeSuffix=function(t,i){return t.substring(0,t.length-i.length)},r.prototype.endsWith=function(t,i){return-1!==t.indexOf(i,t.length-i.length)},r.prototype.getUsedSuffix=function(t){for(var i in this.settings.sizeRangeSuffixes)if(this.settings.sizeRangeSuffixes.hasOwnProperty(i)){if(0===this.settings.sizeRangeSuffixes[i].length)continue;if(this.endsWith(t,this.settings.sizeRangeSuffixes[i]))return this.settings.sizeRangeSuffixes[i]}return""},r.prototype.newSrc=function(t,i,e,s){var n;if(this.settings.thumbnailPath)n=this.settings.thumbnailPath(t,i,e,s);else{var r=t.match(this.settings.extension),o=null!==r?r[0]:"";n=t.replace(this.settings.extension,""),n=this.removeSuffix(n,this.getUsedSuffix(n)),n+=this.getSuffix(i,e)+o}return n},r.prototype.showImg=function(t,i){this.settings.cssAnimation?(t.addClass("entry-visible"),i&&i()):(t.stop().fadeTo(this.settings.imagesAnimationDuration,1,i),t.find(this.settings.imgSelector).stop().fadeTo(this.settings.imagesAnimationDuration,1,i))},r.prototype.extractImgSrcFromImage=function(t){var i=void 0!==t.data("safe-src")?t.data("safe-src"):t.attr("src");return t.data("jg.originalSrc",i),i},r.prototype.imgFromEntry=function(t){var i=t.find(this.settings.imgSelector);return 0===i.length?null:i},r.prototype.captionFromEntry=function(t){var i=t.find("> .caption");return 0===i.length?null:i},r.prototype.displayEntry=function(t,i,e,s,n,r){t.width(s),t.height(r),t.css("top",e),t.css("left",i);var o=this.imgFromEntry(t);if(null!==o){o.css("width",s),o.css("height",n),o.css("margin-left",-s/2),o.css("margin-top",-n/2);var a=o.attr("src"),h=this.newSrc(a,s,n,o[0]);o.one("error",function(){o.attr("src",o.data("jg.originalSrc"))});var l=function(){a!==h&&o.attr("src",h)};"skipped"===t.data("jg.loaded")?this.onImageEvent(a,g.proxy(function(){this.showImg(t,l),t.data("jg.loaded",!0)},this)):this.showImg(t,l)}else this.showImg(t);this.displayEntryCaption(t)},r.prototype.displayEntryCaption=function(t){var i=this.imgFromEntry(t);if(null!==i&&this.settings.captions){var e=this.captionFromEntry(t);if(null===e){var s=i.attr("alt");this.isValidCaption(s)||(s=t.attr("title")),this.isValidCaption(s)&&(e=g('<div class="caption">'+s+"</div>"),t.append(e),t.data("jg.createdCaption",!0))}null!==e&&(this.settings.cssAnimation||e.stop().fadeTo(0,this.settings.captionSettings.nonVisibleOpacity),this.addCaptionEventsHandlers(t))}else this.removeCaptionEventsHandlers(t)},r.prototype.isValidCaption=function(t){return void 0!==t&&0<t.length},r.prototype.onEntryMouseEnterForCaption=function(t){var i=this.captionFromEntry(g(t.currentTarget));this.settings.cssAnimation?i.addClass("caption-visible").removeClass("caption-hidden"):i.stop().fadeTo(this.settings.captionSettings.animationDuration,this.settings.captionSettings.visibleOpacity)},r.prototype.onEntryMouseLeaveForCaption=function(t){var i=this.captionFromEntry(g(t.currentTarget));this.settings.cssAnimation?i.removeClass("caption-visible").removeClass("caption-hidden"):i.stop().fadeTo(this.settings.captionSettings.animationDuration,this.settings.captionSettings.nonVisibleOpacity)},r.prototype.addCaptionEventsHandlers=function(t){var i=t.data("jg.captionMouseEvents");void 0===i&&(i={mouseenter:g.proxy(this.onEntryMouseEnterForCaption,this),mouseleave:g.proxy(this.onEntryMouseLeaveForCaption,this)},t.on("mouseenter",void 0,void 0,i.mouseenter),t.on("mouseleave",void 0,void 0,i.mouseleave),t.data("jg.captionMouseEvents",i))},r.prototype.removeCaptionEventsHandlers=function(t){var i=t.data("jg.captionMouseEvents");void 0!==i&&(t.off("mouseenter",void 0,i.mouseenter),t.off("mouseleave",void 0,i.mouseleave),t.removeData("jg.captionMouseEvents"))},r.prototype.clearBuildingRow=function(){this.buildingRow.entriesBuff=[],this.buildingRow.aspectRatio=0,this.buildingRow.width=0},r.prototype.prepareBuildingRow=function(t){var i,e,s,n,r,o=!0,a=0,h=this.galleryWidth-2*this.border-(this.buildingRow.entriesBuff.length-1)*this.settings.margins,l=h/this.buildingRow.aspectRatio,g=this.settings.rowHeight,u=this.buildingRow.width/h>this.settings.justifyThreshold;if(t&&"hide"===this.settings.lastRow&&!u){for(i=0;i<this.buildingRow.entriesBuff.length;i++)e=this.buildingRow.entriesBuff[i],this.settings.cssAnimation?e.removeClass("entry-visible"):(e.stop().fadeTo(0,.1),e.find("> img, > a > img").fadeTo(0,0));return-1}for(t&&!u&&"justify"!==this.settings.lastRow&&"hide"!==this.settings.lastRow&&(o=!1,0<this.rows&&(o=(g=(this.offY-this.border-this.settings.margins*this.rows)/this.rows)*this.buildingRow.aspectRatio/h>this.settings.justifyThreshold)),i=0;i<this.buildingRow.entriesBuff.length;i++)s=(e=this.buildingRow.entriesBuff[i]).data("jg.width")/e.data("jg.height"),o?(n=i===this.buildingRow.entriesBuff.length-1?h:l*s,r=l):(n=g*s,r=g),h-=Math.round(n),e.data("jg.jwidth",Math.round(n)),e.data("jg.jheight",Math.ceil(r)),(0===i||r<a)&&(a=r);return this.buildingRow.height=a,o},r.prototype.flushRow=function(t){var i,e,s,n=this.settings,r=this.border;if(e=this.prepareBuildingRow(t),t&&"hide"===n.lastRow&&-1===e)this.clearBuildingRow();else{if(this.maxRowHeight&&this.maxRowHeight<this.buildingRow.height&&(this.buildingRow.height=this.maxRowHeight),t&&("center"===n.lastRow||"right"===n.lastRow)){var o=this.galleryWidth-2*this.border-(this.buildingRow.entriesBuff.length-1)*n.margins;for(s=0;s<this.buildingRow.entriesBuff.length;s++)o-=(i=this.buildingRow.entriesBuff[s]).data("jg.jwidth");"center"===n.lastRow?r+=o/2:"right"===n.lastRow&&(r+=o)}var a=this.buildingRow.entriesBuff.length-1;for(s=0;s<=a;s++)i=this.buildingRow.entriesBuff[this.settings.rtl?a-s:s],this.displayEntry(i,r,this.offY,i.data("jg.jwidth"),i.data("jg.jheight"),this.buildingRow.height),r+=i.data("jg.jwidth")+n.margins;this.galleryHeightToSet=this.offY+this.buildingRow.height+this.border,this.setGalleryTempHeight(this.galleryHeightToSet+this.getSpinnerHeight()),(!t||this.buildingRow.height<=n.rowHeight&&e)&&(this.offY+=this.buildingRow.height+n.margins,this.rows+=1,this.clearBuildingRow(),this.settings.triggerEvent.call(this,"jg.rowflush"))}};var i=0;function e(){return g("body").height()>g(window).height()}r.prototype.rememberGalleryHeight=function(){i=this.$gallery.height(),this.$gallery.height(i)},r.prototype.setGalleryTempHeight=function(t){i=Math.max(t,i),this.$gallery.height(i)},r.prototype.setGalleryFinalHeight=function(t){i=t,this.$gallery.height(t)},r.prototype.checkWidth=function(){this.checkWidthIntervalId=setInterval(g.proxy(function(){if(this.$gallery.is(":visible")){var t=parseFloat(this.$gallery.width());e()===this.scrollBarOn?Math.abs(t-this.galleryWidth)>this.settings.refreshSensitivity&&(this.galleryWidth=t,this.rewind(),this.rememberGalleryHeight(),this.startImgAnalyzer(!0)):(this.scrollBarOn=e(),this.galleryWidth=t)}},this),this.settings.refreshTime)},r.prototype.isSpinnerActive=function(){return null!==this.spinner.intervalId},r.prototype.getSpinnerHeight=function(){return this.spinner.$el.innerHeight()},r.prototype.stopLoadingSpinnerAnimation=function(){clearInterval(this.spinner.intervalId),this.spinner.intervalId=null,this.setGalleryTempHeight(this.$gallery.height()-this.getSpinnerHeight()),this.spinner.$el.detach()},r.prototype.startLoadingSpinnerAnimation=function(){var t=this.spinner,i=t.$el.find("span");clearInterval(t.intervalId),this.$gallery.append(t.$el),this.setGalleryTempHeight(this.offY+this.buildingRow.height+this.getSpinnerHeight()),t.intervalId=setInterval(function(){t.phase<i.length?i.eq(t.phase).fadeTo(t.timeSlot,1):i.eq(t.phase-i.length).fadeTo(t.timeSlot,0),t.phase=(t.phase+1)%(2*i.length)},t.timeSlot)},r.prototype.rewind=function(){this.lastFetchedEntry=null,this.lastAnalyzedIndex=-1,this.offY=this.border,this.rows=0,this.clearBuildingRow()},r.prototype.updateEntries=function(t){var i;return t&&null!=this.lastFetchedEntry?i=g(this.lastFetchedEntry).nextAll(this.settings.selector).toArray():(this.entries=[],i=this.$gallery.children(this.settings.selector).toArray()),0<i.length&&(g.isFunction(this.settings.sort)?i=this.sortArray(i):this.settings.randomize&&(i=this.shuffleArray(i)),this.lastFetchedEntry=i[i.length-1],this.settings.filter?i=this.filterArray(i):this.resetFilters(i)),this.entries=this.entries.concat(i),!0},r.prototype.insertToGallery=function(t){var i=this;g.each(t,function(){g(this).appendTo(i.$gallery)})},r.prototype.shuffleArray=function(t){var i,e,s;for(i=t.length-1;0<i;i--)e=Math.floor(Math.random()*(i+1)),s=t[i],t[i]=t[e],t[e]=s;return this.insertToGallery(t),t},r.prototype.sortArray=function(t){return t.sort(this.settings.sort),this.insertToGallery(t),t},r.prototype.resetFilters=function(t){for(var i=0;i<t.length;i++)g(t[i]).removeClass("jg-filtered")},r.prototype.filterArray=function(t){var e=this.settings;if("string"===g.type(e.filter))return t.filter(function(t){var i=g(t);return i.is(e.filter)?(i.removeClass("jg-filtered"),!0):(i.addClass("jg-filtered").removeClass("jg-visible"),!1)});if(g.isFunction(e.filter)){for(var i=t.filter(e.filter),s=0;s<t.length;s++)-1===i.indexOf(t[s])?g(t[s]).addClass("jg-filtered").removeClass("jg-visible"):g(t[s]).removeClass("jg-filtered");return i}},r.prototype.destroy=function(){clearInterval(this.checkWidthIntervalId),g.each(this.entries,g.proxy(function(t,i){var e=g(i);e.css("width",""),e.css("height",""),e.css("top",""),e.css("left",""),e.data("jg.loaded",void 0),e.removeClass("jg-entry");var s=this.imgFromEntry(e);s.css("width",""),s.css("height",""),s.css("margin-left",""),s.css("margin-top",""),s.attr("src",s.data("jg.originalSrc")),s.data("jg.originalSrc",void 0),this.removeCaptionEventsHandlers(e);var n=this.captionFromEntry(e);e.data("jg.createdCaption")?(e.data("jg.createdCaption",void 0),null!==n&&n.remove()):null!==n&&n.fadeTo(0,1)},this)),this.$gallery.css("height",""),this.$gallery.removeClass("justified-gallery"),this.$gallery.data("jg.controller",void 0)},r.prototype.analyzeImages=function(t){for(var i=this.lastAnalyzedIndex+1;i<this.entries.length;i++){var e=g(this.entries[i]);if(!0===e.data("jg.loaded")||"skipped"===e.data("jg.loaded")){var s=this.galleryWidth-2*this.border-(this.buildingRow.entriesBuff.length-1)*this.settings.margins,n=e.data("jg.width")/e.data("jg.height");if(s/(this.buildingRow.aspectRatio+n)<this.settings.rowHeight&&(this.flushRow(!1),++this.yield.flushed>=this.yield.every))return void this.startImgAnalyzer(t);this.buildingRow.entriesBuff.push(e),this.buildingRow.aspectRatio+=n,this.buildingRow.width+=n*this.settings.rowHeight,this.lastAnalyzedIndex=i}else if("error"!==e.data("jg.loaded"))return}0<this.buildingRow.entriesBuff.length&&this.flushRow(!0),this.isSpinnerActive()&&this.stopLoadingSpinnerAnimation(),this.stopImgAnalyzerStarter(),this.settings.triggerEvent.call(this,t?"jg.resize":"jg.complete"),this.setGalleryFinalHeight(this.galleryHeightToSet)},r.prototype.stopImgAnalyzerStarter=function(){this.yield.flushed=0,null!==this.imgAnalyzerTimeout&&(clearTimeout(this.imgAnalyzerTimeout),this.imgAnalyzerTimeout=null)},r.prototype.startImgAnalyzer=function(t){var i=this;this.stopImgAnalyzerStarter(),this.imgAnalyzerTimeout=setTimeout(function(){i.analyzeImages(t)},.001)},r.prototype.onImageEvent=function(t,i,e){if(i||e){var s=new Image,n=g(s);i&&n.one("load",function(){n.off("load error"),i(s)}),e&&n.one("error",function(){n.off("load error"),e(s)}),s.src=t}},r.prototype.init=function(){var a=!1,h=!1,l=this;g.each(this.entries,function(t,i){var e=g(i),s=l.imgFromEntry(e);if(e.addClass("jg-entry"),!0!==e.data("jg.loaded")&&"skipped"!==e.data("jg.loaded"))if(null!==l.settings.rel&&e.attr("rel",l.settings.rel),null!==l.settings.target&&e.attr("target",l.settings.target),null!==s){var n=l.extractImgSrcFromImage(s);if(s.attr("src",n),!1===l.settings.waitThumbnailsLoad){var r=parseFloat(s.prop("width")),o=parseFloat(s.prop("height"));if(!isNaN(r)&&!isNaN(o))return e.data("jg.width",r),e.data("jg.height",o),e.data("jg.loaded","skipped"),h=!0,l.startImgAnalyzer(!1),!0}e.data("jg.loaded",!1),a=!0,l.isSpinnerActive()||l.startLoadingSpinnerAnimation(),l.onImageEvent(n,function(t){e.data("jg.width",t.width),e.data("jg.height",t.height),e.data("jg.loaded",!0),l.startImgAnalyzer(!1)},function(){e.data("jg.loaded","error"),l.startImgAnalyzer(!1)})}else e.data("jg.loaded",!0),e.data("jg.width",e.width()|parseFloat(e.css("width"))|1),e.data("jg.height",e.height()|parseFloat(e.css("height"))|1)}),a||h||this.startImgAnalyzer(!1),this.checkWidth()},r.prototype.checkOrConvertNumber=function(t,i){if("string"===g.type(t[i])&&(t[i]=parseFloat(t[i])),"number"!==g.type(t[i]))throw i+" must be a number";if(isNaN(t[i]))throw"invalid number for "+i},r.prototype.checkSizeRangesSuffixes=function(){if("object"!==g.type(this.settings.sizeRangeSuffixes))throw"sizeRangeSuffixes must be defined and must be an object";var t=[];for(var i in this.settings.sizeRangeSuffixes)this.settings.sizeRangeSuffixes.hasOwnProperty(i)&&t.push(i);for(var e={0:""},s=0;s<t.length;s++)if("string"===g.type(t[s]))try{e[parseInt(t[s].replace(/^[a-z]+/,""),10)]=this.settings.sizeRangeSuffixes[t[s]]}catch(t){throw"sizeRangeSuffixes keys must contains correct numbers ("+t+")"}else e[t[s]]=this.settings.sizeRangeSuffixes[t[s]];this.settings.sizeRangeSuffixes=e},r.prototype.retrieveMaxRowHeight=function(){var t=null,i=this.settings.rowHeight;if("string"===g.type(this.settings.maxRowHeight))t=this.settings.maxRowHeight.match(/^[0-9]+%$/)?i*parseFloat(this.settings.maxRowHeight.match(/^([0-9]+)%$/)[1])/100:parseFloat(this.settings.maxRowHeight);else{if("number"!==g.type(this.settings.maxRowHeight)){if(!1===this.settings.maxRowHeight||null==this.settings.maxRowHeight)return null;throw"maxRowHeight must be a number or a percentage"}t=this.settings.maxRowHeight}if(isNaN(t))throw"invalid number for maxRowHeight";return t<i&&(t=i),t},r.prototype.checkSettings=function(){this.checkSizeRangesSuffixes(),this.checkOrConvertNumber(this.settings,"rowHeight"),this.checkOrConvertNumber(this.settings,"margins"),this.checkOrConvertNumber(this.settings,"border");var t=["justify","nojustify","left","center","right","hide"];if(-1===t.indexOf(this.settings.lastRow))throw"lastRow must be one of: "+t.join(", ");if(this.checkOrConvertNumber(this.settings,"justifyThreshold"),this.settings.justifyThreshold<0||1<this.settings.justifyThreshold)throw"justifyThreshold must be in the interval [0,1]";if("boolean"!==g.type(this.settings.cssAnimation))throw"cssAnimation must be a boolean";if("boolean"!==g.type(this.settings.captions))throw"captions must be a boolean";if(this.checkOrConvertNumber(this.settings.captionSettings,"animationDuration"),this.checkOrConvertNumber(this.settings.captionSettings,"visibleOpacity"),this.settings.captionSettings.visibleOpacity<0||1<this.settings.captionSettings.visibleOpacity)throw"captionSettings.visibleOpacity must be in the interval [0, 1]";if(this.checkOrConvertNumber(this.settings.captionSettings,"nonVisibleOpacity"),this.settings.captionSettings.nonVisibleOpacity<0||1<this.settings.captionSettings.nonVisibleOpacity)throw"captionSettings.nonVisibleOpacity must be in the interval [0, 1]";if(this.checkOrConvertNumber(this.settings,"imagesAnimationDuration"),this.checkOrConvertNumber(this.settings,"refreshTime"),this.checkOrConvertNumber(this.settings,"refreshSensitivity"),"boolean"!==g.type(this.settings.randomize))throw"randomize must be a boolean";if("string"!==g.type(this.settings.selector))throw"selector must be a string";if(!1!==this.settings.sort&&!g.isFunction(this.settings.sort))throw"sort must be false or a comparison function";if(!1!==this.settings.filter&&!g.isFunction(this.settings.filter)&&"string"!==g.type(this.settings.filter))throw"filter must be false, a string or a filter function"},r.prototype.retrieveSuffixRanges=function(){var t=[];for(var i in this.settings.sizeRangeSuffixes)this.settings.sizeRangeSuffixes.hasOwnProperty(i)&&t.push(parseInt(i,10));return t.sort(function(t,i){return i<t?1:t<i?-1:0}),t},r.prototype.updateSettings=function(t){this.settings=g.extend({},this.settings,t),this.checkSettings(),this.border=0<=this.settings.border?this.settings.border:this.settings.margins,this.maxRowHeight=this.retrieveMaxRowHeight(),this.suffixRanges=this.retrieveSuffixRanges()},r.prototype.defaults={sizeRangeSuffixes:{},thumbnailPath:void 0,rowHeight:120,maxRowHeight:!1,margins:1,border:-1,lastRow:"nojustify",justifyThreshold:.9,waitThumbnailsLoad:!0,captions:!0,cssAnimation:!0,imagesAnimationDuration:500,captionSettings:{animationDuration:500,visibleOpacity:.7,nonVisibleOpacity:0},rel:null,target:null,extension:/\.[^.\\/]+$/,refreshTime:200,refreshSensitivity:0,randomize:!1,rtl:!1,sort:!1,filter:!1,selector:"a, div:not(.spinner)",imgSelector:"> img, > a > img",triggerEvent:function(t){this.$gallery.trigger(t)}},g.fn.justifiedGallery=function(n){return this.each(function(t,i){var e=g(i);e.addClass("justified-gallery");var s=e.data("jg.controller");if(void 0===s){if(null!=n&&"object"!==g.type(n)){if("destroy"===n)return;throw"The argument must be an object"}s=new r(e,g.extend({},r.prototype.defaults,n)),e.data("jg.controller",s)}else if("norewind"===n);else{if("destroy"===n)return void s.destroy();s.updateSettings(n),s.rewind()}s.updateEntries("norewind"===n)&&s.init()})}});
|
base.php
CHANGED
@@ -9,13 +9,12 @@ namespace Happy_Addons\Elementor;
|
|
9 |
use Happy_Addons\Elementor\Manager\Assets;
|
10 |
use Happy_Addons\Elementor\Manager\Widgets;
|
11 |
use Happy_Addons\Elementor\Extension\Happy_Effects;
|
12 |
-
use Happy_Addons\Elementor\Admin\Dashboard;
|
13 |
|
14 |
defined( 'ABSPATH' ) || die();
|
15 |
|
16 |
class Base {
|
17 |
|
18 |
-
const VERSION = '1.
|
19 |
|
20 |
const MINIMUM_ELEMENTOR_VERSION = '2.5.0';
|
21 |
|
@@ -69,7 +68,6 @@ class Base {
|
|
69 |
Widgets::init();
|
70 |
Assets::init();
|
71 |
Happy_Effects::init();
|
72 |
-
// Dashboard::init();
|
73 |
}
|
74 |
|
75 |
public function include_files() {
|
@@ -78,7 +76,10 @@ class Base {
|
|
78 |
require( __DIR__ . '/classes/widget-manager.php' );
|
79 |
require( __DIR__ . '/classes/asset-manager.php' );
|
80 |
require( __DIR__ . '/classes/happy-effects.php' );
|
81 |
-
|
|
|
|
|
|
|
82 |
}
|
83 |
|
84 |
/**
|
9 |
use Happy_Addons\Elementor\Manager\Assets;
|
10 |
use Happy_Addons\Elementor\Manager\Widgets;
|
11 |
use Happy_Addons\Elementor\Extension\Happy_Effects;
|
|
|
12 |
|
13 |
defined( 'ABSPATH' ) || die();
|
14 |
|
15 |
class Base {
|
16 |
|
17 |
+
const VERSION = '1.2.0';
|
18 |
|
19 |
const MINIMUM_ELEMENTOR_VERSION = '2.5.0';
|
20 |
|
68 |
Widgets::init();
|
69 |
Assets::init();
|
70 |
Happy_Effects::init();
|
|
|
71 |
}
|
72 |
|
73 |
public function include_files() {
|
76 |
require( __DIR__ . '/classes/widget-manager.php' );
|
77 |
require( __DIR__ . '/classes/asset-manager.php' );
|
78 |
require( __DIR__ . '/classes/happy-effects.php' );
|
79 |
+
|
80 |
+
if ( is_admin() ) {
|
81 |
+
require( __DIR__ . '/classes/class.communicator.php' );
|
82 |
+
}
|
83 |
}
|
84 |
|
85 |
/**
|
base/widget-base.php
CHANGED
@@ -69,15 +69,6 @@ abstract class Base extends Widget_Base {
|
|
69 |
return rtrim( $html_class );
|
70 |
}
|
71 |
|
72 |
-
/**
|
73 |
-
* Register design controls
|
74 |
-
*
|
75 |
-
* Design controls are fixed for all widgets
|
76 |
-
*/
|
77 |
-
private function register_design_controls() {
|
78 |
-
|
79 |
-
}
|
80 |
-
|
81 |
/**
|
82 |
* Register faq controls
|
83 |
*/
|
@@ -94,7 +85,7 @@ abstract class Base extends Widget_Base {
|
|
94 |
'_faq_notes',
|
95 |
[
|
96 |
'type' => Controls_Manager::RAW_HTML,
|
97 |
-
'raw' => __( 'A very important message to show in the panel.', '
|
98 |
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
|
99 |
]
|
100 |
);
|
69 |
return rtrim( $html_class );
|
70 |
}
|
71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
/**
|
73 |
* Register faq controls
|
74 |
*/
|
85 |
'_faq_notes',
|
86 |
[
|
87 |
'type' => Controls_Manager::RAW_HTML,
|
88 |
+
'raw' => __( 'A very important message to show in the panel.', 'happy-elementor-addons' ),
|
89 |
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
|
90 |
]
|
91 |
);
|
classes/asset-manager.php
CHANGED
@@ -12,7 +12,7 @@ class Assets {
|
|
12 |
*/
|
13 |
public static function init() {
|
14 |
// Frontend scripts
|
15 |
-
add_action( '
|
16 |
|
17 |
// Dashboard scripts
|
18 |
add_action( 'admin_enqueue_scripts', [__CLASS__, 'dashboard_enqueue_scripts'] );
|
@@ -50,6 +50,34 @@ class Assets {
|
|
50 |
Base::VERSION
|
51 |
);
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
wp_enqueue_style(
|
54 |
'happy-elementor-addons',
|
55 |
HAPPY_ASSETS . 'css/main' . $suffix . 'css',
|
@@ -74,6 +102,38 @@ class Assets {
|
|
74 |
true
|
75 |
);
|
76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
wp_enqueue_script(
|
78 |
'anime',
|
79 |
HAPPY_ASSETS . 'vendor/anime/lib/anime.min.js',
|
@@ -85,7 +145,7 @@ class Assets {
|
|
85 |
wp_enqueue_script(
|
86 |
'happy-elementor-addons',
|
87 |
HAPPY_ASSETS . 'js/happy-addons' . $suffix . 'js',
|
88 |
-
['jquery', '
|
89 |
Base::VERSION,
|
90 |
true
|
91 |
);
|
@@ -129,7 +189,7 @@ class Assets {
|
|
129 |
}
|
130 |
|
131 |
public static function enqueue_preview_style() {
|
132 |
-
if( class_exists( 'WeForms' ) ) {
|
133 |
wp_enqueue_style(
|
134 |
'happy-elementor-weform-preview',
|
135 |
plugins_url( '/weforms/assets/wpuf/css/frontend-forms.css', 'weforms' ),
|
@@ -137,7 +197,8 @@ class Assets {
|
|
137 |
Base::VERSION
|
138 |
);
|
139 |
}
|
140 |
-
|
|
|
141 |
wp_enqueue_style(
|
142 |
'happy-elementor-wpform-preview',
|
143 |
plugins_url( '/wpforms-lite/assets/css/wpforms-full.css', 'wpforms-lite' ),
|
@@ -145,7 +206,8 @@ class Assets {
|
|
145 |
Base::VERSION
|
146 |
);
|
147 |
}
|
148 |
-
|
|
|
149 |
wp_enqueue_style(
|
150 |
'happy-elementor-caldera-preview',
|
151 |
plugins_url( '/caldera-forms/assets/css/caldera-forms-front.css', 'caldera-forms' ),
|
12 |
*/
|
13 |
public static function init() {
|
14 |
// Frontend scripts
|
15 |
+
add_action( 'elementor/frontend/after_enqueue_scripts', [__CLASS__, 'enqueue_frontend_scripts'] );
|
16 |
|
17 |
// Dashboard scripts
|
18 |
add_action( 'admin_enqueue_scripts', [__CLASS__, 'dashboard_enqueue_scripts'] );
|
50 |
Base::VERSION
|
51 |
);
|
52 |
|
53 |
+
wp_enqueue_style(
|
54 |
+
'justifiedGallery',
|
55 |
+
HAPPY_ASSETS . 'vendor/justifiedGallery/css/justifiedGallery.min.css',
|
56 |
+
null,
|
57 |
+
Base::VERSION
|
58 |
+
);
|
59 |
+
|
60 |
+
wp_enqueue_style(
|
61 |
+
'magnific-popup',
|
62 |
+
HAPPY_ASSETS . 'vendor/magnific-popup/magnific-popup.css',
|
63 |
+
null,
|
64 |
+
Base::VERSION
|
65 |
+
);
|
66 |
+
|
67 |
+
wp_enqueue_style(
|
68 |
+
'slick',
|
69 |
+
HAPPY_ASSETS . 'vendor/slick/slick.css',
|
70 |
+
null,
|
71 |
+
Base::VERSION
|
72 |
+
);
|
73 |
+
|
74 |
+
wp_enqueue_style(
|
75 |
+
'slick-theme',
|
76 |
+
HAPPY_ASSETS . 'vendor/slick/slick-theme.css',
|
77 |
+
null,
|
78 |
+
Base::VERSION
|
79 |
+
);
|
80 |
+
|
81 |
wp_enqueue_style(
|
82 |
'happy-elementor-addons',
|
83 |
HAPPY_ASSETS . 'css/main' . $suffix . 'css',
|
102 |
true
|
103 |
);
|
104 |
|
105 |
+
wp_enqueue_script(
|
106 |
+
'jquery-justifiedGallery',
|
107 |
+
HAPPY_ASSETS . 'vendor/justifiedGallery/js/jquery.justifiedGallery.min.js',
|
108 |
+
['jquery'],
|
109 |
+
Base::VERSION,
|
110 |
+
true
|
111 |
+
);
|
112 |
+
|
113 |
+
wp_enqueue_script(
|
114 |
+
'jquery-magnific-popup',
|
115 |
+
HAPPY_ASSETS . 'vendor/magnific-popup/jquery.magnific-popup.min.js',
|
116 |
+
['jquery'],
|
117 |
+
Base::VERSION,
|
118 |
+
true
|
119 |
+
);
|
120 |
+
|
121 |
+
wp_enqueue_script(
|
122 |
+
'jquery-isotope',
|
123 |
+
HAPPY_ASSETS . 'vendor/jquery.isotope.js',
|
124 |
+
['jquery'],
|
125 |
+
Base::VERSION,
|
126 |
+
true
|
127 |
+
);
|
128 |
+
|
129 |
+
wp_enqueue_script(
|
130 |
+
'jquery-slick',
|
131 |
+
HAPPY_ASSETS . 'vendor/slick/slick' . $suffix . 'js',
|
132 |
+
['jquery'],
|
133 |
+
Base::VERSION,
|
134 |
+
true
|
135 |
+
);
|
136 |
+
|
137 |
wp_enqueue_script(
|
138 |
'anime',
|
139 |
HAPPY_ASSETS . 'vendor/anime/lib/anime.min.js',
|
145 |
wp_enqueue_script(
|
146 |
'happy-elementor-addons',
|
147 |
HAPPY_ASSETS . 'js/happy-addons' . $suffix . 'js',
|
148 |
+
['imagesloaded', 'jquery-slick', 'jquery'],
|
149 |
Base::VERSION,
|
150 |
true
|
151 |
);
|
189 |
}
|
190 |
|
191 |
public static function enqueue_preview_style() {
|
192 |
+
if ( class_exists( 'WeForms' ) ) {
|
193 |
wp_enqueue_style(
|
194 |
'happy-elementor-weform-preview',
|
195 |
plugins_url( '/weforms/assets/wpuf/css/frontend-forms.css', 'weforms' ),
|
197 |
Base::VERSION
|
198 |
);
|
199 |
}
|
200 |
+
|
201 |
+
if ( class_exists( 'WPForms_Lite' ) ) {
|
202 |
wp_enqueue_style(
|
203 |
'happy-elementor-wpform-preview',
|
204 |
plugins_url( '/wpforms-lite/assets/css/wpforms-full.css', 'wpforms-lite' ),
|
206 |
Base::VERSION
|
207 |
);
|
208 |
}
|
209 |
+
|
210 |
+
if ( class_exists( 'Caldera_Forms' ) ) {
|
211 |
wp_enqueue_style(
|
212 |
'happy-elementor-caldera-preview',
|
213 |
plugins_url( '/caldera-forms/assets/css/caldera-forms-front.css', 'caldera-forms' ),
|
classes/class.communicator.php
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Happy_Addons\Communication;
|
4 |
+
|
5 |
+
defined( 'ABSPATH' ) || die();
|
6 |
+
|
7 |
+
define( 'HAPPY_API_COMMUNICATION_ENDPOINT', 'https://happyaddons.com/communication.php' );
|
8 |
+
|
9 |
+
if ( ! ha_is_localhost() ) {
|
10 |
+
define( 'HAPPY_API_COMMUNICATION_CHECK_INTERVAL', ( DAY_IN_SECONDS / 2 ) );
|
11 |
+
} else {
|
12 |
+
define( 'HAPPY_API_COMMUNICATION_CHECK_INTERVAL', 60 );
|
13 |
+
}
|
14 |
+
|
15 |
+
class Communicator {
|
16 |
+
|
17 |
+
public function __construct() {
|
18 |
+
add_action( 'admin_menu', function () {
|
19 |
+
$last_message = get_option( 'happyaddons_message', [ 'digest' => '404' ] );
|
20 |
+
$next_communication_time = get_option( 'happyaddons_communication_time', 0 );
|
21 |
+
|
22 |
+
if ( $next_communication_time < time() ) {
|
23 |
+
//make a call
|
24 |
+
$happy_data = wp_remote_get( HAPPY_API_COMMUNICATION_ENDPOINT . '?s=happy&action=notice' );
|
25 |
+
|
26 |
+
if ( is_array( $happy_data ) ) {
|
27 |
+
$body = json_decode( wp_remote_retrieve_body( $happy_data ), true );
|
28 |
+
if ( is_array( $body ) ) {
|
29 |
+
if ( $body['digest'] != $last_message['digest'] ) {
|
30 |
+
$options = [
|
31 |
+
'happyaddons_message' => $body,
|
32 |
+
'happyaddons_communication_time' => time() + HAPPY_API_COMMUNICATION_CHECK_INTERVAL,
|
33 |
+
'happyaddons_message_dismissed' => 0
|
34 |
+
];
|
35 |
+
foreach ( $options as $key => $value ) {
|
36 |
+
update_option( $key, $value );
|
37 |
+
}
|
38 |
+
}
|
39 |
+
} else {
|
40 |
+
$options = [
|
41 |
+
'happyaddons_communication_time' => time() + HAPPY_API_COMMUNICATION_CHECK_INTERVAL,
|
42 |
+
];
|
43 |
+
foreach ( $options as $key => $value ) {
|
44 |
+
update_option( $key, $value );
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
add_action( 'admin_notices', [ $this, 'display_admin_notice' ] );
|
51 |
+
} );
|
52 |
+
|
53 |
+
add_action( 'wp_ajax_happyaddons_dismiss_error', function () {
|
54 |
+
if ( wp_verify_nonce( $_POST['nonce'], 'happyaddons_dismiss_error' ) ) {
|
55 |
+
update_option( 'happyaddons_message_dismissed', '1' );
|
56 |
+
die();
|
57 |
+
}
|
58 |
+
} );
|
59 |
+
|
60 |
+
add_action( 'admin_footer', function () {
|
61 |
+
?>
|
62 |
+
<script>
|
63 |
+
;(function ($) {
|
64 |
+
$(document).ready(function () {
|
65 |
+
|
66 |
+
$('body').on('click', '#happyaddons_remote_notice .notice-dismiss', function () {
|
67 |
+
$.post('<?php echo admin_url( 'admin-ajax.php' ); ?>', {
|
68 |
+
action: 'happyaddons_dismiss_error',
|
69 |
+
nonce: $('#happyaddons_remote_dismiss').val()
|
70 |
+
}, function (data) {
|
71 |
+
//console.log(data);
|
72 |
+
});
|
73 |
+
return false;
|
74 |
+
});
|
75 |
+
})
|
76 |
+
})(jQuery);
|
77 |
+
</script>
|
78 |
+
|
79 |
+
<?php
|
80 |
+
} );
|
81 |
+
}
|
82 |
+
|
83 |
+
function display_admin_notice() {
|
84 |
+
$last_message = get_option( 'happyaddons_message', [] );
|
85 |
+
|
86 |
+
if ( is_array( $last_message ) && count( $last_message ) > 0 ) {
|
87 |
+
$dismissed = get_option( 'happyaddons_message_dismissed', 1 );
|
88 |
+
if ( $dismissed == 0 && trim( $last_message['message'] != '' ) ) {
|
89 |
+
$message_body = isset( $last_message['message'] ) ? $last_message['message'] : '';
|
90 |
+
$action_button_title = isset( $last_message['action'] ) ? $last_message['action'] : '';
|
91 |
+
$action_button_url = isset( $last_message['url'] ) ? $last_message['url'] : '';
|
92 |
+
$message_style = isset( $last_message['style'] ) ? $last_message['style'] : '';
|
93 |
+
?>
|
94 |
+
<div id="happyaddons_remote_notice" class="notice notice-<?php echo $message_style; ?> is-dismissible">
|
95 |
+
<?php wp_nonce_field( 'happyaddons_dismiss_error', 'happyaddons_remote_dismiss' ); ?>
|
96 |
+
<div class="happyaddons-massage wp-clearfix"><?php echo $message_body; ?></div>
|
97 |
+
<?php if ( $action_button_title ): ?>
|
98 |
+
<p><a class="button button-primary"
|
99 |
+
href="<?php echo esc_url( $action_button_url ); ?>"><?php echo esc_html( $action_button_title ); ?></a>
|
100 |
+
</p>
|
101 |
+
<?php endif; ?>
|
102 |
+
</div>
|
103 |
+
<?php
|
104 |
+
}
|
105 |
+
}
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
new Communicator();
|
classes/dashboard.php
DELETED
@@ -1,38 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Happy_Addons\Elementor\Admin;
|
3 |
-
|
4 |
-
use Elementor\Base;
|
5 |
-
|
6 |
-
defined( 'ABSPATH' ) || die();
|
7 |
-
|
8 |
-
class Dashboard {
|
9 |
-
|
10 |
-
public static function init() {
|
11 |
-
add_action( 'admin_menu', [__CLASS__, 'happy_admin_menu'], 515 );
|
12 |
-
}
|
13 |
-
|
14 |
-
public static function happy_admin_menu() {
|
15 |
-
add_submenu_page(
|
16 |
-
'elementor',
|
17 |
-
__( 'Happy Addons', 'happy-elementor-addons' ),
|
18 |
-
__( 'Happy Addons', 'happy-elementor-addons' ),
|
19 |
-
'manage_options',
|
20 |
-
'happy-settings',
|
21 |
-
array( __CLASS__, 'happy_admin_settings' )
|
22 |
-
);
|
23 |
-
}
|
24 |
-
|
25 |
-
public static function happy_admin_settings() {
|
26 |
-
echo '<div class="happy-settings">';
|
27 |
-
|
28 |
-
include_once HAPPY_DIR_PATH . 'inc/admin-templates/widgets.php';
|
29 |
-
include_once HAPPY_DIR_PATH . 'inc/admin-templates/save.php';
|
30 |
-
|
31 |
-
echo '</div>';
|
32 |
-
}
|
33 |
-
|
34 |
-
// public function save_settings() {
|
35 |
-
//
|
36 |
-
// }
|
37 |
-
|
38 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/widget-manager.php
CHANGED
@@ -6,6 +6,9 @@ use Elementor\Plugin as Elementor;
|
|
6 |
defined( 'ABSPATH' ) || die();
|
7 |
|
8 |
class Widgets {
|
|
|
|
|
|
|
9 |
public static function init() {
|
10 |
add_action( 'elementor/widgets/widgets_registered', [__CLASS__, 'register'] );
|
11 |
}
|
@@ -30,18 +33,27 @@ class Widgets {
|
|
30 |
'member',
|
31 |
'review',
|
32 |
'image-compare',
|
|
|
33 |
'skills',
|
34 |
'gradient-heading',
|
35 |
'wpform',
|
36 |
'ninjaform',
|
37 |
'calderaform',
|
38 |
'weform',
|
|
|
39 |
'dual-button',
|
40 |
'testimonial',
|
|
|
41 |
];
|
42 |
|
43 |
foreach ( $widgets as $widget ) {
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
|
46 |
$class_name = str_replace( '-', '_', $widget );
|
47 |
$class_name = 'Happy_Addons\Elementor\Widget\\' . $class_name;
|
6 |
defined( 'ABSPATH' ) || die();
|
7 |
|
8 |
class Widgets {
|
9 |
+
/**
|
10 |
+
* Initialize
|
11 |
+
*/
|
12 |
public static function init() {
|
13 |
add_action( 'elementor/widgets/widgets_registered', [__CLASS__, 'register'] );
|
14 |
}
|
33 |
'member',
|
34 |
'review',
|
35 |
'image-compare',
|
36 |
+
'justified-gallery',
|
37 |
'skills',
|
38 |
'gradient-heading',
|
39 |
'wpform',
|
40 |
'ninjaform',
|
41 |
'calderaform',
|
42 |
'weform',
|
43 |
+
'logo-grid',
|
44 |
'dual-button',
|
45 |
'testimonial',
|
46 |
+
'number',
|
47 |
];
|
48 |
|
49 |
foreach ( $widgets as $widget ) {
|
50 |
+
$widget_file = HAPPY_DIR_PATH . 'widgets/' . $widget . '/widget.php';
|
51 |
+
|
52 |
+
if ( ! is_readable( $widget_file ) ) {
|
53 |
+
continue;
|
54 |
+
}
|
55 |
+
|
56 |
+
include( $widget_file );
|
57 |
|
58 |
$class_name = str_replace( '-', '_', $widget );
|
59 |
$class_name = 'Happy_Addons\Elementor\Widget\\' . $class_name;
|
inc/admin-templates/save.php
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<div class="ha-button-wrap">
|
2 |
-
<div class="brand">
|
3 |
-
<?php _e( 'Happy Elementor Addons', 'happy-elementor-addons' ); ?>
|
4 |
-
</div>
|
5 |
-
<button type="submit" class="ha-save-button">
|
6 |
-
<?php _e('Save settings', 'happy-elementor-addons'); ?>
|
7 |
-
</button>
|
8 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/admin-templates/widgets.php
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
<div id="widgets" class="ha-settings-tab">
|
2 |
-
<div class="row">
|
3 |
-
<div class="ha-container">
|
4 |
-
<p class="ha-elements-control-notice">
|
5 |
-
<?php _e( 'You can disable the elements you are not using on your site. That will disable all associated assets of those widgets to improve your site loading.', 'happy-elementor-addons' ) ?>
|
6 |
-
</p>
|
7 |
-
<div class="checkbox-wrapper">
|
8 |
-
<div class="ha-checkbox">
|
9 |
-
<?php _e( 'Card', 'happy-elementor-addons' ); ?>
|
10 |
-
<label class="ha-switch" for="card">
|
11 |
-
<input type="checkbox" checked id="card" name="card">
|
12 |
-
<span class="ha-slider round"></span>
|
13 |
-
</label>
|
14 |
-
</div>
|
15 |
-
<div class="ha-checkbox">
|
16 |
-
<?php _e( 'Info Box', 'happy-elementor-addons' ); ?>
|
17 |
-
<label class="ha-switch" for="info">
|
18 |
-
<input type="checkbox" id="info" name="info">
|
19 |
-
<span class="ha-slider round"></span>
|
20 |
-
</label>
|
21 |
-
</div>
|
22 |
-
</div>
|
23 |
-
</div>
|
24 |
-
</div>
|
25 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/functions.php
CHANGED
@@ -277,3 +277,7 @@ function ha_get_setting_value( &$settings, $keys ) {
|
|
277 |
}
|
278 |
return $settings[ $keys[0] ];
|
279 |
}
|
|
|
|
|
|
|
|
277 |
}
|
278 |
return $settings[ $keys[0] ];
|
279 |
}
|
280 |
+
|
281 |
+
function ha_is_localhost() {
|
282 |
+
return isset( $_SERVER['REMOTE_ADDR'] ) && in_array( $_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'] );
|
283 |
+
}
|
plugin.php
CHANGED
@@ -3,9 +3,9 @@
|
|
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: 1.
|
7 |
* Author: HappyMonster
|
8 |
-
* Author URI: https://
|
9 |
* License: GPLv2
|
10 |
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
11 |
* Text Domain: happy-elementor-addons
|
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: 1.2.0
|
7 |
* Author: HappyMonster
|
8 |
+
* Author URI: https://happyaddons.com/
|
9 |
* License: GPLv2
|
10 |
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
11 |
* Text Domain: happy-elementor-addons
|
readme.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
=== Happy Elementor Addons ===
|
2 |
Plugin Name: Happy Elementor Addons
|
3 |
-
Version: 1.
|
4 |
Author: HappyMonster
|
5 |
Author URI: https://happyaddons.com/
|
6 |
Contributors: thehappymonster, happyaddons, hasinhayder, obiplabon, sourav926
|
@@ -17,7 +17,7 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
|
17 |
|
18 |
[HappyAddons](https://happyaddons.com/) 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. [HappyAddons](https://happyaddons.com/) is free, rapidly growing and comes with great support.
|
19 |
|
20 |
-
### Included Free Widgets
|
21 |
|
22 |
1. **[Card](https://happyaddons.com/elementor-card-widget-demo/)** - Incredibly powerful widget to demonstrate your products, articles, news, creative posts using a beautiful combination of texts, links, badge and image. Using built in positioning and offset feature you can create eye-candy designs in a twist. [Check demo](https://happyaddons.com/elementor-card-widget-demo/)
|
23 |
2. **[Gradient Heading](https://happyaddons.com/elementor-gradient-heading-widget-demo/)** - Another gem to create eye candy headings for your websites. You can apply different gradient styles, angles, opacity, and positions to make them look even better across different device screens. [Check demo](https://happyaddons.com/elementor-gradient-heading-widget-demo/)
|
@@ -31,15 +31,20 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
|
31 |
10. **[ Caldera Forms](https://happyaddons.com/elementor-caldera-forms-widget-demo/)** - This widget can help you to display your caldera forms to display on your web pages designed with Elementor. [Check demo](https://happyaddons.com/elementor-caldera-forms-widget-demo/)
|
32 |
11. **[weForms](https://happyaddons.com/elementor-we-forms-widget-demo/)** - Designed forms using weForms plugin and looking for a way to display those on your Elementor powered pages? This is the answer for that. [Check demo](https://happyaddons.com/elementor-we-forms-widget-demo/)
|
33 |
12. **[Ninja Forms](https://happyaddons.com/elementor-ninja-form-widget-demo/)** - Use this widget to embed forms created using Ninja Forms to display seamlessly on your web pages. Various styling options will help you to look at them even better. [Check demo](https://happyaddons.com/elementor-ninja-form-widget-demo/)
|
34 |
-
13. **[WPForms](https://happyaddons.com/elementor-wpform-widget-demo/)** - Use this widget to embed forms created using WPForms to display seamlessly on your web pages. Various styling options will help you to look at them even better.
|
35 |
-
14. **[Dual Button](https://happyaddons.com/elementor-dual-button-widget-demo/)** - DualButton widget allows you to add two flexible and trendy action buttons in your sections, in different styles.
|
36 |
-
15. **Testimonial**
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
### Included Free Extensions
|
39 |
**Happy Effects**
|
40 |
|
41 |
-
1. **[Floating Effects](https://happyaddons.com/elementor-floating-effect-demo/)**
|
42 |
-
2. **[CSS Transform](https://happyaddons.com/elementor-css-transform-demo/)**
|
43 |
|
44 |
https://www.youtube.com/watch?v=LmtacsLcFPU
|
45 |
|
@@ -91,6 +96,12 @@ It's really easy and super simple to install **Happy Elementor Addons** plugin b
|
|
91 |
|
92 |
== Changelog ==
|
93 |
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
= 1.1.1 =
|
95 |
|
96 |
* New: Testimonial Widget
|
1 |
=== Happy Elementor Addons ===
|
2 |
Plugin Name: Happy Elementor Addons
|
3 |
+
Version: 1.2.0
|
4 |
Author: HappyMonster
|
5 |
Author URI: https://happyaddons.com/
|
6 |
Contributors: thehappymonster, happyaddons, hasinhayder, obiplabon, sourav926
|
17 |
|
18 |
[HappyAddons](https://happyaddons.com/) 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. [HappyAddons](https://happyaddons.com/) is free, rapidly growing and comes with great support.
|
19 |
|
20 |
+
### Included 18 Free Widgets
|
21 |
|
22 |
1. **[Card](https://happyaddons.com/elementor-card-widget-demo/)** - Incredibly powerful widget to demonstrate your products, articles, news, creative posts using a beautiful combination of texts, links, badge and image. Using built in positioning and offset feature you can create eye-candy designs in a twist. [Check demo](https://happyaddons.com/elementor-card-widget-demo/)
|
23 |
2. **[Gradient Heading](https://happyaddons.com/elementor-gradient-heading-widget-demo/)** - Another gem to create eye candy headings for your websites. You can apply different gradient styles, angles, opacity, and positions to make them look even better across different device screens. [Check demo](https://happyaddons.com/elementor-gradient-heading-widget-demo/)
|
31 |
10. **[ Caldera Forms](https://happyaddons.com/elementor-caldera-forms-widget-demo/)** - This widget can help you to display your caldera forms to display on your web pages designed with Elementor. [Check demo](https://happyaddons.com/elementor-caldera-forms-widget-demo/)
|
32 |
11. **[weForms](https://happyaddons.com/elementor-we-forms-widget-demo/)** - Designed forms using weForms plugin and looking for a way to display those on your Elementor powered pages? This is the answer for that. [Check demo](https://happyaddons.com/elementor-we-forms-widget-demo/)
|
33 |
12. **[Ninja Forms](https://happyaddons.com/elementor-ninja-form-widget-demo/)** - Use this widget to embed forms created using Ninja Forms to display seamlessly on your web pages. Various styling options will help you to look at them even better. [Check demo](https://happyaddons.com/elementor-ninja-form-widget-demo/)
|
34 |
+
13. **[WPForms](https://happyaddons.com/elementor-wpform-widget-demo/)** - Use this widget to embed forms created using WPForms to display seamlessly on your web pages. Various styling options will help you to look at them even better. [Check demo](https://happyaddons.com/elementor-wpform-widget-demo/)
|
35 |
+
14. **[Dual Button](https://happyaddons.com/elementor-dual-button-widget-demo/)** - DualButton widget allows you to add two flexible and trendy action buttons in your sections, in different styles. [Check demo](https://happyaddons.com/elementor-dual-button-widget-demo/)
|
36 |
+
15. **[Testimonial](https://happyaddons.com/elementor-testimonial-widget-demo/)** - Create beautiful testimonial sections with different look-n-feels using HappyAddons Testimonial widget. [Check demo](https://happyaddons.com/elementor-testimonial-widget-demo/)
|
37 |
+
16. **[Justified Grid](https://happyaddons.com/elementor-justified-grid-widget-demo/)** - Another pro grade widget which can help you to create beautiful justified grid. Comes packed with tons of options to make it stand out from the crowd. [Check demo](https://happyaddons.com/elementor-justified-grid-widget-demo/)
|
38 |
+
17. **[Number](https://happyaddons.com/elementor-number-widget-demo/)** - Simply beautiful, this widget can help you create stunning number blocks with various styles, look-n-feels that’s literally going to blow your mind. [Check demo](https://happyaddons.com/elementor-number-widget-demo/)
|
39 |
+
18. **Logo Grid** - Our happy design team is working hard to cook some awesome demo designs for you. [Subscribe to happy newsletter](https://happyaddons.com/) to smell what the design team is cooking :D
|
40 |
+
19. **Carousel** - ETA 23 July, 2019
|
41 |
+
20. **Slider** - ETA 23 July, 2019
|
42 |
|
43 |
### Included Free Extensions
|
44 |
**Happy Effects**
|
45 |
|
46 |
+
1. **[Floating Effects](https://happyaddons.com/elementor-floating-effect-demo/)** - Now you can create stunning animations for any Elementor widget using Floating Effects. Translate, Rotate or Scale - Imagination is the limit!
|
47 |
+
2. **[CSS Transform](https://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.
|
48 |
|
49 |
https://www.youtube.com/watch?v=LmtacsLcFPU
|
50 |
|
96 |
|
97 |
== Changelog ==
|
98 |
|
99 |
+
= 1.2.0 =
|
100 |
+
|
101 |
+
* New: Justified Grid Widget
|
102 |
+
* New: Logo Grid Widget
|
103 |
+
* New: Number Widget
|
104 |
+
|
105 |
= 1.1.1 =
|
106 |
|
107 |
* New: Testimonial Widget
|
widgets/card/widget.php
CHANGED
@@ -991,7 +991,7 @@ class Card extends Base {
|
|
991 |
|
992 |
protected function render() {
|
993 |
$settings = $this->get_settings_for_display();
|
994 |
-
|
995 |
$this->add_inline_editing_attributes( 'badge_text', 'none' );
|
996 |
$this->add_render_attribute(
|
997 |
'badge_text',
|
991 |
|
992 |
protected function render() {
|
993 |
$settings = $this->get_settings_for_display();
|
994 |
+
|
995 |
$this->add_inline_editing_attributes( 'badge_text', 'none' );
|
996 |
$this->add_render_attribute(
|
997 |
'badge_text',
|
widgets/image-compare/widget.php
CHANGED
@@ -242,7 +242,7 @@ class Image_Compare extends Base {
|
|
242 |
$this->add_control(
|
243 |
'_heading_bar',
|
244 |
[
|
245 |
-
'label' => __( 'Handle Bar', '
|
246 |
'type' => Controls_Manager::HEADING,
|
247 |
'separator' => 'before',
|
248 |
]
|
@@ -270,7 +270,7 @@ class Image_Compare extends Base {
|
|
270 |
$this->add_control(
|
271 |
'_heading_arrow',
|
272 |
[
|
273 |
-
'label' => __( 'Handle Arrow', '
|
274 |
'type' => Controls_Manager::HEADING,
|
275 |
'separator' => 'before',
|
276 |
]
|
242 |
$this->add_control(
|
243 |
'_heading_bar',
|
244 |
[
|
245 |
+
'label' => __( 'Handle Bar', 'happy-elementor-addons' ),
|
246 |
'type' => Controls_Manager::HEADING,
|
247 |
'separator' => 'before',
|
248 |
]
|
270 |
$this->add_control(
|
271 |
'_heading_arrow',
|
272 |
[
|
273 |
+
'label' => __( 'Handle Arrow', 'happy-elementor-addons' ),
|
274 |
'type' => Controls_Manager::HEADING,
|
275 |
'separator' => 'before',
|
276 |
]
|
widgets/infobox/widget.php
CHANGED
@@ -392,7 +392,7 @@ class InfoBox extends Base {
|
|
392 |
$this->add_control(
|
393 |
'offset_toggle',
|
394 |
[
|
395 |
-
'label' => __( 'Offset', '
|
396 |
'type' => Controls_Manager::POPOVER_TOGGLE,
|
397 |
'label_off' => __( 'None', 'your-plugin' ),
|
398 |
'label_on' => __( 'Custom', 'your-plugin' ),
|
392 |
$this->add_control(
|
393 |
'offset_toggle',
|
394 |
[
|
395 |
+
'label' => __( 'Offset', 'happy-elementor-addons' ),
|
396 |
'type' => Controls_Manager::POPOVER_TOGGLE,
|
397 |
'label_off' => __( 'None', 'your-plugin' ),
|
398 |
'label_on' => __( 'Custom', 'your-plugin' ),
|
widgets/justified-gallery/widget.php
ADDED
@@ -0,0 +1,659 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Justified gallery widget class
|
4 |
+
*
|
5 |
+
* @package Happy_Addons
|
6 |
+
*/
|
7 |
+
namespace Happy_Addons\Elementor\Widget;
|
8 |
+
|
9 |
+
use Elementor\Repeater;
|
10 |
+
use Elementor\Controls_Manager;
|
11 |
+
use Elementor\Group_Control_Border;
|
12 |
+
use Elementor\Group_Control_Box_Shadow;
|
13 |
+
use Elementor\Group_Control_Image_Size;
|
14 |
+
use Elementor\Group_Control_Typography;
|
15 |
+
use Elementor\Scheme_Typography;
|
16 |
+
use Elementor\Utils;
|
17 |
+
|
18 |
+
defined( 'ABSPATH' ) || die();
|
19 |
+
|
20 |
+
class Justified_Gallery extends Base {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Get widget title.
|
24 |
+
*
|
25 |
+
* @since 1.0.0
|
26 |
+
* @access public
|
27 |
+
*
|
28 |
+
* @return string Widget title.
|
29 |
+
*/
|
30 |
+
public function get_title() {
|
31 |
+
return __( 'Justified Gallery', 'happy-elementor-addons' );
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get widget icon.
|
36 |
+
*
|
37 |
+
* @since 1.0.0
|
38 |
+
* @access public
|
39 |
+
*
|
40 |
+
* @return string Widget icon.
|
41 |
+
*/
|
42 |
+
public function get_icon() {
|
43 |
+
return 'hm hm-brick-wall';
|
44 |
+
}
|
45 |
+
|
46 |
+
public function get_keywords() {
|
47 |
+
return [ 'gallery', 'image', 'justified', 'filter' ];
|
48 |
+
}
|
49 |
+
|
50 |
+
protected function register_content_controls() {
|
51 |
+
$this->start_controls_section(
|
52 |
+
'_section_gallery',
|
53 |
+
[
|
54 |
+
'label' => __( 'Gallery', 'happy-elementor-addons' ),
|
55 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
56 |
+
]
|
57 |
+
);
|
58 |
+
|
59 |
+
$repeater = new Repeater();
|
60 |
+
|
61 |
+
$repeater->add_control(
|
62 |
+
'filter',
|
63 |
+
[
|
64 |
+
'label' => __( 'Filter Name', 'happy-elementor-addons' ),
|
65 |
+
'type' => Controls_Manager::TEXT,
|
66 |
+
'placeholder' => __( 'Type gallery filter name', 'happy-elementor-addons' ),
|
67 |
+
'description' => __( 'Filter navigation will be built using filter name', 'happy-elementor-addons' ),
|
68 |
+
]
|
69 |
+
);
|
70 |
+
|
71 |
+
$repeater->add_control(
|
72 |
+
'images',
|
73 |
+
[
|
74 |
+
'type' => Controls_Manager::GALLERY,
|
75 |
+
]
|
76 |
+
);
|
77 |
+
|
78 |
+
$this->add_control(
|
79 |
+
'gallery',
|
80 |
+
[
|
81 |
+
'type' => Controls_Manager::REPEATER,
|
82 |
+
'fields' => $repeater->get_controls(),
|
83 |
+
'show_label' => false,
|
84 |
+
'title_field' => 'Filter Group: {{filter}}',
|
85 |
+
'default' => [
|
86 |
+
[
|
87 |
+
'filter' => __( 'Happy', 'happy-elementor-addons' ),
|
88 |
+
]
|
89 |
+
]
|
90 |
+
]
|
91 |
+
);
|
92 |
+
|
93 |
+
$this->add_group_control(
|
94 |
+
Group_Control_Image_Size::get_type(),
|
95 |
+
[
|
96 |
+
'name' => 'thumbnail',
|
97 |
+
'default' => 'medium_large',
|
98 |
+
'separator' => 'before',
|
99 |
+
'exclude' => [
|
100 |
+
'custom'
|
101 |
+
]
|
102 |
+
]
|
103 |
+
);
|
104 |
+
|
105 |
+
$this->end_controls_section();
|
106 |
+
|
107 |
+
$this->start_controls_section(
|
108 |
+
'_section_settings',
|
109 |
+
[
|
110 |
+
'label' => __( 'Settings', 'happy-elementor-addons' ),
|
111 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
112 |
+
]
|
113 |
+
);
|
114 |
+
|
115 |
+
$this->add_control(
|
116 |
+
'show_filter',
|
117 |
+
[
|
118 |
+
'label' => __( 'Show Filter?', 'happy-elementor-addons' ),
|
119 |
+
'type' => Controls_Manager::SWITCHER,
|
120 |
+
'label_on' => __( 'Yes', 'happy-elementor-addons' ),
|
121 |
+
'label_off' => __( 'No', 'happy-elementor-addons' ),
|
122 |
+
'return_value' => 'yes',
|
123 |
+
'description' => __( 'Enable to display filter navigation. Filter navigation will be built using filter name from gallery', 'happy-elementor-addons' )
|
124 |
+
]
|
125 |
+
);
|
126 |
+
|
127 |
+
$this->add_control(
|
128 |
+
'show_all_filter',
|
129 |
+
[
|
130 |
+
'label' => __( 'Show Everything Filter?', 'happy-elementor-addons' ),
|
131 |
+
'type' => Controls_Manager::SWITCHER,
|
132 |
+
'label_on' => __( 'Yes', 'happy-elementor-addons' ),
|
133 |
+
'label_off' => __( 'No', 'happy-elementor-addons' ),
|
134 |
+
'return_value' => 'yes',
|
135 |
+
'default' => 'yes',
|
136 |
+
'description' => __( 'Enable to display everything filter', 'happy-elementor-addons' ),
|
137 |
+
'condition' => [
|
138 |
+
'show_filter' => 'yes'
|
139 |
+
]
|
140 |
+
]
|
141 |
+
);
|
142 |
+
|
143 |
+
$this->add_control(
|
144 |
+
'all_filter_label',
|
145 |
+
[
|
146 |
+
'label' => __( 'Filter Label', 'happy-elementor-addons' ),
|
147 |
+
'type' => Controls_Manager::TEXT,
|
148 |
+
'default' => __( 'All', 'happy-elementor-addons' ),
|
149 |
+
'placeholder' => __( 'Type filter label', 'happy-elementor-addons' ),
|
150 |
+
'description' => __( 'Type everything filter label', 'happy-elementor-addons' ),
|
151 |
+
'condition' => [
|
152 |
+
'show_all_filter' => 'yes',
|
153 |
+
'show_filter' => 'yes'
|
154 |
+
]
|
155 |
+
]
|
156 |
+
);
|
157 |
+
|
158 |
+
$this->add_control(
|
159 |
+
'show_caption',
|
160 |
+
[
|
161 |
+
'label' => __( 'Show Caption?', 'happy-elementor-addons' ),
|
162 |
+
'type' => Controls_Manager::SWITCHER,
|
163 |
+
'label_on' => __( 'Yes', 'happy-elementor-addons' ),
|
164 |
+
'label_off' => __( 'No', 'happy-elementor-addons' ),
|
165 |
+
'return_value' => 'yes',
|
166 |
+
'description' => __( 'Make sure to add image caption otherwise you will not see anything', 'happy-elementor-addons' )
|
167 |
+
]
|
168 |
+
);
|
169 |
+
|
170 |
+
$this->add_control(
|
171 |
+
'row_height',
|
172 |
+
[
|
173 |
+
'label' => __( 'Height', 'happy-elementor-addons' ),
|
174 |
+
'type' => Controls_Manager::SLIDER,
|
175 |
+
'size_units' => [ 'px' ],
|
176 |
+
'default' => [
|
177 |
+
'size' => 150,
|
178 |
+
],
|
179 |
+
'range' => [
|
180 |
+
'px' => [
|
181 |
+
'min' => 50,
|
182 |
+
'max' => 500,
|
183 |
+
],
|
184 |
+
],
|
185 |
+
]
|
186 |
+
);
|
187 |
+
|
188 |
+
$this->add_control(
|
189 |
+
'margins',
|
190 |
+
[
|
191 |
+
'label' => __( 'Margins', 'happy-elementor-addons' ),
|
192 |
+
'type' => Controls_Manager::SLIDER,
|
193 |
+
'size_units' => [ 'px' ],
|
194 |
+
'default' => [
|
195 |
+
'size' => 10,
|
196 |
+
],
|
197 |
+
'range' => [
|
198 |
+
'px' => [
|
199 |
+
'min' => 0,
|
200 |
+
'max' => 100,
|
201 |
+
],
|
202 |
+
],
|
203 |
+
]
|
204 |
+
);
|
205 |
+
|
206 |
+
$this->add_control(
|
207 |
+
'last_row',
|
208 |
+
[
|
209 |
+
'label' => __( 'Last Row', 'happy-elementor-addons' ),
|
210 |
+
'type' => Controls_Manager::SELECT,
|
211 |
+
'default' => 'justify',
|
212 |
+
'options' => [
|
213 |
+
'nojustify' => __( 'No Justify', 'happy-elementor-addons' ),
|
214 |
+
'justify' => __( 'Justify', 'happy-elementor-addons' ),
|
215 |
+
'hide' => __( 'Hide', 'happy-elementor-addons' ),
|
216 |
+
]
|
217 |
+
]
|
218 |
+
);
|
219 |
+
|
220 |
+
$this->end_controls_section();
|
221 |
+
}
|
222 |
+
|
223 |
+
protected function register_style_controls() {
|
224 |
+
$this->start_controls_section(
|
225 |
+
'_section_style_gallery',
|
226 |
+
[
|
227 |
+
'label' => __( 'Gallery', 'happy-elementor-addons' ),
|
228 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
229 |
+
]
|
230 |
+
);
|
231 |
+
|
232 |
+
$this->add_control(
|
233 |
+
'_heading_image',
|
234 |
+
[
|
235 |
+
'label' => __( 'Image', 'happy-elementor-addons' ),
|
236 |
+
'type' => Controls_Manager::HEADING,
|
237 |
+
]
|
238 |
+
);
|
239 |
+
|
240 |
+
$this->add_responsive_control(
|
241 |
+
'image_border_radius',
|
242 |
+
[
|
243 |
+
'label' => __( 'Border Radius', 'happy-elementor-addons' ),
|
244 |
+
'type' => Controls_Manager::DIMENSIONS,
|
245 |
+
'size_units' => [ 'px', '%' ],
|
246 |
+
'selectors' => [
|
247 |
+
'{{WRAPPER}} .ha-justified-gallery-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
248 |
+
],
|
249 |
+
]
|
250 |
+
);
|
251 |
+
|
252 |
+
$this->add_group_control(
|
253 |
+
Group_Control_Box_Shadow::get_type(),
|
254 |
+
[
|
255 |
+
'name' => 'image_box_shadow',
|
256 |
+
'exclude' => [
|
257 |
+
'box_shadow_position',
|
258 |
+
],
|
259 |
+
'selector' => '{{WRAPPER}} .ha-justified-gallery-item'
|
260 |
+
]
|
261 |
+
);
|
262 |
+
|
263 |
+
$this->add_control(
|
264 |
+
'_heading_caption',
|
265 |
+
[
|
266 |
+
'label' => __( 'Caption', 'happy-elementor-addons' ),
|
267 |
+
'type' => Controls_Manager::HEADING,
|
268 |
+
'separator' => 'before',
|
269 |
+
]
|
270 |
+
);
|
271 |
+
|
272 |
+
$this->add_responsive_control(
|
273 |
+
'caption_padding',
|
274 |
+
[
|
275 |
+
'label' => __( 'Padding', 'happy-elementor-addons' ),
|
276 |
+
'type' => Controls_Manager::DIMENSIONS,
|
277 |
+
'size_units' => [ 'px', 'em', '%' ],
|
278 |
+
'selectors' => [
|
279 |
+
'{{WRAPPER}} .ha-justified-gallery-grid > a > .caption' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
280 |
+
],
|
281 |
+
]
|
282 |
+
);
|
283 |
+
|
284 |
+
$this->add_control(
|
285 |
+
'caption_color',
|
286 |
+
[
|
287 |
+
'label' => __( 'Text Color', 'happy-elementor-addons' ),
|
288 |
+
'type' => Controls_Manager::COLOR,
|
289 |
+
'selectors' => [
|
290 |
+
'{{WRAPPER}} .ha-justified-gallery-grid > a > .caption' => 'color: {{VALUE}}',
|
291 |
+
],
|
292 |
+
]
|
293 |
+
);
|
294 |
+
|
295 |
+
$this->add_control(
|
296 |
+
'caption_bg_color',
|
297 |
+
[
|
298 |
+
'label' => __( 'Background Color', 'happy-elementor-addons' ),
|
299 |
+
'type' => Controls_Manager::COLOR,
|
300 |
+
'selectors' => [
|
301 |
+
'{{WRAPPER}} .ha-justified-gallery-grid > a > .caption' => 'background-color: {{VALUE}}',
|
302 |
+
],
|
303 |
+
]
|
304 |
+
);
|
305 |
+
|
306 |
+
$this->add_group_control(
|
307 |
+
Group_Control_Typography::get_type(),
|
308 |
+
[
|
309 |
+
'name' => 'caption_typography',
|
310 |
+
'label' => __( 'Typography', 'happy-elementor-addons' ),
|
311 |
+
'selector' => '{{WRAPPER}} .ha-justified-gallery-grid > a > .caption',
|
312 |
+
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
|
313 |
+
]
|
314 |
+
);
|
315 |
+
|
316 |
+
$this->end_controls_section();
|
317 |
+
|
318 |
+
$this->start_controls_section(
|
319 |
+
'_section_style_menu',
|
320 |
+
[
|
321 |
+
'label' => __( 'Filter Menu', 'happy-elementor-addons' ),
|
322 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
323 |
+
]
|
324 |
+
);
|
325 |
+
|
326 |
+
$this->add_control(
|
327 |
+
'_heading_menu',
|
328 |
+
[
|
329 |
+
'label' => __( 'Menu', 'happy-elementor-addons' ),
|
330 |
+
'type' => Controls_Manager::HEADING,
|
331 |
+
]
|
332 |
+
);
|
333 |
+
|
334 |
+
$this->add_responsive_control(
|
335 |
+
'menu_margin',
|
336 |
+
[
|
337 |
+
'label' => __( 'Margin', 'happy-elementor-addons' ),
|
338 |
+
'type' => Controls_Manager::DIMENSIONS,
|
339 |
+
'size_units' => [ 'px', '%' ],
|
340 |
+
'selectors' => [
|
341 |
+
'{{WRAPPER}} .ha-gallery-filter' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
342 |
+
],
|
343 |
+
]
|
344 |
+
);
|
345 |
+
|
346 |
+
$this->add_control(
|
347 |
+
'_heading_buttons',
|
348 |
+
[
|
349 |
+
'label' => __( 'Filter Buttons', 'happy-elementor-addons' ),
|
350 |
+
'type' => Controls_Manager::HEADING,
|
351 |
+
'separator' => 'before',
|
352 |
+
]
|
353 |
+
);
|
354 |
+
|
355 |
+
$this->add_responsive_control(
|
356 |
+
'button_padding',
|
357 |
+
[
|
358 |
+
'label' => __( 'Padding', 'happy-elementor-addons' ),
|
359 |
+
'type' => Controls_Manager::DIMENSIONS,
|
360 |
+
'size_units' => [ 'px', 'em', '%' ],
|
361 |
+
'selectors' => [
|
362 |
+
'{{WRAPPER}} .ha-gallery-filter > li > button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
363 |
+
],
|
364 |
+
]
|
365 |
+
);
|
366 |
+
|
367 |
+
$this->add_responsive_control(
|
368 |
+
'button_spacing',
|
369 |
+
[
|
370 |
+
'label' => __( 'Spacing', 'happy-elementor-addons' ),
|
371 |
+
'type' => Controls_Manager::SLIDER,
|
372 |
+
'size_units' => ['px'],
|
373 |
+
'selectors' => [
|
374 |
+
'{{WRAPPER}} .ha-gallery-filter > li:not(:last-child)' => 'margin-right: {{SIZE}}{{UNIT}};',
|
375 |
+
],
|
376 |
+
]
|
377 |
+
);
|
378 |
+
|
379 |
+
$this->add_group_control(
|
380 |
+
Group_Control_Border::get_type(),
|
381 |
+
[
|
382 |
+
'name' => 'button_border',
|
383 |
+
'selector' => '{{WRAPPER}} .ha-gallery-filter > li > button'
|
384 |
+
]
|
385 |
+
);
|
386 |
+
|
387 |
+
$this->add_responsive_control(
|
388 |
+
'button_border_radius',
|
389 |
+
[
|
390 |
+
'label' => __( 'Border Radius', 'happy-elementor-addons' ),
|
391 |
+
'type' => Controls_Manager::DIMENSIONS,
|
392 |
+
'size_units' => [ 'px', '%' ],
|
393 |
+
'selectors' => [
|
394 |
+
'{{WRAPPER}} .ha-gallery-filter > li > button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
395 |
+
],
|
396 |
+
]
|
397 |
+
);
|
398 |
+
|
399 |
+
$this->add_group_control(
|
400 |
+
Group_Control_Box_Shadow::get_type(),
|
401 |
+
[
|
402 |
+
'name' => 'button_box_shadow',
|
403 |
+
'exclude' => [
|
404 |
+
'box_shadow_position',
|
405 |
+
],
|
406 |
+
'selector' => '{{WRAPPER}} .ha-gallery-filter > li > button'
|
407 |
+
]
|
408 |
+
);
|
409 |
+
|
410 |
+
$this->add_group_control(
|
411 |
+
Group_Control_Typography::get_type(),
|
412 |
+
[
|
413 |
+
'name' => 'button_typography',
|
414 |
+
'selector' => '{{WRAPPER}} .ha-gallery-filter > li > button',
|
415 |
+
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
|
416 |
+
]
|
417 |
+
);
|
418 |
+
|
419 |
+
$this->add_responsive_control(
|
420 |
+
'button_align',
|
421 |
+
[
|
422 |
+
'label' => __( 'Alignment', 'happy-elementor-addons' ),
|
423 |
+
'type' => Controls_Manager::CHOOSE,
|
424 |
+
'options' => [
|
425 |
+
'left' => [
|
426 |
+
'title' => __( 'Left', 'happy-elementor-addons' ),
|
427 |
+
'icon' => 'eicon-h-align-left',
|
428 |
+
],
|
429 |
+
'center' => [
|
430 |
+
'title' => __( 'Center', 'happy-elementor-addons' ),
|
431 |
+
'icon' => 'eicon-h-align-center',
|
432 |
+
],
|
433 |
+
'right' => [
|
434 |
+
'title' => __( 'Right', 'happy-elementor-addons' ),
|
435 |
+
'icon' => 'eicon-h-align-right',
|
436 |
+
],
|
437 |
+
],
|
438 |
+
'desktop_default' => 'left',
|
439 |
+
'toggle' => false,
|
440 |
+
'selectors' => [
|
441 |
+
'{{WRAPPER}} .ha-gallery-filter' => 'text-align: {{VALUE}};'
|
442 |
+
]
|
443 |
+
]
|
444 |
+
);
|
445 |
+
|
446 |
+
$this->start_controls_tabs( '_tabs_style_button' );
|
447 |
+
|
448 |
+
$this->start_controls_tab(
|
449 |
+
'_tab_button_normal',
|
450 |
+
[
|
451 |
+
'label' => __( 'Normal', 'happy-elementor-addons' ),
|
452 |
+
]
|
453 |
+
);
|
454 |
+
|
455 |
+
$this->add_control(
|
456 |
+
'button_color',
|
457 |
+
[
|
458 |
+
'label' => __( 'Text Color', 'happy-elementor-addons' ),
|
459 |
+
'type' => Controls_Manager::COLOR,
|
460 |
+
'default' => '',
|
461 |
+
'selectors' => [
|
462 |
+
'{{WRAPPER}} .ha-gallery-filter > li > button' => 'color: {{VALUE}};',
|
463 |
+
],
|
464 |
+
]
|
465 |
+
);
|
466 |
+
|
467 |
+
$this->add_control(
|
468 |
+
'button_bg_color',
|
469 |
+
[
|
470 |
+
'label' => __( 'Background Color', 'happy-elementor-addons' ),
|
471 |
+
'type' => Controls_Manager::COLOR,
|
472 |
+
'selectors' => [
|
473 |
+
'{{WRAPPER}} .ha-gallery-filter > li > button' => 'background-color: {{VALUE}};',
|
474 |
+
],
|
475 |
+
]
|
476 |
+
);
|
477 |
+
|
478 |
+
$this->end_controls_tab();
|
479 |
+
|
480 |
+
$this->start_controls_tab(
|
481 |
+
'_tab_button_hover',
|
482 |
+
[
|
483 |
+
'label' => __( 'Hover', 'happy-elementor-addons' ),
|
484 |
+
]
|
485 |
+
);
|
486 |
+
|
487 |
+
$this->add_control(
|
488 |
+
'button_hover_color',
|
489 |
+
[
|
490 |
+
'label' => __( 'Text Color', 'happy-elementor-addons' ),
|
491 |
+
'type' => Controls_Manager::COLOR,
|
492 |
+
'selectors' => [
|
493 |
+
'{{WRAPPER}} .ha-gallery-filter > li > button:hover, {{WRAPPER}} .ha-gallery-filter > li > button:focus, {{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button:hover, {{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button:focus' => 'color: {{VALUE}};',
|
494 |
+
],
|
495 |
+
]
|
496 |
+
);
|
497 |
+
|
498 |
+
$this->add_control(
|
499 |
+
'button_hover_bg_color',
|
500 |
+
[
|
501 |
+
'label' => __( 'Background Color', 'happy-elementor-addons' ),
|
502 |
+
'type' => Controls_Manager::COLOR,
|
503 |
+
'selectors' => [
|
504 |
+
'{{WRAPPER}} .ha-gallery-filter > li > button:hover, {{WRAPPER}} .ha-gallery-filter > li > button:focus, {{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button:hover, {{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button:focus' => 'background-color: {{VALUE}};',
|
505 |
+
],
|
506 |
+
]
|
507 |
+
);
|
508 |
+
|
509 |
+
$this->add_control(
|
510 |
+
'button_hover_border_color',
|
511 |
+
[
|
512 |
+
'label' => __( 'Border Color', 'happy-elementor-addons' ),
|
513 |
+
'type' => Controls_Manager::COLOR,
|
514 |
+
'condition' => [
|
515 |
+
'button_border_border!' => '',
|
516 |
+
],
|
517 |
+
'selectors' => [
|
518 |
+
'{{WRAPPER}} .ha-gallery-filter > li > button:hover, {{WRAPPER}} .ha-gallery-filter > li > button:focus, {{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button:hover, {{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button:focus' => 'border-color: {{VALUE}};',
|
519 |
+
],
|
520 |
+
]
|
521 |
+
);
|
522 |
+
|
523 |
+
$this->end_controls_tab();
|
524 |
+
|
525 |
+
$this->start_controls_tab(
|
526 |
+
'_tab_button_active',
|
527 |
+
[
|
528 |
+
'label' => __( 'Active', 'happy-elementor-addons' ),
|
529 |
+
]
|
530 |
+
);
|
531 |
+
|
532 |
+
$this->add_control(
|
533 |
+
'button_active_color',
|
534 |
+
[
|
535 |
+
'label' => __( 'Text Color', 'happy-elementor-addons' ),
|
536 |
+
'type' => Controls_Manager::COLOR,
|
537 |
+
'selectors' => [
|
538 |
+
'{{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button' => 'color: {{VALUE}};',
|
539 |
+
],
|
540 |
+
]
|
541 |
+
);
|
542 |
+
|
543 |
+
$this->add_control(
|
544 |
+
'button_active_bg_color',
|
545 |
+
[
|
546 |
+
'label' => __( 'Background Color', 'happy-elementor-addons' ),
|
547 |
+
'type' => Controls_Manager::COLOR,
|
548 |
+
'selectors' => [
|
549 |
+
'{{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button' => 'background-color: {{VALUE}};',
|
550 |
+
],
|
551 |
+
]
|
552 |
+
);
|
553 |
+
|
554 |
+
$this->add_control(
|
555 |
+
'button_active_border_color',
|
556 |
+
[
|
557 |
+
'label' => __( 'Border Color', 'happy-elementor-addons' ),
|
558 |
+
'type' => Controls_Manager::COLOR,
|
559 |
+
'condition' => [
|
560 |
+
'button_border_border!' => '',
|
561 |
+
],
|
562 |
+
'selectors' => [
|
563 |
+
'{{WRAPPER}} .ha-gallery-filter > .ha-filter-active > button' => 'border-color: {{VALUE}};',
|
564 |
+
],
|
565 |
+
]
|
566 |
+
);
|
567 |
+
|
568 |
+
$this->end_controls_tab();
|
569 |
+
$this->end_controls_tabs();
|
570 |
+
|
571 |
+
$this->end_controls_section();
|
572 |
+
}
|
573 |
+
|
574 |
+
protected static function get_data_prop_settings( $settings ) {
|
575 |
+
$field_map = [
|
576 |
+
'show_caption' => 'captions.bool',
|
577 |
+
'margins.size' => 'margins.int',
|
578 |
+
'row_height.size' => 'rowHeight.int',
|
579 |
+
'last_row' => 'lastRow.str',
|
580 |
+
];
|
581 |
+
return ha_prepare_data_prop_settings( $settings, $field_map );
|
582 |
+
}
|
583 |
+
|
584 |
+
protected function get_gallery_data() {
|
585 |
+
$gallery = $this->get_settings_for_display( 'gallery' );
|
586 |
+
|
587 |
+
if ( ! is_array( $gallery ) || empty( $gallery ) ) {
|
588 |
+
return [];
|
589 |
+
}
|
590 |
+
|
591 |
+
$menu = [];
|
592 |
+
$items = [];
|
593 |
+
|
594 |
+
foreach ( $gallery as $item ) {
|
595 |
+
if ( empty( $item['images'] ) ) {
|
596 |
+
continue;
|
597 |
+
}
|
598 |
+
|
599 |
+
$images = $item['images'];
|
600 |
+
$filter = 'ha-filter-is--' . sanitize_title_with_dashes( $item['filter'] );
|
601 |
+
|
602 |
+
if ( $filter && ! isset( $data[ $filter ] ) ) {
|
603 |
+
$menu[ $filter ] = $item['filter'];
|
604 |
+
}
|
605 |
+
|
606 |
+
foreach ( $images as $image ) {
|
607 |
+
if ( ! isset( $items[ $image['id'] ] ) ) {
|
608 |
+
$items[ $image['id'] ] = [ $filter ];
|
609 |
+
} else {
|
610 |
+
array_push( $items[ $image['id'] ], $filter );
|
611 |
+
}
|
612 |
+
}
|
613 |
+
}
|
614 |
+
|
615 |
+
return [
|
616 |
+
'menu' => $menu,
|
617 |
+
'items' => $items
|
618 |
+
];
|
619 |
+
}
|
620 |
+
|
621 |
+
protected function render() {
|
622 |
+
$settings = $this->get_settings_for_display();
|
623 |
+
$gallery = $this->get_gallery_data();
|
624 |
+
|
625 |
+
if ( empty( $gallery ) ) {
|
626 |
+
return;
|
627 |
+
}
|
628 |
+
|
629 |
+
$this->add_render_attribute( 'container', 'class', [
|
630 |
+
'ha-justified-gallery-wrapper',
|
631 |
+
'hajs-justified-gallery',
|
632 |
+
] );
|
633 |
+
|
634 |
+
$this->add_render_attribute( 'container', 'data-happy-settings', self::get_data_prop_settings( $settings ) );
|
635 |
+
|
636 |
+
if ( $settings['show_filter'] === 'yes' ) : ?>
|
637 |
+
<ul class="ha-gallery-filter hajs-gallery-filter">
|
638 |
+
<?php if ( $settings['show_all_filter'] === 'yes' ) : ?>
|
639 |
+
<li class="ha-filter-active"><button type="button" data-filter="*"><?php echo esc_html( $settings['all_filter_label'] ); ?></button></li>
|
640 |
+
<?php endif; ?>
|
641 |
+
<?php foreach ( $gallery['menu'] as $key => $val ) : ?>
|
642 |
+
<li><button type="button" data-filter=".<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $val ); ?></button></li>
|
643 |
+
<?php endforeach; ?>
|
644 |
+
</ul>
|
645 |
+
<?php endif; ?>
|
646 |
+
|
647 |
+
<div <?php echo $this->get_render_attribute_string( 'container' ); ?>>
|
648 |
+
<?php foreach ( $gallery['items'] as $id => $filters ) :
|
649 |
+
$caption = $settings['show_caption'] ? esc_attr( wp_get_attachment_caption( $id ) ) : '';
|
650 |
+
?>
|
651 |
+
<a class="ha-justified-gallery-item <?php echo esc_attr( implode( ' ', $filters ) ); ?>">
|
652 |
+
<?php echo wp_get_attachment_image( $id, $settings['thumbnail_size'], false, [ 'alt' => $caption ] ); ?>
|
653 |
+
</a>
|
654 |
+
<?php endforeach; ?>
|
655 |
+
</div>
|
656 |
+
|
657 |
+
<?php
|
658 |
+
}
|
659 |
+
}
|
widgets/logo-grid/widget.php
ADDED
@@ -0,0 +1,433 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Logo grid widget class
|
4 |
+
*
|
5 |
+
* @package Happy_Addons
|
6 |
+
*/
|
7 |
+
namespace Happy_Addons\Elementor\Widget;
|
8 |
+
|
9 |
+
use Elementor\Group_Control_Css_Filter;
|
10 |
+
use Elementor\Repeater;
|
11 |
+
use Elementor\Controls_Manager;
|
12 |
+
use Elementor\Group_Control_Box_Shadow;
|
13 |
+
use Elementor\Group_Control_Image_Size;
|
14 |
+
use Elementor\Utils;
|
15 |
+
|
16 |
+
defined( 'ABSPATH' ) || die();
|
17 |
+
|
18 |
+
class Logo_Grid extends Base {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Get widget title.
|
22 |
+
*
|
23 |
+
* @since 1.0.0
|
24 |
+
* @access public
|
25 |
+
*
|
26 |
+
* @return string Widget title.
|
27 |
+
*/
|
28 |
+
public function get_title() {
|
29 |
+
return __('Logo Grid', 'happy-elementor-addons');
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Get widget icon.
|
34 |
+
*
|
35 |
+
* @since 1.0.0
|
36 |
+
* @access public
|
37 |
+
*
|
38 |
+
* @return string Widget icon.
|
39 |
+
*/
|
40 |
+
public function get_icon() {
|
41 |
+
return 'hm hm-logo-grid';
|
42 |
+
}
|
43 |
+
|
44 |
+
public function get_keywords() {
|
45 |
+
return ['logo', 'grid', 'brand', 'client'];
|
46 |
+
}
|
47 |
+
|
48 |
+
protected function register_content_controls() {
|
49 |
+
$this->start_controls_section(
|
50 |
+
'_section_logo',
|
51 |
+
[
|
52 |
+
'label' => __( 'Logo Grid', 'happy-elementor-addons' ),
|
53 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
54 |
+
]
|
55 |
+
);
|
56 |
+
|
57 |
+
$repeater = new Repeater();
|
58 |
+
|
59 |
+
$repeater->add_control(
|
60 |
+
'image',
|
61 |
+
[
|
62 |
+
'label' => __('Logo', 'happy-elementor-addons'),
|
63 |
+
'type' => Controls_Manager::MEDIA,
|
64 |
+
'default' => [
|
65 |
+
'url' => Utils::get_placeholder_image_src(),
|
66 |
+
],
|
67 |
+
]
|
68 |
+
);
|
69 |
+
|
70 |
+
$repeater->add_control(
|
71 |
+
'link',
|
72 |
+
[
|
73 |
+
'label' => __('Website Url', 'happy-elementor-addons'),
|
74 |
+
'type' => Controls_Manager::URL,
|
75 |
+
'show_external' => false,
|
76 |
+
'label_block' => false,
|
77 |
+
]
|
78 |
+
);
|
79 |
+
|
80 |
+
$repeater->add_control(
|
81 |
+
'name',
|
82 |
+
[
|
83 |
+
'label' => __('Brand Name', 'happy-elementor-addons'),
|
84 |
+
'type' => Controls_Manager::TEXT,
|
85 |
+
'default' => __('Brand Name', 'happy-elementor-addons'),
|
86 |
+
]
|
87 |
+
);
|
88 |
+
|
89 |
+
$this->add_control(
|
90 |
+
'logo_list',
|
91 |
+
[
|
92 |
+
'show_label' => false,
|
93 |
+
'type' => Controls_Manager::REPEATER,
|
94 |
+
'fields' => $repeater->get_controls(),
|
95 |
+
'title_field' => '{{{ name }}}',
|
96 |
+
]
|
97 |
+
);
|
98 |
+
|
99 |
+
$this->end_controls_section();
|
100 |
+
|
101 |
+
$this->start_controls_section(
|
102 |
+
'_section_settings',
|
103 |
+
[
|
104 |
+
'label' => __( 'Settings', 'happy-elementor-addons' ),
|
105 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
106 |
+
]
|
107 |
+
);
|
108 |
+
|
109 |
+
$this->add_group_control(
|
110 |
+
Group_Control_Image_Size::get_type(),
|
111 |
+
[
|
112 |
+
'name' => 'thumbnail',
|
113 |
+
'default' => 'large',
|
114 |
+
'separator' => 'before',
|
115 |
+
'exclude' => [
|
116 |
+
'custom'
|
117 |
+
]
|
118 |
+
]
|
119 |
+
);
|
120 |
+
|
121 |
+
$this->add_control(
|
122 |
+
'layout',
|
123 |
+
[
|
124 |
+
'label' => __( 'Grid Layout', 'happy-elementor-addons' ),
|
125 |
+
'type' => Controls_Manager::SELECT,
|
126 |
+
'options' => [
|
127 |
+
'box' => __( 'Box', 'happy-elementor-addons' ),
|
128 |
+
'border' => __( 'Border', 'happy-elementor-addons' ),
|
129 |
+
'tictactoe' => __( 'Tic Tac Toe', 'happy-elementor-addons' ),
|
130 |
+
],
|
131 |
+
'default' => 'box',
|
132 |
+
'prefix_class' => 'ha-logo-grid--'
|
133 |
+
]
|
134 |
+
);
|
135 |
+
|
136 |
+
$this->add_responsive_control(
|
137 |
+
'columns',
|
138 |
+
[
|
139 |
+
'label' => __( 'Columns', 'happy-elementor-addons' ),
|
140 |
+
'type' => Controls_Manager::SELECT,
|
141 |
+
'options' => [
|
142 |
+
2 => __( '2 Columns', 'happy-elementor-addons' ),
|
143 |
+
3 => __( '3 Columns', 'happy-elementor-addons' ),
|
144 |
+
4 => __( '4 Columns', 'happy-elementor-addons' ),
|
145 |
+
5 => __( '5 Columns', 'happy-elementor-addons' ),
|
146 |
+
6 => __( '6 Columns', 'happy-elementor-addons' ),
|
147 |
+
],
|
148 |
+
'desktop_default' => 4,
|
149 |
+
'tablet_default' => 2,
|
150 |
+
'mobile_default' => 2,
|
151 |
+
'prefix_class' => 'ha-logo-grid--col-%s',
|
152 |
+
]
|
153 |
+
);
|
154 |
+
|
155 |
+
$this->end_controls_section();
|
156 |
+
}
|
157 |
+
|
158 |
+
protected function register_style_controls() {
|
159 |
+
$this->start_controls_section(
|
160 |
+
'_section_style_grid',
|
161 |
+
[
|
162 |
+
'label' => __( 'Grid', 'happy-elementor-addons' ),
|
163 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
164 |
+
]
|
165 |
+
);
|
166 |
+
|
167 |
+
$this->add_control(
|
168 |
+
'grid_border_type',
|
169 |
+
[
|
170 |
+
'label' => __( 'Border Type', 'happy-elementor-addons' ),
|
171 |
+
'type' => Controls_Manager::SELECT,
|
172 |
+
'options' => [
|
173 |
+
'none' => __( 'None', 'happy-elementor-addons' ),
|
174 |
+
'solid' => __( 'Solid', 'happy-elementor-addons' ),
|
175 |
+
'double' => __( 'Double', 'happy-elementor-addons' ),
|
176 |
+
'dotted' => __( 'Dotted', 'happy-elementor-addons' ),
|
177 |
+
'dashed' => __( 'Dashed', 'happy-elementor-addons' ),
|
178 |
+
'groove' => __( 'Groove', 'happy-elementor-addons' ),
|
179 |
+
],
|
180 |
+
'default' => 'solid',
|
181 |
+
'selectors' => [
|
182 |
+
'{{WRAPPER}} .ha-logo-grid-item' => 'border-style: {{VALUE}};',
|
183 |
+
],
|
184 |
+
]
|
185 |
+
);
|
186 |
+
|
187 |
+
$this->add_responsive_control(
|
188 |
+
'grid_border_width',
|
189 |
+
[
|
190 |
+
'label' => __( 'Border Width', 'happy-elementor-addons' ),
|
191 |
+
'type' => Controls_Manager::SLIDER,
|
192 |
+
'size_units' => ['px'],
|
193 |
+
'selectors' => [
|
194 |
+
'{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item' => 'border-right-width: {{SIZE}}{{UNIT}}; border-bottom-width: {{SIZE}}{{UNIT}};',
|
195 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
|
196 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
|
197 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
|
198 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
|
199 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1)' => 'border-left-width: {{SIZE}}{{UNIT}};',
|
200 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2)' => 'border-top-width: {{SIZE}}{{UNIT}};',
|
201 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3)' => 'border-top-width: {{SIZE}}{{UNIT}};',
|
202 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4)' => 'border-top-width: {{SIZE}}{{UNIT}};',
|
203 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5)' => 'border-top-width: {{SIZE}}{{UNIT}};',
|
204 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6)' => 'border-top-width: {{SIZE}}{{UNIT}};',
|
205 |
+
|
206 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item' => 'border-top-width: {{SIZE}}{{UNIT}}; border-right-width: {{SIZE}}{{UNIT}};',
|
207 |
+
|
208 |
+
'{{WRAPPER}}.ha-logo-grid--box .ha-logo-grid-item' => 'border-width: {{SIZE}}{{UNIT}};',
|
209 |
+
],
|
210 |
+
'condition' => [
|
211 |
+
'grid_border_type!' => 'none',
|
212 |
+
]
|
213 |
+
]
|
214 |
+
);
|
215 |
+
|
216 |
+
$this->add_control(
|
217 |
+
'grid_border_color',
|
218 |
+
[
|
219 |
+
'label' => __( 'Border Color', 'happy-elementor-addons' ),
|
220 |
+
'type' => Controls_Manager::COLOR,
|
221 |
+
'selectors' => [
|
222 |
+
'{{WRAPPER}} .ha-logo-grid-item' => 'border-color: {{VALUE}};',
|
223 |
+
],
|
224 |
+
'condition' => [
|
225 |
+
'grid_border_type!' => 'none',
|
226 |
+
]
|
227 |
+
]
|
228 |
+
);
|
229 |
+
|
230 |
+
$this->add_control(
|
231 |
+
'grid_bg_color',
|
232 |
+
[
|
233 |
+
'label' => __( 'Background Color', 'happy-elementor-addons' ),
|
234 |
+
'type' => Controls_Manager::COLOR,
|
235 |
+
'selectors' => [
|
236 |
+
'{{WRAPPER}} .ha-logo-grid-figure' => 'background-color: {{VALUE}};',
|
237 |
+
],
|
238 |
+
]
|
239 |
+
);
|
240 |
+
|
241 |
+
$this->add_responsive_control(
|
242 |
+
'grid_border_radius',
|
243 |
+
[
|
244 |
+
'label' => __( 'Border Radius', 'happy-elementor-addons' ),
|
245 |
+
'type' => Controls_Manager::DIMENSIONS,
|
246 |
+
'size_units' => ['px', '%'],
|
247 |
+
'selectors' => [
|
248 |
+
'{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-wrapper, {{WRAPPER}}.ha-logo-grid--box .ha-logo-grid-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
249 |
+
'{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item:first-child' => 'border-top-left-radius: {{TOP}}{{UNIT}};',
|
250 |
+
'{{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-item:last-child' => 'border-bottom-right-radius: {{BOTTOM}}{{UNIT}};',
|
251 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
252 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
253 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
254 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
255 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
256 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
257 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
258 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
259 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
260 |
+
'{{WRAPPER}}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
261 |
+
|
262 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-wrapper' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
263 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item:first-child' => 'border-top-left-radius: {{TOP}}{{UNIT}};',
|
264 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-item:last-child' => 'border-bottom-right-radius: {{BOTTOM}}{{UNIT}};',
|
265 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
266 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
267 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
268 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
269 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
270 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
271 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
272 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
273 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6)' => 'border-top-right-radius: {{RIGHT}}{{UNIT}};',
|
274 |
+
'{{WRAPPER}}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6)' => 'border-bottom-left-radius: {{LEFT}}{{UNIT}};',
|
275 |
+
],
|
276 |
+
]
|
277 |
+
);
|
278 |
+
|
279 |
+
$this->add_group_control(
|
280 |
+
Group_Control_Box_Shadow::get_type(),
|
281 |
+
[
|
282 |
+
'name' => 'grid_box_shadow',
|
283 |
+
'exclude' => [
|
284 |
+
'box_shadow_position',
|
285 |
+
],
|
286 |
+
'selector' => '{{WRAPPER}}.ha-logo-grid--tictactoe .ha-logo-grid-wrapper, {{WRAPPER}}.ha-logo-grid--border .ha-logo-grid-wrapper, {{WRAPPER}}.ha-logo-grid--box .ha-logo-grid-item'
|
287 |
+
]
|
288 |
+
);
|
289 |
+
|
290 |
+
|
291 |
+
$this->start_controls_tabs(
|
292 |
+
'_tabs_image_effects',
|
293 |
+
[
|
294 |
+
'separator' => 'before'
|
295 |
+
]
|
296 |
+
);
|
297 |
+
|
298 |
+
$this->start_controls_tab(
|
299 |
+
'_tab_image_effects_normal',
|
300 |
+
[
|
301 |
+
'label' => __( 'Normal', 'happy-elementor-addons' ),
|
302 |
+
]
|
303 |
+
);
|
304 |
+
|
305 |
+
$this->add_control(
|
306 |
+
'image_opacity',
|
307 |
+
[
|
308 |
+
'label' => __( 'Opacity', 'happy-elementor-addons' ),
|
309 |
+
'type' => Controls_Manager::SLIDER,
|
310 |
+
'range' => [
|
311 |
+
'px' => [
|
312 |
+
'max' => 1,
|
313 |
+
'min' => 0.10,
|
314 |
+
'step' => 0.01,
|
315 |
+
],
|
316 |
+
],
|
317 |
+
'selectors' => [
|
318 |
+
'{{WRAPPER}} .ha-logo-grid-figure > img' => 'opacity: {{SIZE}};',
|
319 |
+
],
|
320 |
+
]
|
321 |
+
);
|
322 |
+
|
323 |
+
$this->add_group_control(
|
324 |
+
Group_Control_Css_Filter::get_type(),
|
325 |
+
[
|
326 |
+
'name' => 'image_css_filters',
|
327 |
+
'selector' => '{{WRAPPER}} .ha-logo-grid-figure > img',
|
328 |
+
]
|
329 |
+
);
|
330 |
+
|
331 |
+
$this->end_controls_tab();
|
332 |
+
|
333 |
+
$this->start_controls_tab( 'hover',
|
334 |
+
[
|
335 |
+
'label' => __( 'Hover', 'happy-elementor-addons' ),
|
336 |
+
]
|
337 |
+
);
|
338 |
+
|
339 |
+
$this->add_control(
|
340 |
+
'image_opacity_hover',
|
341 |
+
[
|
342 |
+
'label' => __( 'Opacity', 'happy-elementor-addons' ),
|
343 |
+
'type' => Controls_Manager::SLIDER,
|
344 |
+
'range' => [
|
345 |
+
'px' => [
|
346 |
+
'max' => 1,
|
347 |
+
'min' => 0.10,
|
348 |
+
'step' => 0.01,
|
349 |
+
],
|
350 |
+
],
|
351 |
+
'selectors' => [
|
352 |
+
'{{WRAPPER}} .ha-logo-grid-figure:hover > img' => 'opacity: {{SIZE}};',
|
353 |
+
],
|
354 |
+
]
|
355 |
+
);
|
356 |
+
|
357 |
+
$this->add_group_control(
|
358 |
+
Group_Control_Css_Filter::get_type(),
|
359 |
+
[
|
360 |
+
'name' => 'image_css_filters_hover',
|
361 |
+
'selector' => '{{WRAPPER}} .ha-logo-grid-figure:hover > img',
|
362 |
+
]
|
363 |
+
);
|
364 |
+
|
365 |
+
$this->add_control(
|
366 |
+
'image_bg_hover_transition',
|
367 |
+
[
|
368 |
+
'label' => __( 'Transition Duration', 'happy-elementor-addons' ),
|
369 |
+
'type' => Controls_Manager::SLIDER,
|
370 |
+
'range' => [
|
371 |
+
'px' => [
|
372 |
+
'max' => 3,
|
373 |
+
'step' => 0.1,
|
374 |
+
],
|
375 |
+
],
|
376 |
+
'selectors' => [
|
377 |
+
'{{WRAPPER}} .ha-logo-grid-figure:hover > img' => 'transition-duration: {{SIZE}}s',
|
378 |
+
],
|
379 |
+
]
|
380 |
+
);
|
381 |
+
|
382 |
+
$this->add_control(
|
383 |
+
'hover_animation',
|
384 |
+
[
|
385 |
+
'label' => __( 'Hover Animation', 'happy-elementor-addons' ),
|
386 |
+
'type' => Controls_Manager::HOVER_ANIMATION,
|
387 |
+
]
|
388 |
+
);
|
389 |
+
|
390 |
+
$this->end_controls_tab();
|
391 |
+
$this->end_controls_tabs();
|
392 |
+
|
393 |
+
$this->end_controls_section();
|
394 |
+
}
|
395 |
+
|
396 |
+
protected function render() {
|
397 |
+
$settings = $this->get_settings_for_display();
|
398 |
+
|
399 |
+
if ( empty($settings['logo_list'] ) ) {
|
400 |
+
return;
|
401 |
+
}
|
402 |
+
?>
|
403 |
+
|
404 |
+
<div class="ha-logo-grid-wrapper">
|
405 |
+
<?php
|
406 |
+
foreach ( $settings['logo_list'] as $index => $item ) :
|
407 |
+
$image = wp_get_attachment_image_url( $item['image']['id'], $settings['thumbnail_size'] );
|
408 |
+
if ( ! $image ) {
|
409 |
+
$image = Utils::get_placeholder_image_src();
|
410 |
+
}
|
411 |
+
$repeater_key = 'grid_item' . $index;
|
412 |
+
$tag = 'div';
|
413 |
+
$this->add_render_attribute( $repeater_key, 'class', 'ha-logo-grid-item' );
|
414 |
+
|
415 |
+
if ( $item['link']['url'] ) {
|
416 |
+
$tag = 'a';
|
417 |
+
$this->add_render_attribute( $repeater_key, 'class', 'ha-logo-grid-link' );
|
418 |
+
$this->add_render_attribute( $repeater_key, 'target', '_blank' );
|
419 |
+
$this->add_render_attribute( $repeater_key, 'rel', 'noopener' );
|
420 |
+
$this->add_render_attribute( $repeater_key, 'href', esc_url( $item['link']['url'] ) );
|
421 |
+
}
|
422 |
+
?>
|
423 |
+
<<?php echo $tag; ?> <?php $this->print_render_attribute_string( $repeater_key ); ?>>
|
424 |
+
<figure class="ha-logo-grid-figure elementor-animation-<?php echo esc_attr( $settings['hover_animation'] ); ?>">
|
425 |
+
<img class="ha-logo-grid-img" src="<?php echo esc_url( $image ); ?>" alt="<?php echo esc_attr( $item['name'] ); ?>">
|
426 |
+
</figure>
|
427 |
+
</<?php echo $tag; ?>>
|
428 |
+
<?php endforeach; ?>
|
429 |
+
</div>
|
430 |
+
|
431 |
+
<?php
|
432 |
+
}
|
433 |
+
}
|
widgets/number/widget.php
ADDED
@@ -0,0 +1,351 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Blurb widget class
|
4 |
+
*
|
5 |
+
* @package Happy_Addons
|
6 |
+
*/
|
7 |
+
namespace Happy_Addons\Elementor\Widget;
|
8 |
+
|
9 |
+
use Elementor\Utils;
|
10 |
+
use Elementor\Control_Media;
|
11 |
+
use Elementor\Controls_Manager;
|
12 |
+
use Elementor\Group_Control_Border;
|
13 |
+
use Elementor\Group_Control_Box_Shadow;
|
14 |
+
use Elementor\Group_Control_Image_Size;
|
15 |
+
use Elementor\Group_Control_Typography;
|
16 |
+
use Elementor\Group_Control_Background;
|
17 |
+
use Elementor\Group_Control_Text_Shadow;
|
18 |
+
use Happy_Addons\Elementor\Controls\Group_Control_Foreground;
|
19 |
+
|
20 |
+
defined( 'ABSPATH' ) || die();
|
21 |
+
|
22 |
+
class Number extends Base {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Get widget title.
|
26 |
+
*
|
27 |
+
* @since 1.0.0
|
28 |
+
* @access public
|
29 |
+
*
|
30 |
+
* @return string Widget title.
|
31 |
+
*/
|
32 |
+
public function get_title() {
|
33 |
+
return __( 'Number', 'happy-elementor-addons' );
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Get widget icon.
|
38 |
+
*
|
39 |
+
* @since 1.0.0
|
40 |
+
* @access public
|
41 |
+
*
|
42 |
+
* @return string Widget icon.
|
43 |
+
*/
|
44 |
+
public function get_icon() {
|
45 |
+
return 'hm hm-madel';
|
46 |
+
}
|
47 |
+
|
48 |
+
public function get_keywords() {
|
49 |
+
return [ 'info', 'blurb', 'box', 'text', 'content' ];
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Register content related controls
|
54 |
+
*/
|
55 |
+
protected function register_content_controls() {
|
56 |
+
$this->start_controls_section(
|
57 |
+
'_section_number',
|
58 |
+
[
|
59 |
+
'label' => __( 'Number', 'happy-elementor-addons' ),
|
60 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
61 |
+
]
|
62 |
+
);
|
63 |
+
|
64 |
+
$this->add_control(
|
65 |
+
'number_text',
|
66 |
+
[
|
67 |
+
'label' => __( 'Text', 'happy-elementor-addons' ),
|
68 |
+
'label_block' => false,
|
69 |
+
'type' => Controls_Manager::TEXT,
|
70 |
+
'default' => 1
|
71 |
+
]
|
72 |
+
);
|
73 |
+
|
74 |
+
$this->end_controls_section();
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Register styles related controls
|
79 |
+
*/
|
80 |
+
protected function register_style_controls() {
|
81 |
+
$this->start_controls_section(
|
82 |
+
'_section_style_number',
|
83 |
+
[
|
84 |
+
'label' => __( 'Text', 'happy-elementor-addons' ),
|
85 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
86 |
+
]
|
87 |
+
);
|
88 |
+
|
89 |
+
$this->add_control(
|
90 |
+
'number_text_color',
|
91 |
+
[
|
92 |
+
'label' => __( 'Text Color', 'happy-elementor-addons' ),
|
93 |
+
'type' => Controls_Manager::COLOR,
|
94 |
+
'selectors' => [
|
95 |
+
'{{WRAPPER}} .ha-number-border' => 'color: {{VALUE}};',
|
96 |
+
],
|
97 |
+
]
|
98 |
+
);
|
99 |
+
|
100 |
+
$this->add_group_control(
|
101 |
+
Group_Control_Typography::get_type(),
|
102 |
+
[
|
103 |
+
'name' => 'number_text_typography',
|
104 |
+
'label' => __( 'Typography', 'happy-elementor-addons' ),
|
105 |
+
'selector' => '{{WRAPPER}} .ha-number-border',
|
106 |
+
]
|
107 |
+
);
|
108 |
+
|
109 |
+
$this->add_group_control(
|
110 |
+
Group_Control_Text_Shadow::get_type(),
|
111 |
+
[
|
112 |
+
'name' => 'number_text_shadow',
|
113 |
+
'label' => __( 'Text Shadow', 'happy-elementor-addons' ),
|
114 |
+
'selector' => '{{WRAPPER}} .ha-number-border span',
|
115 |
+
]
|
116 |
+
);
|
117 |
+
|
118 |
+
$this->add_control(
|
119 |
+
'number_text_rotate',
|
120 |
+
[
|
121 |
+
'label' => __( 'Text Rotate', 'happy-elementor-addons' ),
|
122 |
+
'type' => Controls_Manager::SLIDER,
|
123 |
+
'size_units' => [ 'px' ],
|
124 |
+
'range' => [
|
125 |
+
'px' => [
|
126 |
+
'min' => 0,
|
127 |
+
'max' => 360,
|
128 |
+
'step' => 5,
|
129 |
+
],
|
130 |
+
|
131 |
+
],
|
132 |
+
'default' => [
|
133 |
+
'unit' => 'px',
|
134 |
+
'size' => 0,
|
135 |
+
],
|
136 |
+
'selectors' => [
|
137 |
+
'{{WRAPPER}} .ha-number-text' => '-webkit-transform: rotate({{SIZE}}deg);-ms-transform: rotate({{SIZE}}deg);transform: rotate({{SIZE}}deg);'
|
138 |
+
],
|
139 |
+
]
|
140 |
+
);
|
141 |
+
|
142 |
+
$this->end_controls_section();
|
143 |
+
|
144 |
+
$this->start_controls_section(
|
145 |
+
'number_background_style',
|
146 |
+
[
|
147 |
+
'label' => __( 'General', 'happy-elementor-addons' ),
|
148 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
149 |
+
]
|
150 |
+
);
|
151 |
+
|
152 |
+
$this->add_responsive_control(
|
153 |
+
'number_width_height',
|
154 |
+
[
|
155 |
+
'label' => __( 'Width and Height', 'happy-elementor-addons' ),
|
156 |
+
'type' => Controls_Manager::SLIDER,
|
157 |
+
'size_units' => [ 'px' ],
|
158 |
+
'range' => [
|
159 |
+
'px' => [
|
160 |
+
'min' => 0,
|
161 |
+
'max' => 1000,
|
162 |
+
'step' => 5,
|
163 |
+
],
|
164 |
+
'%' => [
|
165 |
+
'min' => 0,
|
166 |
+
'max' => 100,
|
167 |
+
],
|
168 |
+
],
|
169 |
+
'default' => [
|
170 |
+
'unit' => 'px',
|
171 |
+
'size' => 50,
|
172 |
+
],
|
173 |
+
'selectors' => [
|
174 |
+
'{{WRAPPER}} .ha-number-border' => 'width: {{SIZE}}{{UNIT}};height: {{SIZE}}{{UNIT}};',
|
175 |
+
],
|
176 |
+
]
|
177 |
+
);
|
178 |
+
|
179 |
+
$this->add_control(
|
180 |
+
'number_padding',
|
181 |
+
[
|
182 |
+
'label' => __( 'Padding', 'happy-elementor-addons' ),
|
183 |
+
'type' => Controls_Manager::DIMENSIONS,
|
184 |
+
'size_units' => [ 'px', '%', 'em' ],
|
185 |
+
'selectors' => [
|
186 |
+
'{{WRAPPER}} .ha-number-border ' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
187 |
+
],
|
188 |
+
]
|
189 |
+
);
|
190 |
+
|
191 |
+
$this->add_control(
|
192 |
+
'number_border_radius',
|
193 |
+
[
|
194 |
+
'label' => __( 'Border Radius', 'happy-elementor-addons' ),
|
195 |
+
'type' => Controls_Manager::DIMENSIONS,
|
196 |
+
'size_units' => [ 'px', '%', 'em' ],
|
197 |
+
'selectors' => [
|
198 |
+
'{{WRAPPER}} .ha-number-border' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
199 |
+
],
|
200 |
+
]
|
201 |
+
);
|
202 |
+
|
203 |
+
$this->add_group_control(
|
204 |
+
Group_Control_Border::get_type(),
|
205 |
+
[
|
206 |
+
'name' => 'number_border',
|
207 |
+
'label' => __( 'Border', 'happy-elementor-addons' ),
|
208 |
+
'selector' => '{{WRAPPER}} .ha-number-border',
|
209 |
+
]
|
210 |
+
);
|
211 |
+
|
212 |
+
$this->add_group_control(
|
213 |
+
Group_Control_Background::get_type(),
|
214 |
+
[
|
215 |
+
'name' => 'number_background_color',
|
216 |
+
'label' => __( 'Background', 'happy-elementor-addons' ),
|
217 |
+
'types' => [ 'classic', 'gradient' ],
|
218 |
+
'selector' => '{{WRAPPER}} .ha-number-border',
|
219 |
+
]
|
220 |
+
);
|
221 |
+
|
222 |
+
$this->add_group_control(
|
223 |
+
Group_Control_Box_Shadow::get_type(),
|
224 |
+
[
|
225 |
+
'name' => 'number_box_shadow',
|
226 |
+
'label' => __( 'Box Shadow', 'happy-elementor-addons' ),
|
227 |
+
'selector' => '{{WRAPPER}} .ha-number-border',
|
228 |
+
]
|
229 |
+
);
|
230 |
+
|
231 |
+
$this->add_responsive_control(
|
232 |
+
'number_align',
|
233 |
+
[
|
234 |
+
'label' => __( 'Alignment', 'happy-elementor-addons' ),
|
235 |
+
'type' => Controls_Manager::CHOOSE,
|
236 |
+
'options' => [
|
237 |
+
'left' => [
|
238 |
+
'title' => __( 'Left', 'happy-elementor-addons' ),
|
239 |
+
'icon' => 'fa fa-align-left',
|
240 |
+
],
|
241 |
+
'center' => [
|
242 |
+
'title' => __( 'Center', 'happy-elementor-addons' ),
|
243 |
+
'icon' => 'fa fa-align-center',
|
244 |
+
],
|
245 |
+
'right' => [
|
246 |
+
'title' => __( 'Right', 'happy-elementor-addons' ),
|
247 |
+
'icon' => 'fa fa-align-right',
|
248 |
+
],
|
249 |
+
],
|
250 |
+
'toggle' => true,
|
251 |
+
'selectors' => [
|
252 |
+
'{{WRAPPER}} .ha-number-border' => '{{VALUE}};'
|
253 |
+
],
|
254 |
+
'selectors_dictionary' => [
|
255 |
+
'left' => 'float: left',
|
256 |
+
'center' => 'margin: 0 auto',
|
257 |
+
'right' => 'float:right'
|
258 |
+
],
|
259 |
+
]
|
260 |
+
);
|
261 |
+
|
262 |
+
$this->end_controls_section();
|
263 |
+
$this->start_controls_section(
|
264 |
+
'number_background_style_overlay',
|
265 |
+
[
|
266 |
+
'label' => __( 'Background Overlay', 'happy-elementor-addons' ),
|
267 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
268 |
+
]
|
269 |
+
);
|
270 |
+
|
271 |
+
$this->add_group_control(
|
272 |
+
Group_Control_Background::get_type(),
|
273 |
+
[
|
274 |
+
'name' => 'number_background_overlay_color',
|
275 |
+
'label' => __( 'Background', 'happy-elementor-addons' ),
|
276 |
+
'types' => [ 'classic', 'gradient' ],
|
277 |
+
'selector' => '{{WRAPPER}} .ha-number-border .ha-number-border-overlay',
|
278 |
+
]
|
279 |
+
);
|
280 |
+
|
281 |
+
|
282 |
+
$this->add_control(
|
283 |
+
'number_background_overlay_blend_mode',
|
284 |
+
[
|
285 |
+
'label' => __( 'Blend Mood', 'happy-elementor-addons' ),
|
286 |
+
'type' => Controls_Manager::SELECT,
|
287 |
+
'default' => 'normal',
|
288 |
+
'options' => [
|
289 |
+
'normal' => 'Normal',
|
290 |
+
'multiply' => 'Multiply',
|
291 |
+
'screen' => 'Screen',
|
292 |
+
'overlay' => 'Overlay',
|
293 |
+
'darken' => 'Darken',
|
294 |
+
'lighten' => 'Lighten',
|
295 |
+
'color-dodge' => 'Color Dodge',
|
296 |
+
'color-burn' => 'Color Burn',
|
297 |
+
'saturation' => 'Saturation',
|
298 |
+
'difference' => 'Difference',
|
299 |
+
'exclusion' => 'Exclusion',
|
300 |
+
'hue' => 'Hue',
|
301 |
+
'saturation' => 'Saturation',
|
302 |
+
'color' => 'Color',
|
303 |
+
'luminosity' => 'Luminosity',
|
304 |
+
],
|
305 |
+
'selectors' => [
|
306 |
+
'{{WRAPPER}} .ha-number-border-overlay' => 'mix-blend-mode: {{VALUE}}',
|
307 |
+
],
|
308 |
+
]
|
309 |
+
);
|
310 |
+
|
311 |
+
|
312 |
+
$this->add_responsive_control(
|
313 |
+
'number_background_overlay_blend_mode_opacity',
|
314 |
+
[
|
315 |
+
'label' => __( 'Opacity', 'happy-elementor-addons' ),
|
316 |
+
'type' => Controls_Manager::SLIDER,
|
317 |
+
'size_units' => [ 'px' ],
|
318 |
+
'range' => [
|
319 |
+
'px' => [
|
320 |
+
'min' => 0,
|
321 |
+
'max' => 1,
|
322 |
+
'step' => .1,
|
323 |
+
],
|
324 |
+
],
|
325 |
+
'default' => [
|
326 |
+
'unit' => 'px',
|
327 |
+
'size' => .5,
|
328 |
+
],
|
329 |
+
'selectors' => [
|
330 |
+
'{{WRAPPER}} .ha-number-border-overlay' => 'opacity: {{SIZE}};',
|
331 |
+
],
|
332 |
+
]
|
333 |
+
);
|
334 |
+
|
335 |
+
$this->end_controls_section();
|
336 |
+
}
|
337 |
+
|
338 |
+
protected function render() {
|
339 |
+
$settings = $this->get_settings_for_display();
|
340 |
+
?>
|
341 |
+
|
342 |
+
<div class="ha-number-body">
|
343 |
+
<div class="ha-number-border">
|
344 |
+
<div class="ha-number-border-overlay"></div>
|
345 |
+
<span class="ha-number-text"><?php echo esc_html( $settings['number_text'] ); ?></span>
|
346 |
+
</div>
|
347 |
+
</div>
|
348 |
+
|
349 |
+
<?php
|
350 |
+
}
|
351 |
+
}
|
widgets/review/widget.php
CHANGED
@@ -319,7 +319,7 @@ class Review extends Base {
|
|
319 |
$this->add_control(
|
320 |
'offset_toggle',
|
321 |
[
|
322 |
-
'label' => __( 'Offset', '
|
323 |
'type' => Controls_Manager::POPOVER_TOGGLE,
|
324 |
'label_off' => __( 'None', 'your-plugin' ),
|
325 |
'label_on' => __( 'Custom', 'your-plugin' ),
|
319 |
$this->add_control(
|
320 |
'offset_toggle',
|
321 |
[
|
322 |
+
'label' => __( 'Offset', 'happy-elementor-addons' ),
|
323 |
'type' => Controls_Manager::POPOVER_TOGGLE,
|
324 |
'label_off' => __( 'None', 'your-plugin' ),
|
325 |
'label_on' => __( 'Custom', 'your-plugin' ),
|
widgets/testimonial/widget.php
CHANGED
@@ -165,10 +165,97 @@ class Testimonial extends Base {
|
|
165 |
}
|
166 |
|
167 |
protected function register_style_controls() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
$this->start_controls_section(
|
169 |
'_section_style_image',
|
170 |
[
|
171 |
-
'label' => __( '
|
172 |
'tab' => Controls_Manager::TAB_STYLE,
|
173 |
]
|
174 |
);
|
@@ -187,8 +274,8 @@ class Testimonial extends Base {
|
|
187 |
],
|
188 |
'selectors' => [
|
189 |
'{{WRAPPER}} .ha-testimonial__reviewer-thumb' => 'width: {{SIZE}}{{UNIT}};',
|
190 |
-
'{{WRAPPER}}.ha-testimonial--left .ha-testimonial__content:after' => 'left: calc(({{SIZE}}{{UNIT}} / 2) -
|
191 |
-
'{{WRAPPER}}.ha-testimonial--right .ha-testimonial__content:after' => 'right: calc(({{SIZE}}{{UNIT}} / 2) -
|
192 |
],
|
193 |
]
|
194 |
);
|
@@ -258,7 +345,7 @@ class Testimonial extends Base {
|
|
258 |
$this->start_controls_section(
|
259 |
'_section_style_reviewer',
|
260 |
[
|
261 |
-
'label' => __( 'Reviewer
|
262 |
'tab' => Controls_Manager::TAB_STYLE,
|
263 |
]
|
264 |
);
|
@@ -298,10 +385,6 @@ class Testimonial extends Base {
|
|
298 |
'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
|
299 |
'type' => Controls_Manager::SLIDER,
|
300 |
'size_units' => ['px'],
|
301 |
-
'default' => [
|
302 |
-
'unit' => 'px',
|
303 |
-
'size' => 20,
|
304 |
-
],
|
305 |
'selectors' => [
|
306 |
'{{WRAPPER}} .ha-testimonial__reviewer-name' => 'margin-bottom: {{SIZE}}{{UNIT}};',
|
307 |
],
|
@@ -313,7 +396,7 @@ class Testimonial extends Base {
|
|
313 |
[
|
314 |
'label' => __( 'Title', 'happy-elementor-addons' ),
|
315 |
'type' => Controls_Manager::HEADING,
|
316 |
-
'separator' => '
|
317 |
]
|
318 |
);
|
319 |
|
@@ -339,97 +422,6 @@ class Testimonial extends Base {
|
|
339 |
);
|
340 |
|
341 |
$this->end_controls_section();
|
342 |
-
|
343 |
-
$this->start_controls_section(
|
344 |
-
'_section_style_testimonial',
|
345 |
-
[
|
346 |
-
'label' => __( 'Testimonial', 'happy-elementor-addons' ),
|
347 |
-
'tab' => Controls_Manager::TAB_STYLE,
|
348 |
-
]
|
349 |
-
);
|
350 |
-
|
351 |
-
$this->add_responsive_control(
|
352 |
-
'testimonial_padding',
|
353 |
-
[
|
354 |
-
'label' => __( 'Padding', 'happy-elementor-addons' ),
|
355 |
-
'type' => Controls_Manager::DIMENSIONS,
|
356 |
-
'size_units' => [ 'px', 'em', '%' ],
|
357 |
-
'selectors' => [
|
358 |
-
'{{WRAPPER}} .ha-testimonial__content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
359 |
-
],
|
360 |
-
]
|
361 |
-
);
|
362 |
-
|
363 |
-
$this->add_responsive_control(
|
364 |
-
'description_spacing',
|
365 |
-
[
|
366 |
-
'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
|
367 |
-
'type' => Controls_Manager::SLIDER,
|
368 |
-
'size_units' => ['px'],
|
369 |
-
'default' => [
|
370 |
-
'unit' => 'px',
|
371 |
-
'size' => 20,
|
372 |
-
],
|
373 |
-
'selectors' => [
|
374 |
-
'{{WRAPPER}} .ha-testimonial__content' => 'margin-bottom: {{SIZE}}{{UNIT}};',
|
375 |
-
],
|
376 |
-
]
|
377 |
-
);
|
378 |
-
|
379 |
-
$this->add_control(
|
380 |
-
'testimonial_color',
|
381 |
-
[
|
382 |
-
'label' => __( 'Text Color', 'happy-elementor-addons' ),
|
383 |
-
'type' => Controls_Manager::COLOR,
|
384 |
-
'selectors' => [
|
385 |
-
'{{WRAPPER}} .ha-testimonial__content' => 'color: {{VALUE}}',
|
386 |
-
],
|
387 |
-
]
|
388 |
-
);
|
389 |
-
|
390 |
-
$this->add_control(
|
391 |
-
'testimonial_bg_color',
|
392 |
-
[
|
393 |
-
'label' => __( 'Background Color', 'happy-elementor-addons' ),
|
394 |
-
'type' => Controls_Manager::COLOR,
|
395 |
-
'selectors' => [
|
396 |
-
'{{WRAPPER}} .ha-testimonial__content' => 'background-color: {{VALUE}};',
|
397 |
-
'{{WRAPPER}} .ha-testimonial__content:after' => 'color: {{VALUE}};',
|
398 |
-
],
|
399 |
-
]
|
400 |
-
);
|
401 |
-
|
402 |
-
$this->add_group_control(
|
403 |
-
Group_Control_Typography::get_type(),
|
404 |
-
[
|
405 |
-
'name' => 'testimonial_typography',
|
406 |
-
'label' => __( 'Typography', 'happy-elementor-addons' ),
|
407 |
-
'selector' => '{{WRAPPER}} .ha-testimonial__content',
|
408 |
-
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
|
409 |
-
]
|
410 |
-
);
|
411 |
-
|
412 |
-
$this->add_responsive_control(
|
413 |
-
'testimonial_border_radius',
|
414 |
-
[
|
415 |
-
'label' => __( 'Border Radius', 'happy-elementor-addons' ),
|
416 |
-
'type' => Controls_Manager::DIMENSIONS,
|
417 |
-
'size_units' => [ 'px', '%' ],
|
418 |
-
'selectors' => [
|
419 |
-
'{{WRAPPER}} .ha-testimonial__content' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
420 |
-
],
|
421 |
-
]
|
422 |
-
);
|
423 |
-
|
424 |
-
$this->add_group_control(
|
425 |
-
Group_Control_Box_Shadow::get_type(),
|
426 |
-
[
|
427 |
-
'name' => 'testimonial_box_shadow',
|
428 |
-
'selector' => '{{WRAPPER}} .ha-testimonial__content',
|
429 |
-
]
|
430 |
-
);
|
431 |
-
|
432 |
-
$this->end_controls_section();
|
433 |
}
|
434 |
|
435 |
protected function render() {
|
165 |
}
|
166 |
|
167 |
protected function register_style_controls() {
|
168 |
+
$this->start_controls_section(
|
169 |
+
'_section_style_testimonial',
|
170 |
+
[
|
171 |
+
'label' => __( 'Testimonial', 'happy-elementor-addons' ),
|
172 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
173 |
+
]
|
174 |
+
);
|
175 |
+
|
176 |
+
$this->add_responsive_control(
|
177 |
+
'testimonial_padding',
|
178 |
+
[
|
179 |
+
'label' => __( 'Padding', 'happy-elementor-addons' ),
|
180 |
+
'type' => Controls_Manager::DIMENSIONS,
|
181 |
+
'size_units' => [ 'px', 'em', '%' ],
|
182 |
+
'selectors' => [
|
183 |
+
'{{WRAPPER}} .ha-testimonial__content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
184 |
+
],
|
185 |
+
]
|
186 |
+
);
|
187 |
+
|
188 |
+
$this->add_responsive_control(
|
189 |
+
'testimonial_spacing',
|
190 |
+
[
|
191 |
+
'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
|
192 |
+
'type' => Controls_Manager::SLIDER,
|
193 |
+
'size_units' => ['px'],
|
194 |
+
'selectors' => [
|
195 |
+
'{{WRAPPER}} .ha-testimonial__content' => 'margin-bottom: {{SIZE}}{{UNIT}};',
|
196 |
+
],
|
197 |
+
]
|
198 |
+
);
|
199 |
+
|
200 |
+
$this->add_control(
|
201 |
+
'testimonial_color',
|
202 |
+
[
|
203 |
+
'label' => __( 'Text Color', 'happy-elementor-addons' ),
|
204 |
+
'type' => Controls_Manager::COLOR,
|
205 |
+
'selectors' => [
|
206 |
+
'{{WRAPPER}} .ha-testimonial__content' => 'color: {{VALUE}}',
|
207 |
+
],
|
208 |
+
]
|
209 |
+
);
|
210 |
+
|
211 |
+
$this->add_control(
|
212 |
+
'testimonial_bg_color',
|
213 |
+
[
|
214 |
+
'label' => __( 'Background Color', 'happy-elementor-addons' ),
|
215 |
+
'type' => Controls_Manager::COLOR,
|
216 |
+
'selectors' => [
|
217 |
+
'{{WRAPPER}} .ha-testimonial__content' => 'background-color: {{VALUE}};',
|
218 |
+
'{{WRAPPER}} .ha-testimonial__content:after' => 'color: {{VALUE}};',
|
219 |
+
],
|
220 |
+
]
|
221 |
+
);
|
222 |
+
|
223 |
+
$this->add_group_control(
|
224 |
+
Group_Control_Typography::get_type(),
|
225 |
+
[
|
226 |
+
'name' => 'testimonial_typography',
|
227 |
+
'label' => __( 'Typography', 'happy-elementor-addons' ),
|
228 |
+
'selector' => '{{WRAPPER}} .ha-testimonial__content',
|
229 |
+
'scheme' => Scheme_Typography::TYPOGRAPHY_3,
|
230 |
+
]
|
231 |
+
);
|
232 |
+
|
233 |
+
$this->add_responsive_control(
|
234 |
+
'testimonial_border_radius',
|
235 |
+
[
|
236 |
+
'label' => __( 'Border Radius', 'happy-elementor-addons' ),
|
237 |
+
'type' => Controls_Manager::DIMENSIONS,
|
238 |
+
'size_units' => [ 'px', '%' ],
|
239 |
+
'selectors' => [
|
240 |
+
'{{WRAPPER}} .ha-testimonial__content' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
241 |
+
],
|
242 |
+
]
|
243 |
+
);
|
244 |
+
|
245 |
+
$this->add_group_control(
|
246 |
+
Group_Control_Box_Shadow::get_type(),
|
247 |
+
[
|
248 |
+
'name' => 'testimonial_box_shadow',
|
249 |
+
'selector' => '{{WRAPPER}} .ha-testimonial__content',
|
250 |
+
]
|
251 |
+
);
|
252 |
+
|
253 |
+
$this->end_controls_section();
|
254 |
+
|
255 |
$this->start_controls_section(
|
256 |
'_section_style_image',
|
257 |
[
|
258 |
+
'label' => __( 'Image', 'happy-elementor-addons' ),
|
259 |
'tab' => Controls_Manager::TAB_STYLE,
|
260 |
]
|
261 |
);
|
274 |
],
|
275 |
'selectors' => [
|
276 |
'{{WRAPPER}} .ha-testimonial__reviewer-thumb' => 'width: {{SIZE}}{{UNIT}};',
|
277 |
+
'{{WRAPPER}}.ha-testimonial--left .ha-testimonial__content:after' => 'left: calc(({{SIZE}}{{UNIT}} / 2) - 18px);',
|
278 |
+
'{{WRAPPER}}.ha-testimonial--right .ha-testimonial__content:after' => 'right: calc(({{SIZE}}{{UNIT}} / 2) - 18px);',
|
279 |
],
|
280 |
]
|
281 |
);
|
345 |
$this->start_controls_section(
|
346 |
'_section_style_reviewer',
|
347 |
[
|
348 |
+
'label' => __( 'Reviewer Data', 'happy-elementor-addons' ),
|
349 |
'tab' => Controls_Manager::TAB_STYLE,
|
350 |
]
|
351 |
);
|
385 |
'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
|
386 |
'type' => Controls_Manager::SLIDER,
|
387 |
'size_units' => ['px'],
|
|
|
|
|
|
|
|
|
388 |
'selectors' => [
|
389 |
'{{WRAPPER}} .ha-testimonial__reviewer-name' => 'margin-bottom: {{SIZE}}{{UNIT}};',
|
390 |
],
|
396 |
[
|
397 |
'label' => __( 'Title', 'happy-elementor-addons' ),
|
398 |
'type' => Controls_Manager::HEADING,
|
399 |
+
'separator' => 'after',
|
400 |
]
|
401 |
);
|
402 |
|
422 |
);
|
423 |
|
424 |
$this->end_controls_section();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
425 |
}
|
426 |
|
427 |
protected function render() {
|